Contract 0x82b28e5a2444d22af36e1bb40cfd1b3e155d9486

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x382e1e165581dbda4ebcdd7a0b8851ac84c54c8ca253b61548ccabff753d7b9eSet Name68724052023-02-08 17:59:1122 mins ago0x749c10b63ea2ea527b51cf61d9405535dfffff89 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5478590194970
0x75d4a99e9a1620504cc01fc2233d0cb294443be1ae702a3b3c43137c3bb73c8dSet Name68699252023-02-08 14:05:224 hrs 16 mins ago0x1e93e2e8a4f32de4682dd4f0b5c806b962341568 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO1.095334125149 9,634.562356184
0x41551f5a76c5ed37929dccb61e7239a943cbfcacbba3eb53bc11635014cc5bc9Set Name68677272023-02-08 10:38:187 hrs 43 mins ago0x69ffa30cbf591c1b363549954effca5867ea5ecb IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2756898084140
0x6566661d3ae2e74d76c7a81011781551bbea7cd30e14cf75b20043b1d23ae43cSet Name68608512023-02-07 23:51:4818 hrs 29 mins ago0x784e977a364cb986324849e2278957acb234e1cb IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5473411874250
0x46e889e5aa51053276b669c7f4cb21f911db326d5d8729c042144f2264b058bfSet Name68608462023-02-07 23:51:1918 hrs 30 mins ago0x968ef7b947a3b4965cd6f5c7ef0f8ab8db4f3582 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.547511646857 4,817.948317996
0xa74f080d21b053de55f27a1d1959567318fc735c13f50ad7fe3a2430e345e094Set Name68568572023-02-07 17:35:241 day 46 mins ago0x2053396df11c81a9919701c8a49e97c6c4686268 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5475349595890
0xce685d0a7c195f42cb2b4c83308713bfa649d9b38ed947687b11658d44d3847fSet Name68568182023-02-07 17:31:431 day 49 mins ago0xb8f21861edd1e2c3e853d8ac2a2f983f2963c96a IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5474773627890
0xafb87cff4bcefe5db9af58767a1046ea4ababb3ba096d5860e2096e3d90f27dbSet Name68470942023-02-07 2:17:541 day 16 hrs ago0x68c34975b03879e5526c5248554e329281bc7bbd IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2624296774810
0xa9ca5dfef39adc74c443da3f2b7fcb61a27c13c824d83e7871432bfea0b33351Set Name68307062023-02-06 0:34:372 days 17 hrs ago0x0025c233c00fc9592f7615e69aac6746e2167b01 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2760762811170
0x35431d3fb54f2e0e19b57583e143ca3194d5277e14d3da8f0dc7c20664c05729Set Name68299872023-02-05 23:27:002 days 18 hrs ago0xc195e4ea9222b2346c4dd48003f70b6440098001 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2760484613 4,819.365933418
0x7bc268c7745a448b3b5ca8323aebeec051dae06de8e8aea29f75ef4a886fa653Set Name68267382023-02-05 18:20:453 days ago0xfc647867ca601672fc324e72051a4250805b0ee7 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.277092987197 4,836.58842048
0xc52722edca8f66a816b3974596167fe011a82bffcf29f2094bf19ebb3eeca01cSet Name68264352023-02-05 17:52:113 days 29 mins ago0xa479383b9e90e20d6cf3a91d8ba3b6f98ab04e3a IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2759140616580
0x71698cd119edb0bcbec7b6935639ae983b30fe36499ce63c8aa5cb5f5aa4406aSet Name68227352023-02-05 12:03:163 days 6 hrs ago0x815b7d3e83dc78edae840c7c2bb0f94c82596705 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.276125310719 4,819.697870866
0x63a0197dd63a6cbb6e8a98fa33c29716357a7ba471856402cfe88e38591b7eb2Set Name68177092023-02-05 4:10:173 days 14 hrs ago0x13b8136d36da43ed340ac7260ab8665264dce083 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.264433244599 4,847.449993579
0x936037ce52cef255b463897c8554f6ea94e5745f42fc5c7f2e2a6dec77306ccbSet Name68177082023-02-05 4:10:113 days 14 hrs ago0x13b8136d36da43ed340ac7260ab8665264dce083 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.278006107283 4,847.450040683
0xc65d47c5296f0018510b7d532ac061dfdac84ce49b727fbac3cc46bda8c1de20Set Name68160412023-02-05 1:33:283 days 16 hrs ago0x37e79df151945a865ba1a13f0610dbf007ca7b7d IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2759993810130
0x1361daa727da0d29a414c994569c280f55320d16525250a63df769d7c2453ea4Set Name68100512023-02-04 16:08:554 days 2 hrs ago0xbc1713541d31a090da2c75f6e5b92e111c5a8ac7 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5477220542230
0xe9abf270d62674517fd1439ba4691155090f9de2cf240192f321fff9194bb7d9Set Name67951272023-02-03 16:42:595 days 1 hr ago0x1993db71464c3560025a8a415ccfb06b121b95f2 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.547973648270
0x11b59004038400cf0137441a77d29eaef62c4d9db3a34a4604732fb0439a6a8cSet Name67814272023-02-02 19:12:545 days 23 hrs ago0x5441c8af34ad4f8fcbfdfdb30dfb1fe728766629 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2759748839350
0x402aac2b14e984edc276fc833c0693312f06ac1a39b0f323bb4b9ac2681477dbSet Name67795032023-02-02 16:11:206 days 2 hrs ago0x19464917816da1c39aa112c88e1c72cd90e07309 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.548283744914 4,821.687639956
0x0ec1b5c6897c7ab0a974b642e644371f5957f5e4678c6822283127059af03baeSet Name67684502023-02-01 22:49:236 days 19 hrs ago0x3627b9a1f95f5193704f50c2fdf750a5d9dfa4ae IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2760667067770
0x9e7bac8763f223b38f5167a180a09972aa5e66c2dc32d8f713754ee515786db8Set Name67681502023-02-01 22:21:046 days 20 hrs ago0x6a4d7ee3a32d328a3309ad0d9527767da94ce0e5 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5682 5,000
0x68f898d671b1db6f3c5ccc6465833dc10166b989425eef2bfbce46a7fda94e52Set Name67666282023-02-01 19:57:136 days 22 hrs ago0xb94c15225e563c7f1684536d5686465c20245f9a IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2766498633570
0x2f689d858b24f51fe9235ef13326ae035e53acf195d437af713705493d9d14f6Set Name67655702023-02-01 18:17:007 days 4 mins ago0xd39b56106eecf36259f79e10069c3c73621a9d59 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2763632994250
0x0088bacedef6144d5041fcf870094f81148019be73b6197547dee206233b651eSet Name67628232023-02-01 13:57:427 days 4 hrs ago0x1c53f20d0abdf09eee304102b31e19d7899be870 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.27608115880
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ReverseRegistrar

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 21 : ReverseRegistrar.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

