Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
AddressSubnameRegistrar
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
No with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.17 <0.9.0;
import "@ensdomains/ens-contracts/registry/ENS.sol";
import {INameWrapper} from "@ensdomains/ens-contracts/wrapper/INameWrapper.sol";
bytes32 constant lookup = 0x3031323334353637383961626364656600000000000000000000000000000000;
/// @title AddressSubnameRegistrar
/// @notice Allows users to claim <their-address>.<parent>.eth subnames
/// @dev Works with both wrapped and unwrapped parent names
contract AddressSubnameRegistrar {
ENS public immutable ens;
INameWrapper public immutable nameWrapper;
bytes32 public immutable parentNode;
address public immutable defaultResolver;
event SubnameClaimed(address indexed addr, bytes32 indexed node, address owner);
error Unauthorized();
error AlreadyClaimed();
/// @param _ens The ENS registry address
/// @param _nameWrapper The NameWrapper address
/// @param _parentNode The namehash of the parent name (e.g., namehash("ethconfig.eth"))
/// @param _defaultResolver The default resolver to set for claimed subnames
constructor(ENS _ens, INameWrapper _nameWrapper, bytes32 _parentNode, address _defaultResolver) {
ens = _ens;
nameWrapper = _nameWrapper;
parentNode = _parentNode;
defaultResolver = _defaultResolver;
}
/// @notice Claim a subname for the caller's address
/// @return node The ENS node hash of the claimed subname
function claim() external returns (bytes32) {
return claimForAddr(msg.sender, msg.sender);
}
/// @notice Claim a subname for a specific address
/// @param addr The address to create the subname for
/// @param owner The owner of the new subname
/// @return node The ENS node hash of the claimed subname
function claimForAddr(address addr, address owner) public returns (bytes32) {
// Only the address owner can claim their subname
if (addr != msg.sender && !ens.isApprovedForAll(addr, msg.sender)) {
revert Unauthorized();
}
bytes32 labelHash = sha3HexAddress(addr);
bytes32 node = keccak256(abi.encodePacked(parentNode, labelHash));
// Check if already claimed
address currentOwner = ens.owner(node);
if (currentOwner != address(0)) {
// If owned by NameWrapper, check if it's actually wrapped
if (address(nameWrapper) != address(0) && currentOwner == address(nameWrapper)) {
if (nameWrapper.ownerOf(uint256(node)) != address(0)) {
revert AlreadyClaimed();
}
} else {
// Owned by someone else
revert AlreadyClaimed();
}
}
// Check if the parent is wrapped (owned by NameWrapper in registry)
address parentOwner = ens.owner(parentNode);
if (address(nameWrapper) != address(0) && parentOwner == address(nameWrapper)) {
// Parent is wrapped - use NameWrapper to create wrapped subname
_claimWrapped(addr, owner);
} else {
// Parent is unwrapped - use ENS registry directly
_claimUnwrapped(labelHash, owner);
}
emit SubnameClaimed(addr, node, owner);
return node;
}
/// @notice Get the node hash for a given address's subname
/// @param addr The address
/// @return The ENS node hash
function node(address addr) public view returns (bytes32) {
return keccak256(abi.encodePacked(parentNode, sha3HexAddress(addr)));
}
/// @notice Get the label (hex address) for a given address
/// @param addr The address
/// @return The lowercase hex string (40 characters, no 0x prefix)
function getLabel(address addr) public pure returns (string memory) {
bytes memory ret = new bytes(40);
uint160 addrVal = uint160(addr);
for (uint256 i = 40; i > 0;) {
unchecked {
i--;
ret[i] = bytes1(uint8(lookup[addrVal & 0xf]));
addrVal = addrVal >> 4;
i--;
ret[i] = bytes1(uint8(lookup[addrVal & 0xf]));
addrVal = addrVal >> 4;
}
}
return string(ret);
}
/// @notice Check if a subname for an address is available
/// @param addr The address to check
/// @return True if the subname is available
function available(address addr) public view returns (bool) {
bytes32 node_ = node(addr);
address currentOwner = ens.owner(node_);
if (currentOwner == address(0)) {
return true;
}
if (address(nameWrapper) != address(0) && currentOwner == address(nameWrapper)) {
return nameWrapper.ownerOf(uint256(node_)) == address(0);
}
return false;
}
function _claimWrapped(address addr, address owner) internal {
// Get parent expiry to set subname expiry
(,, uint64 parentExpiry) = nameWrapper.getData(uint256(parentNode));
// Create wrapped subname
// The label needs to be the actual string, not the hash
string memory labelStr = getLabel(addr);
nameWrapper.setSubnodeRecord(
parentNode,
labelStr,
owner,
defaultResolver,
0, // TTL
0, // No fuses burned - owner has full control
parentExpiry
);
}
function _claimUnwrapped(bytes32 labelHash, address owner) internal {
ens.setSubnodeRecord(parentNode, labelHash, owner, defaultResolver, 0);
}
/// @dev Compute the keccak256 hash of the lowercase hex representation of an address
function sha3HexAddress(address addr) internal pure returns (bytes32 ret) {
assembly {
for { let i := 40 } gt(i, 0) {} {
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
}
ret := keccak256(0, 40)
}
}
}//SPDX-License-Identifier: MIT
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);
}//SPDX-License-Identifier: MIT
pragma solidity ~0.8.17;
import "../registry/ENS.sol";
import "../ethregistrar/IBaseRegistrar.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "./IMetadataService.sol";
import "./INameWrapperUpgrade.sol";
uint32 constant CANNOT_UNWRAP = 1;
uint32 constant CANNOT_BURN_FUSES = 2;
uint32 constant CANNOT_TRANSFER = 4;
uint32 constant CANNOT_SET_RESOLVER = 8;
uint32 constant CANNOT_SET_TTL = 16;
uint32 constant CANNOT_CREATE_SUBDOMAIN = 32;
uint32 constant CANNOT_APPROVE = 64;
//uint16 reserved for parent controlled fuses from bit 17 to bit 32
uint32 constant PARENT_CANNOT_CONTROL = 1 << 16;
uint32 constant IS_DOT_ETH = 1 << 17;
uint32 constant CAN_EXTEND_EXPIRY = 1 << 18;
uint32 constant CAN_DO_EVERYTHING = 0;
uint32 constant PARENT_CONTROLLED_FUSES = 0xFFFF0000;
// all fuses apart from IS_DOT_ETH
uint32 constant USER_SETTABLE_FUSES = 0xFFFDFFFF;
interface INameWrapper is IERC1155 {
event NameWrapped(
bytes32 indexed node,
bytes name,
address owner,
uint32 fuses,
uint64 expiry
);
event NameUnwrapped(bytes32 indexed node, address owner);
event FusesSet(bytes32 indexed node, uint32 fuses);
event ExpiryExtended(bytes32 indexed node, uint64 expiry);
function ens() external view returns (ENS);
function registrar() external view returns (IBaseRegistrar);
function metadataService() external view returns (IMetadataService);
function names(bytes32) external view returns (bytes memory);
function name() external view returns (string memory);
function upgradeContract() external view returns (INameWrapperUpgrade);
function supportsInterface(bytes4 interfaceID) external view returns (bool);
function wrap(
bytes calldata name,
address wrappedOwner,
address resolver
) external;
function wrapETH2LD(
string calldata label,
address wrappedOwner,
uint16 ownerControlledFuses,
address resolver
) external returns (uint64 expires);
function registerAndWrapETH2LD(
string calldata label,
address wrappedOwner,
uint256 duration,
address resolver,
uint16 ownerControlledFuses
) external returns (uint256 registrarExpiry);
function renew(
uint256 labelHash,
uint256 duration
) external returns (uint256 expires);
function unwrap(bytes32 node, bytes32 label, address owner) external;
function unwrapETH2LD(
bytes32 label,
address newRegistrant,
address newController
) external;
function upgrade(bytes calldata name, bytes calldata extraData) external;
function setFuses(
bytes32 node,
uint16 ownerControlledFuses
) external returns (uint32 newFuses);
function setChildFuses(
bytes32 parentNode,
bytes32 labelhash,
uint32 fuses,
uint64 expiry
) external;
function setSubnodeRecord(
bytes32 node,
string calldata label,
address owner,
address resolver,
uint64 ttl,
uint32 fuses,
uint64 expiry
) external returns (bytes32);
function setRecord(
bytes32 node,
address owner,
address resolver,
uint64 ttl
) external;
function setSubnodeOwner(
bytes32 node,
string calldata label,
address newOwner,
uint32 fuses,
uint64 expiry
) external returns (bytes32);
function extendExpiry(
bytes32 node,
bytes32 labelhash,
uint64 expiry
) external returns (uint64);
function canModifyName(
bytes32 node,
address addr
) external view returns (bool);
function setResolver(bytes32 node, address resolver) external;
function setTTL(bytes32 node, uint64 ttl) external;
function ownerOf(uint256 id) external view returns (address owner);
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address);
function getData(
uint256 id
) external view returns (address, uint32, uint64);
function setMetadataService(IMetadataService _metadataService) external;
function uri(uint256 tokenId) external view returns (string memory);
function setUpgradeContract(INameWrapperUpgrade _upgradeAddress) external;
function allFusesBurned(
bytes32 node,
uint32 fuseMask
) external view returns (bool);
function isWrapped(bytes32) external view returns (bool);
function isWrapped(bytes32, bytes32) external view returns (bool);
}//SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "../registry/ENS.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
interface IBaseRegistrar is IERC721 {
event ControllerAdded(address indexed controller);
event ControllerRemoved(address indexed controller);
event NameMigrated(
uint256 indexed id,
address indexed owner,
uint256 expires
);
event NameRegistered(
uint256 indexed id,
address indexed owner,
uint256 expires
);
event NameRenewed(uint256 indexed id, uint256 expires);
// Authorises a controller, who can register and renew domains.
function addController(address controller) external;
// Revoke controller permission for an address.
function removeController(address controller) external;
// Set the resolver for the TLD this registrar manages.
function setResolver(address resolver) external;
// Returns the expiration timestamp of the specified label hash.
function nameExpires(uint256 id) external view returns (uint256);
// Returns true if the specified name is available for registration.
function available(uint256 id) external view returns (bool);
/// @dev Register a name.
function register(
uint256 id,
address owner,
uint256 duration
) external returns (uint256);
function renew(uint256 id, uint256 duration) external returns (uint256);
/// @dev Reclaim ownership of a name in ENS, if you own it in the registrar.
function reclaim(uint256 id, address owner) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(
address[] calldata accounts,
uint256[] calldata ids
) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}//SPDX-License-Identifier: MIT
pragma solidity ~0.8.17;
interface IMetadataService {
function uri(uint256) external view returns (string memory);
}//SPDX-License-Identifier: MIT
pragma solidity ~0.8.17;
interface INameWrapperUpgrade {
function wrapFromUpgrade(
bytes calldata name,
address wrappedOwner,
uint32 fuses,
uint64 expiry,
address approved,
bytes calldata extraData
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"remappings": [
"forge-std/=node_modules/forge-std/src/",
"@ensdomains/ens-contracts/=node_modules/@ensdomains/ens-contracts/contracts/",
"@unruggable/gateways/=node_modules/@unruggable/gateways/contracts/",
"@openzeppelin/contracts-v5/=node_modules/@openzeppelin/contracts-v5/",
"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
"clones-with-immutable-args/=node_modules/clones-with-immutable-args/",
"@ensdomains/buffer/contracts/Buffer.sol=node_modules/@ensdomains/buffer/contracts/Buffer.sol",
"hardhat/=node_modules/hardhat/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract ABI
API[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"},{"internalType":"contract INameWrapper","name":"_nameWrapper","type":"address"},{"internalType":"bytes32","name":"_parentNode","type":"bytes32"},{"internalType":"address","name":"_defaultResolver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"SubnameClaimed","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"available","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"claimForAddr","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultResolver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getLabel","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nameWrapper","outputs":[{"internalType":"contract INameWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"node","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parentNode","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100604052348015610010575f5ffd5b50604051611a10380380611a10833981810160405281019061003291906101e6565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508160c081815250508073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250505050505061024a565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61010c826100e3565b9050919050565b5f61011d82610102565b9050919050565b61012d81610113565b8114610137575f5ffd5b50565b5f8151905061014881610124565b92915050565b5f61015882610102565b9050919050565b6101688161014e565b8114610172575f5ffd5b50565b5f815190506101838161015f565b92915050565b5f819050919050565b61019b81610189565b81146101a5575f5ffd5b50565b5f815190506101b681610192565b92915050565b6101c581610102565b81146101cf575f5ffd5b50565b5f815190506101e0816101bc565b92915050565b5f5f5f5f608085870312156101fe576101fd6100df565b5b5f61020b8782880161013a565b945050602061021c87828801610175565b935050604061022d878288016101a8565b925050606061023e878288016101d2565b91505092959194509250565b60805160a05160c05160e0516116f261031e5f395f8181610c7201528181610ee60152610fd201525f818161078a01528181610ac201528181610cbb01528181610d1301528181610df901528181610ec30152610faf01525f81816102ea0152818161032a01528181610396015281816108ba015281816108fa0152818161096601528181610b5701528181610b9701528181610c9601528181610dbd0152610e8701525f81816101fb0152818161064e015281816106aa015281816107d601528181610a860152610f7301526116f25ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c80634e71d92d116100645780634e71d92d14610143578063828eab0e14610161578063a8e5fbc01461017f578063bffbe61c1461019d578063f3068a00146101cd57610091565b806310098ad51461009557806328a249b0146100c55780633f15457f146100f55780634709bf4b14610113575b5f5ffd5b6100af60048036038101906100aa91906110a1565b6101eb565b6040516100bc91906110e6565b60405180910390f35b6100df60048036038101906100da91906110a1565b610459565b6040516100ec919061116f565b60405180910390f35b6100fd61064c565b60405161010a91906111ea565b60405180910390f35b61012d60048036038101906101289190611203565b610670565b60405161013a9190611259565b60405180910390f35b61014b610c60565b6040516101589190611259565b60405180910390f35b610169610c70565b6040516101769190611281565b60405180910390f35b610187610c94565b60405161019491906112ba565b60405180910390f35b6101b760048036038101906101b291906110a1565b610cb8565b6040516101c49190611259565b60405180910390f35b6101d5610d11565b6040516101e29190611259565b60405180910390f35b5f5f6101f683610cb8565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004016102529190611259565b602060405180830381865afa15801561026d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029191906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102d157600192505050610454565b5f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415801561037857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561044e575f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e845f1c6040518263ffffffff1660e01b81526004016103ef919061132a565b602060405180830381865afa15801561040a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061042e91906112e7565b73ffffffffffffffffffffffffffffffffffffffff161492505050610454565b5f925050505b919050565b60605f602867ffffffffffffffff81111561047757610476611343565b5b6040519080825280601f01601f1916602001820160405280156104a95781602001600182028036833780820191505090505b5090505f8390505f602890505b5f811115610641578080600190039150507f30313233343536373839616263646566000000000000000000000000000000005f1b600f831673ffffffffffffffffffffffffffffffffffffffff166020811061051557610514611370565b5b1a60f81b60f81c60f81b83828151811061053257610531611370565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060048273ffffffffffffffffffffffffffffffffffffffff16901c91508080600190039150507f30313233343536373839616263646566000000000000000000000000000000005f1b600f831673ffffffffffffffffffffffffffffffffffffffff16602081106105d4576105d3611370565b5b1a60f81b60f81c60f81b8382815181106105f1576105f0611370565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060048273ffffffffffffffffffffffffffffffffffffffff16901c91506104b6565b508192505050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561074457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e985e9c584336040518363ffffffff1660e01b815260040161070392919061139d565b602060405180830381865afa15801561071e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074291906113ee565b155b1561077b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61078584610d35565b90505f7f0000000000000000000000000000000000000000000000000000000000000000826040516020016107bb929190611439565b6040516020818303038152906040528051906020012090505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b815260040161082d9190611259565b602060405180830381865afa158015610848573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086c91906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a83575f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415801561094857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610a50575f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e845f1c6040518263ffffffff1660e01b81526004016109bf919061132a565b602060405180830381865afa1580156109da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fe91906112e7565b73ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a82565b6040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166302571be37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610afd9190611259565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c91906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614158015610be557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610bf957610bf48787610dba565b610c04565b610c038487610f71565b5b828773ffffffffffffffffffffffffffffffffffffffff167f1b2af9453f54ccc027b7454c98ebdf2e7bc4b762f1a1c5dd221d1affdb9fe03e88604051610c4b9190611281565b60405180910390a38294505050505092915050565b5f610c6b3333610670565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f0000000000000000000000000000000000000000000000000000000000000000610ce383610d35565b604051602001610cf4929190611439565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60285b5f811115610dae576001810390507f3031323334353637383961626364656600000000000000000000000000000000600f84161a81536010830492506001810390507f3031323334353637383961626364656600000000000000000000000000000000600f84161a8153601083049250610d39565b5060285f209050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630178fe3f7f00000000000000000000000000000000000000000000000000000000000000005f1c6040518263ffffffff1660e01b8152600401610e36919061132a565b606060405180830381865afa158015610e51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7591906114da565b925050505f610e8384610459565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166324c1af447f000000000000000000000000000000000000000000000000000000000000000083867f00000000000000000000000000000000000000000000000000000000000000005f5f896040518863ffffffff1660e01b8152600401610f2a97969594939291906115a2565b6020604051808303815f875af1158015610f46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6a9190611640565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ef2c7f07f000000000000000000000000000000000000000000000000000000000000000084847f00000000000000000000000000000000000000000000000000000000000000005f6040518663ffffffff1660e01b815260040161101295949392919061166b565b5f604051808303815f87803b158015611029575f5ffd5b505af115801561103b573d5f5f3e3d5ffd5b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61107082611047565b9050919050565b61108081611066565b811461108a575f5ffd5b50565b5f8135905061109b81611077565b92915050565b5f602082840312156110b6576110b5611043565b5b5f6110c38482850161108d565b91505092915050565b5f8115159050919050565b6110e0816110cc565b82525050565b5f6020820190506110f95f8301846110d7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611141826110ff565b61114b8185611109565b935061115b818560208601611119565b61116481611127565b840191505092915050565b5f6020820190508181035f8301526111878184611137565b905092915050565b5f819050919050565b5f6111b26111ad6111a884611047565b61118f565b611047565b9050919050565b5f6111c382611198565b9050919050565b5f6111d4826111b9565b9050919050565b6111e4816111ca565b82525050565b5f6020820190506111fd5f8301846111db565b92915050565b5f5f6040838503121561121957611218611043565b5b5f6112268582860161108d565b92505060206112378582860161108d565b9150509250929050565b5f819050919050565b61125381611241565b82525050565b5f60208201905061126c5f83018461124a565b92915050565b61127b81611066565b82525050565b5f6020820190506112945f830184611272565b92915050565b5f6112a4826111b9565b9050919050565b6112b48161129a565b82525050565b5f6020820190506112cd5f8301846112ab565b92915050565b5f815190506112e181611077565b92915050565b5f602082840312156112fc576112fb611043565b5b5f611309848285016112d3565b91505092915050565b5f819050919050565b61132481611312565b82525050565b5f60208201905061133d5f83018461131b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506113b05f830185611272565b6113bd6020830184611272565b9392505050565b6113cd816110cc565b81146113d7575f5ffd5b50565b5f815190506113e8816113c4565b92915050565b5f6020828403121561140357611402611043565b5b5f611410848285016113da565b91505092915050565b5f819050919050565b61143361142e82611241565b611419565b82525050565b5f6114448285611422565b6020820191506114548284611422565b6020820191508190509392505050565b5f63ffffffff82169050919050565b61147c81611464565b8114611486575f5ffd5b50565b5f8151905061149781611473565b92915050565b5f67ffffffffffffffff82169050919050565b6114b98161149d565b81146114c3575f5ffd5b50565b5f815190506114d4816114b0565b92915050565b5f5f5f606084860312156114f1576114f0611043565b5b5f6114fe868287016112d3565b935050602061150f86828701611489565b9250506040611520868287016114c6565b9150509250925092565b5f819050919050565b5f61154d6115486115438461152a565b61118f565b61149d565b9050919050565b61155d81611533565b82525050565b5f61157d6115786115738461152a565b61118f565b611464565b9050919050565b61158d81611563565b82525050565b61159c8161149d565b82525050565b5f60e0820190506115b55f83018a61124a565b81810360208301526115c78189611137565b90506115d66040830188611272565b6115e36060830187611272565b6115f06080830186611554565b6115fd60a0830185611584565b61160a60c0830184611593565b98975050505050505050565b61161f81611241565b8114611629575f5ffd5b50565b5f8151905061163a81611616565b92915050565b5f6020828403121561165557611654611043565b5b5f6116628482850161162c565b91505092915050565b5f60a08201905061167e5f83018861124a565b61168b602083018761124a565b6116986040830186611272565b6116a56060830185611272565b6116b26080830184611554565b969550505050505056fea26469706673582212209ef91ade4d8caae40e0c80953a084406cfcf0f2f15d357852335eacca0e5eb1664736f6c634300081e003300000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce86a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610091575f3560e01c80634e71d92d116100645780634e71d92d14610143578063828eab0e14610161578063a8e5fbc01461017f578063bffbe61c1461019d578063f3068a00146101cd57610091565b806310098ad51461009557806328a249b0146100c55780633f15457f146100f55780634709bf4b14610113575b5f5ffd5b6100af60048036038101906100aa91906110a1565b6101eb565b6040516100bc91906110e6565b60405180910390f35b6100df60048036038101906100da91906110a1565b610459565b6040516100ec919061116f565b60405180910390f35b6100fd61064c565b60405161010a91906111ea565b60405180910390f35b61012d60048036038101906101289190611203565b610670565b60405161013a9190611259565b60405180910390f35b61014b610c60565b6040516101589190611259565b60405180910390f35b610169610c70565b6040516101769190611281565b60405180910390f35b610187610c94565b60405161019491906112ba565b60405180910390f35b6101b760048036038101906101b291906110a1565b610cb8565b6040516101c49190611259565b60405180910390f35b6101d5610d11565b6040516101e29190611259565b60405180910390f35b5f5f6101f683610cb8565b90505f7f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004016102529190611259565b602060405180830381865afa15801561026d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029191906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102d157600192505050610454565b5f73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff161415801561037857507f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561044e575f73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff16636352211e845f1c6040518263ffffffff1660e01b81526004016103ef919061132a565b602060405180830381865afa15801561040a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061042e91906112e7565b73ffffffffffffffffffffffffffffffffffffffff161492505050610454565b5f925050505b919050565b60605f602867ffffffffffffffff81111561047757610476611343565b5b6040519080825280601f01601f1916602001820160405280156104a95781602001600182028036833780820191505090505b5090505f8390505f602890505b5f811115610641578080600190039150507f30313233343536373839616263646566000000000000000000000000000000005f1b600f831673ffffffffffffffffffffffffffffffffffffffff166020811061051557610514611370565b5b1a60f81b60f81c60f81b83828151811061053257610531611370565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060048273ffffffffffffffffffffffffffffffffffffffff16901c91508080600190039150507f30313233343536373839616263646566000000000000000000000000000000005f1b600f831673ffffffffffffffffffffffffffffffffffffffff16602081106105d4576105d3611370565b5b1a60f81b60f81c60f81b8382815181106105f1576105f0611370565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060048273ffffffffffffffffffffffffffffffffffffffff16901c91506104b6565b508192505050919050565b7f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e81565b5f3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561074457507f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e73ffffffffffffffffffffffffffffffffffffffff1663e985e9c584336040518363ffffffff1660e01b815260040161070392919061139d565b602060405180830381865afa15801561071e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074291906113ee565b155b1561077b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61078584610d35565b90505f7f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e826040516020016107bb929190611439565b6040516020818303038152906040528051906020012090505f7f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e73ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b815260040161082d9190611259565b602060405180830381865afa158015610848573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086c91906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a83575f73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff161415801561094857507f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610a50575f73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff16636352211e845f1c6040518263ffffffff1660e01b81526004016109bf919061132a565b602060405180830381865afa1580156109da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fe91906112e7565b73ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a82565b6040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f7f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e73ffffffffffffffffffffffffffffffffffffffff166302571be37f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e6040518263ffffffff1660e01b8152600401610afd9190611259565b602060405180830381865afa158015610b18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3c91906112e7565b90505f73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff1614158015610be557507f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610bf957610bf48787610dba565b610c04565b610c038487610f71565b5b828773ffffffffffffffffffffffffffffffffffffffff167f1b2af9453f54ccc027b7454c98ebdf2e7bc4b762f1a1c5dd221d1affdb9fe03e88604051610c4b9190611281565b60405180910390a38294505050505092915050565b5f610c6b3333610670565b905090565b7f00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be81565b7f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce881565b5f7f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e610ce383610d35565b604051602001610cf4929190611439565b604051602081830303815290604052805190602001209050919050565b7f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e81565b5f60285b5f811115610dae576001810390507f3031323334353637383961626364656600000000000000000000000000000000600f84161a81536010830492506001810390507f3031323334353637383961626364656600000000000000000000000000000000600f84161a8153601083049250610d39565b5060285f209050919050565b5f7f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff16630178fe3f7f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e5f1c6040518263ffffffff1660e01b8152600401610e36919061132a565b606060405180830381865afa158015610e51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7591906114da565b925050505f610e8384610459565b90507f0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce873ffffffffffffffffffffffffffffffffffffffff166324c1af447f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e83867f00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be5f5f896040518863ffffffff1660e01b8152600401610f2a97969594939291906115a2565b6020604051808303815f875af1158015610f46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6a9190611640565b5050505050565b7f00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e73ffffffffffffffffffffffffffffffffffffffff16635ef2c7f07f6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e84847f00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be5f6040518663ffffffff1660e01b815260040161101295949392919061166b565b5f604051808303815f87803b158015611029575f5ffd5b505af115801561103b573d5f5f3e3d5ffd5b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61107082611047565b9050919050565b61108081611066565b811461108a575f5ffd5b50565b5f8135905061109b81611077565b92915050565b5f602082840312156110b6576110b5611043565b5b5f6110c38482850161108d565b91505092915050565b5f8115159050919050565b6110e0816110cc565b82525050565b5f6020820190506110f95f8301846110d7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611141826110ff565b61114b8185611109565b935061115b818560208601611119565b61116481611127565b840191505092915050565b5f6020820190508181035f8301526111878184611137565b905092915050565b5f819050919050565b5f6111b26111ad6111a884611047565b61118f565b611047565b9050919050565b5f6111c382611198565b9050919050565b5f6111d4826111b9565b9050919050565b6111e4816111ca565b82525050565b5f6020820190506111fd5f8301846111db565b92915050565b5f5f6040838503121561121957611218611043565b5b5f6112268582860161108d565b92505060206112378582860161108d565b9150509250929050565b5f819050919050565b61125381611241565b82525050565b5f60208201905061126c5f83018461124a565b92915050565b61127b81611066565b82525050565b5f6020820190506112945f830184611272565b92915050565b5f6112a4826111b9565b9050919050565b6112b48161129a565b82525050565b5f6020820190506112cd5f8301846112ab565b92915050565b5f815190506112e181611077565b92915050565b5f602082840312156112fc576112fb611043565b5b5f611309848285016112d3565b91505092915050565b5f819050919050565b61132481611312565b82525050565b5f60208201905061133d5f83018461131b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506113b05f830185611272565b6113bd6020830184611272565b9392505050565b6113cd816110cc565b81146113d7575f5ffd5b50565b5f815190506113e8816113c4565b92915050565b5f6020828403121561140357611402611043565b5b5f611410848285016113da565b91505092915050565b5f819050919050565b61143361142e82611241565b611419565b82525050565b5f6114448285611422565b6020820191506114548284611422565b6020820191508190509392505050565b5f63ffffffff82169050919050565b61147c81611464565b8114611486575f5ffd5b50565b5f8151905061149781611473565b92915050565b5f67ffffffffffffffff82169050919050565b6114b98161149d565b81146114c3575f5ffd5b50565b5f815190506114d4816114b0565b92915050565b5f5f5f606084860312156114f1576114f0611043565b5b5f6114fe868287016112d3565b935050602061150f86828701611489565b9250506040611520868287016114c6565b9150509250925092565b5f819050919050565b5f61154d6115486115438461152a565b61118f565b61149d565b9050919050565b61155d81611533565b82525050565b5f61157d6115786115738461152a565b61118f565b611464565b9050919050565b61158d81611563565b82525050565b61159c8161149d565b82525050565b5f60e0820190506115b55f83018a61124a565b81810360208301526115c78189611137565b90506115d66040830188611272565b6115e36060830187611272565b6115f06080830186611554565b6115fd60a0830185611584565b61160a60c0830184611593565b98975050505050505050565b61161f81611241565b8114611629575f5ffd5b50565b5f8151905061163a81611616565b92915050565b5f6020828403121561165557611654611043565b5b5f6116628482850161162c565b91505092915050565b5f60a08201905061167e5f83018861124a565b61168b602083018761124a565b6116986040830186611272565b6116a56060830185611272565b6116b26080830184611554565b969550505050505056fea26469706673582212209ef91ade4d8caae40e0c80953a084406cfcf0f2f15d357852335eacca0e5eb1664736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce86a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be
-----Decoded View---------------
Arg [0] : _ens (address): 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
Arg [1] : _nameWrapper (address): 0x0635513f179D50A207757E05759CbD106d7dFcE8
Arg [2] : _parentNode (bytes32): 0x6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e
Arg [3] : _defaultResolver (address): 0x24e05a384f0Dc65cE33B3639734E5003CcCDc1BE
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Arg [1] : 0000000000000000000000000635513f179d50a207757e05759cbd106d7dfce8
Arg [2] : 6a0bbb836c9bf46c725aa4890f1b44047d12f100ec6b9865fdbbed047666ed2e
Arg [3] : 00000000000000000000000024e05a384f0dc65ce33b3639734e5003cccdc1be
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.