{ "address": "0x848c8b9801F66DAAC663e71293e00F239E34d020", "abi": [ { "inputs": [], "name": "encodeBlockTriggerModuleArg", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_expression", "type": "string" } ], "name": "encodeCronTriggerModuleArg", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" }, { "internalType": "bytes32[][]", "name": "_topics", "type": "bytes32[][]" }, { "internalType": "uint256", "name": "_blockConfirmations", "type": "uint256" } ], "name": "encodeEventTriggerModuleArg", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_start", "type": "uint128" }, { "internalType": "uint128", "name": "_interval", "type": "uint128" } ], "name": "encodeTimeTriggerModuleArg", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "execAddresses", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "nonce1Balance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onCreateTask", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "taskId", "type": "bytes32" }, { "internalType": "address", "name": "taskCreator", "type": "address" }, { "internalType": "address", "name": "execAddress", "type": "address" }, { "internalType": "bytes", "name": "execData", "type": "bytes" } ], "name": "postExecCall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "_taskCreator", "type": "address" } ], "name": "preCancelTask", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_taskCreator", "type": "address" }, { "internalType": "address", "name": "_execAddress", "type": "address" } ], "name": "preCreateTask", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "_execAddress", "type": "address" }, { "internalType": "bytes", "name": "_execData", "type": "bytes" } ], "name": "preExecCall", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "taskCreator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum LibDataTypes.Module", "name": "", "type": "uint8" } ], "name": "taskModuleAddresses", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "timedTask", "outputs": [ { "internalType": "uint128", "name": "nextExec", "type": "uint128" }, { "internalType": "uint128", "name": "interval", "type": "uint128" } ], "stateMutability": "view", "type": "function" } ], "transactionHash": "0xfaf3998d493a193c6c88ea8836111060c9b0b32226b55be063d8dc2df78839c7", "receipt": { "to": null, "from": "0xD9BeF6C69B6CAB3d651534c46541d21cC2b36723", "contractAddress": "0x848c8b9801F66DAAC663e71293e00F239E34d020", "transactionIndex": 0, "gasUsed": "1080620", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000104000001000000000000000000000000000000000000000000000000000080000000000000000000000000200000000000000000000000000000000000000000010000000000200000000000000000000000000000000000000000000000000000002000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", "blockHash": "0x32fa64b33f074e5ecc413ffa245153d5d304ecfb8c2b36643bb361cf74dc3836", "transactionHash": "0xfaf3998d493a193c6c88ea8836111060c9b0b32226b55be063d8dc2df78839c7", "logs": [ { "transactionIndex": 0, "blockNumber": 6186595, "transactionHash": "0xfaf3998d493a193c6c88ea8836111060c9b0b32226b55be063d8dc2df78839c7", "address": "0x0000000000000000000000000000000000001010", "topics": [ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", "0x0000000000000000000000000000000000000000000000000000000000001010", "0x000000000000000000000000d9bef6c69b6cab3d651534c46541d21cc2b36723", "0x00000000000000000000000022b64229c41429a023549fdab3385893b579327a" ], "data": "0x000000000000000000000000000000000000000000000000001332173f38426c000000000000000000000000000000000000000000000000038ddf302b92a560000000000000000000000000000000000000000000000041033e86bb4c849e2d000000000000000000000000000000000000000000000000037aad18ec5a62f40000000000000000000000000000000000000000000000410351b8d28bbce099", "logIndex": 0, "blockHash": "0x32fa64b33f074e5ecc413ffa245153d5d304ecfb8c2b36643bb361cf74dc3836" } ], "blockNumber": 6186595, "cumulativeGasUsed": "1080620", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, "solcInputHash": "cbdbea7c3520531d2f6235911ca6ac38", "metadata": "{\"compiler\":{\"version\":\"0.8.14+commit.80d49f37\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"encodeBlockTriggerModuleArg\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_expression\",\"type\":\"string\"}],\"name\":\"encodeCronTriggerModuleArg\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"bytes32[][]\",\"name\":\"_topics\",\"type\":\"bytes32[][]\"},{\"internalType\":\"uint256\",\"name\":\"_blockConfirmations\",\"type\":\"uint256\"}],\"name\":\"encodeEventTriggerModuleArg\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_start\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_interval\",\"type\":\"uint128\"}],\"name\":\"encodeTimeTriggerModuleArg\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"execAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nonce1Balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onCreateTask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"taskId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"execAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"execData\",\"type\":\"bytes\"}],\"name\":\"postExecCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"}],\"name\":\"preCancelTask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_taskCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_execAddress\",\"type\":\"address\"}],\"name\":\"preCreateTask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_execAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_execData\",\"type\":\"bytes\"}],\"name\":\"preExecCall\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"taskCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum LibDataTypes.Module\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"taskModuleAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"timedTask\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"nextExec\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"interval\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"encodeCronTriggerModuleArg(string)\":{\"params\":{\"_expression\":\"Cron expression\"}},\"encodeEventTriggerModuleArg(address,bytes32[][],uint256)\":{\"params\":{\"_address\":\"Address to listen to for events.\",\"_blockConfirmations\":\"Number of blocks to wait for before triggering.\",\"_topics\":\"Set of topics to filter at each topic position.\"}},\"encodeTimeTriggerModuleArg(uint128,uint128)\":{\"params\":{\"_interval\":\"Time interval between each execution.\",\"_start\":\"Time when the first execution should occur.\"}},\"onCreateTask(bytes32,address,address,bytes,bytes)\":{\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"initModuleArg\":\"Encoded arguments for module if any.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"}},\"postExecCall(bytes32,address,address,bytes)\":{\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"}},\"preCancelTask(bytes32,address)\":{\"details\":\"Modules can override taskCreator.\",\"params\":{\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"},\"returns\":{\"_0\":\"address Overriden or original taskCreator.\"}},\"preCreateTask(address,address)\":{\"details\":\"Modules can override execAddress or taskCreator. {See ProxyModule-preCreateTask}\",\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"taskCreator\":\"The address which created the task.\"},\"returns\":{\"_0\":\"address Overriden or original taskCreator.\",\"_1\":\"address Overriden or original execAddress.\"}},\"preExecCall(bytes32,address,address,bytes)\":{\"params\":{\"execAddress\":\"Address of contract that should be called.\",\"execData\":\"Execution data to be called with / function selector if execution data is yet to be determined.\",\"taskCreator\":\"The address which created the task.\",\"taskId\":\"Unique hash of the task created.\"},\"returns\":{\"_0\":\"address Overriden or original execution address.\",\"_1\":\"bytes Overriden or original execution data.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"encodeBlockTriggerModuleArg()\":{\"notice\":\"Helper function to encode arguments for TriggerModule for Block.\"},\"encodeCronTriggerModuleArg(string)\":{\"notice\":\"Helper function to encode arguments for TriggerModule for Cron.\"},\"encodeEventTriggerModuleArg(address,bytes32[][],uint256)\":{\"notice\":\"Helper function to encode arguments for TriggerModule for Event.\"},\"encodeTimeTriggerModuleArg(uint128,uint128)\":{\"notice\":\"Helper function to encode arguments for TriggerModule for Timer.\"},\"onCreateTask(bytes32,address,address,bytes,bytes)\":{\"notice\":\"Initiates task module whenever `createTask` is being called.\"},\"postExecCall(bytes32,address,address,bytes)\":{\"notice\":\"Called during `exec` and after execAddress is called.\"},\"preCancelTask(bytes32,address)\":{\"notice\":\"Called before taskId is removed from _createdTasks[].\"},\"preCreateTask(address,address)\":{\"notice\":\"Called before generating taskId.\"},\"preExecCall(bytes32,address,address,bytes)\":{\"notice\":\"Called during `exec` and before execAddress is called.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/taskModules/TriggerModule.sol\":\"TriggerModule\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastvalue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastvalue;\\n // Update the index for the moved value\\n set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n return _values(set._inner);\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\"},\"contracts/AutomateStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\nimport {\\n EnumerableSet\\n} from \\\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\\\";\\nimport {LibDataTypes} from \\\"./libraries/LibDataTypes.sol\\\";\\n\\n/**\\n * @notice Storage layout of Automate smart contract.\\n */\\n// solhint-disable max-states-count\\nabstract contract AutomateStorage {\\n mapping(bytes32 => address) public taskCreator; ///@dev Deprecated\\n mapping(bytes32 => address) public execAddresses; ///@dev Deprecated\\n mapping(address => EnumerableSet.Bytes32Set) internal _createdTasks;\\n\\n uint256 public fee;\\n address public feeToken;\\n\\n ///@dev Appended State\\n mapping(bytes32 => LibDataTypes.Time) public timedTask; ///@dev Deprecated\\n mapping(LibDataTypes.Module => address) public taskModuleAddresses;\\n mapping(bytes32 => uint256) public nonce1Balance; ///@dev Deprecated\\n}\\n\",\"keccak256\":\"0xdc7009675d6be9436f1223a82c64b80f8f2ef8c2a594298bf6d5db8b201d45f8\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/ITaskModule.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.12;\\n\\n// solhint-disable max-line-length\\ninterface ITaskModule {\\n /**\\n * @notice Called before generating taskId.\\n * @dev Modules can override execAddress or taskCreator. {See ProxyModule-preCreateTask}\\n *\\n * @param taskCreator The address which created the task.\\n * @param execAddress Address of contract that should be called.\\n *\\n * @return address Overriden or original taskCreator.\\n * @return address Overriden or original execAddress.\\n */\\n function preCreateTask(address taskCreator, address execAddress)\\n external\\n returns (address, address);\\n\\n /**\\n * @notice Initiates task module whenever `createTask` is being called.\\n *\\n * @param taskId Unique hash of the task created.\\n * @param taskCreator The address which created the task.\\n * @param execAddress Address of contract that should be called.\\n * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n * @param initModuleArg Encoded arguments for module if any.\\n */\\n function onCreateTask(\\n bytes32 taskId,\\n address taskCreator,\\n address execAddress,\\n bytes calldata execData,\\n bytes calldata initModuleArg\\n ) external;\\n\\n /**\\n * @notice Called before taskId is removed from _createdTasks[].\\n * @dev Modules can override taskCreator.\\n *\\n * @param taskId Unique hash of the task created.\\n * @param taskCreator The address which created the task.\\n *\\n * @return address Overriden or original taskCreator.\\n */\\n function preCancelTask(bytes32 taskId, address taskCreator)\\n external\\n returns (address);\\n\\n /**\\n * @notice Called during `exec` and before execAddress is called.\\n *\\n * @param taskId Unique hash of the task created.\\n * @param taskCreator The address which created the task.\\n * @param execAddress Address of contract that should be called.\\n * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n *\\n * @return address Overriden or original execution address.\\n * @return bytes Overriden or original execution data.\\n */\\n function preExecCall(\\n bytes32 taskId,\\n address taskCreator,\\n address execAddress,\\n bytes calldata execData\\n ) external returns (address, bytes memory);\\n\\n /**\\n * @notice Called during `exec` and after execAddress is called.\\n *\\n * @param taskId Unique hash of the task created.\\n * @param taskCreator The address which created the task.\\n * @param execAddress Address of contract that should be called.\\n * @param execData Execution data to be called with / function selector if execution data is yet to be determined.\\n */\\n function postExecCall(\\n bytes32 taskId,\\n address taskCreator,\\n address execAddress,\\n bytes calldata execData\\n ) external;\\n}\\n\",\"keccak256\":\"0xd537257852c23ce7d0bc392b03aba1efd750be372d64a01edf1c726ef7c4274d\",\"license\":\"MIT\"},\"contracts/libraries/LibDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.12;\\n\\n// solhint-disable max-line-length\\nlibrary LibDataTypes {\\n /**\\n * @notice Whitelisted modules that are available for users to customise conditions and specifications of their tasks.\\n *\\n * @param RESOLVER Use dynamic condition & input data for execution. {See ResolverModule.sol}\\n * @param DEPRECATED_TIME deprecated\\n * @param PROXY Creates a dedicated caller (msg.sender) to be used when executing the task. {See ProxyModule.sol}\\n * @param SINGLE_EXEC Task is cancelled after one execution. {See SingleExecModule.sol}\\n * @param WEB3_FUNCTION Use off-chain condition & input data for execution. {See Web3FunctionModule.sol}\\n * @param TRIGGER Repeated execution of task ata a specified timing and interval or cron. {See TriggerModule.sol}\\n */\\n enum Module {\\n RESOLVER,\\n DEPRECATED_TIME, // @deprecated\\n PROXY,\\n SINGLE_EXEC,\\n WEB3_FUNCTION,\\n TRIGGER\\n }\\n\\n /**\\n * @notice Struct to contain modules and their relative arguments that are used for task creation.\\n *\\n * @param modules List of selected modules.\\n * @param args Arguments of modules if any. Pass \\\"0x\\\" for modules which does not require args {See encodeModuleArg}\\n */\\n struct ModuleData {\\n Module[] modules;\\n bytes[] args;\\n }\\n\\n /**\\n * @notice Struct for time module.\\n *\\n * @param nextExec Time when the next execution should occur.\\n * @param interval Time interval between each execution.\\n */\\n struct Time {\\n uint128 nextExec;\\n uint128 interval;\\n }\\n\\n /**\\n * @notice Types of trigger\\n *\\n * @param TIME Time triggered tasks, starting at a specific time and triggered intervally\\n * @param CRON Cron triggered tasks, triggered according to the cron conditions\\n */\\n enum TriggerType {\\n TIME,\\n CRON,\\n EVENT,\\n BLOCK\\n }\\n\\n /**\\n * @notice Struct for trigger module\\n *\\n * @param triggerType Type of the trigger\\n * @param triggerConfig Trigger configuration that shuold be parsed according to triggerType\\n */\\n struct TriggerModuleData {\\n TriggerType triggerType;\\n bytes triggerConfig;\\n }\\n}\\n\",\"keccak256\":\"0x7307461a03c5bb31eef8b01b029fd898d45a495349498466c6238a6474c4edc2\",\"license\":\"MIT\"},\"contracts/taskModules/TaskModuleBase.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\n\\nimport {AutomateStorage} from \\\"../AutomateStorage.sol\\\";\\nimport {ITaskModule} from \\\"../interfaces/ITaskModule.sol\\\";\\n\\n// solhint-disable no-empty-blocks\\nabstract contract TaskModuleBase is AutomateStorage, ITaskModule {\\n ///@inheritdoc ITaskModule\\n function preCreateTask(address _taskCreator, address _execAddress)\\n external\\n virtual\\n override\\n returns (address, address)\\n {\\n return (_taskCreator, _execAddress);\\n }\\n\\n ///@inheritdoc ITaskModule\\n function onCreateTask(\\n bytes32,\\n address,\\n address,\\n bytes calldata,\\n bytes calldata\\n ) external virtual override {}\\n\\n ///@inheritdoc ITaskModule\\n function preCancelTask(bytes32, address _taskCreator)\\n external\\n virtual\\n override\\n returns (address)\\n {\\n return _taskCreator;\\n }\\n\\n ///@inheritdoc ITaskModule\\n function preExecCall(\\n bytes32,\\n address,\\n address _execAddress,\\n bytes calldata _execData\\n ) external virtual override returns (address, bytes memory) {\\n return (_execAddress, _execData);\\n }\\n\\n ///@inheritdoc ITaskModule\\n function postExecCall(\\n bytes32 taskId,\\n address taskCreator,\\n address execAddress,\\n bytes calldata execData\\n ) external virtual override {}\\n}\\n\",\"keccak256\":\"0x231bcf0d6af7d2e0f96eb4eb83285fe0ea0d64d3aa937c6af29779cf653af695\",\"license\":\"UNLICENSED\"},\"contracts/taskModules/TriggerModule.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.12;\\n\\nimport {TaskModuleBase} from \\\"./TaskModuleBase.sol\\\";\\nimport {LibDataTypes} from \\\"../libraries/LibDataTypes.sol\\\";\\n\\n// solhint-disable not-rely-on-time\\ncontract TriggerModule is TaskModuleBase {\\n /**\\n * @notice Helper function to encode arguments for TriggerModule for Timer.\\n *\\n * @param _start Time when the first execution should occur.\\n * @param _interval Time interval between each execution.\\n */\\n function encodeTimeTriggerModuleArg(uint128 _start, uint128 _interval)\\n external\\n pure\\n returns (bytes memory)\\n {\\n bytes memory triggerConfig = abi.encode(_start, _interval);\\n\\n return abi.encode(LibDataTypes.TriggerType.TIME, triggerConfig);\\n }\\n\\n /**\\n * @notice Helper function to encode arguments for TriggerModule for Cron.\\n *\\n * @param _expression Cron expression\\n */\\n function encodeCronTriggerModuleArg(string calldata _expression)\\n external\\n pure\\n returns (bytes memory)\\n {\\n bytes memory triggerConfig = abi.encode(_expression);\\n\\n return abi.encode(LibDataTypes.TriggerType.CRON, triggerConfig);\\n }\\n\\n /**\\n * @notice Helper function to encode arguments for TriggerModule for Event.\\n *\\n * @param _address Address to listen to for events.\\n * @param _topics Set of topics to filter at each topic position.\\n * @param _blockConfirmations Number of blocks to wait for before triggering.\\n */\\n function encodeEventTriggerModuleArg(\\n address _address,\\n bytes32[][] memory _topics,\\n uint256 _blockConfirmations\\n ) external pure returns (bytes memory) {\\n bytes memory triggerConfig = abi.encode(\\n _address,\\n _topics,\\n _blockConfirmations\\n );\\n\\n return abi.encode(LibDataTypes.TriggerType.EVENT, triggerConfig);\\n }\\n\\n /**\\n * @notice Helper function to encode arguments for TriggerModule for Block.\\n */\\n function encodeBlockTriggerModuleArg()\\n external\\n pure\\n returns (bytes memory)\\n {\\n return abi.encode(LibDataTypes.TriggerType.BLOCK);\\n }\\n}\\n\",\"keccak256\":\"0xa2027b6a435d4c6aa33ba5e6486865563ac26fc15d1fe6baa62b2cf6efbaf394\",\"license\":\"UNLICENSED\"}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50611299806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063994ee8b711610097578063b81cd86611610066578063b81cd866146102fa578063c10304f71461032b578063cd3d4fb91461035c578063ddca3f431461038c57610100565b8063994ee8b714610262578063ac21631a14610292578063b0ccbdf0146102c2578063b2db0b41146102de57610100565b8063647846a5116100d3578063647846a5146101b35780636d2dd29f146101d1578063714d732f1461020157806376474e6a1461023157610100565b8063121b944c1461010557806314ae9926146101235780631fc2d3d0146101535780632e6e0bd014610183575b600080fd5b61010d6103aa565b60405161011a919061072c565b60405180910390f35b61013d600480360381019061013891906107f6565b6103d2565b60405161014a9190610845565b60405180910390f35b61016d600480360381019061016891906108a8565b6103dd565b60405161017a919061072c565b60405180910390f35b61019d600480360381019061019891906108e8565b610431565b6040516101aa9190610845565b60405180910390f35b6101bb610464565b6040516101c89190610845565b60405180910390f35b6101eb60048036038101906101e691906108e8565b61048a565b6040516101f89190610845565b60405180910390f35b61021b6004803603810190610216919061097a565b6104bd565b604051610228919061072c565b60405180910390f35b61024b600480360381019061024691906109c7565b610511565b604051610259929190610a07565b60405180910390f35b61027c60048036038101906102779190610c85565b610521565b604051610289919061072c565b60405180910390f35b6102ac60048036038101906102a791906108e8565b610578565b6040516102b99190610d03565b60405180910390f35b6102dc60048036038101906102d79190610d74565b610590565b005b6102f860048036038101906102f39190610e30565b610599565b005b610314600480360381019061030f91906108e8565b6105a0565b604051610322929190610ec7565b60405180910390f35b61034560048036038101906103409190610e30565b6105fc565b604051610353929190610ef0565b60405180910390f35b61037660048036038101906103719190610f45565b61065a565b6040516103839190610845565b60405180910390f35b61039461068d565b6040516103a19190610d03565b60405180910390f35b606060036040516020016103be9190610fe9565b604051602081830303815290604052905090565b600081905092915050565b6060600083836040516020016103f4929190610ec7565b6040516020818303038152906040529050600081604051602001610419929190611004565b60405160208183030381529060405291505092915050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600083836040516020016104d4929190611081565b60405160208183030381529060405290506001816040516020016104f9929190611004565b60405160208183030381529060405291505092915050565b6000808383915091509250929050565b6060600084848460405160200161053a93929190611225565b604051602081830303815290604052905060028160405160200161055f929190611004565b6040516020818303038152906040529150509392505050565b60076020528060005260406000206000915090505481565b50505050505050565b5050505050565b60056020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b6000606084848481818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090509050915091509550959350505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600081519050919050565b600082825260208201905092915050565b60005b838110156106cd5780820151818401526020810190506106b2565b838111156106dc576000848401525b50505050565b6000601f19601f8301169050919050565b60006106fe82610693565b610708818561069e565b93506107188185602086016106af565b610721816106e2565b840191505092915050565b6000602082019050818103600083015261074681846106f3565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61077581610762565b811461078057600080fd5b50565b6000813590506107928161076c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c382610798565b9050919050565b6107d3816107b8565b81146107de57600080fd5b50565b6000813590506107f0816107ca565b92915050565b6000806040838503121561080d5761080c610758565b5b600061081b85828601610783565b925050602061082c858286016107e1565b9150509250929050565b61083f816107b8565b82525050565b600060208201905061085a6000830184610836565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61088581610860565b811461089057600080fd5b50565b6000813590506108a28161087c565b92915050565b600080604083850312156108bf576108be610758565b5b60006108cd85828601610893565b92505060206108de85828601610893565b9150509250929050565b6000602082840312156108fe576108fd610758565b5b600061090c84828501610783565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261093a57610939610915565b5b8235905067ffffffffffffffff8111156109575761095661091a565b5b6020830191508360018202830111156109735761097261091f565b5b9250929050565b6000806020838503121561099157610990610758565b5b600083013567ffffffffffffffff8111156109af576109ae61075d565b5b6109bb85828601610924565b92509250509250929050565b600080604083850312156109de576109dd610758565b5b60006109ec858286016107e1565b92505060206109fd858286016107e1565b9150509250929050565b6000604082019050610a1c6000830185610836565b610a296020830184610836565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a68826106e2565b810181811067ffffffffffffffff82111715610a8757610a86610a30565b5b80604052505050565b6000610a9a61074e565b9050610aa68282610a5f565b919050565b600067ffffffffffffffff821115610ac657610ac5610a30565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610af257610af1610a30565b5b602082029050602081019050919050565b6000610b16610b1184610ad7565b610a90565b90508083825260208201905060208402830185811115610b3957610b3861091f565b5b835b81811015610b625780610b4e8882610783565b845260208401935050602081019050610b3b565b5050509392505050565b600082601f830112610b8157610b80610915565b5b8135610b91848260208601610b03565b91505092915050565b6000610bad610ba884610aab565b610a90565b90508083825260208201905060208402830185811115610bd057610bcf61091f565b5b835b81811015610c1757803567ffffffffffffffff811115610bf557610bf4610915565b5b808601610c028982610b6c565b85526020850194505050602081019050610bd2565b5050509392505050565b600082601f830112610c3657610c35610915565b5b8135610c46848260208601610b9a565b91505092915050565b6000819050919050565b610c6281610c4f565b8114610c6d57600080fd5b50565b600081359050610c7f81610c59565b92915050565b600080600060608486031215610c9e57610c9d610758565b5b6000610cac868287016107e1565b935050602084013567ffffffffffffffff811115610ccd57610ccc61075d565b5b610cd986828701610c21565b9250506040610cea86828701610c70565b9150509250925092565b610cfd81610c4f565b82525050565b6000602082019050610d186000830184610cf4565b92915050565b60008083601f840112610d3457610d33610915565b5b8235905067ffffffffffffffff811115610d5157610d5061091a565b5b602083019150836001820283011115610d6d57610d6c61091f565b5b9250929050565b600080600080600080600060a0888a031215610d9357610d92610758565b5b6000610da18a828b01610783565b9750506020610db28a828b016107e1565b9650506040610dc38a828b016107e1565b955050606088013567ffffffffffffffff811115610de457610de361075d565b5b610df08a828b01610d1e565b9450945050608088013567ffffffffffffffff811115610e1357610e1261075d565b5b610e1f8a828b01610d1e565b925092505092959891949750929550565b600080600080600060808688031215610e4c57610e4b610758565b5b6000610e5a88828901610783565b9550506020610e6b888289016107e1565b9450506040610e7c888289016107e1565b935050606086013567ffffffffffffffff811115610e9d57610e9c61075d565b5b610ea988828901610d1e565b92509250509295509295909350565b610ec181610860565b82525050565b6000604082019050610edc6000830185610eb8565b610ee96020830184610eb8565b9392505050565b6000604082019050610f056000830185610836565b8181036020830152610f1781846106f3565b90509392505050565b60068110610f2d57600080fd5b50565b600081359050610f3f81610f20565b92915050565b600060208284031215610f5b57610f5a610758565b5b6000610f6984828501610f30565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110610fb257610fb1610f72565b5b50565b6000819050610fc382610fa1565b919050565b6000610fd382610fb5565b9050919050565b610fe381610fc8565b82525050565b6000602082019050610ffe6000830184610fda565b92915050565b60006040820190506110196000830185610fda565b818103602083015261102b81846106f3565b90509392505050565b600082825260208201905092915050565b82818337600083830152505050565b60006110608385611034565b935061106d838584611045565b611076836106e2565b840190509392505050565b6000602082019050818103600083015261109c818486611054565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61110681610762565b82525050565b600061111883836110fd565b60208301905092915050565b6000602082019050919050565b600061113c826110d1565b61114681856110dc565b9350611151836110ed565b8060005b83811015611182578151611169888261110c565b975061117483611124565b925050600181019050611155565b5085935050505092915050565b600061119b8383611131565b905092915050565b6000602082019050919050565b60006111bb826110a5565b6111c581856110b0565b9350836020820285016111d7856110c1565b8060005b8581101561121357848403895281516111f4858261118f565b94506111ff836111a3565b925060208a019950506001810190506111db565b50829750879550505050505092915050565b600060608201905061123a6000830186610836565b818103602083015261124c81856111b0565b905061125b6040830184610cf4565b94935050505056fea26469706673582212203aeb4ef49e5cf31fc11f60aecbd182a71f48e1d11c5b229502b4571ed3109f2d64736f6c634300080e0033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063994ee8b711610097578063b81cd86611610066578063b81cd866146102fa578063c10304f71461032b578063cd3d4fb91461035c578063ddca3f431461038c57610100565b8063994ee8b714610262578063ac21631a14610292578063b0ccbdf0146102c2578063b2db0b41146102de57610100565b8063647846a5116100d3578063647846a5146101b35780636d2dd29f146101d1578063714d732f1461020157806376474e6a1461023157610100565b8063121b944c1461010557806314ae9926146101235780631fc2d3d0146101535780632e6e0bd014610183575b600080fd5b61010d6103aa565b60405161011a919061072c565b60405180910390f35b61013d600480360381019061013891906107f6565b6103d2565b60405161014a9190610845565b60405180910390f35b61016d600480360381019061016891906108a8565b6103dd565b60405161017a919061072c565b60405180910390f35b61019d600480360381019061019891906108e8565b610431565b6040516101aa9190610845565b60405180910390f35b6101bb610464565b6040516101c89190610845565b60405180910390f35b6101eb60048036038101906101e691906108e8565b61048a565b6040516101f89190610845565b60405180910390f35b61021b6004803603810190610216919061097a565b6104bd565b604051610228919061072c565b60405180910390f35b61024b600480360381019061024691906109c7565b610511565b604051610259929190610a07565b60405180910390f35b61027c60048036038101906102779190610c85565b610521565b604051610289919061072c565b60405180910390f35b6102ac60048036038101906102a791906108e8565b610578565b6040516102b99190610d03565b60405180910390f35b6102dc60048036038101906102d79190610d74565b610590565b005b6102f860048036038101906102f39190610e30565b610599565b005b610314600480360381019061030f91906108e8565b6105a0565b604051610322929190610ec7565b60405180910390f35b61034560048036038101906103409190610e30565b6105fc565b604051610353929190610ef0565b60405180910390f35b61037660048036038101906103719190610f45565b61065a565b6040516103839190610845565b60405180910390f35b61039461068d565b6040516103a19190610d03565b60405180910390f35b606060036040516020016103be9190610fe9565b604051602081830303815290604052905090565b600081905092915050565b6060600083836040516020016103f4929190610ec7565b6040516020818303038152906040529050600081604051602001610419929190611004565b60405160208183030381529060405291505092915050565b60006020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600083836040516020016104d4929190611081565b60405160208183030381529060405290506001816040516020016104f9929190611004565b60405160208183030381529060405291505092915050565b6000808383915091509250929050565b6060600084848460405160200161053a93929190611225565b604051602081830303815290604052905060028160405160200161055f929190611004565b6040516020818303038152906040529150509392505050565b60076020528060005260406000206000915090505481565b50505050505050565b5050505050565b60056020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b6000606084848481818080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505090509050915091509550959350505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600081519050919050565b600082825260208201905092915050565b60005b838110156106cd5780820151818401526020810190506106b2565b838111156106dc576000848401525b50505050565b6000601f19601f8301169050919050565b60006106fe82610693565b610708818561069e565b93506107188185602086016106af565b610721816106e2565b840191505092915050565b6000602082019050818103600083015261074681846106f3565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61077581610762565b811461078057600080fd5b50565b6000813590506107928161076c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c382610798565b9050919050565b6107d3816107b8565b81146107de57600080fd5b50565b6000813590506107f0816107ca565b92915050565b6000806040838503121561080d5761080c610758565b5b600061081b85828601610783565b925050602061082c858286016107e1565b9150509250929050565b61083f816107b8565b82525050565b600060208201905061085a6000830184610836565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61088581610860565b811461089057600080fd5b50565b6000813590506108a28161087c565b92915050565b600080604083850312156108bf576108be610758565b5b60006108cd85828601610893565b92505060206108de85828601610893565b9150509250929050565b6000602082840312156108fe576108fd610758565b5b600061090c84828501610783565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261093a57610939610915565b5b8235905067ffffffffffffffff8111156109575761095661091a565b5b6020830191508360018202830111156109735761097261091f565b5b9250929050565b6000806020838503121561099157610990610758565b5b600083013567ffffffffffffffff8111156109af576109ae61075d565b5b6109bb85828601610924565b92509250509250929050565b600080604083850312156109de576109dd610758565b5b60006109ec858286016107e1565b92505060206109fd858286016107e1565b9150509250929050565b6000604082019050610a1c6000830185610836565b610a296020830184610836565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a68826106e2565b810181811067ffffffffffffffff82111715610a8757610a86610a30565b5b80604052505050565b6000610a9a61074e565b9050610aa68282610a5f565b919050565b600067ffffffffffffffff821115610ac657610ac5610a30565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610af257610af1610a30565b5b602082029050602081019050919050565b6000610b16610b1184610ad7565b610a90565b90508083825260208201905060208402830185811115610b3957610b3861091f565b5b835b81811015610b625780610b4e8882610783565b845260208401935050602081019050610b3b565b5050509392505050565b600082601f830112610b8157610b80610915565b5b8135610b91848260208601610b03565b91505092915050565b6000610bad610ba884610aab565b610a90565b90508083825260208201905060208402830185811115610bd057610bcf61091f565b5b835b81811015610c1757803567ffffffffffffffff811115610bf557610bf4610915565b5b808601610c028982610b6c565b85526020850194505050602081019050610bd2565b5050509392505050565b600082601f830112610c3657610c35610915565b5b8135610c46848260208601610b9a565b91505092915050565b6000819050919050565b610c6281610c4f565b8114610c6d57600080fd5b50565b600081359050610c7f81610c59565b92915050565b600080600060608486031215610c9e57610c9d610758565b5b6000610cac868287016107e1565b935050602084013567ffffffffffffffff811115610ccd57610ccc61075d565b5b610cd986828701610c21565b9250506040610cea86828701610c70565b9150509250925092565b610cfd81610c4f565b82525050565b6000602082019050610d186000830184610cf4565b92915050565b60008083601f840112610d3457610d33610915565b5b8235905067ffffffffffffffff811115610d5157610d5061091a565b5b602083019150836001820283011115610d6d57610d6c61091f565b5b9250929050565b600080600080600080600060a0888a031215610d9357610d92610758565b5b6000610da18a828b01610783565b9750506020610db28a828b016107e1565b9650506040610dc38a828b016107e1565b955050606088013567ffffffffffffffff811115610de457610de361075d565b5b610df08a828b01610d1e565b9450945050608088013567ffffffffffffffff811115610e1357610e1261075d565b5b610e1f8a828b01610d1e565b925092505092959891949750929550565b600080600080600060808688031215610e4c57610e4b610758565b5b6000610e5a88828901610783565b9550506020610e6b888289016107e1565b9450506040610e7c888289016107e1565b935050606086013567ffffffffffffffff811115610e9d57610e9c61075d565b5b610ea988828901610d1e565b92509250509295509295909350565b610ec181610860565b82525050565b6000604082019050610edc6000830185610eb8565b610ee96020830184610eb8565b9392505050565b6000604082019050610f056000830185610836565b8181036020830152610f1781846106f3565b90509392505050565b60068110610f2d57600080fd5b50565b600081359050610f3f81610f20565b92915050565b600060208284031215610f5b57610f5a610758565b5b6000610f6984828501610f30565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110610fb257610fb1610f72565b5b50565b6000819050610fc382610fa1565b919050565b6000610fd382610fb5565b9050919050565b610fe381610fc8565b82525050565b6000602082019050610ffe6000830184610fda565b92915050565b60006040820190506110196000830185610fda565b818103602083015261102b81846106f3565b90509392505050565b600082825260208201905092915050565b82818337600083830152505050565b60006110608385611034565b935061106d838584611045565b611076836106e2565b840190509392505050565b6000602082019050818103600083015261109c818486611054565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61110681610762565b82525050565b600061111883836110fd565b60208301905092915050565b6000602082019050919050565b600061113c826110d1565b61114681856110dc565b9350611151836110ed565b8060005b83811015611182578151611169888261110c565b975061117483611124565b925050600181019050611155565b5085935050505092915050565b600061119b8383611131565b905092915050565b6000602082019050919050565b60006111bb826110a5565b6111c581856110b0565b9350836020820285016111d7856110c1565b8060005b8581101561121357848403895281516111f4858261118f565b94506111ff836111a3565b925060208a019950506001810190506111db565b50829750879550505050505092915050565b600060608201905061123a6000830186610836565b818103602083015261124c81856111b0565b905061125b6040830184610cf4565b94935050505056fea26469706673582212203aeb4ef49e5cf31fc11f60aecbd182a71f48e1d11c5b229502b4571ed3109f2d64736f6c634300080e0033", "devdoc": { "kind": "dev", "methods": { "encodeCronTriggerModuleArg(string)": { "params": { "_expression": "Cron expression" } }, "encodeEventTriggerModuleArg(address,bytes32[][],uint256)": { "params": { "_address": "Address to listen to for events.", "_blockConfirmations": "Number of blocks to wait for before triggering.", "_topics": "Set of topics to filter at each topic position." } }, "encodeTimeTriggerModuleArg(uint128,uint128)": { "params": { "_interval": "Time interval between each execution.", "_start": "Time when the first execution should occur." } }, "onCreateTask(bytes32,address,address,bytes,bytes)": { "params": { "execAddress": "Address of contract that should be called.", "execData": "Execution data to be called with / function selector if execution data is yet to be determined.", "initModuleArg": "Encoded arguments for module if any.", "taskCreator": "The address which created the task.", "taskId": "Unique hash of the task created." } }, "postExecCall(bytes32,address,address,bytes)": { "params": { "execAddress": "Address of contract that should be called.", "execData": "Execution data to be called with / function selector if execution data is yet to be determined.", "taskCreator": "The address which created the task.", "taskId": "Unique hash of the task created." } }, "preCancelTask(bytes32,address)": { "details": "Modules can override taskCreator.", "params": { "taskCreator": "The address which created the task.", "taskId": "Unique hash of the task created." }, "returns": { "_0": "address Overriden or original taskCreator." } }, "preCreateTask(address,address)": { "details": "Modules can override execAddress or taskCreator. {See ProxyModule-preCreateTask}", "params": { "execAddress": "Address of contract that should be called.", "taskCreator": "The address which created the task." }, "returns": { "_0": "address Overriden or original taskCreator.", "_1": "address Overriden or original execAddress." } }, "preExecCall(bytes32,address,address,bytes)": { "params": { "execAddress": "Address of contract that should be called.", "execData": "Execution data to be called with / function selector if execution data is yet to be determined.", "taskCreator": "The address which created the task.", "taskId": "Unique hash of the task created." }, "returns": { "_0": "address Overriden or original execution address.", "_1": "bytes Overriden or original execution data." } } }, "version": 1 }, "userdoc": { "kind": "user", "methods": { "encodeBlockTriggerModuleArg()": { "notice": "Helper function to encode arguments for TriggerModule for Block." }, "encodeCronTriggerModuleArg(string)": { "notice": "Helper function to encode arguments for TriggerModule for Cron." }, "encodeEventTriggerModuleArg(address,bytes32[][],uint256)": { "notice": "Helper function to encode arguments for TriggerModule for Event." }, "encodeTimeTriggerModuleArg(uint128,uint128)": { "notice": "Helper function to encode arguments for TriggerModule for Timer." }, "onCreateTask(bytes32,address,address,bytes,bytes)": { "notice": "Initiates task module whenever `createTask` is being called." }, "postExecCall(bytes32,address,address,bytes)": { "notice": "Called during `exec` and after execAddress is called." }, "preCancelTask(bytes32,address)": { "notice": "Called before taskId is removed from _createdTasks[]." }, "preCreateTask(address,address)": { "notice": "Called before generating taskId." }, "preExecCall(bytes32,address,address,bytes)": { "notice": "Called during `exec` and before execAddress is called." } }, "version": 1 }, "storageLayout": { "storage": [ { "astId": 2271, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "taskCreator", "offset": 0, "slot": "0", "type": "t_mapping(t_bytes32,t_address)" }, { "astId": 2276, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "execAddresses", "offset": 0, "slot": "1", "type": "t_mapping(t_bytes32,t_address)" }, { "astId": 2282, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "_createdTasks", "offset": 0, "slot": "2", "type": "t_mapping(t_address,t_struct(Bytes32Set)1247_storage)" }, { "astId": 2284, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "fee", "offset": 0, "slot": "3", "type": "t_uint256" }, { "astId": 2286, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "feeToken", "offset": 0, "slot": "4", "type": "t_address" }, { "astId": 2292, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "timedTask", "offset": 0, "slot": "5", "type": "t_mapping(t_bytes32,t_struct(Time)5500_storage)" }, { "astId": 2298, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "taskModuleAddresses", "offset": 0, "slot": "6", "type": "t_mapping(t_enum(Module)5487,t_address)" }, { "astId": 2302, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "nonce1Balance", "offset": 0, "slot": "7", "type": "t_mapping(t_bytes32,t_uint256)" } ], "types": { "t_address": { "encoding": "inplace", "label": "address", "numberOfBytes": "20" }, "t_array(t_bytes32)dyn_storage": { "base": "t_bytes32", "encoding": "dynamic_array", "label": "bytes32[]", "numberOfBytes": "32" }, "t_bytes32": { "encoding": "inplace", "label": "bytes32", "numberOfBytes": "32" }, "t_enum(Module)5487": { "encoding": "inplace", "label": "enum LibDataTypes.Module", "numberOfBytes": "1" }, "t_mapping(t_address,t_struct(Bytes32Set)1247_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct EnumerableSet.Bytes32Set)", "numberOfBytes": "32", "value": "t_struct(Bytes32Set)1247_storage" }, "t_mapping(t_bytes32,t_address)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => address)", "numberOfBytes": "32", "value": "t_address" }, "t_mapping(t_bytes32,t_struct(Time)5500_storage)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => struct LibDataTypes.Time)", "numberOfBytes": "32", "value": "t_struct(Time)5500_storage" }, "t_mapping(t_bytes32,t_uint256)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => uint256)", "numberOfBytes": "32", "value": "t_uint256" }, "t_mapping(t_enum(Module)5487,t_address)": { "encoding": "mapping", "key": "t_enum(Module)5487", "label": "mapping(enum LibDataTypes.Module => address)", "numberOfBytes": "32", "value": "t_address" }, "t_struct(Bytes32Set)1247_storage": { "encoding": "inplace", "label": "struct EnumerableSet.Bytes32Set", "members": [ { "astId": 1246, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "_inner", "offset": 0, "slot": "0", "type": "t_struct(Set)1053_storage" } ], "numberOfBytes": "64" }, "t_struct(Set)1053_storage": { "encoding": "inplace", "label": "struct EnumerableSet.Set", "members": [ { "astId": 1048, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "_values", "offset": 0, "slot": "0", "type": "t_array(t_bytes32)dyn_storage" }, { "astId": 1052, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "_indexes", "offset": 0, "slot": "1", "type": "t_mapping(t_bytes32,t_uint256)" } ], "numberOfBytes": "64" }, "t_struct(Time)5500_storage": { "encoding": "inplace", "label": "struct LibDataTypes.Time", "members": [ { "astId": 5497, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "nextExec", "offset": 0, "slot": "0", "type": "t_uint128" }, { "astId": 5499, "contract": "contracts/taskModules/TriggerModule.sol:TriggerModule", "label": "interval", "offset": 16, "slot": "0", "type": "t_uint128" } ], "numberOfBytes": "32" }, "t_uint128": { "encoding": "inplace", "label": "uint128", "numberOfBytes": "16" }, "t_uint256": { "encoding": "inplace", "label": "uint256", "numberOfBytes": "32" } } } }