@etherspot/contracts
Version:
Etherspot Solidity contracts
274 lines • 37.6 kB
JSON
{
"address": "0x523C92966e9d2067ba547f59D51E907c20FD8761",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "initializer",
"type": "address"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [],
"name": "ADDR_REVERSE_NODE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "claim",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "resolver_",
"type": "address"
}
],
"name": "claimWithResolver",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract ENSRegistry",
"name": "registry_",
"type": "address"
},
{
"internalType": "contract ENSNameResolver",
"name": "resolver_",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isInitialized",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr_",
"type": "address"
}
],
"name": "node",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract ENSRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "resolver",
"outputs": [
{
"internalType": "contract ENSNameResolver",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
}
],
"name": "setName",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0xd1a6f3c510f7618dd67c1be0fc334c67166c62322971fdbc47ef2dfeab556f2f",
"receipt": {
"to": "0x4e59b44847b379578588920cA78FbF26c0B4956C",
"from": "0x53fE9288897e254698175740aa359E19E26c10af",
"contractAddress": null,
"transactionIndex": 9,
"gasUsed": "848643",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0x3136f53a9ea3a5b6544220c69a00aa1d892fe4636271492f4beb3bff079321f2",
"transactionHash": "0xd1a6f3c510f7618dd67c1be0fc334c67166c62322971fdbc47ef2dfeab556f2f",
"logs": [],
"blockNumber": 4451106,
"cumulativeGasUsed": "2464787",
"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\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver_\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ENSRegistry\",\"name\":\"registry_\",\"type\":\"address\"},{\"internalType\":\"contract ENSNameResolver\",\"name\":\"resolver_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract ENSRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolver\",\"outputs\":[{\"internalType\":\"contract ENSNameResolver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base on https://github.com/ensdomains/ens/blob/ff0f41747c05f1598973b0fe7ad0d9e09565dfcd/contracts/ReverseRegistrar.sol\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Public constructor\"},\"initialize(address,address)\":{\"params\":{\"registry_\":\"ENS registry address\",\"resolver_\":\"ENS name resolver address\"}},\"isInitialized()\":{\"returns\":{\"_0\":\"true when contract is initialized\"}}},\"title\":\"ENS reverse registrar\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address)\":{\"notice\":\"Initializes `ENSReverseRegistrar` contract\"},\"isInitialized()\":{\"notice\":\"Check if contract is initialized\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ens/ENSReverseRegistrar.sol\":\"ENSReverseRegistrar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/common/libs/AddressLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\n/**\\n * @title Address library\\n */\\nlibrary AddressLib {\\n /**\\n * @notice Converts address into sha3 hash\\n * @param self address\\n * @return sha3 hash\\n */\\n function toSha3Hash(\\n address self\\n )\\n internal\\n pure\\n returns (bytes32)\\n {\\n bytes32 result;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(i, byte(and(self, 0xf), lookup))\\n self := div(self, 0x10)\\n i := sub(i, 1)\\n mstore8(i, byte(and(self, 0xf), lookup))\\n self := div(self, 0x10)\\n }\\n\\n result := keccak256(0, 40)\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0xe54172c033f0a3e59a8ec5ae72aeac02a35b4341331e2698baeb31fa5e543f5f\",\"license\":\"MIT\"},\"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/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/ENSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.6.12;\\n\\nimport \\\"../common/libs/AddressLib.sol\\\";\\nimport \\\"../common/lifecycle/Initializable.sol\\\";\\nimport \\\"./resolvers/ENSNameResolver.sol\\\";\\nimport \\\"./ENSRegistry.sol\\\";\\n\\n/**\\n * @title ENS reverse registrar\\n *\\n * @dev Base on https://github.com/ensdomains/ens/blob/ff0f41747c05f1598973b0fe7ad0d9e09565dfcd/contracts/ReverseRegistrar.sol\\n */\\ncontract ENSReverseRegistrar is Initializable {\\n using AddressLib for address;\\n\\n // namehash('addr.reverse')\\n bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n ENSRegistry public registry;\\n ENSNameResolver public resolver;\\n\\n /**\\n * @dev Public constructor\\n */\\n constructor() public Initializable() {}\\n\\n // external functions\\n\\n /**\\n * @notice Initializes `ENSReverseRegistrar` contract\\n * @param registry_ ENS registry address\\n * @param resolver_ ENS name resolver address\\n */\\n function initialize(\\n ENSRegistry registry_,\\n ENSNameResolver resolver_\\n )\\n external\\n onlyInitializer\\n {\\n registry = registry_;\\n resolver = resolver_;\\n }\\n\\n // external functions\\n\\n function claim(\\n address owner\\n )\\n public\\n returns (bytes32)\\n {\\n return _claimWithResolver(owner, address(0));\\n }\\n\\n function claimWithResolver(\\n address owner,\\n address resolver_\\n )\\n public\\n returns (bytes32)\\n {\\n return _claimWithResolver(owner, resolver_);\\n }\\n\\n function setName(\\n string memory name\\n )\\n public\\n returns (bytes32)\\n {\\n bytes32 node = _claimWithResolver(address(this), address(resolver));\\n\\n resolver.setName(node, name);\\n\\n return node;\\n }\\n\\n // external functions (pure)\\n\\n function node(\\n address addr_\\n )\\n external\\n pure\\n returns (bytes32)\\n {\\n return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, addr_.toSha3Hash()));\\n }\\n\\n // private functions\\n\\n function _claimWithResolver(\\n address owner,\\n address resolver_\\n )\\n private\\n returns (bytes32)\\n {\\n bytes32 label = address(msg.sender).toSha3Hash();\\n bytes32 node_ = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));\\n address currentOwner = registry.owner(node_);\\n\\n if (resolver_ != address(0x0) && resolver_ != registry.resolver(node_)) {\\n if (currentOwner != address(this)) {\\n registry.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));\\n currentOwner = address(this);\\n }\\n\\n registry.setResolver(node_, resolver_);\\n }\\n\\n // Update the owner if required\\n if (currentOwner != owner) {\\n registry.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);\\n }\\n\\n return node_;\\n }\\n}\\n\",\"keccak256\":\"0xcedc0ece74976c6a3d22fc615baa0cb171e510ac53688a803211606c438dfdf2\",\"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/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": "0x608060405234801561001057600080fd5b50326000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610df8806100606000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc955146101bc5780637b103999146102205780637cf8a2eb14610254578063bffbe61c14610272578063c47f0027146102ca57610093565b806304f3bcec146100985780630f5a5466146100cc5780631e83409a14610144578063392e53cd1461019c575b600080fd5b6100a0610399565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103bf565b6040518082815260200191505060405180910390f35b6101866004803603602081101561015a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103d3565b6040518082815260200191505060405180910390f35b6101a46103e7565b60405180821515815260200191505060405180910390f35b61021e600480360360408110156101d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061043d565b005b6102286105f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61061b565b6040518082815260200191505060405180910390f35b6102b46004803603602081101561028857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610642565b6040518082815260200191505060405180910390f35b610383600480360360208110156102e057600080fd5b81019080803590602001906401000000008111156102fd57600080fd5b82018360208201111561030f57600080fd5b8035906020019184600183028401116401000000008311171561033157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506106bb565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006103cb83836107ef565b905092915050565b60006103e08260006107ef565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180610dbd602f913960400191505060405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e632604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6106878373ffffffffffffffffffffffffffffffffffffffff16610d4d565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000806106ea30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166107ef565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610781578082015181840152602081019050610766565b50505050905090810190601f1680156107ae5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b5050505080915050919050565b6000806108113373ffffffffffffffffffffffffffffffffffffffff16610d4d565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b8260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610a315750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109c657600080fd5b505afa1580156109da573d6000803e3d6000fd5b505050506040513d60208110156109f057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610c13573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b6757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b505050506040513d6020811015610b5157600080fd5b8101908080519060200190929190505050503090505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bfa57600080fd5b505af1158015610c0e573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610d0457600080fd5b505af1158015610d18573d6000803e3d6000fd5b505050506040513d6020811015610d2e57600080fd5b8101908080519060200190929190505050505b81935050505092915050565b6000807f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610daa5760018103905081600f86161a815360108504945060018103905081600f86161a8153601085049450610d74565b5060286000209150508091505091905056fe496e697469616c697a61626c653a2074782e6f726967696e206973206e6f742074686520696e697469616c697a6572a164736f6c634300060c000a",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc955146101bc5780637b103999146102205780637cf8a2eb14610254578063bffbe61c14610272578063c47f0027146102ca57610093565b806304f3bcec146100985780630f5a5466146100cc5780631e83409a14610144578063392e53cd1461019c575b600080fd5b6100a0610399565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012e600480360360408110156100e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103bf565b6040518082815260200191505060405180910390f35b6101866004803603602081101561015a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103d3565b6040518082815260200191505060405180910390f35b6101a46103e7565b60405180821515815260200191505060405180910390f35b61021e600480360360408110156101d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061043d565b005b6102286105f5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61025c61061b565b6040518082815260200191505060405180910390f35b6102b46004803603602081101561028857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610642565b6040518082815260200191505060405180910390f35b610383600480360360208110156102e057600080fd5b81019080803590602001906401000000008111156102fd57600080fd5b82018360208201111561030f57600080fd5b8035906020019184600183028401116401000000008311171561033157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506106bb565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006103cb83836107ef565b905092915050565b60006103e08260006107ef565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180610dbd602f913960400191505060405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e632604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6106878373ffffffffffffffffffffffffffffffffffffffff16610d4d565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000806106ea30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166107ef565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610781578082015181840152602081019050610766565b50505050905090810190601f1680156107ae5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b5050505080915050919050565b6000806108113373ffffffffffffffffffffffffffffffffffffffff16610d4d565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b8260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610a315750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109c657600080fd5b505afa1580156109da573d6000803e3d6000fd5b505050506040513d60208110156109f057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610c13573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b6757600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b505050506040513d6020811015610b5157600080fd5b8101908080519060200190929190505050503090505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bfa57600080fd5b505af1158015610c0e573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610d0457600080fd5b505af1158015610d18573d6000803e3d6000fd5b505050506040513d6020811015610d2e57600080fd5b8101908080519060200190929190505050505b81935050505092915050565b6000807f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610daa5760018103905081600f86161a815360108504945060018103905081600f86161a8153601085049450610d74565b5060286000209150508091505091905056fe496e697469616c697a61626c653a2074782e6f726967696e206973206e6f742074686520696e697469616c697a6572a164736f6c634300060c000a",
"devdoc": {
"details": "Base on https://github.com/ensdomains/ens/blob/ff0f41747c05f1598973b0fe7ad0d9e09565dfcd/contracts/ReverseRegistrar.sol",
"kind": "dev",
"methods": {
"constructor": {
"details": "Public constructor"
},
"initialize(address,address)": {
"params": {
"registry_": "ENS registry address",
"resolver_": "ENS name resolver address"
}
},
"isInitialized()": {
"returns": {
"_0": "true when contract is initialized"
}
}
},
"title": "ENS reverse registrar",
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {
"initialize(address,address)": {
"notice": "Initializes `ENSReverseRegistrar` contract"
},
"isInitialized()": {
"notice": "Check if contract is initialized"
}
},
"version": 1
},
"storageLayout": {
"storage": [
{
"astId": 1871,
"contract": "src/ens/ENSReverseRegistrar.sol:ENSReverseRegistrar",
"label": "initializer",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 3581,
"contract": "src/ens/ENSReverseRegistrar.sol:ENSReverseRegistrar",
"label": "registry",
"offset": 0,
"slot": "1",
"type": "t_contract(ENSRegistry)3564"
},
{
"astId": 3583,
"contract": "src/ens/ENSReverseRegistrar.sol:ENSReverseRegistrar",
"label": "resolver",
"offset": 0,
"slot": "2",
"type": "t_contract(ENSNameResolver)4114"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_contract(ENSNameResolver)4114": {
"encoding": "inplace",
"label": "contract ENSNameResolver",
"numberOfBytes": "20"
},
"t_contract(ENSRegistry)3564": {
"encoding": "inplace",
"label": "contract ENSRegistry",
"numberOfBytes": "20"
}
}
}
}