import "../CROID.sol";
import "./IReverseRegistrar.sol";
import "../resolvers/IResolver.sol";
import "../utils/Controllable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

bytes32 constant lookup = 0x3031323334353637383961626364656600000000000000000000000000000000;

// namehash('addr.reverse')
bytes32 constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;

contract ReverseRegistrar is Ownable, Controllable, IReverseRegistrar {
    CROID public immutable croid;
    IResolver public defaultResolver;

    event ReverseClaimed(address indexed addr, bytes32 indexed node);

    event ResolverChanged(address indexed resolver);

    /**
     * @dev Constructor
     * @param _croid The address of the CROID registry.
     */
    constructor(CROID _croid) {
        croid = _croid;

        // Assign ownership of the reverse record to our deployer
        ReverseRegistrar oldRegistrar = ReverseRegistrar(
            _croid.owner(ADDR_REVERSE_NODE)
        );
        if (address(oldRegistrar) != address(0x0)) {
            oldRegistrar.claim(msg.sender);
        }
    }

    modifier authorised(address addr) {
        require(
            addr == msg.sender ||
                controllers[msg.sender] ||
                croid.isApprovedForAll(addr, msg.sender) ||
                ownsContract(addr),
            "ReverseRegistrar: Caller is not a controller or authorised by address or the address itself"
        );
        _;
    }

    function setDefaultResolver(address resolver) public override onlyOwner {
        require(
            address(resolver) != address(0),
            "ReverseRegistrar: Resolver address must not be 0"
        );
        defaultResolver = IResolver(resolver);
        emit ResolverChanged(resolver);
    }

    /**
     * @dev Transfers ownership of the reverse CROID record associated with the
     *      calling account.
     * @param owner The address to set as the owner of the reverse record in CROID.
     * @return The CROID node hash of the reverse record.
     */
    function claim(address owner) public override returns (bytes32) {
        return claimForAddr(msg.sender, owner, address(defaultResolver));
    }

    /**
     * @dev Transfers ownership of the reverse CROID record associated with the
     *      calling account.
     * @param addr The reverse record to set
     * @param owner The address to set as the owner of the reverse record in CROID.
     * @return The CROID node hash of the reverse record.
     */
    function claimForAddr(
        address addr,
        address owner,
        address resolver
    ) public override authorised(addr) returns (bytes32) {
        bytes32 labelHash = sha3HexAddress(addr);
        bytes32 reverseNode = keccak256(
            abi.encodePacked(ADDR_REVERSE_NODE, labelHash)
        );
        emit ReverseClaimed(addr, reverseNode);
        croid.setSubnodeRecord(ADDR_REVERSE_NODE, labelHash, owner, resolver, 0);
        return reverseNode;
    }

    /**
     * @dev Transfers ownership of the reverse CROID record associated with the
     *      calling account.
     * @param owner The address to set as the owner of the reverse record in CROID.
     * @param resolver The address of the resolver to set; 0 to leave unchanged.
     * @return The CROID node hash of the reverse record.
     */
    function claimWithResolver(address owner, address resolver)
        public
        override
        returns (bytes32)
    {
        return claimForAddr(msg.sender, owner, resolver);
    }

    /**
     * @dev Sets the `name()` record for the reverse CROID record associated with
     * the calling account. First updates the resolver to the default reverse
     * resolver if necessary.
     * @param name The name to set for this address.
     * @return The CROID node hash of the reverse record.
     */
    function setName(string memory name) public override returns (bytes32) {
        return
            setNameForAddr(
                msg.sender,
                msg.sender,
                address(defaultResolver),
                name
            );
    }

    function setNameOnly(
        address addr,
        address resolver,
        string memory name
    ) external override authorised(addr) returns (bytes32) {
        if (resolver == address(0x0)) {
            resolver = address(defaultResolver);
        }

        bytes32 reverseNode = node(addr);
        IResolver(resolver).setName(reverseNode, name);
        return reverseNode;
    }

    /**
     * @dev Sets the `name()` record for the reverse CROID record associated with
     * the account provided. First updates the resolver to the default reverse
     * resolver if necessary.
     * Only callable by controllers and authorised users
     * @param addr The reverse record to set
     * @param owner The owner of the reverse node
     * @param name The name to set for this address.
     * @return The CROID node hash of the reverse record.
     */
    function setNameForAddr(
        address addr,
        address owner,
        address resolver,
        string memory name
    ) public override returns (bytes32) {
        if (resolver == address(0x0)) {
            resolver = address(defaultResolver);
        }

        bytes32 reverseNode = claimForAddr(addr, owner, resolver);
        IResolver(resolver).setName(reverseNode, name);
        return reverseNode;
    }

    /**
     * @dev Returns the node hash for a given account's reverse records.
     * @param addr The address to hash
     * @return The CROID node hash.
     */
    function node(address addr) public pure override returns (bytes32) {
        return
            keccak256(
                abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr))
            );
    }

    /**
     * @dev An optimised function to compute the sha3 of the lower-case
     *      hexadecimal representation of an Cronos address.
     * @param addr The address to hash
     * @return ret The SHA3 hash of the lower-case hexadecimal encoding of the
     *         input address.
     */
    function sha3HexAddress(address addr) private 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)
        }
    }

    function ownsContract(address addr) internal view returns (bool) {
        try Ownable(addr).owner() returns (address owner) {
            return owner == msg.sender;
        } catch {
            return false;
        }
    }
}

