Address: 0x41f6B3bA30B927d980Edb2B965C2c00dF181Be21
Balance (XRP): 0 XRP
Bytecode: 0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80635b0fc9c311610081578063cf4088231161005b578063cf40882314610204578063e985e9c514610217578063f79fe5381461026357600080fd5b80635b0fc9c3146101cb5780635ef2c7f0146101de578063a22cb465146101f157600080fd5b806314ab9038116100b257806314ab90381461015657806316a25cbd1461016b5780631896f70a146101b857600080fd5b80630178b8bf146100d957806302571be31461012257806306ab592314610135575b600080fd5b6101056100e7366004610832565b6000908152602081905260409020600101546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b610105610130366004610832565b61028e565b610148610143366004610867565b6102bc565b604051908152602001610119565b6101696101643660046108b4565b6103bc565b005b61019f610179366004610832565b600090815260208190526040902060010154600160a01b900467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610119565b6101696101c63660046108e0565b6104a3565b6101696101d93660046108e0565b610575565b6101696101ec366004610903565b610641565b6101696101ff36600461095a565b610663565b610169610212366004610996565b6106cf565b6102536102253660046109e3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6040519015158152602001610119565b610253610271366004610832565b6000908152602081905260409020546001600160a01b0316151590565b6000818152602081905260408120546001600160a01b03163081036102b65750600092915050565b92915050565b60008381526020819052604081205484906001600160a01b03163381148061030757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61031057600080fd5b604080516020810188905290810186905260009060600160408051601f1981840301815291815281516020928301206000818152928390529120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905590506040516001600160a01b0386168152869088907fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e829060200160405180910390a39695505050505050565b60008281526020819052604090205482906001600160a01b03163381148061040757506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b61041057600080fd5b60405167ffffffffffffffff8416815284907f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa689060200160405180910390a25050600091825260208290526040909120600101805467ffffffffffffffff909216600160a01b027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60008281526020819052604090205482906001600160a01b0316338114806104ee57506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6104f757600080fd5b6040516001600160a01b038416815284907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a09060200160405180910390a25050600091825260208290526040909120600101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055565b60008281526020819052604090205482906001600160a01b0316338114806105c057506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6105c957600080fd5b6000848152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790556040516001600160a01b038416815284907fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d2669060200160405180910390a250505050565b600061064e8686866102bc565b905061065b8184846106ea565b505050505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6106d98484610575565b6106e48483836106ea565b50505050565b6000838152602081905260409020600101546001600160a01b0383811691161461077d5760008381526020818152604091829020600101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038616908117909155915191825284917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0910160405180910390a25b60008381526020819052604090206001015467ffffffffffffffff828116600160a01b909204161461082d576000838152602081815260409182902060010180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff861690810291909117909155915191825284917f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68910160405180910390a25b505050565b60006020828403121561084457600080fd5b5035919050565b80356001600160a01b038116811461086257600080fd5b919050565b60008060006060848603121561087c57600080fd5b83359250602084013591506108936040850161084b565b90509250925092565b803567ffffffffffffffff8116811461086257600080fd5b600080604083850312156108c757600080fd5b823591506108d76020840161089c565b90509250929050565b600080604083850312156108f357600080fd5b823591506108d76020840161084b565b600080600080600060a0868803121561091b57600080fd5b85359450602086013593506109326040870161084b565b92506109406060870161084b565b915061094e6080870161089c565b90509295509295909350565b6000806040838503121561096d57600080fd5b6109768361084b565b91506020830135801515811461098b57600080fd5b809150509250929050565b600080600080608085870312156109ac57600080fd5b843593506109bc6020860161084b565b92506109ca6040860161084b565b91506109d86060860161089c565b905092959194509250565b600080604083850312156109f657600080fd5b6109ff8361084b565b91506108d76020840161084b56fea264697066735822122077b2e963ccd038f34ccd990487d962cebf8be244a9dcab9c3af4099662a96cbc64736f6c63430008110033
ENS.sol
pragma solidity >=0.8.4; interface ENS { // Logged when the owner of a node assigns a new owner to a subnode. event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); // Logged when the owner of a node transfers ownership to a new account. event Transfer(bytes32 indexed node, address owner); // Logged when the resolver for a node changes. event NewResolver(bytes32 indexed node, address resolver); // Logged when the TTL of a node changes event NewTTL(bytes32 indexed node, uint64 ttl); // Logged when an operator is added or removed. event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); function setRecord( bytes32 node, address owner, address resolver, uint64 ttl ) external; function setSubnodeRecord( bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl ) external; function setSubnodeOwner( bytes32 node, bytes32 label, address owner ) external returns (bytes32); function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function setApprovalForAll(address operator, bool approved) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); function recordExists(bytes32 node) external view returns (bool); function isApprovedForAll( address owner, address operator ) external view returns (bool); }
ENSRegistry.sol
pragma solidity >=0.8.4; import "./ENS.sol"; /** * The ENS registry contract. */ contract ENSRegistry is ENS { struct Record { address owner; address resolver; uint64 ttl; } mapping(bytes32 => Record) records; mapping(address => mapping(address => bool)) operators; // Permits modifications only by the owner of the specified node. modifier authorised(bytes32 node) { address owner = records[node].owner; require(owner == msg.sender || operators[owner][msg.sender]); _; } /** * @dev Constructs a new ENS registry. */ constructor() public { records[0x0].owner = msg.sender; } /** * @dev Sets the record for a node. * @param node The node to update. * @param owner The address of the new owner. * @param resolver The address of the resolver. * @param ttl The TTL in seconds. */ function setRecord( bytes32 node, address owner, address resolver, uint64 ttl ) external virtual override { setOwner(node, owner); _setResolverAndTTL(node, resolver, ttl); } /** * @dev Sets the record for a subnode. * @param node The parent node. * @param label The hash of the label specifying the subnode. * @param owner The address of the new owner. * @param resolver The address of the resolver. * @param ttl The TTL in seconds. */ function setSubnodeRecord( bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl ) external virtual override { bytes32 subnode = setSubnodeOwner(node, label, owner); _setResolverAndTTL(subnode, resolver, ttl); } /** * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node. * @param node The node to transfer ownership of. * @param owner The address of the new owner. */ function setOwner( bytes32 node, address owner ) public virtual override authorised(node) { _setOwner(node, owner); emit Transfer(node, owner); } /** * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node. * @param node The parent node. * @param label The hash of the label specifying the subnode. * @param owner The address of the new owner. */ function setSubnodeOwner( bytes32 node, bytes32 label, address owner ) public virtual override authorised(node) returns (bytes32) { bytes32 subnode = keccak256(abi.encodePacked(node, label)); _setOwner(subnode, owner); emit NewOwner(node, label, owner); return subnode; } /** * @dev Sets the resolver address for the specified node. * @param node The node to update. * @param resolver The address of the resolver. */ function setResolver( bytes32 node, address resolver ) public virtual override authorised(node) { emit NewResolver(node, resolver); records[node].resolver = resolver; } /** * @dev Sets the TTL for the specified node. * @param node The node to update. * @param ttl The TTL in seconds. */ function setTTL( bytes32 node, uint64 ttl ) public virtual override authorised(node) { emit NewTTL(node, ttl); records[node].ttl = ttl; } /** * @dev Enable or disable approval for a third party ("operator") to manage * all of `msg.sender`'s ENS records. Emits the ApprovalForAll event. * @param operator Address to add to the set of authorized operators. * @param approved True if the operator is approved, false to revoke approval. */ function setApprovalForAll( address operator, bool approved ) external virtual override { operators[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev Returns the address that owns the specified node. * @param node The specified node. * @return address of the owner. */ function owner( bytes32 node ) public view virtual override returns (address) { address addr = records[node].owner; if (addr == address(this)) { return address(0x0); } return addr; } /** * @dev Returns the address of the resolver for the specified node. * @param node The specified node. * @return address of the resolver. */ function resolver( bytes32 node ) public view virtual override returns (address) { return records[node].resolver; } /** * @dev Returns the TTL of a node, and any records associated with it. * @param node The specified node. * @return ttl of the node. */ function ttl(bytes32 node) public view virtual override returns (uint64) { return records[node].ttl; } /** * @dev Returns whether a record has been imported to the registry. * @param node The specified node. * @return Bool if record exists */ function recordExists( bytes32 node ) public view virtual override returns (bool) { return records[node].owner != address(0x0); } /** * @dev Query if an address is an authorized operator for another address. * @param owner The address that owns the records. * @param operator The address that acts on behalf of the owner. * @return True if `operator` is an approved operator for `owner`, false otherwise. */ function isApprovedForAll( address owner, address operator ) external view virtual override returns (bool) { return operators[owner][operator]; } function _setOwner(bytes32 node, address owner) internal virtual { records[node].owner = owner; } function _setResolverAndTTL( bytes32 node, address resolver, uint64 ttl ) internal { if (resolver != records[node].resolver) { records[node].resolver = resolver; emit NewResolver(node, resolver); } if (ttl != records[node].ttl) { records[node].ttl = ttl; emit NewTTL(node, ttl); } } }
Gas Token: