Contract 0x82b28e5A2444d22Af36E1BB40CfD1B3E155D9486

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x91b6830f642030b598464e87dc9cb50ba62662540dcc8a07be568c2730936744Set Name74732292023-03-20 0:59:121 day 7 hrs ago0xd57450e2d73efc243edb0950e1843df44b0a5dfe IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.548346322879 9,579.27297451
0x80ef37b60d4937e92f17c2bead9622bcb127381af85e745e062952d3dc9d2d22Set Name74404062023-03-17 21:27:333 days 10 hrs ago0x7b557eeea9ee4b450913ff1cfb1e3b0f4fd5f668 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2744748266190
0x2b593410f08233b47b9ddb68b878b8663ae0635aa846e02a5b9896f5cd911632Set Name73872312023-03-14 9:55:436 days 22 hrs ago0x520208a31726a6d2298db740dcea11bc19983939 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.274555107280
0x474ddc82d823034d270baba87feb7fa3e704de60c5438269a57dbb6c8b8a0997Set Name73777032023-03-13 18:56:247 days 13 hrs ago0xf34eea3c1f017ddc5fbf0ff5831f0e717db29e0f IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2748095680240
0x5cc96994fb0391d9f9b1dd226167fdd8d00d2bfb3e5c8218540f8723aae8b3f2Set Name73720632023-03-13 10:04:307 days 21 hrs ago0x4b11006bc0e8102c1c324ebd977aa8f43bddfc4c IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.27456499673 4,794.471453559
0xa57f2aa07cf2dda7178fc3b5802ec2eadafdcb09616ea2b58b8aecb1fb2e6cddSet Name73638082023-03-12 21:06:138 days 10 hrs ago0x5e1529cc6d156e0a54a1e1fcea32dfd32292b6c6 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2746731818620
0x9224a598d6edf5eb52466ca9b7b683b1d70391ab765fd1c79376249c4e0dc52aSet Name73631392023-03-12 20:03:048 days 11 hrs ago0x3c374bc5262e84645e749ba3fd12411a970c1d1e IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.274760867002 4,794.877528268
0xd20ff7449e924515be019acf341c2047914b278706cccbd1af9e1bfcc6fb8a46Set Name73484212023-03-11 20:56:199 days 11 hrs ago0x0152ff2483d9c722571425f7c1f1afccff36d835 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2748284671360
0x03822cb33b7e611f97d5969b72b30bf1e19418072fb5ab154bcfa054feeb9555Set Name73289352023-03-10 14:14:3310 days 17 hrs ago0xb90db6d813065b1baae323b6b19e1da47db66713 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2746467233470
0x2b991442a41402eaa989f1b86c909255807a8f1a2a591cb32606a70773f80a3eSet Name73187382023-03-09 22:12:5111 days 9 hrs ago0x6a6689f5e7c39603ee1f48fecfd3fa01c97ee41e IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2747308578770
0x6e586fdfdf458b8e5f4e035ddf95af3f0753642718c38358f82ed10a97de86a6Set Name73093692023-03-09 7:31:1312 days 30 mins ago0xcf519fcad5d14511a8919e7be66ab43d72761ced IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.274755353840
0x71ea2c2fe880e1deb8bf7fd93b38f91ed3d9a72d9dab1d63b07cf554ad8879c1Set Name73045152023-03-08 23:54:4912 days 8 hrs ago0x70aac41e7cfcd8ffe8929d03f226075fb24f9689 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.274969331595 4,797.510801625
0x8141e5f64484fd960d68979e980ec304083792276f618bc1c19ad22f3a969a5eSet Name72935092023-03-08 6:39:3313 days 1 hr ago0x3e02ae812a9d0f6670b66b6d2f4d9b4492d5c8a6 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.545537006340
0x2e258da981050e2f9a3a681227adb4e271f2369ea5d39406fae279b13a3a8effSet Name72758062023-03-07 2:53:5514 days 5 hrs ago0x0d898758f61228bf35b04d7e3dd86539ac97b609 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2748443141540
0x2a9e735f58653168b2ad06bc053b13ca7f9441cc78e1a82c8b3b082e9df6ff50Set Name72623362023-03-06 5:46:5415 days 2 hrs ago0x28b748f311bc5f9dc891efefb302197ba3a40770 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2748800152080
0xec58b53fa837d66f175bf3f67b3e691c5da00e9705f82ad327fa23f70cb07c1eSet Name72545112023-03-05 17:30:1915 days 14 hrs ago0xd5376d43179916242c2957f8a699363217dba410 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2747279041160
0x6a1bb81517ac0c82a907f9bc8b835aad10323c91066b31d5e378e8761bf2bdadSet Name72543562023-03-05 17:15:4015 days 14 hrs ago0x0260adef8743f45c3c16db00b4208d7e1a7bc32a IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.277706084393 4,849.321326303
0x3e09e80dafa3fbb7e0e94a2a3a31adf76575632567c48ecfba5cf5735897a98fSet Name72429642023-03-04 23:24:3116 days 8 hrs ago0xdef59146b1b7560b3aeca4bc39523c17286cb1ec IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2747008754570
0x51e016d90891ae5bc9f4e43b4d7f5e81d04a0c62eda173af8b25d10f709eb906Set Name72425072023-03-04 22:41:3016 days 9 hrs ago0x0654f4ae5e62d619c6b4be4c04a48990a6835c9b IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.5464384544820
0x40021bccc22f440416537a0290ce69ac59214c6f046ea738bb39220f0952d4dbSet Name72339382023-03-04 9:15:2216 days 22 hrs ago0xe1a27375e1b47dac5c213f9f85dc4b1fba80d88d IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2750702361990
0xb8e220b8b2f0bb64026f415337443ed99d4043de87ee24d210d197d53171d67fSet Name72156352023-03-03 4:34:4918 days 3 hrs ago0x5f8f5e9e13916585fafc924388c04d4a51fb24d7 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2747731164950
0x9395abab9d20e9537ead1f1d8f4803b30a0d2b5a527ccc3ddbd8df1ef15de8eeSet Name72100992023-03-02 19:53:3118 days 12 hrs ago0xfe43bf7cea55bdd721c9d291d88d559641a5dc3f IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2613464498320
0x4960575e7052f37ae1e658aa84fa30ad91cef32cfa889d55f0f655a73bb5266cSet Name72100982023-03-02 19:53:2518 days 12 hrs ago0xfe43bf7cea55bdd721c9d291d88d559641a5dc3f IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2747874912430
0x2fe84172722b4ca20df65810591816615b96243e551d7017de2f200ac771d329Set Name72093222023-03-02 18:40:2418 days 13 hrs ago0x2019029a7e1f3d9cf5346df798474513e02346fe IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2749047215330
0x5d44b700fd6052dc76710d4815cde3fd7bc33f3131c93edcb9d0174151e904b6Set Name72079492023-03-02 16:31:0718 days 15 hrs ago0x7d82547f740673f3836f9dc18919b8cb7cc9fbc9 IN  0x82b28e5a2444d22af36e1bb40cfd1b3e155d94860 CRO0.2750235560420
[ 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.