File 2 of 21 : CROID.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface CROID {
    // 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);
}

File 3 of 21 : IReverseRegistrar.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface IReverseRegistrar {
    function setDefaultResolver(address resolver) external;

    function claim(address owner) external returns (bytes32);

    function claimForAddr(
        address addr,
        address owner,
        address resolver
    ) external returns (bytes32);

    function claimWithResolver(address owner, address resolver)
        external
        returns (bytes32);

    function setName(string memory name) external returns (bytes32);

    function setNameOnly(
        address addr,
        address resolver,
        string memory name
    ) external returns (bytes32);

    function setNameForAddr(
        address addr,
        address owner,
        address resolver,
        string memory name
    ) external returns (bytes32);

    function node(address addr) external pure returns (bytes32);
}

File 4 of 21 : IResolver.sol
//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 IResolver 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;
}

File 5 of 21 : Controllable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/access/Ownable.sol";

contract Controllable is Ownable {
    mapping(address => bool) public controllers;

    event ControllerChanged(address indexed controller, bool enabled);

    modifier onlyController {
        require(
            controllers[msg.sender],
            "Controllable: Caller is not a controller"
        );
        _;
    }

    function setController(address controller, bool enabled) public onlyOwner {
        controllers[controller] = enabled;
        emit ControllerChanged(controller, enabled);
    }
}

