UNPKG

@etherspot/contracts

Version:

Etherspot Solidity contracts

208 lines 37.8 kB
{ "address": "0xF330b17e19474762E6F408D7dCf0327264d4A2C0", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "initializer", "type": "address" } ], "name": "Initialized", "type": "event" }, { "inputs": [ { "internalType": "bytes32[]", "name": "nodes", "type": "bytes32[]" } ], "name": "getAddresses", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "nodes", "type": "bytes32[]" } ], "name": "getNames", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ENSRegistry", "name": "registry_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isInitialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "registry", "outputs": [ { "internalType": "contract ENSRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "transactionHash": "0x4754b7c496dd9ead4cbda44627f1ded86a6f7adde78aba7faa459eef5fdbcd52", "receipt": { "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", "from": "0x53fE9288897e254698175740aa359E19E26c10af", "contractAddress": null, "transactionIndex": 0, "gasUsed": "875095", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockHash": "0xa124085eb65f0d5118e60bcf4bb2537707c8eaa2233631c1b84240903a6ff2d9", "transactionHash": "0x4754b7c496dd9ead4cbda44627f1ded86a6f7adde78aba7faa459eef5fdbcd52", "logs": [], "blockNumber": 19888355, "cumulativeGasUsed": "875095", "status": 1, "byzantium": true }, "args": [], "solcInputHash": "1bdf84d4bd28700579af1cc4796e2cae", "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"}],\"name\":\"getAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"}],\"name\":\"getNames\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ENSRegistry\",\"name\":\"registry_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract ENSRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Stanis\\u0142aw G\\u0142ogowski <stan@pillarproject.io>\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Public constructor\"},\"getAddresses(bytes32[])\":{\"params\":{\"nodes\":\"array of nodes\"},\"returns\":{\"_0\":\"nodes addresses\"}},\"getNames(bytes32[])\":{\"params\":{\"nodes\":\"array of nodes\"},\"returns\":{\"_0\":\"nodes names\"}},\"initialize(address)\":{\"params\":{\"registry_\":\"ENS registry address\"}},\"isInitialized()\":{\"returns\":{\"_0\":\"true when contract is initialized\"}}},\"title\":\"ENS helper\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddresses(bytes32[])\":{\"notice\":\"Gets nodes addresses\"},\"getNames(bytes32[])\":{\"notice\":\"Gets nodes names\"},\"initialize(address)\":{\"notice\":\"Initializes `ENSLookupHelper` contract\"},\"isInitialized()\":{\"notice\":\"Check if contract is initialized\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ens/ENSHelper.sol\":\"ENSHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/common/lifecycle/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\n/**\\n * @title Initializable\\n *\\n * @dev Contract module which provides access control mechanism, where\\n * there is the initializer account that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initializer account will be tx.origin during contract deployment and will be removed on first use.\\n * Use `onlyInitializer` modifier on contract initialize process.\\n *\\n * @author Stanis\\u0142aw G\\u0142ogowski <stan@pillarproject.io>\\n */\\ncontract Initializable {\\n address private initializer;\\n\\n // events\\n\\n /**\\n * @dev Emitted after `onlyInitializer`\\n * @param initializer initializer address\\n */\\n event Initialized(\\n address initializer\\n );\\n\\n // modifiers\\n\\n /**\\n * @dev Throws if tx.origin is not the initializer\\n */\\n modifier onlyInitializer() {\\n require(\\n // solhint-disable-next-line avoid-tx-origin\\n tx.origin == initializer,\\n \\\"Initializable: tx.origin is not the initializer\\\"\\n );\\n\\n /// @dev removes initializer\\n initializer = address(0);\\n\\n _;\\n\\n emit Initialized(\\n // solhint-disable-next-line avoid-tx-origin\\n tx.origin\\n );\\n }\\n\\n /**\\n * @dev Internal constructor\\n */\\n constructor()\\n internal\\n {\\n // solhint-disable-next-line avoid-tx-origin\\n initializer = tx.origin;\\n }\\n\\n // external functions (views)\\n\\n /**\\n * @notice Check if contract is initialized\\n * @return true when contract is initialized\\n */\\n function isInitialized()\\n external\\n view\\n returns (bool)\\n {\\n return initializer == address(0);\\n }\\n}\\n\",\"keccak256\":\"0x3d47b2864dde5bde245917f7ac416a9e9715cdf1d226897e49838eb3186ee067\",\"license\":\"MIT\"},\"src/ens/ENSHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../common/lifecycle/Initializable.sol\\\";\\nimport \\\"./resolvers/ENSAddressResolver.sol\\\";\\nimport \\\"./resolvers/ENSNameResolver.sol\\\";\\nimport \\\"./ENSRegistry.sol\\\";\\n\\n/**\\n * @title ENS helper\\n *\\n * @author Stanis\\u0142aw G\\u0142ogowski <stan@pillarproject.io>\\n */\\ncontract ENSHelper is Initializable {\\n ENSRegistry public registry;\\n\\n /**\\n * @dev Public constructor\\n */\\n constructor() public Initializable() {}\\n\\n // external functions\\n\\n /**\\n * @notice Initializes `ENSLookupHelper` contract\\n * @param registry_ ENS registry address\\n */\\n function initialize(\\n ENSRegistry registry_\\n )\\n external\\n onlyInitializer\\n {\\n registry = registry_;\\n }\\n\\n // external functions (views)\\n\\n /**\\n * @notice Gets nodes addresses\\n * @param nodes array of nodes\\n * @return nodes addresses\\n */\\n function getAddresses(\\n bytes32[] memory nodes\\n )\\n external\\n view\\n returns (address[] memory)\\n {\\n uint nodesLen = nodes.length;\\n address[] memory result = new address[](nodesLen);\\n\\n for (uint i = 0; i < nodesLen; i++) {\\n result[i] = _getAddress(nodes[i]);\\n }\\n\\n return result;\\n }\\n\\n /**\\n * @notice Gets nodes names\\n * @param nodes array of nodes\\n * @return nodes names\\n */\\n function getNames(\\n bytes32[] memory nodes\\n )\\n external\\n view\\n returns (string[] memory)\\n {\\n uint nodesLen = nodes.length;\\n string[] memory result = new string[](nodesLen);\\n\\n for (uint i = 0; i < nodesLen; i++) {\\n result[i] = _getName(nodes[i]);\\n }\\n\\n return result;\\n }\\n\\n // private functions (views)\\n\\n function _getAddress(\\n bytes32 node\\n )\\n private\\n view\\n returns (address)\\n {\\n address result;\\n address resolver = registry.resolver(node);\\n\\n if (resolver != address(0)) {\\n try ENSAddressResolver(resolver).addr(node) returns (address addr) {\\n result = addr;\\n } catch {\\n //\\n }\\n }\\n\\n return result;\\n }\\n\\n function _getName(\\n bytes32 node\\n )\\n private\\n view\\n returns (string memory)\\n {\\n string memory result;\\n address resolver = registry.resolver(node);\\n\\n if (resolver != address(0)) {\\n try ENSNameResolver(resolver).name(node) returns (string memory name) {\\n result = name;\\n } catch {\\n //\\n }\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x38b9f6686c97eef1da7a015817b47f335fec507c30d4f22101d850908805e43f\",\"license\":\"MIT\"},\"src/ens/ENSRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\n/**\\n * @title ENS registry\\n *\\n * @dev Base on https://github.com/ensdomains/ens/blob/ff0f41747c05f1598973b0fe7ad0d9e09565dfcd/contracts/ENSRegistry.sol\\n */\\ncontract ENSRegistry {\\n struct Record {\\n address owner;\\n address resolver;\\n uint64 ttl;\\n }\\n\\n mapping (bytes32 => Record) private records;\\n mapping (address => mapping(address => bool)) private operators;\\n\\n // events\\n\\n event NewOwner(\\n bytes32 indexed node,\\n bytes32 indexed label,\\n address owner\\n );\\n\\n event Transfer(\\n bytes32 indexed node,\\n address owner\\n );\\n\\n event NewResolver(\\n bytes32 indexed node,\\n address resolver\\n );\\n\\n event NewTTL(\\n bytes32 indexed node,\\n uint64 ttl\\n );\\n\\n event ApprovalForAll(\\n address indexed owner,\\n address indexed operator,\\n bool approved\\n );\\n\\n // modifiers\\n\\n modifier authorised(\\n bytes32 node\\n )\\n {\\n address owner = records[node].owner;\\n\\n require(\\n owner == msg.sender || operators[owner][msg.sender],\\n \\\"ENSRegistry: reverted by authorised modifier\\\"\\n );\\n\\n _;\\n }\\n\\n /**\\n * @dev Public constructor\\n */\\n constructor()\\n public\\n {\\n // solhint-disable-next-line avoid-tx-origin\\n records[0x0].owner = tx.origin;\\n }\\n\\n // external functions\\n\\n function setRecord(\\n bytes32 node,\\n address owner_,\\n address resolver_,\\n uint64 ttl_\\n )\\n external\\n {\\n setOwner(node, owner_);\\n\\n _setResolverAndTTL(node, resolver_, ttl_);\\n }\\n\\n function setTTL(\\n bytes32 node,\\n uint64 ttl_\\n )\\n external\\n authorised(node)\\n {\\n records[node].ttl = ttl_;\\n\\n emit NewTTL(node, ttl_);\\n }\\n\\n function setSubnodeRecord(\\n bytes32 node,\\n bytes32 label,\\n address owner_,\\n address resolver_,\\n uint64 ttl_\\n )\\n external\\n {\\n bytes32 subNode = setSubnodeOwner(node, label, owner_);\\n\\n _setResolverAndTTL(subNode, resolver_, ttl_);\\n }\\n\\n function setApprovalForAll(\\n address operator,\\n bool approved\\n )\\n external\\n {\\n operators[msg.sender][operator] = approved;\\n\\n emit ApprovalForAll(\\n msg.sender,\\n operator,\\n approved\\n );\\n }\\n\\n // external functions (views)\\n\\n function owner(\\n bytes32 node\\n )\\n external\\n view\\n returns (address)\\n {\\n address addr = records[node].owner;\\n\\n if (addr == address(this)) {\\n return address(0x0);\\n }\\n\\n return addr;\\n }\\n\\n function resolver(\\n bytes32 node\\n )\\n external\\n view\\n returns (address)\\n {\\n return records[node].resolver;\\n }\\n\\n function ttl(\\n bytes32 node\\n )\\n external\\n view\\n returns (uint64)\\n {\\n return records[node].ttl;\\n }\\n\\n function recordExists(\\n bytes32 node\\n )\\n external\\n view\\n returns (bool)\\n {\\n return records[node].owner != address(0x0);\\n }\\n\\n function isApprovedForAll(\\n address owner_,\\n address operator\\n )\\n external\\n view\\n returns (bool)\\n {\\n return operators[owner_][operator];\\n }\\n\\n // public functions\\n\\n function setOwner(\\n bytes32 node,\\n address owner_\\n )\\n public\\n authorised(node)\\n {\\n records[node].owner = owner_;\\n\\n emit Transfer(node, owner_);\\n }\\n\\n function setResolver(\\n bytes32 node,\\n address resolver_\\n )\\n public\\n authorised(node)\\n {\\n records[node].resolver = resolver_;\\n\\n emit NewResolver(node, resolver_);\\n }\\n\\n function setSubnodeOwner(\\n bytes32 node,\\n bytes32 label,\\n address owner_\\n )\\n public\\n authorised(node)\\n returns(bytes32)\\n {\\n bytes32 subNode = keccak256(abi.encodePacked(node, label));\\n\\n records[subNode].owner = owner_;\\n\\n emit NewOwner(node, label, owner_);\\n\\n return subNode;\\n }\\n\\n // private functions\\n\\n function _setResolverAndTTL(\\n bytes32 node,\\n address resolver_,\\n uint64 ttl_\\n )\\n private\\n {\\n if (resolver_ != records[node].resolver) {\\n records[node].resolver = resolver_;\\n\\n emit NewResolver(node, resolver_);\\n }\\n\\n if (ttl_ != records[node].ttl) {\\n records[node].ttl = ttl_;\\n\\n emit NewTTL(node, ttl_);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe00dbdea09d17d41c2c14266e6e1b6b95938c0d374b266bb44a91cfcf0495612\",\"license\":\"MIT\"},\"src/ens/resolvers/ENSAbstractResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\n/**\\n * @title ENS abstract resolver\\n *\\n * @dev Base on https://github.com/ensdomains/resolvers/blob/f7d62ab04bfe1692a4344f6f1d31ff81315a98c3/contracts/ResolverBase.sol\\n */\\nabstract contract ENSAbstractResolver {\\n // modifiers\\n\\n modifier onlyNodeOwner(bytes32 node)\\n {\\n require(\\n _isNodeOwner(node),\\n \\\"ENSAbstractResolver: reverted by onlyNodeOwner modifier\\\"\\n );\\n\\n _;\\n }\\n\\n // internal functions (views)\\n\\n function _isNodeOwner(\\n bytes32 node\\n )\\n internal\\n virtual\\n view\\n returns (bool);\\n}\\n\",\"keccak256\":\"0xc67d8bdd4904684e5d3388f7ca7d18c7d407058d6b548d8c591404c758a1ac60\",\"license\":\"MIT\"},\"src/ens/resolvers/ENSAddressResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\nimport \\\"./ENSAbstractResolver.sol\\\";\\n\\n\\n/**\\n * @title ENS abstract address resolver\\n *\\n * @dev Base on https://github.com/ensdomains/resolvers/blob/f7d62ab04bfe1692a4344f6f1d31ff81315a98c3/contracts/profiles/AddrResolver.sol\\n */\\nabstract contract ENSAddressResolver is ENSAbstractResolver {\\n bytes4 internal constant INTERFACE_ADDR_ID = bytes4(keccak256(abi.encodePacked(\\\"addr(bytes32)\\\")));\\n bytes4 internal constant INTERFACE_ADDRESS_ID = bytes4(keccak256(abi.encodePacked(\\\"addr(bytes32,uint)\\\")));\\n\\n uint internal constant COIN_TYPE_ETH = 60;\\n\\n mapping(bytes32 => mapping(uint => bytes)) internal resolverAddresses;\\n\\n // events\\n\\n event AddrChanged(\\n bytes32 indexed node,\\n address addr\\n );\\n\\n event AddressChanged(\\n bytes32 indexed node,\\n uint coinType,\\n bytes newAddress\\n );\\n\\n // external functions\\n\\n function setAddr(\\n bytes32 node,\\n address addr_\\n )\\n external\\n onlyNodeOwner(node)\\n {\\n _setAddr(node, addr_);\\n }\\n\\n function setAddr(\\n bytes32 node,\\n uint coinType,\\n bytes memory addr_\\n )\\n external\\n onlyNodeOwner(node)\\n {\\n _setAddr(node, coinType, addr_);\\n }\\n\\n // external functions (views)\\n\\n function addr(\\n bytes32 node\\n )\\n external\\n view\\n returns (address)\\n {\\n return _addr(node);\\n }\\n\\n function addr(\\n bytes32 node,\\n uint coinType\\n )\\n external\\n view\\n returns (bytes memory)\\n {\\n return resolverAddresses[node][coinType];\\n }\\n\\n // internal functions\\n\\n function _setAddr(\\n bytes32 node,\\n address addr_\\n )\\n internal\\n {\\n _setAddr(node, COIN_TYPE_ETH, _addressToBytes(addr_));\\n }\\n\\n function _setAddr(\\n bytes32 node,\\n uint coinType,\\n bytes memory addr_\\n )\\n internal\\n {\\n emit AddressChanged(node, coinType, addr_);\\n\\n if(coinType == COIN_TYPE_ETH) {\\n emit AddrChanged(node, _bytesToAddress(addr_));\\n }\\n\\n resolverAddresses[node][coinType] = addr_;\\n }\\n\\n // internal functions (views)\\n\\n function _addr(\\n bytes32 node\\n )\\n internal\\n view\\n returns (address)\\n {\\n address result;\\n\\n bytes memory addr_ = resolverAddresses[node][COIN_TYPE_ETH];\\n\\n if (addr_.length > 0) {\\n result = _bytesToAddress(addr_);\\n }\\n\\n return result;\\n }\\n\\n // private function (pure)\\n\\n function _bytesToAddress(\\n bytes memory data\\n )\\n private\\n pure\\n returns(address payable)\\n {\\n address payable result;\\n\\n require(data.length == 20);\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n result := div(mload(add(data, 32)), exp(256, 12))\\n }\\n\\n return result;\\n }\\n\\n function _addressToBytes(\\n address addr_\\n )\\n private\\n pure\\n returns(bytes memory)\\n {\\n bytes memory result = new bytes(20);\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n mstore(add(result, 32), mul(addr_, exp(256, 12)))\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0xd2f0c5ed5f5058755512c0916496da6bcf4cf18a0026ee8d20b4306656ce5142\",\"license\":\"MIT\"},\"src/ens/resolvers/ENSNameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\nimport \\\"./ENSAbstractResolver.sol\\\";\\n\\n\\n/**\\n * @title ENS abstract name resolver\\n *\\n * @dev Base on https://github.com/ensdomains/resolvers/blob/f7d62ab04bfe1692a4344f6f1d31ff81315a98c3/contracts/profiles/NameResolver.sol\\n */\\nabstract contract ENSNameResolver is ENSAbstractResolver {\\n bytes4 internal constant INTERFACE_NAME_ID = bytes4(keccak256(abi.encodePacked(\\\"name(bytes32)\\\")));\\n\\n mapping(bytes32 => string) internal resolverNames;\\n\\n // events\\n\\n event NameChanged(\\n bytes32 indexed node,\\n string name\\n );\\n\\n // external functions\\n\\n function setName(\\n bytes32 node,\\n string calldata name\\n )\\n external\\n onlyNodeOwner(node)\\n {\\n resolverNames[node] = name;\\n\\n emit NameChanged(node, name);\\n }\\n\\n // external functions (views)\\n\\n function name(\\n bytes32 node\\n )\\n external\\n view\\n returns (string memory)\\n {\\n return resolverNames[node];\\n }\\n}\\n\",\"keccak256\":\"0x1d2d4b21f59225fbefe0e5aaff87aff8f11afe5281745934d595e15770557ead\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e74806100606000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806338bc01b51461005c578063392e53cd1461008c5780637b103999146100aa578063c4d66de8146100c8578063dc6008e2146100e4575b600080fd5b610076600480360381019061007191906108a6565b610114565b6040516100839190610b55565b60405180910390f35b6100946101ec565b6040516100a19190610b99565b60405180910390f35b6100b2610242565b6040516100bf9190610bcf565b60405180910390f35b6100e260048036038101906100dd91906108e7565b610268565b005b6100fe60048036038101906100f991906108a6565b6103b2565b60405161010b9190610b77565b60405180910390f35b606060008251905060608167ffffffffffffffff8111801561013557600080fd5b506040519080825280602002602001820160405280156101645781602001602082028036833780820191505090505b50905060005b828110156101e15761018e85828151811061018157fe5b6020026020010151610460565b82828151811061019a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808060010191505061016a565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146102f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ed90610bea565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e6326040516103a79190610b3a565b60405180910390a150565b606060008251905060608167ffffffffffffffff811180156103d357600080fd5b5060405190808252806020026020018201604052801561040757816020015b60608152602001906001900390816103f25790505b50905060005b828110156104555761043185828151811061042457fe5b60200260200101516105e1565b82828151811061043d57fe5b6020026020010181905250808060010191505061040d565b508092505050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016104c09190610bb4565b60206040518083038186803b1580156104d857600080fd5b505afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610510919061087d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105d7578073ffffffffffffffffffffffffffffffffffffffff16633b3b57de856040518263ffffffff1660e01b815260040161057f9190610bb4565b60206040518083038186803b15801561059757600080fd5b505afa9250505080156105c857506040513d601f19601f820116820180604052508101906105c5919061087d565b60015b6105d1576105d6565b809250505b5b8192505050919050565b6060806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016106419190610bb4565b60206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610691919061087d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461075d578073ffffffffffffffffffffffffffffffffffffffff1663691f3431856040518263ffffffff1660e01b81526004016107009190610bb4565b60006040518083038186803b15801561071857600080fd5b505afa92505050801561074e57506040513d6000823e3d601f19601f8201168201806040525081019061074b9190610910565b60015b6107575761075c565b809250505b5b8192505050919050565b60008151905061077681610e22565b92915050565b600082601f83011261078d57600080fd5b81356107a061079b82610c37565b610c0a565b915081818352602084019350602081019050838560208402820111156107c557600080fd5b60005b838110156107f557816107db88826107ff565b8452602084019350602083019250506001810190506107c8565b5050505092915050565b60008135905061080e81610e39565b92915050565b60008135905061082381610e50565b92915050565b600082601f83011261083a57600080fd5b815161084d61084882610c5f565b610c0a565b9150808252602083016020830185838301111561086957600080fd5b610874838284610dde565b50505092915050565b60006020828403121561088f57600080fd5b600061089d84828501610767565b91505092915050565b6000602082840312156108b857600080fd5b600082013567ffffffffffffffff8111156108d257600080fd5b6108de8482850161077c565b91505092915050565b6000602082840312156108f957600080fd5b600061090784828501610814565b91505092915050565b60006020828403121561092257600080fd5b600082015167ffffffffffffffff81111561093c57600080fd5b61094884828501610829565b91505092915050565b600061095d838361098c565b60208301905092915050565b60006109758383610a9b565b905092915050565b61098681610d84565b82525050565b61099581610d2a565b82525050565b60006109a682610cab565b6109b08185610ce6565b93506109bb83610c8b565b8060005b838110156109ec5781516109d38882610951565b97506109de83610ccc565b9250506001810190506109bf565b5085935050505092915050565b6000610a0482610cb6565b610a0e8185610cf7565b935083602082028501610a2085610c9b565b8060005b85811015610a5c5784840389528151610a3d8582610969565b9450610a4883610cd9565b925060208a01995050600181019050610a24565b50829750879550505050505092915050565b610a7781610d3c565b82525050565b610a8681610d48565b82525050565b610a9581610d96565b82525050565b6000610aa682610cc1565b610ab08185610d08565b9350610ac0818560208601610dde565b610ac981610e11565b840191505092915050565b6000610ae1602f83610d19565b91507f496e697469616c697a61626c653a2074782e6f726967696e206973206e6f742060008301527f74686520696e697469616c697a657200000000000000000000000000000000006020830152604082019050919050565b6000602082019050610b4f600083018461097d565b92915050565b60006020820190508181036000830152610b6f818461099b565b905092915050565b60006020820190508181036000830152610b9181846109f9565b905092915050565b6000602082019050610bae6000830184610a6e565b92915050565b6000602082019050610bc96000830184610a7d565b92915050565b6000602082019050610be46000830184610a8c565b92915050565b60006020820190508181036000830152610c0381610ad4565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610c2d57600080fd5b8060405250919050565b600067ffffffffffffffff821115610c4e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c7657600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610d3582610d64565b9050919050565b60008115159050919050565b6000819050919050565b6000610d5d82610d2a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d8f82610dba565b9050919050565b6000610da182610da8565b9050919050565b6000610db382610d64565b9050919050565b6000610dc582610dcc565b9050919050565b6000610dd782610d64565b9050919050565b60005b83811015610dfc578082015181840152602081019050610de1565b83811115610e0b576000848401525b50505050565b6000601f19601f8301169050919050565b610e2b81610d2a565b8114610e3657600080fd5b50565b610e4281610d48565b8114610e4d57600080fd5b50565b610e5981610d52565b8114610e6457600080fd5b5056fea164736f6c634300060c000a", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806338bc01b51461005c578063392e53cd1461008c5780637b103999146100aa578063c4d66de8146100c8578063dc6008e2146100e4575b600080fd5b610076600480360381019061007191906108a6565b610114565b6040516100839190610b55565b60405180910390f35b6100946101ec565b6040516100a19190610b99565b60405180910390f35b6100b2610242565b6040516100bf9190610bcf565b60405180910390f35b6100e260048036038101906100dd91906108e7565b610268565b005b6100fe60048036038101906100f991906108a6565b6103b2565b60405161010b9190610b77565b60405180910390f35b606060008251905060608167ffffffffffffffff8111801561013557600080fd5b506040519080825280602002602001820160405280156101645781602001602082028036833780820191505090505b50905060005b828110156101e15761018e85828151811061018157fe5b6020026020010151610460565b82828151811061019a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808060010191505061016a565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146102f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ed90610bea565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e6326040516103a79190610b3a565b60405180910390a150565b606060008251905060608167ffffffffffffffff811180156103d357600080fd5b5060405190808252806020026020018201604052801561040757816020015b60608152602001906001900390816103f25790505b50905060005b828110156104555761043185828151811061042457fe5b60200260200101516105e1565b82828151811061043d57fe5b6020026020010181905250808060010191505061040d565b508092505050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016104c09190610bb4565b60206040518083038186803b1580156104d857600080fd5b505afa1580156104ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610510919061087d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105d7578073ffffffffffffffffffffffffffffffffffffffff16633b3b57de856040518263ffffffff1660e01b815260040161057f9190610bb4565b60206040518083038186803b15801561059757600080fd5b505afa9250505080156105c857506040513d601f19601f820116820180604052508101906105c5919061087d565b60015b6105d1576105d6565b809250505b5b8192505050919050565b6060806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016106419190610bb4565b60206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610691919061087d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461075d578073ffffffffffffffffffffffffffffffffffffffff1663691f3431856040518263ffffffff1660e01b81526004016107009190610bb4565b60006040518083038186803b15801561071857600080fd5b505afa92505050801561074e57506040513d6000823e3d601f19601f8201168201806040525081019061074b9190610910565b60015b6107575761075c565b809250505b5b8192505050919050565b60008151905061077681610e22565b92915050565b600082601f83011261078d57600080fd5b81356107a061079b82610c37565b610c0a565b915081818352602084019350602081019050838560208402820111156107c557600080fd5b60005b838110156107f557816107db88826107ff565b8452602084019350602083019250506001810190506107c8565b5050505092915050565b60008135905061080e81610e39565b92915050565b60008135905061082381610e50565b92915050565b600082601f83011261083a57600080fd5b815161084d61084882610c5f565b610c0a565b9150808252602083016020830185838301111561086957600080fd5b610874838284610dde565b50505092915050565b60006020828403121561088f57600080fd5b600061089d84828501610767565b91505092915050565b6000602082840312156108b857600080fd5b600082013567ffffffffffffffff8111156108d257600080fd5b6108de8482850161077c565b91505092915050565b6000602082840312156108f957600080fd5b600061090784828501610814565b91505092915050565b60006020828403121561092257600080fd5b600082015167ffffffffffffffff81111561093c57600080fd5b61094884828501610829565b91505092915050565b600061095d838361098c565b60208301905092915050565b60006109758383610a9b565b905092915050565b61098681610d84565b82525050565b61099581610d2a565b82525050565b60006109a682610cab565b6109b08185610ce6565b93506109bb83610c8b565b8060005b838110156109ec5781516109d38882610951565b97506109de83610ccc565b9250506001810190506109bf565b5085935050505092915050565b6000610a0482610cb6565b610a0e8185610cf7565b935083602082028501610a2085610c9b565b8060005b85811015610a5c5784840389528151610a3d8582610969565b9450610a4883610cd9565b925060208a01995050600181019050610a24565b50829750879550505050505092915050565b610a7781610d3c565b82525050565b610a8681610d48565b82525050565b610a9581610d96565b82525050565b6000610aa682610cc1565b610ab08185610d08565b9350610ac0818560208601610dde565b610ac981610e11565b840191505092915050565b6000610ae1602f83610d19565b91507f496e697469616c697a61626c653a2074782e6f726967696e206973206e6f742060008301527f74686520696e697469616c697a657200000000000000000000000000000000006020830152604082019050919050565b6000602082019050610b4f600083018461097d565b92915050565b60006020820190508181036000830152610b6f818461099b565b905092915050565b60006020820190508181036000830152610b9181846109f9565b905092915050565b6000602082019050610bae6000830184610a6e565b92915050565b6000602082019050610bc96000830184610a7d565b92915050565b6000602082019050610be46000830184610a8c565b92915050565b60006020820190508181036000830152610c0381610ad4565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610c2d57600080fd5b8060405250919050565b600067ffffffffffffffff821115610c4e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c7657600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610d3582610d64565b9050919050565b60008115159050919050565b6000819050919050565b6000610d5d82610d2a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d8f82610dba565b9050919050565b6000610da182610da8565b9050919050565b6000610db382610d64565b9050919050565b6000610dc582610dcc565b9050919050565b6000610dd782610d64565b9050919050565b60005b83811015610dfc578082015181840152602081019050610de1565b83811115610e0b576000848401525b50505050565b6000601f19601f8301169050919050565b610e2b81610d2a565b8114610e3657600080fd5b50565b610e4281610d48565b8114610e4d57600080fd5b50565b610e5981610d52565b8114610e6457600080fd5b5056fea164736f6c634300060c000a", "devdoc": { "author": "Stanisław Głogowski <stan@pillarproject.io>", "kind": "dev", "methods": { "constructor": { "details": "Public constructor" }, "getAddresses(bytes32[])": { "params": { "nodes": "array of nodes" }, "returns": { "_0": "nodes addresses" } }, "getNames(bytes32[])": { "params": { "nodes": "array of nodes" }, "returns": { "_0": "nodes names" } }, "initialize(address)": { "params": { "registry_": "ENS registry address" } }, "isInitialized()": { "returns": { "_0": "true when contract is initialized" } } }, "title": "ENS helper", "version": 1 }, "userdoc": { "kind": "user", "methods": { "getAddresses(bytes32[])": { "notice": "Gets nodes addresses" }, "getNames(bytes32[])": { "notice": "Gets nodes names" }, "initialize(address)": { "notice": "Initializes `ENSLookupHelper` contract" }, "isInitialized()": { "notice": "Check if contract is initialized" } }, "version": 1 }, "storageLayout": { "storage": [ { "astId": 1871, "contract": "src/ens/ENSHelper.sol:ENSHelper", "label": "initializer", "offset": 0, "slot": "0", "type": "t_address" }, { "astId": 2929, "contract": "src/ens/ENSHelper.sol:ENSHelper", "label": "registry", "offset": 0, "slot": "1", "type": "t_contract(ENSRegistry)3564" } ], "types": { "t_address": { "encoding": "inplace", "label": "address", "numberOfBytes": "20" }, "t_contract(ENSRegistry)3564": { "encoding": "inplace", "label": "contract ENSRegistry", "numberOfBytes": "20" } } } }