diff --git a/deploy/deploy_settlement_only.js b/deploy/deploy_settlement_only.js index 810f044..e1c4dfb 100644 --- a/deploy/deploy_settlement_only.js +++ b/deploy/deploy_settlement_only.js @@ -13,6 +13,7 @@ const FEE_TOKEN = { 1313161554: '0xe3520349F477A5F6EB06107066048508498A291b', // Aurora (DAI) 8217: '0x5c74070FDeA071359b86082bd9f9b3dEaafbe32b', // Klaytn (KDAI) 8453: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', // Base (DAI) + 59144: '0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5', // Linea (DAI) 31337: '0x111111111117dC0aa78b770fA6A738034120C302', // Hardhat }; @@ -28,6 +29,7 @@ const WETH = { 1313161554: '0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB', // Aurora 8217: '0xe4f05A66Ec68B54A58B17c22107b02e0232cC817', // Klaytn 8453: '0x4200000000000000000000000000000000000006', // Base + 59144: '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f', // Linea 31337: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // Hardhat }; diff --git a/deployments/linea/Create3Deployer.json b/deployments/linea/Create3Deployer.json new file mode 100644 index 0000000..69e779b --- /dev/null +++ b/deployments/linea/Create3Deployer.json @@ -0,0 +1,230 @@ +{ + "address": "0x65B3Db8bAeF0215A1F9B14c506D2a3078b2C84AE", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ErrorCreatingContract", + "type": "error" + }, + { + "inputs": [], + "name": "ErrorCreatingProxy", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [], + "name": "TargetAlreadyExists", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "addressOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "code", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x6476146cb7fd58f74eeb67f49e2cb0a5282e56f71949c1a552c0bd3b3c7f6817", + "receipt": { + "to": null, + "from": "0x361EDc4fF0cbb4f2a5c4ff327F39ad6C94558c7d", + "contractAddress": "0x65B3Db8bAeF0215A1F9B14c506D2a3078b2C84AE", + "transactionIndex": 0, + "gasUsed": "486805", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000002080000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000008000000200000000000000000000000000000", + "blockHash": "0x03fff7ff6b678b2b58ef9853b02bd20637cca6cedfd51fbcab87344117e661be", + "transactionHash": "0x6476146cb7fd58f74eeb67f49e2cb0a5282e56f71949c1a552c0bd3b3c7f6817", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 13103418, + "transactionHash": "0x6476146cb7fd58f74eeb67f49e2cb0a5282e56f71949c1a552c0bd3b3c7f6817", + "address": "0x65B3Db8bAeF0215A1F9B14c506D2a3078b2C84AE", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000361edc4ff0cbb4f2a5c4ff327f39ad6c94558c7d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x03fff7ff6b678b2b58ef9853b02bd20637cca6cedfd51fbcab87344117e661be" + } + ], + "blockNumber": 13103418, + "cumulativeGasUsed": "486805", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "1aa1d20d95038c085194f62a47141346", + "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrorCreatingContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorCreatingProxy\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetAlreadyExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"addressOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"code\",\"type\":\"bytes\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Create3Deployer.sol\":\"Create3Deployer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"contracts/Create3Deployer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.23;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { Create3 } from \\\"./libraries/Create3.sol\\\";\\n\\ncontract Create3Deployer is Ownable {\\n constructor() Ownable(msg.sender) {} // solhint-disable-line no-empty-blocks\\n\\n function deploy(bytes32 salt, bytes calldata code) external onlyOwner returns (address) {\\n return Create3.create3(salt, code);\\n }\\n\\n function addressOf(bytes32 salt) external view returns (address) {\\n return Create3.addressOf(salt);\\n }\\n}\\n\",\"keccak256\":\"0xae8b5a54ffeda7ce965ac0d1d03c6c8193a9c59488c3ced0ca987e04db1e0866\",\"license\":\"MIT\"},\"contracts/libraries/Create3.sol\":{\"content\":\"//SPDX-License-Identifier: Unlicense\\npragma solidity 0.8.23;\\n\\n/**\\n @title A library for deploying contracts EIP-3171 style.\\n @author Agustin Aguilar \\n*/\\nlibrary Create3 {\\n error ErrorCreatingProxy();\\n error ErrorCreatingContract();\\n error TargetAlreadyExists();\\n\\n /**\\n @notice The bytecode for a contract that proxies the creation of another contract\\n @dev If this code is deployed using CREATE2 it can be used to decouple `creationCode` from the child contract address\\n\\n 0x67363d3d37363d34f0ff3d5260086017f3:\\n 0x00 0x68 0x68XXXXXXXXXXXXXXXXXX PUSH9 bytecode 0x363d3d37363d34f0ff\\n 0x01 0x3d 0x3d RETURNDATASIZE 0 0x363d3d37363d34f0ff\\n 0x02 0x52 0x52 MSTORE\\n 0x03 0x60 0x6009 PUSH1 09 9\\n 0x04 0x60 0x6017 PUSH1 17 23 9\\n 0x05 0xf3 0xf3 RETURN\\n\\n 0x363d3d37363d34f0:\\n 0x00 0x36 0x36 CALLDATASIZE cds\\n 0x01 0x3d 0x3d RETURNDATASIZE 0 cds\\n 0x02 0x3d 0x3d RETURNDATASIZE 0 0 cds\\n 0x03 0x37 0x37 CALLDATACOPY\\n 0x04 0x36 0x36 CALLDATASIZE cds\\n 0x05 0x3d 0x3d RETURNDATASIZE 0 cds\\n 0x06 0x34 0x34 CALLVALUE val 0 cds\\n 0x07 0xf0 0xf0 CREATE addr\\n 0x08 0xff 0xff SELFDESTRUCT\\n */\\n\\n bytes private constant _PROXY_CHILD_BYTECODE = hex\\\"68_36_3d_3d_37_36_3d_34_f0_ff_3d_52_60_09_60_17_f3\\\";\\n\\n // KECCAK256_PROXY_CHILD_BYTECODE = keccak256(PROXY_CHILD_BYTECODE);\\n bytes32 private constant _KECCAK256_PROXY_CHILD_BYTECODE = keccak256(_PROXY_CHILD_BYTECODE); // 0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f;\\n\\n /**\\n @notice Creates a new contract with given `_creationCode` and `_salt`\\n @param _salt Salt of the contract creation, resulting address will be derivated from this value only\\n @param _creationCode Creation code (constructor) of the contract to be deployed, this value doesn't affect the resulting address\\n @return addr of the deployed contract, reverts on error\\n */\\n function create3(bytes32 _salt, bytes memory _creationCode) internal returns (address addr) {\\n // Creation code\\n bytes memory creationCode = _PROXY_CHILD_BYTECODE;\\n\\n // Get target final address\\n addr = addressOf(_salt);\\n if (addr.code.length != 0) revert TargetAlreadyExists();\\n\\n // Create CREATE2 proxy\\n // solhint-disable-next-line no-inline-assembly\\n address proxy; assembly { proxy := create2(0, add(creationCode, 32), mload(creationCode), _salt)}\\n if (proxy == address(0)) revert ErrorCreatingProxy();\\n\\n // Call proxy with final init code\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success,) = proxy.call(_creationCode);\\n if (!success || addr.code.length == 0) revert ErrorCreatingContract();\\n }\\n\\n /**\\n @notice Computes the resulting address of a contract deployed using address(this) and the given `_salt`\\n @param _salt Salt of the contract creation, resulting address will be derivated from this value only\\n @return addr of the deployed contract, reverts on error\\n\\n @dev The address creation formula is: keccak256(rlp([keccak256(0xff ++ address(this) ++ _salt ++ keccak256(childBytecode))[12:], 0x01]))\\n */\\n function addressOf(bytes32 _salt) internal view returns (address) {\\n address proxy = address(\\n uint160(\\n uint256(\\n keccak256(\\n abi.encodePacked(\\n hex'ff',\\n address(this),\\n _salt,\\n _KECCAK256_PROXY_CHILD_BYTECODE\\n )\\n )\\n )\\n )\\n );\\n\\n return address(\\n uint160(\\n uint256(\\n keccak256(\\n abi.encodePacked(\\n hex\\\"d6_94\\\",\\n proxy,\\n hex\\\"01\\\"\\n )\\n )\\n )\\n )\\n );\\n }\\n}\\n\",\"keccak256\":\"0x533c6dc44c337cc9ef687ab8f2cbffe4782895dc3cb9c0799093416279b51e19\",\"license\":\"Unlicense\"}},\"version\":1}", + "bytecode": "0x6080806040523461007a5733156100645760008054336001600160a01b03198216811783556040519290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361077390816100808239f35b631e4fbdf760e01b815260006004820152602490fd5b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c908163715018a61461006a575080638da5cb5b14610065578063bb34534c14610060578063cdcb760a1461005b5763f2fde38b1461005657600080fd5b61025c565b6101b9565b61015f565b610108565b3461010557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610105576100a061054d565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b3461015a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b3461015a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a57602061019b6004356105e8565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461015a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a5767ffffffffffffffff60243581811161015a573660238201121561015a57806004013591821161015a57366024838301011161015a576102589160246102319201600435610341565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b3461015a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a5760043573ffffffffffffffffffffffffffffffffffffffff9081811680910361015a576102b661054d565b8015610310576000918254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b9161034a61054d565b61035381610513565b9061036160405192836104d2565b8082526020820192368282011161015a578160009260209286378301015261038761059e565b92610391816105e8565b93843b61043c576020815191016000f573ffffffffffffffffffffffffffffffffffffffff8116156104125760009283809351925af16103cf61070d565b50158015610409575b6103df5790565b60046040517f53de54b9000000000000000000000000000000000000000000000000000000008152fd5b50803b156103d8565b60046040517fbbd2fe87000000000000000000000000000000000000000000000000000000008152fd5b60046040517fcd43efa1000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176104b157604052565b610466565b6040810190811067ffffffffffffffff8211176104b157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104b157604052565b67ffffffffffffffff81116104b157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff60005416330361056e57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b604051906040820182811067ffffffffffffffff8211176104b157604052601182527f68363d3d37363d34f0ff3d5260096017f30000000000000000000000000000006020830152565b6106f161070a916105f761059e565b602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261064a81610495565b5190206040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927fd694000000000000000000000000000000000000000000000000000000000000845260601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152601781526106d5816104b6565b51902073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b3d15610738573d9061071e82610513565b9161072c60405193846104d2565b82523d6000602084013e565b60609056fea2646970667358221220cfad726a1b822bc60de36f349b974cae3b8b9b0f5feb78cd5d59d1bf9741a23864736f6c63430008170033", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c908163715018a61461006a575080638da5cb5b14610065578063bb34534c14610060578063cdcb760a1461005b5763f2fde38b1461005657600080fd5b61025c565b6101b9565b61015f565b610108565b3461010557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610105576100a061054d565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b3461015a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b3461015a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a57602061019b6004356105e8565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461015a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a5767ffffffffffffffff60243581811161015a573660238201121561015a57806004013591821161015a57366024838301011161015a576102589160246102319201600435610341565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b3461015a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015a5760043573ffffffffffffffffffffffffffffffffffffffff9081811680910361015a576102b661054d565b8015610310576000918254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b9161034a61054d565b61035381610513565b9061036160405192836104d2565b8082526020820192368282011161015a578160009260209286378301015261038761059e565b92610391816105e8565b93843b61043c576020815191016000f573ffffffffffffffffffffffffffffffffffffffff8116156104125760009283809351925af16103cf61070d565b50158015610409575b6103df5790565b60046040517f53de54b9000000000000000000000000000000000000000000000000000000008152fd5b50803b156103d8565b60046040517fbbd2fe87000000000000000000000000000000000000000000000000000000008152fd5b60046040517fcd43efa1000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176104b157604052565b610466565b6040810190811067ffffffffffffffff8211176104b157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104b157604052565b67ffffffffffffffff81116104b157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff60005416330361056e57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b604051906040820182811067ffffffffffffffff8211176104b157604052601182527f68363d3d37363d34f0ff3d5260096017f30000000000000000000000000000006020830152565b6106f161070a916105f761059e565b602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261064a81610495565b5190206040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927fd694000000000000000000000000000000000000000000000000000000000000845260601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152601781526106d5816104b6565b51902073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b3d15610738573d9061071e82610513565b9161072c60405193846104d2565b82523d6000602084013e565b60609056fea2646970667358221220cfad726a1b822bc60de36f349b974cae3b8b9b0f5feb78cd5d59d1bf9741a23864736f6c63430008170033", + "devdoc": { + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ] + }, + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 7861, + "contract": "contracts/Create3Deployer.sol:Create3Deployer", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file