ETH Price: $3,007.76 (-5.78%)

Contract

0x9Fa006EeD523407F55f1257a76aA9bdee994b116

Overview

ETH Balance

9.657925556259385883 ETH

ETH Value

$29,048.67 (@ $3,007.76/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw3818999702025-09-22 17:41:5856 days ago1758562918IN
0x9Fa006Ee...ee994b116
0 ETH0.000009190.284287
Withdraw2395540272024-08-05 3:07:17470 days ago1722827237IN
0x9Fa006Ee...ee994b116
0 ETH0.000017390.44134
Withdraw2371303002024-07-29 2:08:11477 days ago1722218891IN
0x9Fa006Ee...ee994b116
0 ETH0.000000340.01
Withdraw2351736782024-07-23 9:43:58482 days ago1721727838IN
0x9Fa006Ee...ee994b116
0 ETH0.000000530.01
Withdraw2350832042024-07-23 3:25:23483 days ago1721705123IN
0x9Fa006Ee...ee994b116
0 ETH0.000000410.01
Withdraw2212565822024-06-13 1:04:46523 days ago1718240686IN
0x9Fa006Ee...ee994b116
0 ETH0.000000680.01
Withdraw2202868722024-06-10 5:46:14526 days ago1717998374IN
0x9Fa006Ee...ee994b116
0 ETH0.000000440.01
Withdraw2200570102024-06-09 13:46:37526 days ago1717940797IN
0x9Fa006Ee...ee994b116
0 ETH0.000000820.01
Withdraw2091951062024-05-08 17:41:29558 days ago1715190089IN
0x9Fa006Ee...ee994b116
0 ETH0.000000580.015637
Withdraw2040235492024-04-23 14:21:52573 days ago1713882112IN
0x9Fa006Ee...ee994b116
0 ETH0.000001860.044555
Withdraw2013274622024-04-15 16:15:15581 days ago1713197715IN
0x9Fa006Ee...ee994b116
0 ETH0.000000590.01
Withdraw1975071662024-04-04 13:10:40592 days ago1712236240IN
0x9Fa006Ee...ee994b116
0 ETH0.000000840.01
Withdraw1970857072024-04-03 7:44:28593 days ago1712130268IN
0x9Fa006Ee...ee994b116
0 ETH0.000004730.01
Withdraw1947863342024-03-27 15:14:22600 days ago1711552462IN
0x9Fa006Ee...ee994b116
0 ETH0.000001620.02094
Withdraw1930245232024-03-22 12:37:19605 days ago1711111039IN
0x9Fa006Ee...ee994b116
0 ETH0.000000730.01
Withdraw1918310612024-03-19 1:23:51609 days ago1710811431IN
0x9Fa006Ee...ee994b116
0 ETH0.000009030.13224
Withdraw1910269962024-03-16 16:38:02611 days ago1710607082IN
0x9Fa006Ee...ee994b116
0 ETH0.000006760.1
Withdraw1909446352024-03-16 10:53:11611 days ago1710586391IN
0x9Fa006Ee...ee994b116
0 ETH0.00000780.1
Withdraw1799772702024-02-12 11:30:41644 days ago1707737441IN
0x9Fa006Ee...ee994b116
0 ETH0.00003130.1
Withdraw1784380372024-02-07 19:23:23649 days ago1707333803IN
0x9Fa006Ee...ee994b116
0 ETH0.000054730.1
Withdraw1784373182024-02-07 19:20:17649 days ago1707333617IN
0x9Fa006Ee...ee994b116
0 ETH0.000054730.1
Withdraw1784357742024-02-07 19:13:34649 days ago1707333214IN
0x9Fa006Ee...ee994b116
0 ETH0.000062810.1
Withdraw1784245362024-02-07 18:24:30649 days ago1707330270IN
0x9Fa006Ee...ee994b116
0 ETH0.000088320.1
Withdraw1738480882024-01-24 23:21:00663 days ago1706138460IN
0x9Fa006Ee...ee994b116
0 ETH0.000018280.1
Withdraw1693514802024-01-11 11:29:51676 days ago1704972591IN
0x9Fa006Ee...ee994b116
0 ETH0.000036420.1
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
3926149712025-10-23 16:43:3625 days ago1761237816
0x9Fa006Ee...ee994b116
0.00032217 ETH
3834773242025-09-27 6:57:5351 days ago1758956273
0x9Fa006Ee...ee994b116
0.00031093 ETH
3818999702025-09-22 17:41:5856 days ago1758562918
0x9Fa006Ee...ee994b116
1.99318058 ETH
3811905712025-09-20 16:27:4158 days ago1758385661
0x9Fa006Ee...ee994b116
0.00113198 ETH
3811905712025-09-20 16:27:4158 days ago1758385661
0x9Fa006Ee...ee994b116
0.00137227 ETH
3811905712025-09-20 16:27:4158 days ago1758385661
0x9Fa006Ee...ee994b116
0.00216416 ETH
3811905712025-09-20 16:27:4158 days ago1758385661
0x9Fa006Ee...ee994b116
0.00250202 ETH
3810234692025-09-20 4:52:0759 days ago1758343927
0x9Fa006Ee...ee994b116
0.00027938 ETH
3736294272025-08-29 19:38:3780 days ago1756496317
0x9Fa006Ee...ee994b116
0.00028744 ETH
3729552132025-08-27 20:54:2182 days ago1756328061
0x9Fa006Ee...ee994b116
0.00027315 ETH
3713630752025-08-23 6:30:4286 days ago1755930642
0x9Fa006Ee...ee994b116
0.00026323 ETH
3713150912025-08-23 3:11:0187 days ago1755918661
0x9Fa006Ee...ee994b116
0.00026539 ETH
3615465952025-07-25 21:32:09115 days ago1753479129
0x9Fa006Ee...ee994b116
0.00033628 ETH
3607587662025-07-23 14:55:16117 days ago1753282516
0x9Fa006Ee...ee994b116
0.00034626 ETH
3586877562025-07-17 15:18:17123 days ago1752765497
0x9Fa006Ee...ee994b116
0.00036717 ETH
3585534432025-07-17 5:59:49124 days ago1752731989
0x9Fa006Ee...ee994b116
0.0003705 ETH
3556138342025-07-08 17:55:48132 days ago1751997348
0x9Fa006Ee...ee994b116
0.0004759 ETH
3539319422025-07-03 20:40:06137 days ago1751575206
0x9Fa006Ee...ee994b116
0.00048171 ETH
3483698142025-06-17 17:35:44153 days ago1750181744
0x9Fa006Ee...ee994b116
0.00050266 ETH
3468479612025-06-13 7:38:03157 days ago1749800283
0x9Fa006Ee...ee994b116
0.00049444 ETH
3467741072025-06-13 2:29:47158 days ago1749781787
0x9Fa006Ee...ee994b116
0.0025144 ETH
3423303892025-05-31 4:38:24171 days ago1748666304
0x9Fa006Ee...ee994b116
0.00049551 ETH
3410814152025-05-27 13:31:37174 days ago1748352697
0x9Fa006Ee...ee994b116
0.00046775 ETH
3354735372025-05-11 6:02:16191 days ago1746943336
0x9Fa006Ee...ee994b116
0.00049049 ETH
3285827062025-04-21 5:17:27211 days ago1745212647
0x9Fa006Ee...ee994b116
0.00076223 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ReferralHub

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
import "./IReferralHub.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "../registry/ARBID.sol";
import "../resolvers/profiles/AddrResolver.sol";
import "../resolvers/profiles/NameResolver.sol";
import "../registry/IReverseRegistrar.sol";

contract ReferralHub is IReferralHub, Ownable, ReentrancyGuard {
    // ReferralHub controllers that can update referral count and related states.
    mapping(address => bool) public controllers;

    // Commission configuration
    struct Comission {
        // The number of minimum referrals that is required for the rate.
        uint256 minimumReferralCount;
        // Percentage of registration fee that will be deposited to referrer.
        uint256 referrer;
        // Percentage of registration fee that will be discounted to referee.
        uint256 referee;
    }
    //map comission chart to a level
    mapping(uint256 => Comission) public comissionCharts;
    // map from refferral domain name nodehash to the number of referrals.
    mapping(bytes32 => uint256) public referralCount;
    // map address to the amount of bonus.
    mapping(address => uint256) public referralBalance;
    // Map partner's domain's nodehash to customized commission rate.
    mapping(bytes32 => Comission) public partnerComissionCharts;

    bytes32 constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;
    bytes32 constant lookup = 0x3031323334353637383961626364656600000000000000000000000000000000;

    ARBID immutable arbid;

    constructor(ARBID _arbid) {
        arbid = _arbid;
        comissionCharts[1] = Comission(0, 5, 0);
        comissionCharts[2] = Comission(30, 8, 0);
        comissionCharts[3] = Comission(100, 11, 0);
        comissionCharts[4] = Comission(600, 15, 0);
        comissionCharts[5] = Comission(100000000, 15, 0);
        comissionCharts[6] = Comission(100000000, 15, 0);
        comissionCharts[7] = Comission(100000000, 15, 0);
        comissionCharts[8] = Comission(100000000, 15, 0);
        comissionCharts[9] = Comission(100000000, 15, 0);
        comissionCharts[10] = Comission(100000000, 15, 0);
    }

    modifier onlyController() {
        require(controllers[msg.sender], "Not a authorized controller");
        _;
    }

    modifier validLevel(uint256 _level) {
        require(_level >= 1 && _level <= 10, "Invalid level");
        _;
    }

    function getNodehash(string calldata name, string calldata tld) public pure returns (bytes32) {
        bytes32 nameHash = keccak256(bytes(name));
        bytes32 tldHash = keccak256(abi.encodePacked(bytes32(0), keccak256(bytes(tld))));
        return keccak256(abi.encodePacked(tldHash, nameHash));
    }

    function getReverseNodehash(address addr) public pure 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 Ethereum 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 isReferralEligible(bytes32 nodeHash) external view override returns (bool, address) {
        address resolverAddress = arbid.resolver(nodeHash);
        if (resolverAddress == address(0)) {
            return (false, address(0));
        }
        AddrResolver resolver = AddrResolver(resolverAddress);
        address resolvedAddress = resolver.addr(nodeHash);
        bytes32 reverseNodeHash = getReverseNodehash(resolvedAddress);
        address reverseResolverAddress = arbid.resolver(reverseNodeHash);

        if (reverseResolverAddress == address(0)) {
            return (false, address(0));
        }

        return (true, resolvedAddress);
    }

    function isPartner(bytes32 nodeHash) public view returns (bool) {
        return partnerComissionCharts[nodeHash].referrer > 0 || partnerComissionCharts[nodeHash].referee > 0;
    }

    function getReferralCommisionFee(uint256 price, bytes32 nodeHash) public view returns (uint256, uint256) {
        uint256 referrerRate = 0;
        uint256 refereeRate = 0;
        uint256 level = 1;
        if (isPartner(nodeHash)) {
            referrerRate = partnerComissionCharts[nodeHash].referrer;
            refereeRate = partnerComissionCharts[nodeHash].referee;
        } else {
            (level, referrerRate, refereeRate) = _getComissionChart(referralCount[nodeHash]);
        }
        uint256 referrerFee = (price * referrerRate) / 100;
        uint256 refereeFee = (price * refereeRate) / 100;
        return (referrerFee, refereeFee);
    }

    function setPartnerComissionChart(
        string calldata name,
        string calldata tld,
        uint256 minimumReferralCount,
        uint256 referrerRate,
        uint256 refereeRate
    ) external onlyOwner {
        bytes32 nodeHash = getNodehash(name, tld);
        partnerComissionCharts[nodeHash] = Comission(minimumReferralCount, referrerRate, refereeRate);
    }

    function addNewReferralRecord(bytes32 referrerNodeHash) external override onlyController {
        referralCount[referrerNodeHash] += 1;
        emit NewReferralRecord(referrerNodeHash);
    }

    function _getReferralCount(bytes32 referrerNodeHash) internal view returns (uint256) {
        return referralCount[referrerNodeHash];
    }

    function _getComissionChart(uint256 referralAmount)
        internal
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 curLevel = 1;
        uint256 referrerRate;
        uint256 refereeRate;
        uint256 level;
        while (referralAmount >= comissionCharts[curLevel].minimumReferralCount && curLevel <= 10)  {
            referrerRate = comissionCharts[curLevel].referrer;
            refereeRate = comissionCharts[curLevel].referee;
            level = curLevel;
            curLevel += 1;
        }
        return (level, referrerRate, refereeRate);
    }

    function getReferralDetails(bytes32 referrerNodeHash)
        external
        view
        override
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 referralNum = _getReferralCount(referrerNodeHash);
        (uint256 level, uint256 referrerRate, uint256 refereeRate) = _getComissionChart(referralNum);
        return (referralNum, level, referrerRate, refereeRate);
    }

    function setComissionChart(
        uint256 level,
        uint256 minimumAmount,
        uint256 referrerRate,
        uint256 refereeRate
    ) external onlyOwner validLevel(level) {
        comissionCharts[level] = Comission(minimumAmount, referrerRate, refereeRate);
    }

    function deposit(address _referrer) external payable onlyController{
        require(msg.value > 0, "Invalid amount");
        referralBalance[_referrer] += msg.value;
        emit depositRecord(_referrer, msg.value);
    }

    function withdraw() external nonReentrant{
        uint256 amount = referralBalance[msg.sender];
        require(amount > 0, "Insufficient balance");
        referralBalance[msg.sender] = 0;
        payable(msg.sender).transfer(amount);
        emit withdrawRecord(msg.sender, amount);
    }

    function addController(address controller) external override onlyOwner {
        controllers[controller] = true;
        emit ControllerAdded(controller);
    }

    function removeController(address controller) external override onlyOwner {
        controllers[controller] = false;
        emit ControllerRemoved(controller);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface IReferralHub {
    event ControllerAdded(address indexed controller);
    event ControllerRemoved(address indexed controller);
    event NewReferralRecord(bytes32 indexed referralNodeHash);
    event depositRecord(address indexed addr, uint256 amount);
    event withdrawRecord(address indexed addr, uint256 amount);
    

    //Authorises a controller, who can issue a gift card.
    function addController(address controller) external;

    // Revoke controller permission for an address.
    function removeController(address controller) external;

    //check if a domain name is eligible for referral program
    function isReferralEligible(
        bytes32 nodeHash
    ) external view returns (bool, address);

    //add a referral count for a given referrer
    function addNewReferralRecord(bytes32 referrerNodeHash) external;

    //get a domain's referral count, referral comission and referee comission
    function getReferralDetails(bytes32 referrerNodeHash)
        external
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        );

    //set partner comission chart
    function setPartnerComissionChart(
        string calldata name,
        string calldata tld,
        uint256 minimumReferralCount,
        uint256 referrerComission,
        uint256 refereeComission
    ) external;

    function getReferralCommisionFee(uint256 price, bytes32 nodeHash) external view returns (uint256, uint256);

    function deposit(address _referrer) external payable;

    function withdraw() external;
}

pragma solidity >=0.8.4;

interface ARBID {
    // Logged when the owner of a node assigns a new owner to a subnode.
    event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);

    // Logged when the owner of a node transfers ownership to a new account.
    event Transfer(bytes32 indexed node, address owner);

    // Logged when the resolver for a node changes.
    event NewResolver(bytes32 indexed node, address resolver);

    // Logged when the TTL of a node changes
    event NewTTL(bytes32 indexed node, uint64 ttl);

    // Logged when an operator is added or removed.
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function setRecord(
        bytes32 node,
        address owner,
        address resolver,
        uint64 ttl
    ) external;

    function setSubnodeRecord(
        bytes32 node,
        bytes32 label,
        address owner,
        address resolver,
        uint64 ttl
    ) external;

    function setSubnodeOwner(
        bytes32 node,
        bytes32 label,
        address owner
    ) external returns (bytes32);

    function setResolver(bytes32 node, address resolver) external;

    function setOwner(bytes32 node, address owner) external;

    function setTTL(bytes32 node, uint64 ttl) external;

    function setApprovalForAll(address operator, bool approved) external;

    function owner(bytes32 node) external view returns (address);

    function resolver(bytes32 node) external view returns (address);

    function ttl(bytes32 node) external view returns (uint64);

    function recordExists(bytes32 node) external view returns (bool);

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

import "../ResolverBase.sol";
import "./IAddrResolver.sol";
import "./IAddressResolver.sol";

abstract contract AddrResolver is IAddrResolver, IAddressResolver, ResolverBase {
    uint256 constant private COIN_TYPE_ARB1 = 2147525809;
    uint256 constant private COIN_TYPE_ARB_NOVA = 2147525809;


    mapping(bytes32=>mapping(uint=>bytes)) _addresses;

    /**
     * Sets the address associated with an ENS node.
     * May only be called by the owner of that node in the ENS registry.
     * @param node The node to update.
     * @param a The address to set.
     */
    function setAddr(bytes32 node, address a) virtual external authorised(node) {
        setAddr(node, COIN_TYPE_ARB1, addressToBytes(a));
    }

    function setAddr(bytes32 node, uint coinType, address a) virtual external authorised(node) {
        setAddr(node, coinType, addressToBytes(a));
    }

    /**
     * Returns the address associated with an ENS node.
     * @param node The ENS node to query.
     * @return The associated address.
     */
    function addr(bytes32 node) virtual override public view returns (address payable) {
        bytes memory a = addr(node, COIN_TYPE_ARB1);
        if(a.length == 0) {
            return payable(0);
        }
        return bytesToAddress(a);
    }
    
    function setAddr(bytes32 node, uint coinType, bytes memory a) virtual public authorised(node) {
        emit AddressChanged(node, coinType, a);        
        _addresses[node][coinType] = a;
    }

    function addr(bytes32 node, uint coinType) virtual override public view returns(bytes memory) {
        return _addresses[node][coinType];
    }

    function supportsInterface(bytes4 interfaceID) virtual override public pure returns(bool) {
        return interfaceID == type(IAddrResolver).interfaceId || interfaceID == type(IAddressResolver).interfaceId || super.supportsInterface(interfaceID);
    }

    function bytesToAddress(bytes memory b) internal pure returns(address payable a) {
        require(b.length == 20);
        assembly {
            a := div(mload(add(b, 32)), exp(256, 12))
        }
    }

    function addressToBytes(address a) internal pure returns(bytes memory b) {
        b = new bytes(20);
        assembly {
            mstore(add(b, 32), mul(a, exp(256, 12)))
        }
    }
}

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 setNameForAddr(
        address addr,
        address owner,
        address resolver,
        string memory name
    ) external returns (bytes32);

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

