diff --git a/deployments/linea/CallsSimulator.json b/deployments/linea/CallsSimulator.json new file mode 100644 index 00000000..2dcf2735 --- /dev/null +++ b/deployments/linea/CallsSimulator.json @@ -0,0 +1,76 @@ +{ + "address": "0x52a8193C7f42b75F27e4ce96f8ddBA7e854453Ef", + "abi": [ + { + "inputs": [], + "name": "ArraySizeMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "simulateCalls", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xc933c7196e3e738ef1558590591b9a01af2fbf2c145f916072302c8cef9b1798", + "receipt": { + "to": null, + "from": "0x56E44874F624EbDE6efCc783eFD685f0FBDC6dcF", + "contractAddress": "0x52a8193C7f42b75F27e4ce96f8ddBA7e854453Ef", + "transactionIndex": 1, + "gasUsed": "314148", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8fb5e938914804535cde3b6568626b428b4ce1b873fdbf9df0097bccc19aad99", + "transactionHash": "0xc933c7196e3e738ef1558590591b9a01af2fbf2c145f916072302c8cef9b1798", + "logs": [], + "blockNumber": 14623114, + "cumulativeGasUsed": "335148", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "30a20ae3c316c872c81b0a3ed62cb31c", + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ArraySizeMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"simulateCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"simulateCalls(address[],bytes[])\":{\"params\":{\"data\":\"Array of data that will be passed to each call\",\"targets\":\"Array of addresses that will be called\"}}},\"title\":\"Tool to be used inside `LOP.simulate()` call\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"simulateCalls(address[],bytes[])\":{\"notice\":\"Calls every target with corresponding data. Then reverts with CALL_RESULTS_0101011 where zeroes and ones denote failure or success of the corresponding call\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/CallsSimulator.sol\":\"CallsSimulator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/mocks/CallsSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.23;\\n\\n/// @title Tool to be used inside `LOP.simulate()` call\\ncontract CallsSimulator {\\n error ArraySizeMismatch();\\n\\n /**\\n * @notice Calls every target with corresponding data. Then reverts with CALL_RESULTS_0101011 where zeroes and ones\\n * denote failure or success of the corresponding call\\n * @param targets Array of addresses that will be called\\n * @param data Array of data that will be passed to each call\\n */\\n function simulateCalls(address[] calldata targets, bytes[] calldata data) external {\\n if (targets.length != data.length) revert ArraySizeMismatch();\\n bytes memory reason = new bytes(targets.length);\\n for (uint256 i = 0; i < targets.length; i++) {\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory result) = targets[i].call(data[i]);\\n if (success && result.length == 32 && abi.decode(result, (bool))) {\\n reason[i] = \\\"1\\\";\\n } else {\\n reason[i] = \\\"0\\\";\\n }\\n }\\n\\n // Always revert and provide per call results\\n revert(string(abi.encodePacked(\\\"CALL_RESULTS_\\\", reason)));\\n }\\n}\\n\",\"keccak256\":\"0xb9598e760223989908d973db4ae7de6078d2e05986f40d8a6d6ce478c72170bf\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60808060405234610016576104c0908161001c8239f35b600080fdfe608060408181526004908136101561001657600080fd5b60003560e01c637f29a59d1461002b57600080fd5b346102df57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102df57813567ffffffffffffffff81116102df57610077903690840161034c565b9060243567ffffffffffffffff81116102df57610097903690860161034c565b909581840361032557506100aa836103ed565b956100b78551978861037d565b8387527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06100e4856103ed565b0136602089013760005b8481106101b95760206044887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8c6101b08c805190610174602d838b8101967f43414c4c5f524553554c54535f000000000000000000000000000000000000008852610164815180928f8686019101610467565b810103600d81018552018361037d565b519788967f08c379a000000000000000000000000000000000000000000000000000000000885287015251809281602488015287870190610467565b01168101030190fd5b600581901b8481013573ffffffffffffffffffffffffffffffffffffffff811690036102df57838210156102f757808301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156102df57830167ffffffffffffffff8135116102df578035360360208201136102df576000918291828a518281933560208201833735810182815203928901355af1903d156102ef573d91610267836103ed565b926102748951948561037d565b83523d6000602085013e5b806102e4575b806102ba575b60019250156102a85760316102a0828b610427565b535b016100ee565b60306102b4828b610427565b536102a2565b50906020818051810103126102df57602001519081151582036102df5760019161028b565b600080fd5b506020825114610285565b60609161027f565b6032887f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b807fcc6e40b300000000000000000000000000000000000000000000000000000000879252fd5b9181601f840112156102df5782359167ffffffffffffffff83116102df576020808501948460051b0101116102df57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103be57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116103be57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b908151811015610438570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811061047a5750506000910152565b818101518382015260200161046a56fea26469706673582212206e37271e1f9d245da9cf0642aa91e257d6645ac5585205abe6b8559997c5b6b864736f6c63430008170033", + "deployedBytecode": "0x608060408181526004908136101561001657600080fd5b60003560e01c637f29a59d1461002b57600080fd5b346102df57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102df57813567ffffffffffffffff81116102df57610077903690840161034c565b9060243567ffffffffffffffff81116102df57610097903690860161034c565b909581840361032557506100aa836103ed565b956100b78551978861037d565b8387527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06100e4856103ed565b0136602089013760005b8481106101b95760206044887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8c6101b08c805190610174602d838b8101967f43414c4c5f524553554c54535f000000000000000000000000000000000000008852610164815180928f8686019101610467565b810103600d81018552018361037d565b519788967f08c379a000000000000000000000000000000000000000000000000000000000885287015251809281602488015287870190610467565b01168101030190fd5b600581901b8481013573ffffffffffffffffffffffffffffffffffffffff811690036102df57838210156102f757808301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156102df57830167ffffffffffffffff8135116102df578035360360208201136102df576000918291828a518281933560208201833735810182815203928901355af1903d156102ef573d91610267836103ed565b926102748951948561037d565b83523d6000602085013e5b806102e4575b806102ba575b60019250156102a85760316102a0828b610427565b535b016100ee565b60306102b4828b610427565b536102a2565b50906020818051810103126102df57602001519081151582036102df5760019161028b565b600080fd5b506020825114610285565b60609161027f565b6032887f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b807fcc6e40b300000000000000000000000000000000000000000000000000000000879252fd5b9181601f840112156102df5782359167ffffffffffffffff83116102df576020808501948460051b0101116102df57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103be57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116103be57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b908151811015610438570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811061047a5750506000910152565b818101518382015260200161046a56fea26469706673582212206e37271e1f9d245da9cf0642aa91e257d6645ac5585205abe6b8559997c5b6b864736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "simulateCalls(address[],bytes[])": { + "params": { + "data": "Array of data that will be passed to each call", + "targets": "Array of addresses that will be called" + } + } + }, + "title": "Tool to be used inside `LOP.simulate()` call", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "simulateCalls(address[],bytes[])": { + "notice": "Calls every target with corresponding data. Then reverts with CALL_RESULTS_0101011 where zeroes and ones denote failure or success of the corresponding call" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/deployments/linea/SeriesNonceManager.json b/deployments/linea/SeriesNonceManager.json new file mode 100644 index 00000000..1cde7afb --- /dev/null +++ b/deployments/linea/SeriesNonceManager.json @@ -0,0 +1,252 @@ +{ + "address": "0xE93293A6088d3a8abDDf62e6CA1A085Cec97D06F", + "abi": [ + { + "inputs": [], + "name": "AdvanceNonceFailed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "series", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newNonce", + "type": "uint256" + } + ], + "name": "NonceIncreased", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "series", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "advanceNonce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "series", + "type": "uint8" + } + ], + "name": "increaseNonce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "series", + "type": "uint256" + }, + { + "internalType": "address", + "name": "maker", + "type": "address" + } + ], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "series", + "type": "uint256" + }, + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerNonce", + "type": "uint256" + } + ], + "name": "nonceEquals", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "time", + "type": "uint256" + } + ], + "name": "timestampBelow", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeNonceSeriesAccount", + "type": "uint256" + } + ], + "name": "timestampBelowAndNonceEquals", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x3c549085350e46fd6efdfbe526d276f72c64743245e0f31a10426b07b68ab55d", + "receipt": { + "to": null, + "from": "0x56E44874F624EbDE6efCc783eFD685f0FBDC6dcF", + "contractAddress": "0xE93293A6088d3a8abDDf62e6CA1A085Cec97D06F", + "transactionIndex": 0, + "gasUsed": "273191", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x84c0d6d2488ff8224b7a295d6cd3657ad5daf82f9f0ca4443b1dc150186de343", + "transactionHash": "0x3c549085350e46fd6efdfbe526d276f72c64743245e0f31a10426b07b68ab55d", + "logs": [], + "blockNumber": 14623081, + "cumulativeGasUsed": "273191", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "30a20ae3c316c872c81b0a3ed62cb31c", + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AdvanceNonceFailed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"series\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceIncreased\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"series\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"advanceNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"series\",\"type\":\"uint8\"}],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"series\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"}],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"series\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"makerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"makerNonce\",\"type\":\"uint256\"}],\"name\":\"nonceEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"timestampBelow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timeNonceSeriesAccount\",\"type\":\"uint256\"}],\"name\":\"timestampBelowAndNonceEquals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"nonceEquals(uint256,address,uint256)\":{\"returns\":{\"_0\":\"Result True if `makerAddress` has specified nonce. Otherwise, false\"}},\"timestampBelow(uint256)\":{\"returns\":{\"_0\":\"Result True if current block timestamp is lower than `time`. Otherwise, false\"}}},\"title\":\"A helper contract to manage nonce with the series\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"advanceNonce(uint256,uint256)\":{\"notice\":\"Advances nonce by specified amount\"},\"increaseNonce(uint8)\":{\"notice\":\"Advances nonce by one\"},\"nonceEquals(uint256,address,uint256)\":{\"notice\":\"Checks if `makerAddress` has specified `makerNonce` for `series`\"},\"timestampBelow(uint256)\":{\"notice\":\"Checks passed time against block timestamp\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/helpers/SeriesNonceManager.sol\":\"SeriesNonceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/helpers/SeriesNonceManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.23;\\n\\n/// @title A helper contract to manage nonce with the series\\ncontract SeriesNonceManager {\\n error AdvanceNonceFailed();\\n event NonceIncreased(address indexed maker, uint256 series, uint256 newNonce);\\n\\n // {\\n // 1: {\\n // '0x762f73Ad...842Ffa8': 0,\\n // '0xd20c41ee...32aaDe2': 1\\n // },\\n // 2: {\\n // '0x762f73Ad...842Ffa8': 3,\\n // '0xd20c41ee...32aaDe2': 15\\n // },\\n // ...\\n // }\\n mapping(uint256 series => mapping(address maker => uint256 nonce)) public nonce;\\n\\n /// @notice Advances nonce by one\\n function increaseNonce(uint8 series) external {\\n advanceNonce(series, 1);\\n }\\n\\n /// @notice Advances nonce by specified amount\\n function advanceNonce(uint256 series, uint256 amount) public {\\n if (amount == 0 || amount > 255) revert AdvanceNonceFailed();\\n unchecked {\\n uint256 newNonce = nonce[series][msg.sender] + amount;\\n nonce[series][msg.sender] = newNonce;\\n emit NonceIncreased(msg.sender, series, newNonce);\\n }\\n }\\n\\n /// @notice Checks if `makerAddress` has specified `makerNonce` for `series`\\n /// @return Result True if `makerAddress` has specified nonce. Otherwise, false\\n function nonceEquals(uint256 series, address makerAddress, uint256 makerNonce) public view returns(bool) {\\n return nonce[series][makerAddress] == makerNonce;\\n }\\n\\n /// @notice Checks passed time against block timestamp\\n /// @return Result True if current block timestamp is lower than `time`. Otherwise, false\\n function timestampBelow(uint256 time) public view returns(bool) {\\n return block.timestamp < time; // solhint-disable-line not-rely-on-time\\n }\\n\\n function timestampBelowAndNonceEquals(uint256 timeNonceSeriesAccount) public view returns(bool) {\\n uint256 _time = uint40(timeNonceSeriesAccount >> 216);\\n uint256 _nonce = uint40(timeNonceSeriesAccount >> 176);\\n uint256 _series = uint16(timeNonceSeriesAccount >> 160);\\n address _account = address(uint160(timeNonceSeriesAccount));\\n return timestampBelow(_time) && nonceEquals(_series, _account, _nonce);\\n }\\n}\\n\",\"keccak256\":\"0xe80ced3a2ffa0289583232d785faaefd3bf139ff351a9ace0e7a3181b40d90c0\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60808060405234610016576103fb908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b6000803560e01c80632cc2878d146103045780634a7f2a4b146102995780635d3a09dc146101c557806363592c2b146101865780637a37dc2c146100e55763976222211461006257600080fd5b346100e25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e257506100d96020926100a061039d565b6044359135600052600060205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526040600020541490565b90519015158152f35b80fd5b50913461018257602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017e57359160ff831680930361017e577fdc0537f71d06d3708f52baf4ddf6918b25f1a145ba08873de27485682b35cac191838552848152818520338652815260018286205401908486528581528286203387528152818387205582519485528401523392a280f35b8380fd5b8280fd5b509190346101825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610182576020925051903542108152f35b5091903461018257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018257813591602435908115801561028f575b6102685750907fdc0537f71d06d3708f52baf4ddf6918b25f1a145ba08873de27485682b35cac191838552846020528185203386526020528185205401838552846020528185203386526020528082862055815193845260208401523392a280f35b82517fbd71636d000000000000000000000000000000000000000000000000000000008152fd5b5060ff8211610206565b50913461018257817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101825760209282916102d661039d565b9035825281855273ffffffffffffffffffffffffffffffffffffffff83832091168252845220549051908152f35b5091346101825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610182576020925035908160d81c42109182610351575b50519015158152f35b60a081901c61ffff1660009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205491925060b01c64ffffffffff16149038610348565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c057565b600080fdfea26469706673582212208084c5f97a16ba60ac00ca0688203c1cdc95aa5637c17441730df1ee1ba2b16364736f6c63430008170033", + "deployedBytecode": "0x6040608081526004908136101561001557600080fd5b6000803560e01c80632cc2878d146103045780634a7f2a4b146102995780635d3a09dc146101c557806363592c2b146101865780637a37dc2c146100e55763976222211461006257600080fd5b346100e25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e257506100d96020926100a061039d565b6044359135600052600060205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526040600020541490565b90519015158152f35b80fd5b50913461018257602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017e57359160ff831680930361017e577fdc0537f71d06d3708f52baf4ddf6918b25f1a145ba08873de27485682b35cac191838552848152818520338652815260018286205401908486528581528286203387528152818387205582519485528401523392a280f35b8380fd5b8280fd5b509190346101825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610182576020925051903542108152f35b5091903461018257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018257813591602435908115801561028f575b6102685750907fdc0537f71d06d3708f52baf4ddf6918b25f1a145ba08873de27485682b35cac191838552846020528185203386526020528185205401838552846020528185203386526020528082862055815193845260208401523392a280f35b82517fbd71636d000000000000000000000000000000000000000000000000000000008152fd5b5060ff8211610206565b50913461018257817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101825760209282916102d661039d565b9035825281855273ffffffffffffffffffffffffffffffffffffffff83832091168252845220549051908152f35b5091346101825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610182576020925035908160d81c42109182610351575b50519015158152f35b60a081901c61ffff1660009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205491925060b01c64ffffffffff16149038610348565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103c057565b600080fdfea26469706673582212208084c5f97a16ba60ac00ca0688203c1cdc95aa5637c17441730df1ee1ba2b16364736f6c63430008170033", + "devdoc": { + "kind": "dev", + "methods": { + "nonceEquals(uint256,address,uint256)": { + "returns": { + "_0": "Result True if `makerAddress` has specified nonce. Otherwise, false" + } + }, + "timestampBelow(uint256)": { + "returns": { + "_0": "Result True if current block timestamp is lower than `time`. Otherwise, false" + } + } + }, + "title": "A helper contract to manage nonce with the series", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "advanceNonce(uint256,uint256)": { + "notice": "Advances nonce by specified amount" + }, + "increaseNonce(uint8)": { + "notice": "Advances nonce by one" + }, + "nonceEquals(uint256,address,uint256)": { + "notice": "Checks if `makerAddress` has specified `makerNonce` for `series`" + }, + "timestampBelow(uint256)": { + "notice": "Checks passed time against block timestamp" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 17016, + "contract": "contracts/helpers/SeriesNonceManager.sol:SeriesNonceManager", + "label": "nonce", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file