Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 20 from a total of 20 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Register Domain | 16067513 | 808 days ago | IN | 0 ETH | 0.00156577 | ||||
Register Domain | 16058647 | 810 days ago | IN | 0 ETH | 0.00140381 | ||||
Register Domain | 16046079 | 811 days ago | IN | 0 ETH | 0.00149481 | ||||
Register Domain | 16045437 | 811 days ago | IN | 0 ETH | 0.00134049 | ||||
Register Domain | 16044039 | 812 days ago | IN | 0 ETH | 0.00149023 | ||||
Register Domain | 16043235 | 812 days ago | IN | 0 ETH | 0.00162284 | ||||
Register Domain | 16041976 | 812 days ago | IN | 0 ETH | 0.00131508 | ||||
Register Domain | 16041557 | 812 days ago | IN | 0 ETH | 0.00177871 | ||||
Register Domain | 16040375 | 812 days ago | IN | 0 ETH | 0.00165069 | ||||
Register Domain | 16032457 | 813 days ago | IN | 0 ETH | 0.0017065 | ||||
Register Domain | 16031182 | 813 days ago | IN | 0 ETH | 0.00184117 | ||||
Register Domain | 16030762 | 813 days ago | IN | 0 ETH | 0.00190196 | ||||
Register Domain | 16028128 | 814 days ago | IN | 0 ETH | 0.00197183 | ||||
Register Domain | 16026207 | 814 days ago | IN | 0 ETH | 0.0019615 | ||||
Register Domain | 16025522 | 814 days ago | IN | 0 ETH | 0.00200105 | ||||
Register Domain | 16025455 | 814 days ago | IN | 0 ETH | 0.002207 | ||||
Register Subdoma... | 16025160 | 814 days ago | IN | 0 ETH | 0.00512359 | ||||
Register Domain | 16025136 | 814 days ago | IN | 0 ETH | 0.00177045 | ||||
Register Subdoma... | 15988941 | 819 days ago | IN | 0 ETH | 0.00618455 | ||||
Register Domain | 15988828 | 819 days ago | IN | 0 ETH | 0.00189162 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AllowlistPolicy
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity 0.8.15; import "./Policy.sol"; import "../interfaces/ICNSController.sol"; import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; contract AllowlistPolicy is Policy, EIP712 { constructor( address _ensAddr, address _baseRegistrarAddr, address _resolverAddr, address _cnsControllerAddr, string memory _name, string memory _version ) Policy(_ensAddr, _baseRegistrarAddr, _resolverAddr, _cnsControllerAddr) EIP712(_name, _version) { require(_ensAddr != address(0), "Invalid address"); require(_baseRegistrarAddr != address(0), "Invalid address"); require(_resolverAddr != address(0), "Invalid address"); require(_cnsControllerAddr != address(0), "Invalid address"); } function registerSubdomain( string memory _subdomainLabel, bytes32 _node, bytes32 _subnode, bytes memory signature ) public { require( _verify(_hash(_node, msg.sender), signature) == cnsController.getOwner(_node), "Invalid signature" ); cnsController.registerSubdomain( _subdomainLabel, _node, _subnode, msg.sender ); } function subDomainForOwner( string memory _subdomainLabel, bytes32 _node, bytes32 _subnode ) public { require(cnsController.getOwner(_node) == msg.sender, "Not Owner"); cnsController.registerSubdomain( _subdomainLabel, _node, _subnode, msg.sender ); } function unRegisterSubdomain( string memory _subDomainLabel, bytes32 _node, bytes32 _subnode ) public { require( cnsController.isDomainOwner( cnsController.getTokenId(_node), msg.sender ) || (cnsController.getSubDomainOwner(_subnode) == msg.sender), "Not owner" ); cnsController.unRegisterSubdomain(_subDomainLabel, _node, _subnode); } function _hash(bytes32 node, address allowAddress) internal view returns (bytes32) { return _hashTypedDataV4( keccak256( abi.encode( keccak256( "Allowlist(bytes32 node,address allowAddress)" ), node, allowAddress ) ) ); } function _verify(bytes32 digest, bytes memory signature) internal pure returns (address) { return ECDSA.recover(digest, signature); } }
//SPDX-License-Identifier: Unlicense pragma solidity 0.8.15; import "../interfaces/ICNSController.sol"; import "../libs/ENSController.sol"; contract Policy is ENSController { ICNSController public cnsController; constructor( address _ensAddr, address _baseRegistrarAddr, address _resolverAddr, address _cnsControllerAddr ) ENSController(_ensAddr, _baseRegistrarAddr, _resolverAddr) { require(_ensAddr != address(0), "Invalid address"); require(_baseRegistrarAddr != address(0), "Invalid address"); require(_resolverAddr != address(0), "Invalid address"); cnsController = ICNSController(_cnsControllerAddr); } function registerDomain( string calldata _name, bytes32 _node, uint256 _tokenId ) public virtual { require( cnsController.isDomainOwner(_tokenId, msg.sender), "Already registered this Domain" ); cnsController.registerDomain(_name, _node, _tokenId, msg.sender); } function unRegisterDomain(bytes32 _node) public virtual { require( cnsController.getOwner(_node) == msg.sender, "Only owner can unregister domain" ); cnsController.unRegisterDomain(_node); } }
//SPDX-License-Identifier: Unlicense pragma solidity 0.8.15; interface ICNSController { function isRegister(bytes32 _node) external view returns (bool); function registerDomain( string calldata _name, bytes32 _node, uint256 _tokenId, address _policy ) external; function registerSubdomain( string calldata _subDomainLabel, bytes32 _node, bytes32 _subnode, address _owner ) external; function getDomain(bytes32) external view returns ( string memory, address, uint256, uint256, address ); function isDomainOwner(uint256 _tokenId, address _account) external view returns (bool); function getTokenId(bytes32 _node) external view returns (uint256); function unRegisterDomain(bytes32 _node) external; function unRegisterSubdomain( string memory _subDomainLabel, bytes32 _node, bytes32 _subnode ) external; function unRegisterSubdomainAndBurn( string memory _subDomainLabel, bytes32 _node, bytes32 _subnode ) external; function getOwner(bytes32 _node) external view returns (address); function getSubDomainOwner (bytes32 _subnode) external view returns (address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/draft-EIP712.sol) pragma solidity ^0.8.0; import "./ECDSA.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; address private immutable _CACHED_THIS; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _CACHED_THIS = address(this); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
//SPDX-License-Identifier: Unlicense pragma solidity 0.8.15; import "@ensdomains/ens-contracts/contracts/registry/ENS.sol"; import "@ensdomains/ens-contracts/contracts/resolvers/Resolver.sol"; import "../interfaces/IBaseRegistrarImplement.sol"; contract ENSController { ENS public ens; IBaseRegistrarImplement internal registrar; Resolver internal resolver; /** * Constructor. * @param ensAddr The address of the ENS registry. */ constructor( address ensAddr, address baseRegistrarAddr, address resolverAddr ) { require(address(ensAddr) != address(0), "Invalid address"); require(address(baseRegistrarAddr) != address(0), "Invalid address"); require(address(resolverAddr) != address(0), "Invalid address"); ens = ENS(ensAddr); registrar = IBaseRegistrarImplement(baseRegistrarAddr); resolver = Resolver(resolverAddr); } }
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.4; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "./profiles/IABIResolver.sol"; import "./profiles/IAddressResolver.sol"; import "./profiles/IAddrResolver.sol"; import "./profiles/IContentHashResolver.sol"; import "./profiles/IDNSRecordResolver.sol"; import "./profiles/IDNSZoneResolver.sol"; import "./profiles/IInterfaceResolver.sol"; import "./profiles/INameResolver.sol"; import "./profiles/IPubkeyResolver.sol"; import "./profiles/ITextResolver.sol"; import "./profiles/IExtendedResolver.sol"; /** * A generic resolver interface which includes all the functions including the ones deprecated */ interface Resolver is IERC165, IABIResolver, IAddressResolver, IAddrResolver, IContentHashResolver, IDNSRecordResolver, IDNSZoneResolver, IInterfaceResolver, INameResolver, IPubkeyResolver, ITextResolver, IExtendedResolver { /* Deprecated events */ event ContentChanged(bytes32 indexed node, bytes32 hash); function setABI( bytes32 node, uint256 contentType, bytes calldata data ) external; function setAddr(bytes32 node, address addr) external; function setAddr( bytes32 node, uint256 coinType, bytes calldata a ) external; function setContenthash(bytes32 node, bytes calldata hash) external; function setDnsrr(bytes32 node, bytes calldata data) external; function setName(bytes32 node, string calldata _name) external; function setPubkey( bytes32 node, bytes32 x, bytes32 y ) external; function setText( bytes32 node, string calldata key, string calldata value ) external; function setInterface( bytes32 node, bytes4 interfaceID, address implementer ) external; function multicall(bytes[] calldata data) external returns (bytes[] memory results); /* Deprecated functions */ function content(bytes32 node) external view returns (bytes32); function multihash(bytes32 node) external view returns (bytes memory); function setContent(bytes32 node, bytes32 hash) external; function setMultihash(bytes32 node, bytes calldata hash) external; }
//SPDX-License-Identifier: Unlicense pragma solidity 0.8.15; /** * @dev Interface of the Base Registrar Implementation of ENS. */ interface IBaseRegistrarImplement { function reclaim(uint256 id, address owner) external; function ownerOf(uint256 tokenId) external view returns (address owner); }
// 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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import "./IABIResolver.sol"; import "../ResolverBase.sol"; interface IABIResolver { event ABIChanged(bytes32 indexed node, uint256 indexed contentType); /** * Returns the ABI associated with an ENS node. * Defined in EIP205. * @param node The ENS node to query * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. * @return contentType The content type of the return value * @return data The ABI data */ function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; /** * Interface for the new (multicoin) addr function. */ interface IAddressResolver { event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress); function addr(bytes32 node, uint coinType) external view returns(bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; /** * Interface for the legacy (ETH-only) addr function. */ interface IAddrResolver { event AddrChanged(bytes32 indexed node, address a); /** * Returns the address associated with an ENS node. * @param node The ENS node to query. * @return The associated address. */ function addr(bytes32 node) external view returns (address payable); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IContentHashResolver { event ContenthashChanged(bytes32 indexed node, bytes hash); /** * Returns the contenthash associated with an ENS node. * @param node The ENS node to query. * @return The associated contenthash. */ function contenthash(bytes32 node) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IDNSRecordResolver { // DNSRecordChanged is emitted whenever a given node/name/resource's RRSET is updated. event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record); // DNSRecordDeleted is emitted whenever a given node/name/resource's RRSET is deleted. event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource); // DNSZoneCleared is emitted whenever a given node's zone information is cleared. event DNSZoneCleared(bytes32 indexed node); /** * Obtain a DNS record. * @param node the namehash of the node for which to fetch the record * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types * @return the DNS record in wire format if present, otherwise empty */ function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IDNSZoneResolver { // DNSZonehashChanged is emitted whenever a given node's zone hash is updated. event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash); /** * zonehash obtains the hash for the zone. * @param node The ENS node to query. * @return The associated contenthash. */ function zonehash(bytes32 node) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IInterfaceResolver { event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer); /** * Returns the address of a contract that implements the specified interface for this name. * If an implementer has not been set for this interfaceID and name, the resolver will query * the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that * contract implements EIP165 and returns `true` for the specified interfaceID, its address * will be returned. * @param node The ENS node to query. * @param interfaceID The EIP 165 interface ID to check for. * @return The address that implements this interface, or 0 if the interface is unsupported. */ function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface INameResolver { event NameChanged(bytes32 indexed node, string name); /** * Returns the name associated with an ENS node, for reverse records. * Defined in EIP181. * @param node The ENS node to query. * @return The associated name. */ function name(bytes32 node) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface IPubkeyResolver { event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); /** * Returns the SECP256k1 public key associated with an ENS node. * Defined in EIP 619. * @param node The ENS node to query * @return x The X coordinate of the curve point for the public key. * @return y The Y coordinate of the curve point for the public key. */ function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; interface ITextResolver { event TextChanged(bytes32 indexed node, string indexed indexedKey, string key); /** * Returns the text data associated with an ENS node and key. * @param node The ENS node to query. * @param key The text data key to query. * @return The associated text data. */ function text(bytes32 node, string calldata key) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IExtendedResolver { function resolve(bytes memory name, bytes memory data) external view returns (bytes memory, address); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; abstract contract ResolverBase is ERC165 { function isAuthorised(bytes32 node) internal virtual view returns(bool); modifier authorised(bytes32 node) { require(isAuthorised(node)); _; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ensAddr","type":"address"},{"internalType":"address","name":"_baseRegistrarAddr","type":"address"},{"internalType":"address","name":"_resolverAddr","type":"address"},{"internalType":"address","name":"_cnsControllerAddr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"cnsController","outputs":[{"internalType":"contract ICNSController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"bytes32","name":"_node","type":"bytes32"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"registerDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_subdomainLabel","type":"string"},{"internalType":"bytes32","name":"_node","type":"bytes32"},{"internalType":"bytes32","name":"_subnode","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"registerSubdomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_subdomainLabel","type":"string"},{"internalType":"bytes32","name":"_node","type":"bytes32"},{"internalType":"bytes32","name":"_subnode","type":"bytes32"}],"name":"subDomainForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_node","type":"bytes32"}],"name":"unRegisterDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_subDomainLabel","type":"string"},{"internalType":"bytes32","name":"_node","type":"bytes32"},{"internalType":"bytes32","name":"_subnode","type":"bytes32"}],"name":"unRegisterSubdomain","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101406040523480156200001257600080fd5b5060405162001628380380620016288339810160408190526200003591620004d8565b8181878787878383836001600160a01b038316620000895760405162461bcd60e51b815260206004820152600f60248201526000805160206200160883398151915260448201526064015b60405180910390fd5b6001600160a01b038216620000d05760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b038116620001175760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b600080546001600160a01b03199081166001600160a01b039586161790915560018054821693851693909317909255600280549092169083161790558416620001925760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b038316620001d95760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b038216620002205760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b600380546001600160a01b0319166001600160a01b03928316179055855160209687012085519587019590952060e08690526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818c018190528183019a909a526060810194909452608080850193909352308483018190528151808603909301835260c0948501909152815191909901209052959095525050506101205286166200030d5760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b038516620003545760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b0384166200039b5760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b6001600160a01b038316620003e25760405162461bcd60e51b815260206004820152600f602482015260008051602062001608833981519152604482015260640162000080565b5050505050506200058c565b80516001600160a01b03811681146200040657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200043357600080fd5b81516001600160401b03808211156200045057620004506200040b565b604051601f8301601f19908116603f011681019082821181831017156200047b576200047b6200040b565b816040528381526020925086838588010111156200049857600080fd5b600091505b83821015620004bc57858201830151818301840152908201906200049d565b83821115620004ce5760008385830101525b9695505050505050565b60008060008060008060c08789031215620004f257600080fd5b620004fd87620003ee565b95506200050d60208801620003ee565b94506200051d60408801620003ee565b93506200052d60608801620003ee565b60808801519093506001600160401b03808211156200054b57600080fd5b620005598a838b0162000421565b935060a08901519150808211156200057057600080fd5b506200057f89828a0162000421565b9150509295509295509295565b60805160a05160c05160e051610100516101205161102c620005dc60003960006108df0152600061092e01526000610909015260006108620152600061088c015260006108b6015261102c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063632311d81161005b578063632311d8146100d95780639d699000146100ec578063c2556ff7146100ff578063c6679a641461011257600080fd5b80631001676a146100825780633f15457f146100975780635357641a146100c6575b600080fd5b610095610090366004610d13565b610125565b005b6000546100aa906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100d4366004610d61565b610246565b6003546100aa906001600160a01b031681565b6100956100fa366004610d13565b610387565b61009561010d366004610dec565b61054b565b610095610120366004610e05565b61066f565b600354604051636f5c98d160e11b81526004810184905233916001600160a01b03169063deb931a290602401602060405180830381865afa15801561016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101929190610e84565b6001600160a01b0316146101d95760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600354604051638ece037d60e01b81526001600160a01b0390911690638ece037d9061020f908690869086903390600401610efa565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b50505050505050565b600354604051636f5c98d160e11b8152600481018590526001600160a01b039091169063deb931a290602401602060405180830381865afa15801561028f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b39190610e84565b6001600160a01b03166102cf6102c98533610766565b836107d1565b6001600160a01b0316146103195760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016101d0565b600354604051638ece037d60e01b81526001600160a01b0390911690638ece037d9061034f908790879087903390600401610efa565b600060405180830381600087803b15801561036957600080fd5b505af115801561037d573d6000803e3d6000fd5b5050505050505050565b60035460405163c9cb65e160e01b8152600481018490526001600160a01b0390911690633cf26c9090829063c9cb65e190602401602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc9190610f32565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190610f4b565b806104e0575060035460405163f13f8e1d60e01b81526004810183905233916001600160a01b03169063f13f8e1d90602401602060405180830381865afa1580156104b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d59190610e84565b6001600160a01b0316145b6105185760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b60448201526064016101d0565b6003546040516209d69960ec1b81526001600160a01b0390911690639d6990009061020f90869086908690600401610f6d565b600354604051636f5c98d160e11b81526004810183905233916001600160a01b03169063deb931a290602401602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190610e84565b6001600160a01b03161461060e5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e20756e726567697374657220646f6d61696e60448201526064016101d0565b60035460405163c2556ff760e01b8152600481018390526001600160a01b039091169063c2556ff790602401600060405180830381600087803b15801561065457600080fd5b505af1158015610668573d6000803e3d6000fd5b5050505050565b6003546040516303cf26c960e41b8152600481018390523360248201526001600160a01b0390911690633cf26c9090604401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190610f4b565b61072e5760405162461bcd60e51b815260206004820152601e60248201527f416c72656164792072656769737465726564207468697320446f6d61696e000060448201526064016101d0565b60035460405163e2a24b6960e01b81526001600160a01b039091169063e2a24b699061034f9087908790879087903390600401610f92565b604080517fe55ea7c11448ae2e3842465ce9460dbccd12b4b3abf72f6e21a0d63b868ddb0760208201529081018390526001600160a01b03821660608201526000906107ca90608001604051602081830303815290604052805190602001206107dd565b9392505050565b60006107ca8383610831565b600061082b6107ea610855565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000610840858561097c565b9150915061084d816109c1565b509392505050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156108ae57507f000000000000000000000000000000000000000000000000000000000000000046145b156108d857507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041036109b25760208301516040840151606085015160001a6109a687828585610b7a565b945094505050506109ba565b506000905060025b9250929050565b60008160048111156109d5576109d5610fe0565b036109dd5750565b60018160048111156109f1576109f1610fe0565b03610a3e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101d0565b6002816004811115610a5257610a52610fe0565b03610a9f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101d0565b6003816004811115610ab357610ab3610fe0565b03610b0b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101d0565b6004816004811115610b1f57610b1f610fe0565b03610b775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101d0565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610bb15750600090506003610c5e565b8460ff16601b14158015610bc957508460ff16601c14155b15610bda5750600090506004610c5e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610c2e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c5757600060019250925050610c5e565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610c9857610c98610c67565b604051601f8501601f19908116603f01168101908282118183101715610cc057610cc0610c67565b81604052809350858152868686011115610cd957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610d0457600080fd5b6107ca83833560208501610c7d565b600080600060608486031215610d2857600080fd5b833567ffffffffffffffff811115610d3f57600080fd5b610d4b86828701610cf3565b9660208601359650604090950135949350505050565b60008060008060808587031215610d7757600080fd5b843567ffffffffffffffff80821115610d8f57600080fd5b610d9b88838901610cf3565b955060208701359450604087013593506060870135915080821115610dbf57600080fd5b508501601f81018713610dd157600080fd5b610de087823560208401610c7d565b91505092959194509250565b600060208284031215610dfe57600080fd5b5035919050565b60008060008060608587031215610e1b57600080fd5b843567ffffffffffffffff80821115610e3357600080fd5b818701915087601f830112610e4757600080fd5b813581811115610e5657600080fd5b886020828501011115610e6857600080fd5b6020928301999098509187013596604001359550909350505050565b600060208284031215610e9657600080fd5b81516001600160a01b03811681146107ca57600080fd5b6000815180845260005b81811015610ed357602081850181015186830182015201610eb7565b81811115610ee5576000602083870101525b50601f01601f19169290920160200192915050565b608081526000610f0d6080830187610ead565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b600060208284031215610f4457600080fd5b5051919050565b600060208284031215610f5d57600080fd5b815180151581146107ca57600080fd5b606081526000610f806060830186610ead565b60208301949094525060400152919050565b60808152846080820152848660a0830137600060a0868301810191909152602082019490945260408101929092526001600160a01b03166060820152601f909201601f191690910101919050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d16b441ee762aa817c4d3fa3cdb94bb0cf7834c2214f5178933a54126d236e1f64736f6c634300080f0033496e76616c69642061646472657373000000000000000000000000000000000000000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e00000000000000000000000057f1887a8bf19b14fc0df6fd9b2acc9af147ea850000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba410000000000000000000000001417e63077974e17a090b6558778b98c9479cf3200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020434e5320416c6c6f776c697374506f6c6963792057686974656c697374696e670000000000000000000000000000000000000000000000000000000000000005312e302e30000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063632311d81161005b578063632311d8146100d95780639d699000146100ec578063c2556ff7146100ff578063c6679a641461011257600080fd5b80631001676a146100825780633f15457f146100975780635357641a146100c6575b600080fd5b610095610090366004610d13565b610125565b005b6000546100aa906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100d4366004610d61565b610246565b6003546100aa906001600160a01b031681565b6100956100fa366004610d13565b610387565b61009561010d366004610dec565b61054b565b610095610120366004610e05565b61066f565b600354604051636f5c98d160e11b81526004810184905233916001600160a01b03169063deb931a290602401602060405180830381865afa15801561016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101929190610e84565b6001600160a01b0316146101d95760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600354604051638ece037d60e01b81526001600160a01b0390911690638ece037d9061020f908690869086903390600401610efa565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b50505050505050565b600354604051636f5c98d160e11b8152600481018590526001600160a01b039091169063deb931a290602401602060405180830381865afa15801561028f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b39190610e84565b6001600160a01b03166102cf6102c98533610766565b836107d1565b6001600160a01b0316146103195760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016101d0565b600354604051638ece037d60e01b81526001600160a01b0390911690638ece037d9061034f908790879087903390600401610efa565b600060405180830381600087803b15801561036957600080fd5b505af115801561037d573d6000803e3d6000fd5b5050505050505050565b60035460405163c9cb65e160e01b8152600481018490526001600160a01b0390911690633cf26c9090829063c9cb65e190602401602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc9190610f32565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190610f4b565b806104e0575060035460405163f13f8e1d60e01b81526004810183905233916001600160a01b03169063f13f8e1d90602401602060405180830381865afa1580156104b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d59190610e84565b6001600160a01b0316145b6105185760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b60448201526064016101d0565b6003546040516209d69960ec1b81526001600160a01b0390911690639d6990009061020f90869086908690600401610f6d565b600354604051636f5c98d160e11b81526004810183905233916001600160a01b03169063deb931a290602401602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190610e84565b6001600160a01b03161461060e5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e20756e726567697374657220646f6d61696e60448201526064016101d0565b60035460405163c2556ff760e01b8152600481018390526001600160a01b039091169063c2556ff790602401600060405180830381600087803b15801561065457600080fd5b505af1158015610668573d6000803e3d6000fd5b5050505050565b6003546040516303cf26c960e41b8152600481018390523360248201526001600160a01b0390911690633cf26c9090604401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190610f4b565b61072e5760405162461bcd60e51b815260206004820152601e60248201527f416c72656164792072656769737465726564207468697320446f6d61696e000060448201526064016101d0565b60035460405163e2a24b6960e01b81526001600160a01b039091169063e2a24b699061034f9087908790879087903390600401610f92565b604080517fe55ea7c11448ae2e3842465ce9460dbccd12b4b3abf72f6e21a0d63b868ddb0760208201529081018390526001600160a01b03821660608201526000906107ca90608001604051602081830303815290604052805190602001206107dd565b9392505050565b60006107ca8383610831565b600061082b6107ea610855565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000610840858561097c565b9150915061084d816109c1565b509392505050565b6000306001600160a01b037f000000000000000000000000e069fd3b7c36048d1e5758072322693c3ccaf7d3161480156108ae57507f000000000000000000000000000000000000000000000000000000000000000146145b156108d857507fef16e9494ae11b59173aedf1452f8d721b6224fbf4b635d9753310d5241a0d6690565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527fd6b3d81604f1282a60eb2dba6e92f9ab01e9ebd1f808694e31b20593365847b8828401527f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041036109b25760208301516040840151606085015160001a6109a687828585610b7a565b945094505050506109ba565b506000905060025b9250929050565b60008160048111156109d5576109d5610fe0565b036109dd5750565b60018160048111156109f1576109f1610fe0565b03610a3e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101d0565b6002816004811115610a5257610a52610fe0565b03610a9f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101d0565b6003816004811115610ab357610ab3610fe0565b03610b0b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101d0565b6004816004811115610b1f57610b1f610fe0565b03610b775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101d0565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610bb15750600090506003610c5e565b8460ff16601b14158015610bc957508460ff16601c14155b15610bda5750600090506004610c5e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610c2e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c5757600060019250925050610c5e565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610c9857610c98610c67565b604051601f8501601f19908116603f01168101908282118183101715610cc057610cc0610c67565b81604052809350858152868686011115610cd957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610d0457600080fd5b6107ca83833560208501610c7d565b600080600060608486031215610d2857600080fd5b833567ffffffffffffffff811115610d3f57600080fd5b610d4b86828701610cf3565b9660208601359650604090950135949350505050565b60008060008060808587031215610d7757600080fd5b843567ffffffffffffffff80821115610d8f57600080fd5b610d9b88838901610cf3565b955060208701359450604087013593506060870135915080821115610dbf57600080fd5b508501601f81018713610dd157600080fd5b610de087823560208401610c7d565b91505092959194509250565b600060208284031215610dfe57600080fd5b5035919050565b60008060008060608587031215610e1b57600080fd5b843567ffffffffffffffff80821115610e3357600080fd5b818701915087601f830112610e4757600080fd5b813581811115610e5657600080fd5b886020828501011115610e6857600080fd5b6020928301999098509187013596604001359550909350505050565b600060208284031215610e9657600080fd5b81516001600160a01b03811681146107ca57600080fd5b6000815180845260005b81811015610ed357602081850181015186830182015201610eb7565b81811115610ee5576000602083870101525b50601f01601f19169290920160200192915050565b608081526000610f0d6080830187610ead565b60208301959095525060408101929092526001600160a01b0316606090910152919050565b600060208284031215610f4457600080fd5b5051919050565b600060208284031215610f5d57600080fd5b815180151581146107ca57600080fd5b606081526000610f806060830186610ead565b60208301949094525060400152919050565b60808152846080820152848660a0830137600060a0868301810191909152602082019490945260408101929092526001600160a01b03166060820152601f909201601f191690910101919050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220d16b441ee762aa817c4d3fa3cdb94bb0cf7834c2214f5178933a54126d236e1f64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e00000000000000000000000057f1887a8bf19b14fc0df6fd9b2acc9af147ea850000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba410000000000000000000000001417e63077974e17a090b6558778b98c9479cf3200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020434e5320416c6c6f776c697374506f6c6963792057686974656c697374696e670000000000000000000000000000000000000000000000000000000000000005312e302e30000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _ensAddr (address): 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
Arg [1] : _baseRegistrarAddr (address): 0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85
Arg [2] : _resolverAddr (address): 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41
Arg [3] : _cnsControllerAddr (address): 0x1417E63077974e17A090B6558778B98C9479cf32
Arg [4] : _name (string): CNS AllowlistPolicy Whitelisting
Arg [5] : _version (string): 1.0.0
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Arg [1] : 00000000000000000000000057f1887a8bf19b14fc0df6fd9b2acc9af147ea85
Arg [2] : 0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41
Arg [3] : 0000000000000000000000001417e63077974e17a090b6558778b98c9479cf32
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [7] : 434e5320416c6c6f776c697374506f6c6963792057686974656c697374696e67
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 312e302e30000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.