import "../ResolverBase.sol";
import "./INameResolver.sol";

abstract contract NameResolver is INameResolver, ResolverBase {
    mapping(bytes32=>string) names;

    /**
     * Sets the name associated with an ENS node, for reverse records.
     * May only be called by the owner of that node in the ENS registry.
     * @param node The node to update.
     */
    function setName(bytes32 node, string calldata newName) virtual external authorised(node) {
        names[node] = newName;
        emit NameChanged(node, newName);
    }

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

    function supportsInterface(bytes4 interfaceID) virtual override public pure returns(bool) {
        return interfaceID == type(INameResolver).interfaceId || super.supportsInterface(interfaceID);
    }
}

// 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 8 of 15 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

import "./SupportsInterface.sol";

abstract contract ResolverBase is SupportsInterface {
    function isAuthorised(bytes32 node) internal virtual view returns(bool);

    modifier authorised(bytes32 node) {
        require(isAuthorised(node));
        _;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

/**
 * Interface for the new (multicoin) addr function.
 */
interface IAddressResolver {
    event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress);

    function addr(bytes32 node, uint coinType) external view returns(bytes memory);
}

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

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

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

File 12 of 15 : SupportsInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "./ISupportsInterface.sol";

abstract contract SupportsInterface is ISupportsInterface {
    function supportsInterface(bytes4 interfaceID) virtual override public pure returns(bool) {
        return interfaceID == type(ISupportsInterface).interfaceId;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface ISupportsInterface {
    function supportsInterface(bytes4 interfaceID) external pure returns(bool);
}

File 14 of 15 : 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 ENS node, for reverse records.
     * Defined in EIP181.
     * @param node The ENS node to query.
     * @return The associated name.
     */
    function name(bytes32 node) external view returns (string memory);
}

// SPDX-License-Identifier: MIT
// 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 Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract ARBID","name":"_arbid","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"referralNodeHash","type":"bytes32"}],"name":"NewReferralRecord","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":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawRecord","type":"event"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"referrerNodeHash","type":"bytes32"}],"name":"addNewReferralRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"comissionCharts","outputs":[{"internalType":"uint256","name":"minimumReferralCount","type":"uint256"},{"internalType":"uint256","name":"referrer","type":"uint256"},{"internalType":"uint256","name":"referee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"controllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"tld","type":"string"}],"name":"getNodehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes32","name":"nodeHash","type":"bytes32"}],"name":"getReferralCommisionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"referrerNodeHash","type":"bytes32"}],"name":"getReferralDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getReverseNodehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodeHash","type":"bytes32"}],"name":"isPartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodeHash","type":"bytes32"}],"name":"isReferralEligible","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"partnerComissionCharts","outputs":[{"internalType":"uint256","name":"minimumReferralCount","type":"uint256"},{"internalType":"uint256","name":"referrer","type":"uint256"},{"internalType":"uint256","name":"referee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"referralCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"minimumAmount","type":"uint256"},{"internalType":"uint256","name":"referrerRate","type":"uint256"},{"internalType":"uint256","name":"refereeRate","type":"uint256"}],"name":"setComissionChart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"tld","type":"string"},{"internalType":"uint256","name":"minimumReferralCount","type":"uint256"},{"internalType":"uint256","name":"referrerRate","type":"uint256"},{"internalType":"uint256","name":"refereeRate","type":"uint256"}],"name":"setPartnerComissionChart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051611c75380380611c7583398101604081905261002f91610605565b610038336105b5565b60018080556001600160a01b039091166080526040805160608082018352600080835260056020808501828152858701848152978452600380835295517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c55517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d5595517fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054e5584518084018652601e8152600881880181815282880185815260028652878a5292517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d55517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e5590517fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4f558551808501875260648152600b818901908152818801858152878652878a5291517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af55517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b055517fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b155855180850187526102588152600f81890181815282890186815260048752888b5292517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246555517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724665590517f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246755865180860188526305f5e100808252818a01838152828a01878152958752888b5291517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422505590517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422515592517f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942252558651808601885283815280890182815281890186815260068752888b5291517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f355517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f455517fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f5558651808601885283815280890182815281890186815260078752888b5291517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd255517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd355517ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd45586518086018852838152808901828152818901868152938652878a5290517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe55517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf5590517f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fc0558551808501875282815280880182815281880185815260098652878a5291517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45855517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45955517f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45a5585519384018652908352828601908152938201818152600a9091529190935291517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d5355517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d5455517f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d5555610635565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561061757600080fd5b81516001600160a01b038116811461062e57600080fd5b9392505050565b60805161161e61065760003960008181610581015261072f015261161e6000f3fe60806040526004361061016a5760003560e01c8063a7fc7a07116100cb578063e238c5c11161007f578063f340fa0111610059578063f340fa0114610495578063f6a74ed7146104a8578063fb32790c146104c857600080fd5b8063e238c5c114610435578063f1af64b314610455578063f2fde38b1461047557600080fd5b8063c9556276116100b0578063c9556276146103b8578063d18568bf146103e5578063da8c229e1461040557600080fd5b8063a7fc7a0714610363578063be64b0691461038357600080fd5b8063563bfecc11610122578063715018a611610107578063715018a6146102f9578063798af0521461030e5780638da5cb5b1461032e57600080fd5b8063563bfecc1461029e5780636cc6b278146102d957600080fd5b8063226334761161015357806322633476146101e45780633448d7771461023b5780633ccfd60b1461028757600080fd5b806304a3cf471461016f5780630fededb2146101b4575b600080fd5b34801561017b57600080fd5b5061018f61018a366004611314565b610504565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b3480156101c057600080fd5b506101d46101cf366004611314565b610545565b60405190151581526020016101ab565b3480156101f057600080fd5b506102206101ff366004611314565b60066020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101ab565b34801561024757600080fd5b5061025b610256366004611314565b61057a565b60408051921515835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101ab565b34801561029357600080fd5b5061029c6107d7565b005b3480156102aa57600080fd5b506102cb6102b936600461134f565b60056020526000908152604090205481565b6040519081526020016101ab565b3480156102e557600080fd5b5061029c6102f4366004611314565b610909565b34801561030557600080fd5b5061029c6109ba565b34801561031a57600080fd5b506102cb61032936600461134f565b610a2d565b34801561033a57600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ab565b34801561036f57600080fd5b5061029c61037e36600461134f565b610a88565b34801561038f57600080fd5b506103a361039e366004611373565b610b66565b604080519283526020830191909152016101ab565b3480156103c457600080fd5b506102cb6103d3366004611314565b60046020526000908152604090205481565b3480156103f157600080fd5b5061029c610400366004611395565b610c02565b34801561041157600080fd5b506101d461042036600461134f565b60026020526000908152604090205460ff1681565b34801561044157600080fd5b506102cb610450366004611409565b610d04565b34801561046157600080fd5b5061029c610470366004611475565b610db6565b34801561048157600080fd5b5061029c61049036600461134f565b610e6a565b61029c6104a336600461134f565b610f66565b3480156104b457600080fd5b5061029c6104c336600461134f565b61109d565b3480156104d457600080fd5b506102206104e3366004611314565b60036020526000908152604090208054600182015460029092015490919083565b60008060008060006105228660009081526004602052604090205490565b9050600080600061053284611178565b959b919a50985093965092945050505050565b600081815260066020526040812060010154151580610574575060008281526006602052604090206002015415155b92915050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016105da91815260200190565b602060405180830381865afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b91906114fc565b905073ffffffffffffffffffffffffffffffffffffffff81166106445750600093849350915050565b6040517f3b3b57de00000000000000000000000000000000000000000000000000000000815260048101859052819060009073ffffffffffffffffffffffffffffffffffffffff831690633b3b57de90602401602060405180830381865afa1580156106b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d891906114fc565b905060006106e582610a2d565b6040517f0178b8bf0000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630178b8bf90602401602060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a91906114fc565b905073ffffffffffffffffffffffffffffffffffffffff81166107c7575060009788975095505050505050565b5060019791965090945050505050565b6002600154141561082f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015533600090815260056020526040902054806108915760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610826565b336000818152600560205260408082208290555183156108fc0291849190818181858888f193505050501580156108cc573d6000803e3d6000fd5b5060405181815233907ff4aef29cd1ceadbbf79c76c7ac42cc8c89d7f444f610fc5dbcd5915fb93adadd9060200160405180910390a25060018055565b3360009081526002602052604090205460ff166109685760405162461bcd60e51b815260206004820152601b60248201527f4e6f74206120617574686f72697a656420636f6e74726f6c6c657200000000006044820152606401610826565b6000818152600460205260408120805460019290610987908490611548565b909155505060405181907f4fbcef6f43e643981ef8dab0617ec510a86e855cea730fe729f77e9fc8e2f8e190600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b610a2b60006111e3565b565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2610a5983611258565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b60008080806001610b7686610545565b15610b9e57600086815260066020526040902060018101546002909101549093509150610bbe565b600086815260046020526040902054610bb690611178565b909450925090505b60006064610bcc858a611560565b610bd6919061159d565b905060006064610be6858b611560565b610bf0919061159d565b919650909450505050505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b8360018110158015610c7c5750600a8111155b610cc85760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964206c6576656c000000000000000000000000000000000000006044820152606401610826565b50604080516060810182529384526020808501938452848201928352600095865260039052909320915182555160018201559051600290910155565b6000808585604051610d179291906115d8565b60405190819003812091506000908190610d3490879087906115d8565b604051908190038120610d539291602001918252602082015260400190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152828252805160209182012081840152828201949094528051808303820181526060909201905280519201919091209695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e1d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b6000610e2b88888888610d04565b60408051606081018252958652602080870195865286820194855260009283526006905290209351845550905160018301555160029091015550505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff8116610f5a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610826565b610f63816111e3565b50565b3360009081526002602052604090205460ff16610fc55760405162461bcd60e51b815260206004820152601b60248201527f4e6f74206120617574686f72697a656420636f6e74726f6c6c657200000000006044820152606401610826565b600034116110155760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120805434929061104a908490611548565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff8216907f2f26cb6ed1a97b86fc76f998713666e9fafb52cb0fa33b0896c592901b601daf9060200160405180910390a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b6000808060018180805b60008481526003602052604090205488108015906111a15750600a8411155b156111d75750505060008181526003602052604090206001808201546002909201549083906111d09082611548565b9350611182565b97919650945092505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060285b8015611308577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a81536010909204917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a815360108304925061125d565b50506028600020919050565b60006020828403121561132657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6357600080fd5b60006020828403121561136157600080fd5b813561136c8161132d565b9392505050565b6000806040838503121561138657600080fd5b50508035926020909101359150565b600080600080608085870312156113ab57600080fd5b5050823594602084013594506040840135936060013592509050565b60008083601f8401126113d957600080fd5b50813567ffffffffffffffff8111156113f157600080fd5b602083019150836020828501011115610bfb57600080fd5b6000806000806040858703121561141f57600080fd5b843567ffffffffffffffff8082111561143757600080fd5b611443888389016113c7565b9096509450602087013591508082111561145c57600080fd5b50611469878288016113c7565b95989497509550505050565b600080600080600080600060a0888a03121561149057600080fd5b873567ffffffffffffffff808211156114a857600080fd5b6114b48b838c016113c7565b909950975060208a01359150808211156114cd57600080fd5b506114da8a828b016113c7565b989b979a50986040810135976060820135975060809091013595509350505050565b60006020828403121561150e57600080fd5b815161136c8161132d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561155b5761155b611519565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561159857611598611519565b500290565b6000826115d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818382376000910190815291905056fea2646970667358221220b5f8c6176893db1f05021a4af7280e5045ed6bab5c16553ebdd6bea3ccf1f3f464736f6c634300080c00330000000000000000000000004a067ee58e73ac5e4a43722e008dfdf65b2bf348

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063a7fc7a07116100cb578063e238c5c11161007f578063f340fa0111610059578063f340fa0114610495578063f6a74ed7146104a8578063fb32790c146104c857600080fd5b8063e238c5c114610435578063f1af64b314610455578063f2fde38b1461047557600080fd5b8063c9556276116100b0578063c9556276146103b8578063d18568bf146103e5578063da8c229e1461040557600080fd5b8063a7fc7a0714610363578063be64b0691461038357600080fd5b8063563bfecc11610122578063715018a611610107578063715018a6146102f9578063798af0521461030e5780638da5cb5b1461032e57600080fd5b8063563bfecc1461029e5780636cc6b278146102d957600080fd5b8063226334761161015357806322633476146101e45780633448d7771461023b5780633ccfd60b1461028757600080fd5b806304a3cf471461016f5780630fededb2146101b4575b600080fd5b34801561017b57600080fd5b5061018f61018a366004611314565b610504565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b3480156101c057600080fd5b506101d46101cf366004611314565b610545565b60405190151581526020016101ab565b3480156101f057600080fd5b506102206101ff366004611314565b60066020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101ab565b34801561024757600080fd5b5061025b610256366004611314565b61057a565b60408051921515835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101ab565b34801561029357600080fd5b5061029c6107d7565b005b3480156102aa57600080fd5b506102cb6102b936600461134f565b60056020526000908152604090205481565b6040519081526020016101ab565b3480156102e557600080fd5b5061029c6102f4366004611314565b610909565b34801561030557600080fd5b5061029c6109ba565b34801561031a57600080fd5b506102cb61032936600461134f565b610a2d565b34801561033a57600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ab565b34801561036f57600080fd5b5061029c61037e36600461134f565b610a88565b34801561038f57600080fd5b506103a361039e366004611373565b610b66565b604080519283526020830191909152016101ab565b3480156103c457600080fd5b506102cb6103d3366004611314565b60046020526000908152604090205481565b3480156103f157600080fd5b5061029c610400366004611395565b610c02565b34801561041157600080fd5b506101d461042036600461134f565b60026020526000908152604090205460ff1681565b34801561044157600080fd5b506102cb610450366004611409565b610d04565b34801561046157600080fd5b5061029c610470366004611475565b610db6565b34801561048157600080fd5b5061029c61049036600461134f565b610e6a565b61029c6104a336600461134f565b610f66565b3480156104b457600080fd5b5061029c6104c336600461134f565b61109d565b3480156104d457600080fd5b506102206104e3366004611314565b60036020526000908152604090208054600182015460029092015490919083565b60008060008060006105228660009081526004602052604090205490565b9050600080600061053284611178565b959b919a50985093965092945050505050565b600081815260066020526040812060010154151580610574575060008281526006602052604090206002015415155b92915050565b60008060007f0000000000000000000000004a067ee58e73ac5e4a43722e008dfdf65b2bf34873ffffffffffffffffffffffffffffffffffffffff16630178b8bf856040518263ffffffff1660e01b81526004016105da91815260200190565b602060405180830381865afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b91906114fc565b905073ffffffffffffffffffffffffffffffffffffffff81166106445750600093849350915050565b6040517f3b3b57de00000000000000000000000000000000000000000000000000000000815260048101859052819060009073ffffffffffffffffffffffffffffffffffffffff831690633b3b57de90602401602060405180830381865afa1580156106b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d891906114fc565b905060006106e582610a2d565b6040517f0178b8bf0000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004a067ee58e73ac5e4a43722e008dfdf65b2bf3481690630178b8bf90602401602060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a91906114fc565b905073ffffffffffffffffffffffffffffffffffffffff81166107c7575060009788975095505050505050565b5060019791965090945050505050565b6002600154141561082f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015533600090815260056020526040902054806108915760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610826565b336000818152600560205260408082208290555183156108fc0291849190818181858888f193505050501580156108cc573d6000803e3d6000fd5b5060405181815233907ff4aef29cd1ceadbbf79c76c7ac42cc8c89d7f444f610fc5dbcd5915fb93adadd9060200160405180910390a25060018055565b3360009081526002602052604090205460ff166109685760405162461bcd60e51b815260206004820152601b60248201527f4e6f74206120617574686f72697a656420636f6e74726f6c6c657200000000006044820152606401610826565b6000818152600460205260408120805460019290610987908490611548565b909155505060405181907f4fbcef6f43e643981ef8dab0617ec510a86e855cea730fe729f77e9fc8e2f8e190600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b610a2b60006111e3565b565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2610a5983611258565b604080516020810193909352820152606001604051602081830303815290604052805190602001209050919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b60008080806001610b7686610545565b15610b9e57600086815260066020526040902060018101546002909101549093509150610bbe565b600086815260046020526040902054610bb690611178565b909450925090505b60006064610bcc858a611560565b610bd6919061159d565b905060006064610be6858b611560565b610bf0919061159d565b919650909450505050505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b8360018110158015610c7c5750600a8111155b610cc85760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964206c6576656c000000000000000000000000000000000000006044820152606401610826565b50604080516060810182529384526020808501938452848201928352600095865260039052909320915182555160018201559051600290910155565b6000808585604051610d179291906115d8565b60405190819003812091506000908190610d3490879087906115d8565b604051908190038120610d539291602001918252602082015260400190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152828252805160209182012081840152828201949094528051808303820181526060909201905280519201919091209695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e1d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b6000610e2b88888888610d04565b60408051606081018252958652602080870195865286820194855260009283526006905290209351845550905160018301555160029091015550505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff8116610f5a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610826565b610f63816111e3565b50565b3360009081526002602052604090205460ff16610fc55760405162461bcd60e51b815260206004820152601b60248201527f4e6f74206120617574686f72697a656420636f6e74726f6c6c657200000000006044820152606401610826565b600034116110155760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120805434929061104a908490611548565b909155505060405134815273ffffffffffffffffffffffffffffffffffffffff8216907f2f26cb6ed1a97b86fc76f998713666e9fafb52cb0fa33b0896c592901b601daf9060200160405180910390a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610826565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b6000808060018180805b60008481526003602052604090205488108015906111a15750600a8411155b156111d75750505060008181526003602052604090206001808201546002909201549083906111d09082611548565b9350611182565b97919650945092505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060285b8015611308577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a81536010909204917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600f84161a815360108304925061125d565b50506028600020919050565b60006020828403121561132657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6357600080fd5b60006020828403121561136157600080fd5b813561136c8161132d565b9392505050565b6000806040838503121561138657600080fd5b50508035926020909101359150565b600080600080608085870312156113ab57600080fd5b5050823594602084013594506040840135936060013592509050565b60008083601f8401126113d957600080fd5b50813567ffffffffffffffff8111156113f157600080fd5b602083019150836020828501011115610bfb57600080fd5b6000806000806040858703121561141f57600080fd5b843567ffffffffffffffff8082111561143757600080fd5b611443888389016113c7565b9096509450602087013591508082111561145c57600080fd5b50611469878288016113c7565b95989497509550505050565b600080600080600080600060a0888a03121561149057600080fd5b873567ffffffffffffffff808211156114a857600080fd5b6114b48b838c016113c7565b909950975060208a01359150808211156114cd57600080fd5b506114da8a828b016113c7565b989b979a50986040810135976060820135975060809091013595509350505050565b60006020828403121561150e57600080fd5b815161136c8161132d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561155b5761155b611519565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561159857611598611519565b500290565b6000826115d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818382376000910190815291905056fea2646970667358221220b5f8c6176893db1f05021a4af7280e5045ed6bab5c16553ebdd6bea3ccf1f3f464736f6c634300080c0033

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

0000000000000000000000004a067ee58e73ac5e4a43722e008dfdf65b2bf348

-----Decoded View---------------
Arg [0] : _arbid (address): 0x4a067EE58e73ac5E4a43722E008DFdf65B2bF348

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004a067ee58e73ac5e4a43722e008dfdf65b2bf348


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.