File 6 of 21 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 7 of 21 : IABIResolver.sol
// 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 CROID node.
     * Defined in EIP205.
     * @param node The CROID 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);
}

File 8 of 21 : IAddressResolver.sol
// 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);

    /**
     * Returns the address associated with an CROID node.
     * @param node The CROID node to query.
     * @param coinType The coin type from slip-0044.
     * @return The associated address in bytes.
     */
    function addr(bytes32 node, uint coinType) external view returns(bytes memory);
}

File 9 of 21 : IContentHashResolver.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface IContentHashResolver {
    event ContenthashChanged(bytes32 indexed node, bytes hash);

    /**
     * Returns the contenthash associated with an CROID node.
     * @param node The CROID node to query.
     * @return The associated contenthash.
     */
    function contenthash(bytes32 node) external view returns (bytes memory);
}

File 10 of 21 : IAddrResolver.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

/**
 * Interface for the basic addr function.
 */
interface IAddrResolver {
    event AddrChanged(bytes32 indexed node, address a);

    /**
     * Returns the address associated with an CROID node.
     * @param node The CROID node to query.
     * @return The associated address.
     */
    function addr(bytes32 node) external view returns (address payable);
}

File 11 of 21 : IDNSZoneResolver.sol
// 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 CROID node to query.
     * @return The associated contenthash.
     */
    function zonehash(bytes32 node) external view returns (bytes memory);
}

File 12 of 21 : INameResolver.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface INameResolver {
    event NameChanged(bytes32 indexed node, string name);

    /**
     * Returns the name associated with an CROID node, for reverse records.
     * Defined in EIP181.
     * @param node The CROID node to query.
     * @return The associated name.
     */
    function name(bytes32 node) external view returns (string memory);
}

File 13 of 21 : IInterfaceResolver.sol
// 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 CROID 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);
}

File 14 of 21 : IDNSRecordResolver.sol
// 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);
}

File 15 of 21 : ITextResolver.sol
// 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 CROID node and key.
     * @param node The CROID 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);
}

File 16 of 21 : IPubkeyResolver.sol
// 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 CROID node.
     * Defined in EIP 619.
     * @param node The CROID 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);
}

File 17 of 21 : IExtendedResolver.sol
// 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);
}

File 18 of 21 : IERC165.sol
// 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);
}

File 19 of 21 : ResolverBase.sol
// 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 view virtual returns (bool);

    modifier authorised(bytes32 node) {
        require(isAuthorised(node), "Unauthorised resolver operation");
        _;
    }
}

File 20 of 21 : ERC165.sol
// 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;
    }
}

File 21 of 21 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"contract CROID","name":"_croid","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"resolver","type":"address"}],"name":"ResolverChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"ReverseClaimed","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"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"},{"internalType":"address","name":"resolver","type":"address"}],"name":"claimForAddr","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"resolver","type":"address"}],"name":"claimWithResolver","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"controllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"croid","outputs":[{"internalType":"contract CROID","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultResolver","outputs":[{"internalType":"contract IResolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"node","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"resolver","type":"address"}],"name":"setDefaultResolver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"setNameForAddr","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"setNameOnly","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001602380380620016028339810160408190526200003491620001c4565b6200003f336200015b565b6001600160a01b03811660808190526040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152600091906302571be390602401602060405180830381865afa158015620000ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d29190620001c4565b90506001600160a01b038116156200015357604051630f41a04d60e11b81523360048201526001600160a01b03821690631e83409a906024016020604051808303816000875af11580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001eb565b505b505062000205565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620001c157600080fd5b50565b600060208284031215620001d757600080fd5b8151620001e481620001ab565b9392505050565b600060208284031215620001fe57600080fd5b5051919050565b6080516113cc620002366000396000818161014a01528181610318015281816105e8015261082e01526113cc6000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c8063828eab0e11610097578063c66485b211610066578063c66485b214610225578063da8c229e14610238578063e0dba60f1461026b578063f2fde38b1461027e57600080fd5b8063828eab0e146101c15780638da5cb5b146101e1578063bffbe61c146101ff578063c47f00271461021257600080fd5b806362339ae7116100d357806362339ae7146101455780636566963114610191578063715018a6146101a45780637a806d6b146101ae57600080fd5b8062dbdd95146100f95780630f5a54661461011f5780631e83409a14610132575b600080fd5b61010c6101073660046110f0565b610291565b6040519081526020015b60405180910390f35b61010c61012d366004611152565b61051e565b61010c61014036600461118b565b610532565b61016c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610116565b61010c61019f3660046111a8565b610561565b6101ac610895565b005b61010c6101bc3660046111f3565b610922565b60025461016c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1661016c565b61010c61020d36600461118b565b6109bf565b61010c610220366004611268565b610a1a565b6101ac61023336600461118b565b610a44565b61025b61024636600461118b565b60016020526000908152604090205460ff1681565b6040519015158152602001610116565b6101ac6102793660046112b3565b610bd7565b6101ac61028c36600461118b565b610ce2565b60008373ffffffffffffffffffffffffffffffffffffffff81163314806102c757503360009081526001602052604090205460ff165b8061038357506040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038391906112e1565b80610392575061039281610e12565b610449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a4015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166104805760025473ffffffffffffffffffffffffffffffffffffffff1693505b600061048b866109bf565b6040517f7737221300000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8616906377372213906104e290849088906004016112fe565b600060405180830381600087803b1580156104fc57600080fd5b505af1158015610510573d6000803e3d6000fd5b509298975050505050505050565b600061052b338484610561565b9392505050565b60025460009061055b903390849073ffffffffffffffffffffffffffffffffffffffff16610561565b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff811633148061059757503360009081526001602052604090205460ff165b8061065357506040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906112e1565b80610662575061066281610e12565b610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f526576657273655265676973747261723a2043616c6c6572206973206e6f742060448201527f6120636f6e74726f6c6c6572206f7220617574686f726973656420627920616460648201527f6472657373206f7220746865206164647265737320697473656c660000000000608482015260a401610440565b600061071f86610ec3565b604080517f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26020808301919091528183018490528251808303840181526060909201928390528151910120919250819073ffffffffffffffffffffffffffffffffffffffff8916907f6ada868dd3058cf77a48a74489fd7963688e5464b2b0fa957ace976243270e9290600090a36040517f5ef2c7f00000000000000000000000000000000000000000000000000000000081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260048201526024810183905273ffffffffffffffffffffffffffffffffffffffff87811660448301528681166064830152600060848301527f00000000000000000000000000000000000000000000000000000000000000001690635ef2c7f09060a401600060405180830381600087803b15801561087257600080fd5b505af1158015610886573d6000803e3d6000fd5b50929998505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610440565b6109206000610f7f565b565b600073ffffffffffffffffffffffffffffffffffffffff831661095b5760025473ffffffffffffffffffffffffffffffffffffffff1692505b6000610968868686610561565b6040517f7737221300000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8516906377372213906104e290849087906004016112fe565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26109eb83610ec3565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b60025460009061055b903390819073ffffffffffffffffffffffffffffffffffffffff1685610922565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610440565b73ffffffffffffffffffffffffffffffffffffffff8116610b68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f526576657273655265676973747261723a205265736f6c76657220616464726560448201527f7373206d757374206e6f742062652030000000000000000000000000000000006064820152608401610440565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f9126d3d22dcb1dbfaccf7ae16a8189957e5259f20d952b7acfa778962adb6dc790600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610440565b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f4c97694570a07277810af7e5669ffd5f6a2d6b74b6e9a274b8b870fd5114cf87910160405180910390a25050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610440565b73ffffffffffffffffffffffffffffffffffffffff8116610e06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610440565b610e0f81610f7f565b50565b60008173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e99575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610e9691810190611379565b60015b610ea557506000919050565b73ffffffffffffffffffffffffffffffffffffffff16331492915050565b600060285b8015610f73577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a81536010909204917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a8153601083049250610ec8565b50506028600020919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e0f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261105657600080fd5b813567ffffffffffffffff8082111561107157611071611016565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156110b7576110b7611016565b816040528381528660208588010111156110d057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561110557600080fd5b833561111081610ff4565b9250602084013561112081610ff4565b9150604084013567ffffffffffffffff81111561113c57600080fd5b61114886828701611045565b9150509250925092565b6000806040838503121561116557600080fd5b823561117081610ff4565b9150602083013561118081610ff4565b809150509250929050565b60006020828403121561119d57600080fd5b813561052b81610ff4565b6000806000606084860312156111bd57600080fd5b83356111c881610ff4565b925060208401356111d881610ff4565b915060408401356111e881610ff4565b809150509250925092565b6000806000806080858703121561120957600080fd5b843561121481610ff4565b9350602085013561122481610ff4565b9250604085013561123481610ff4565b9150606085013567ffffffffffffffff81111561125057600080fd5b61125c87828801611045565b91505092959194509250565b60006020828403121561127a57600080fd5b813567ffffffffffffffff81111561129157600080fd5b61129d84828501611045565b949350505050565b8015158114610e0f57600080fd5b600080604083850312156112c657600080fd5b82356112d181610ff4565b91506020830135611180816112a5565b6000602082840312156112f357600080fd5b815161052b816112a5565b82815260006020604081840152835180604085015260005b8181101561133257858101830151858201606001528201611316565b81811115611344576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201606001949350505050565b60006020828403121561138b57600080fd5b815161052b81610ff456fea2646970667358221220382c025d2bc84a1f1f5d17ce0c14efe657c51f727620305734806557365e903d64736f6c634300080d00330000000000000000000000007f4c61116729d5b27e5f180062fdfbf32e9283e5

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007f4c61116729d5b27e5f180062fdfbf32e9283e5

-----Decoded View---------------
Arg [0] : _croid (address): 0x7f4c61116729d5b27e5f180062fdfbf32e9283e5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f4c61116729d5b27e5f180062fdfbf32e9283e5


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.