ETH Price: $2,176.02 (+2.33%)

Contract

0x7796b40701Ac2e9D292D1D9E64CdC1cBDda3765d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Emergency Withdr...247289792026-03-24 17:46:1123 hrs ago1774374371IN
0x7796b407...BDda3765d
0 ETH0.000099942.16367438
Set Operator247288862026-03-24 17:27:3523 hrs ago1774373255IN
0x7796b407...BDda3765d
0 ETH0.000008350.17369209

Latest 24 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer247289792026-03-24 17:46:1123 hrs ago1774374371
0x7796b407...BDda3765d
0.05499703 ETH
Receive Revenue247289402026-03-24 17:38:2323 hrs ago1774373903
0x7796b407...BDda3765d
0.00193974 ETH
Receive Revenue247289402026-03-24 17:38:2323 hrs ago1774373903
0x7796b407...BDda3765d
0.00198521 ETH
Receive Revenue247289402026-03-24 17:38:2323 hrs ago1774373903
0x7796b407...BDda3765d
0.00200192 ETH
Receive Revenue247289392026-03-24 17:38:1123 hrs ago1774373891
0x7796b407...BDda3765d
0.00204696 ETH
Receive Revenue247289392026-03-24 17:38:1123 hrs ago1774373891
0x7796b407...BDda3765d
0.00208344 ETH
Receive Revenue247289382026-03-24 17:37:5923 hrs ago1774373879
0x7796b407...BDda3765d
0.00212517 ETH
Receive Revenue247289372026-03-24 17:37:4723 hrs ago1774373867
0x7796b407...BDda3765d
0.00217058 ETH
Receive Revenue247289372026-03-24 17:37:4723 hrs ago1774373867
0x7796b407...BDda3765d
0.00221621 ETH
Receive Revenue247289362026-03-24 17:37:3523 hrs ago1774373855
0x7796b407...BDda3765d
0.00220126 ETH
Receive Revenue247289352026-03-24 17:37:2323 hrs ago1774373843
0x7796b407...BDda3765d
0.0022563 ETH
Receive Revenue247289352026-03-24 17:37:2323 hrs ago1774373843
0x7796b407...BDda3765d
0.00229837 ETH
Receive Revenue247289352026-03-24 17:37:2323 hrs ago1774373843
0x7796b407...BDda3765d
0.00234191 ETH
Receive Revenue247289352026-03-24 17:37:2323 hrs ago1774373843
0x7796b407...BDda3765d
0.00239911 ETH
Receive Revenue247289342026-03-24 17:37:1123 hrs ago1774373831
0x7796b407...BDda3765d
0.00246179 ETH
Receive Revenue247289342026-03-24 17:37:1123 hrs ago1774373831
0x7796b407...BDda3765d
0.00252696 ETH
Receive Revenue247289342026-03-24 17:37:1123 hrs ago1774373831
0x7796b407...BDda3765d
0.00259475 ETH
Receive Revenue247289332026-03-24 17:36:5923 hrs ago1774373819
0x7796b407...BDda3765d
0.00266531 ETH
Receive Revenue247289332026-03-24 17:36:5923 hrs ago1774373819
0x7796b407...BDda3765d
0.00273879 ETH
Receive Revenue247289332026-03-24 17:36:5923 hrs ago1774373819
0x7796b407...BDda3765d
0.00281009 ETH
Receive Revenue247289332026-03-24 17:36:5923 hrs ago1774373819
0x7796b407...BDda3765d
0.00288314 ETH
Receive Revenue247289322026-03-24 17:36:4723 hrs ago1774373807
0x7796b407...BDda3765d
0.00296236 ETH
Receive Revenue247289312026-03-24 17:36:3523 hrs ago1774373795
0x7796b407...BDda3765d
0.0030449 ETH
Receive Revenue247289282026-03-24 17:35:5923 hrs ago1774373759
0x7796b407...BDda3765d
0.00224262 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NCITreasury

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @title NCITreasury
 * @notice Primary treasury for the New Coin Index protocol.
 *
 * @dev Receives ETH from NCIToken's auto-swap tax mechanism and maintains
 *      internal accounting across four allocation buckets:
 *
 *        70%  → Index Capital   (used by NCIAcquisitionEngine for positions)
 *        15%  → Infrastructure  (protocol ops, development, hosting)
 *        10%  → Emergency Reserve (liquidty backstop, black-swan fund)
 *         5%  → Community       (grants, incentives, DAO allocation)
 *
 *      Access levels:
 *        Owner    - full admin (set operator, update wallets, emergency withdraw)
 *        Operator - authorised to call allocateForAcquisition() and
 *                   receiveFromAcquisition(); intended to be NCIAcquisitionEngine
 *
 *      Time-lock: any single withdrawal > TIMELOCK_THRESHOLD (10 ETH) must be
 *      queued for TIMELOCK_DELAY (48 hours) before execution.
 */

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

contract NCITreasury is Ownable, ReentrancyGuard {
    // =========================================================================
    // Constants
    // =========================================================================

    uint256 public constant TIMELOCK_THRESHOLD = 10 ether;
    uint256 public constant TIMELOCK_DELAY     = 48 hours;

    uint256 public constant INDEX_SHARE_BPS     = 7_000; // 70%
    uint256 public constant INFRA_SHARE_BPS     = 1_500; // 15%
    uint256 public constant EMERGENCY_SHARE_BPS = 1_000; // 10%
    uint256 public constant COMMUNITY_SHARE_BPS =   500; //  5%
    uint256 public constant BPS_DENOMINATOR     = 10_000;

    // =========================================================================
    // State - balances (virtual accounting, not separate ETH pools)
    // =========================================================================

    /// @notice Portion of treasury ETH allocated to index capital activities.
    uint256 public indexCapitalBalance;

    /// @notice Portion allocated to infrastructure / operations.
    uint256 public infraBalance;

    /// @notice Portion allocated to the emergency reserve.
    uint256 public emergencyBalance;

    /// @notice Portion allocated to community programmes.
    uint256 public communityBalance;

    /// @notice Total ETH ever received by this contract.
    uint256 public totalETHReceived;

    /// @notice Total ETH ever disbursed (to operator for acquisitions, to wallets, etc.).
    uint256 public totalETHDisbursed;

    // =========================================================================
    // State - access control
    // =========================================================================

    /// @notice Authorised operator (expected to be NCIAcquisitionEngine).
    address public operator;

    // =========================================================================
    // State - time-lock queue
    // =========================================================================

    struct WithdrawalRequest {
        address payable recipient;
        uint256 amount;
        uint256 unlocksAt;
        bool    executed;
        bool    cancelled;
        string  reason;
    }

    /// @notice Sequential ID counter for withdrawal requests.
    uint256 public nextRequestId;

    mapping(uint256 => WithdrawalRequest) public withdrawalRequests;

    // =========================================================================
    // Events
    // =========================================================================

    event RevenueReceived(uint256 amount, uint256 toIndex, uint256 toInfra, uint256 toEmergency, uint256 toCommunity);
    event AcquisitionFunded(address indexed acquisitionEngine, uint256 amount, uint256 requestId);
    event AcquisitionProceedsReceived(uint256 amount, uint256 profit);
    event WithdrawalQueued(uint256 indexed requestId, address indexed recipient, uint256 amount, uint256 unlocksAt, string reason);
    event WithdrawalExecuted(uint256 indexed requestId, address indexed recipient, uint256 amount);
    event WithdrawalCancelled(uint256 indexed requestId);
    event ImmediateWithdrawal(address indexed recipient, uint256 amount, string bucket, string reason);
    event OperatorUpdated(address indexed oldOperator, address indexed newOperator);
    event EmergencyWithdraw(address indexed to, uint256 amount);

    // =========================================================================
    // Modifiers
    // =========================================================================

    modifier onlyOperator() {
        require(msg.sender == operator || msg.sender == owner(), "Treasury: not operator");
        _;
    }

    // =========================================================================
    // Constructor
    // =========================================================================

    constructor() Ownable() {}

    // =========================================================================
    // Revenue ingress
    // =========================================================================

    /**
     * @notice Receive ETH from NCIToken and split it into allocation buckets.
     * @dev Called by NCIToken._distributeETH() via INCITreasury interface.
     *      The split mirrors the token contract's TREASURY_SHARE allocation
     *      (this function handles the internal sub-split within the treasury).
     */
    function receiveRevenue() external payable {
        uint256 amount = msg.value;
        require(amount > 0, "Treasury: zero value");

        uint256 toIndex     = (amount * INDEX_SHARE_BPS)     / BPS_DENOMINATOR;
        uint256 toInfra     = (amount * INFRA_SHARE_BPS)     / BPS_DENOMINATOR;
        uint256 toEmergency = (amount * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
        uint256 toCommunity = amount - toIndex - toInfra - toEmergency;

        indexCapitalBalance += toIndex;
        infraBalance        += toInfra;
        emergencyBalance    += toEmergency;
        communityBalance    += toCommunity;
        totalETHReceived    += amount;

        emit RevenueReceived(amount, toIndex, toInfra, toEmergency, toCommunity);
    }

    /// @notice Plain ETH receive - allocates using same split as receiveRevenue().
    receive() external payable {
        if (msg.value > 0) {
            uint256 amount   = msg.value;
            uint256 toIndex  = (amount * INDEX_SHARE_BPS)     / BPS_DENOMINATOR;
            uint256 toInfra  = (amount * INFRA_SHARE_BPS)     / BPS_DENOMINATOR;
            uint256 toEmerg  = (amount * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
            uint256 toComm   = amount - toIndex - toInfra - toEmerg;

            indexCapitalBalance += toIndex;
            infraBalance        += toInfra;
            emergencyBalance    += toEmerg;
            communityBalance    += toComm;
            totalETHReceived    += amount;

            emit RevenueReceived(amount, toIndex, toInfra, toEmerg, toComm);
        }
    }

    // =========================================================================
    // Operator - acquisition funding
    // =========================================================================

    /**
     * @notice Send ETH from the index capital bucket to the operator address
     *         (NCIAcquisitionEngine) to fund a token acquisition.
     * @param amount     ETH to send (wei).
     * @param requestId  Off-chain request reference for traceability.
     */
    function allocateForAcquisition(uint256 amount, uint256 requestId)
        external
        onlyOperator
        nonReentrant
    {
        require(amount > 0,                          "Treasury: zero amount");
        require(amount <= indexCapitalBalance,        "Treasury: insufficient index capital");
        require(address(this).balance >= amount,      "Treasury: insufficient ETH balance");

        indexCapitalBalance -= amount;
        totalETHDisbursed   += amount;

        (bool success,) = payable(operator).call{value: amount}("");
        require(success, "Treasury: ETH transfer failed");

        emit AcquisitionFunded(operator, amount, requestId);
    }

    /**
     * @notice Receive ETH back from the acquisition engine (position exit
     *         proceeds).  Any amount above `costBasis` is treated as profit
     *         and re-allocated proportionally.
     * @param costBasis  The original amount that was sent out for this position.
     */
    function receiveFromAcquisition(uint256 costBasis) external payable onlyOperator {
        require(msg.value > 0, "Treasury: zero value");

        uint256 profit = msg.value > costBasis ? msg.value - costBasis : 0;

        // Return cost basis to index capital
        uint256 toIndex = costBasis > msg.value ? msg.value : costBasis;
        indexCapitalBalance += toIndex;

        // Distribute profit across all buckets
        if (profit > 0) {
            uint256 profitToIndex  = (profit * INDEX_SHARE_BPS)     / BPS_DENOMINATOR;
            uint256 profitToInfra  = (profit * INFRA_SHARE_BPS)     / BPS_DENOMINATOR;
            uint256 profitToEmerg  = (profit * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
            uint256 profitToComm   = profit - profitToIndex - profitToInfra - profitToEmerg;

            indexCapitalBalance += profitToIndex;
            infraBalance        += profitToInfra;
            emergencyBalance    += profitToEmerg;
            communityBalance    += profitToComm;
        }

        totalETHReceived += msg.value;
        emit AcquisitionProceedsReceived(msg.value, profit);
    }

    // =========================================================================
    // Owner - withdrawals
    // =========================================================================

    /**
     * @notice Immediately withdraw a small amount (< TIMELOCK_THRESHOLD) from
     *         the specified bucket without queuing.
     * @param bucket     One of: "index", "infra", "emergency", "community".
     * @param recipient  Where to send the ETH.
     * @param amount     How much ETH (wei) to withdraw.
     * @param reason     Human-readable reason for the withdrawal.
     */
    function immediateWithdraw(
        string calldata bucket,
        address payable recipient,
        uint256 amount,
        string calldata reason
    ) external onlyOwner nonReentrant {
        require(amount > 0,                    "Treasury: zero amount");
        require(amount < TIMELOCK_THRESHOLD,   "Treasury: use queueWithdrawal for large amounts");
        require(recipient != address(0),       "Treasury: zero recipient");

        _deductFromBucket(bucket, amount);
        totalETHDisbursed += amount;

        (bool s,) = recipient.call{value: amount}("");
        require(s, "Treasury: send failed");

        emit ImmediateWithdrawal(recipient, amount, bucket, reason);
    }

    /**
     * @notice Queue a large withdrawal (>= TIMELOCK_THRESHOLD).  Must be
     *         executed 48 hours later via executeWithdrawal().
     */
    function queueWithdrawal(
        string calldata bucket,
        address payable recipient,
        uint256 amount,
        string calldata reason
    ) external onlyOwner returns (uint256 requestId) {
        require(amount > 0,              "Treasury: zero amount");
        require(recipient != address(0), "Treasury: zero recipient");

        // Validate bucket balance now (actual deduction happens on execute)
        _validateBucketBalance(bucket, amount);

        requestId = nextRequestId++;
        uint256 unlocksAt = block.timestamp + TIMELOCK_DELAY;

        withdrawalRequests[requestId] = WithdrawalRequest({
            recipient: recipient,
            amount:    amount,
            unlocksAt: unlocksAt,
            executed:  false,
            cancelled: false,
            reason:    reason
        });

        emit WithdrawalQueued(requestId, recipient, amount, unlocksAt, reason);
    }

    /**
     * @notice Execute a previously queued withdrawal after the time-lock expires.
     */
    function executeWithdrawal(uint256 requestId, string calldata bucket)
        external
        onlyOwner
        nonReentrant
    {
        WithdrawalRequest storage req = withdrawalRequests[requestId];
        require(!req.executed,                    "Treasury: already executed");
        require(!req.cancelled,                   "Treasury: cancelled");
        require(block.timestamp >= req.unlocksAt, "Treasury: time-lock active");
        require(req.amount > 0,                   "Treasury: zero request");

        _deductFromBucket(bucket, req.amount);
        req.executed      = true;
        totalETHDisbursed += req.amount;

        (bool s,) = req.recipient.call{value: req.amount}("");
        require(s, "Treasury: send failed");

        emit WithdrawalExecuted(requestId, req.recipient, req.amount);
    }

    /// @notice Cancel a queued (not yet executed) withdrawal.
    function cancelWithdrawal(uint256 requestId) external onlyOwner {
        WithdrawalRequest storage req = withdrawalRequests[requestId];
        require(!req.executed,  "Treasury: already executed");
        require(!req.cancelled, "Treasury: already cancelled");
        req.cancelled = true;
        emit WithdrawalCancelled(requestId);
    }

    // =========================================================================
    // Owner - admin
    // =========================================================================

    /**
     * @notice Set the authorised operator address (should be NCIAcquisitionEngine).
     */
    function setOperator(address _operator) external onlyOwner {
        require(_operator != address(0), "Treasury: zero operator");
        emit OperatorUpdated(operator, _operator);
        operator = _operator;
    }

    /**
     * @notice Emergency drain - sends all ETH to owner.  Should only be used
     *         in a true emergency after ownership has been confirmed safe.
     */
    function emergencyWithdraw() external onlyOwner nonReentrant {
        uint256 bal = address(this).balance;
        require(bal > 0, "Treasury: nothing to withdraw");

        // Reset all bucket balances
        indexCapitalBalance = 0;
        infraBalance        = 0;
        emergencyBalance    = 0;
        communityBalance    = 0;

        (bool s,) = owner().call{value: bal}("");
        require(s, "Treasury: emergency withdraw failed");

        emit EmergencyWithdraw(owner(), bal);
    }

    // =========================================================================
    // View functions
    // =========================================================================

    /// @notice Real ETH balance held by this contract.
    function contractETHBalance() external view returns (uint256) {
        return address(this).balance;
    }

    /// @notice Returns all four virtual bucket balances in one call.
    function getAllBalances()
        external
        view
        returns (
            uint256 index,
            uint256 infra,
            uint256 emergency,
            uint256 community
        )
    {
        return (indexCapitalBalance, infraBalance, emergencyBalance, communityBalance);
    }

    /// @notice Returns details of a specific withdrawal request.
    function getWithdrawalRequest(uint256 requestId)
        external
        view
        returns (WithdrawalRequest memory)
    {
        return withdrawalRequests[requestId];
    }

    /// @notice Returns the number of seconds remaining on a time-locked request
    ///         (0 if unlocked or does not exist).
    function timelockRemaining(uint256 requestId) external view returns (uint256) {
        WithdrawalRequest storage req = withdrawalRequests[requestId];
        if (req.executed || req.cancelled || block.timestamp >= req.unlocksAt) {
            return 0;
        }
        return req.unlocksAt - block.timestamp;
    }

    // =========================================================================
    // Internal helpers
    // =========================================================================

    function _deductFromBucket(string memory bucket, uint256 amount) private {
        bytes32 b = keccak256(bytes(bucket));
        if (b == keccak256("index")) {
            require(indexCapitalBalance >= amount, "Treasury: insufficient index capital");
            indexCapitalBalance -= amount;
        } else if (b == keccak256("infra")) {
            require(infraBalance >= amount, "Treasury: insufficient infra balance");
            infraBalance -= amount;
        } else if (b == keccak256("emergency")) {
            require(emergencyBalance >= amount, "Treasury: insufficient emergency balance");
            emergencyBalance -= amount;
        } else if (b == keccak256("community")) {
            require(communityBalance >= amount, "Treasury: insufficient community balance");
            communityBalance -= amount;
        } else {
            revert("Treasury: unknown bucket");
        }
    }

    function _validateBucketBalance(string memory bucket, uint256 amount) private view {
        bytes32 b = keccak256(bytes(bucket));
        if (b == keccak256("index")) {
            require(indexCapitalBalance >= amount, "Treasury: insufficient index capital");
        } else if (b == keccak256("infra")) {
            require(infraBalance >= amount, "Treasury: insufficient infra balance");
        } else if (b == keccak256("emergency")) {
            require(emergencyBalance >= amount, "Treasury: insufficient emergency balance");
        } else if (b == keccak256("community")) {
            require(communityBalance >= amount, "Treasury: insufficient community balance");
        } else {
            revert("Treasury: unknown bucket");
        }
    }

    // =========================================================================
    // Emergency Token Recovery
    // =========================================================================

    /**
     * @notice Rescue ERC-20 tokens accidentally sent to this contract.
     * @dev    This contract is not designed to hold ERC-20 tokens directly -
     *         it only holds ETH. Any ERC-20 received is considered stuck and
     *         recoverable by the owner only.
     * @param  token   Address of the stuck ERC-20 token.
     * @param  to      Recipient of the recovered tokens.
     * @param  amount  Amount to recover. Pass 0 to recover entire balance.
     */
    function rescueERC20(address token, address to, uint256 amount) external onlyOwner nonReentrant {
        require(token != address(0), "Treasury: zero token");
        require(to    != address(0), "Treasury: zero address");
        // Minimal ERC-20 interface - avoids importing full IERC20
        (bool ok, bytes memory data) = token.call(
            abi.encodeWithSignature("balanceOf(address)", address(this))
        );
        require(ok, "Treasury: balanceOf failed");
        uint256 bal = abi.decode(data, (uint256));
        uint256 send = amount == 0 ? bal : amount;
        require(send <= bal, "Treasury: insufficient token balance");
        (bool sent,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", to, send));
        require(sent, "Treasury: token transfer failed");
        emit ERC20Rescued(token, to, send);
    }

    /// @notice Emitted when ERC-20 tokens are rescued from the treasury.
    event ERC20Rescued(address indexed token, address indexed to, uint256 amount);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

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

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"acquisitionEngine","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"AcquisitionFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"}],"name":"AcquisitionProceedsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Rescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"bucket","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"ImmediateWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorUpdated","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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toInfra","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toEmergency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toCommunity","type":"uint256"}],"name":"RevenueReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"WithdrawalCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"WithdrawalQueued","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COMMUNITY_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INDEX_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INFRA_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"allocateForAcquisition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"cancelWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"string","name":"bucket","type":"string"}],"name":"executeWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllBalances","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"infra","type":"uint256"},{"internalType":"uint256","name":"emergency","type":"uint256"},{"internalType":"uint256","name":"community","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"getWithdrawalRequest","outputs":[{"components":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"internalType":"struct NCITreasury.WithdrawalRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"bucket","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"immediateWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"indexCapitalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infraBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRequestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"bucket","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"queueWithdrawal","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"costBasis","type":"uint256"}],"name":"receiveFromAcquisition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"receiveRevenue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"timelockRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHDisbursed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalRequests","outputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080806040523461005f5760008054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180556120b490816100658239f35b600080fdfe608060408181526004918236101561014f575b50361561001e57600080fd5b341590811561002957005b611b5890813402913483041483171561013a57612710809204916105dc803402903482041485171561012557819004936103e8908134029134830414171561012557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca2695916101209304906100ac826100a7886100a78934611adf565b611adf565b926100b986600254611b02565b6002556100c887600354611b02565b6003556100d6838254611b02565b90556100e483600554611b02565b6005556100f334600654611b02565b6006555194859434869192608093969594919660a084019784526020840152604083015260608201520152565b0390a1005b601186634e487b7160e01b6000525260246000fd5b601184634e487b7160e01b6000525260246000fd5b600090813560e01c908163047cbe10146118085750806311841c41146117ed5780632741e9f2146117cf5780633b4dfafb146117b05780633efcfda4146116f157806342dfb2321461151e57806344e822501461146c57806348b58c511461144f5780634d37025c1461142c5780634d3dbec41461140d578063570ca735146113e457806357800d80146113c75780635ba1c1a9146113a95780636a84a9851461138a5780636e1682a01461136b5780636fa9f02d1461121e578063715018a6146111c45780638593906114611054578063867e7c271461101c5780638da5cb5b14610ff45780638e4cbc8314610fd5578063937b258114610f55578063a2d044d214610d9e578063ae48565114610cac578063b2118a8d146109f6578063b3ab15fb1461093f578063bdf06c6914610922578063c00dd0b714610514578063db2e21bc146103f2578063e1a45218146103d5578063e751ebf5146103b2578063f2fde38b146102eb5763fb1ff7af0361001257346102e85760203660031901126102e857506102e160209235611dc6565b9051908152f35b80fd5b5091346103ae5760203660031901126103ae57610306611a2e565b9061030f611a44565b6001600160a01b0391821692831561035c57505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b5090346103d157816003193601126103d1576020906007549051908152f35b5080fd5b5090346103d157816003193601126103d157602090516127108152f35b5091346103ae57826003193601126103ae5761040c611a44565b610414611c3c565b479081156104d15783600255836003558381558360055560018060a01b03908480808086868254165af1610446611c0c565b501561048257507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695916020918554169351908152a26001805580f35b608490602085519162461bcd60e51b8352820152602360248201527f54726561737572793a20656d657267656e6379207769746864726177206661696044820152621b195960ea1b6064820152fd5b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a206e6f7468696e6720746f2077697468647261770000006044820152fd5b5091346103ae5761055e9161052836611857565b9394610535989198611a44565b610540831515611b54565b6001600160a01b0393841695610557871515611c92565b3691611cde565b9687516020809901207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f92811460001461083857506105a0826002541015611b98565b6009549660001980891461082557600189016009556202a3004201948542116108125790828885898f8f8f98978f8d93600a8e948351996105e08b6118f4565b8a52808a01958652838a0196875261060860608b0199848b5260808c0199858b523691611cde565b9d60a08b019e8f52835252209551166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015560038301915115159060ff61ff0084549251151560081b1692169061ffff19161717905501925180519267ffffffffffffffff84116107ff575061067d84546118ba565b601f81116107bc575b509b8a9b9c819b98999a9b508d91601f8511600114610713579284927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639a9b95926106ff98979593610708575b50508260011b9260031b1c19161790555b885194859485528b8501526060898501526060840191611d59565b0390a351908152f35b0151915038806106d3565b9291908e601f1986169087865280862095905b82821061078c5750509285926106ff989795927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639c9d9760019610610774575b50505050811b0190556106e4565b01519060f88460031b161c1916905538808080610766565b849798999b9d9a9c506001819394959782939798870151815501970194018f9b999c9a9897969594939291610726565b848e528c8e20601f850160051c8101918e86106107f5575b601f0160051c01905b8181106107ea5750610686565b8e81556001016107dd565b90915081906107d4565b634e487b7160e01b8e526041905260248dfd5b634e487b7160e01b8c526011835260248cfd5b634e487b7160e01b8b526011825260248bfd5b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103610873575061086e826003541015611ede565b6105a0565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036108a8575061086e8288541015611e81565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f53036108dc5761086e826005541015611e24565b855162461bcd60e51b8152602081890181815260189181019190915277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b604082015281906060010390fd5b5090346103d157816003193601126103d157602090516103e88152f35b5091346103ae5760203660031901126103ae5761095a611a2e565b90610963611a44565b6001600160a01b039182169283156109b3575050816008549182167ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad038580a36001600160a01b0319161760085580f35b906020606492519162461bcd60e51b8352820152601760248201527f54726561737572793a207a65726f206f70657261746f720000000000000000006044820152fd5b5082346103d15760603660031901126103d157610a11611a2e565b6001600160a01b0360248035828116949193929190859003610ca8576044803592610a3a611a44565b610a42611c3c565b8416948515610c70578615610c365788516370a0823160e01b60208083019182523084840152838352969167ffffffffffffffff91906060810183811182821017610c24578d52518b9182919082865af1610a9b611c0c565b9015610be3578781805181010312610bdf578701519580610bd95750855b8611610b8c578a518781019163a9059cbb60e01b83528a858301528786830152858252608082019082821090821117610b7a578c52518a9283929083905af1610b00611c0c565b5015610b3957505050907f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e5918651908152a36001805580f35b885162461bcd60e51b8152928301859052601f908301527f54726561737572793a20746f6b656e207472616e73666572206661696c65640090820152606490fd5b634e487b7160e01b8c5260418752848cfd5b506084847f54726561737572793a20696e73756666696369656e7420746f6b656e2062616c85858a8f519462461bcd60e51b86528501528084015282015263616e636560e01b6064820152fd5b95610ab9565b8a80fd5b8b5162461bcd60e51b8152808701899052601a818601527f54726561737572793a2062616c616e63654f66206661696c656400000000000081870152606490fd5b634e487b7160e01b8d5260418852858dfd5b6064929160167554726561737572793a207a65726f206164647265737360501b9260208c519562461bcd60e51b8752860152840152820152fd5b606492916014732a3932b0b9bab93c9d103d32b937903a37b5b2b760611b9260208c519562461bcd60e51b8752860152840152820152fd5b8580fd5b508290346102e857602090816003193601126102e8579083610d9a92606060a08351610cd7816118f4565b838152838682015283858201528383820152836080820152015284358152600a83522092845193610d07856118f4565b60018060a01b0395868254168652600182015490848701918252600283015491818801928352610d5860038501549560608a019560ff88161515875260ff60808c019860081c161515885201611948565b9560a089019687528251998a99828b525116908901525190870152516060860152511515608085015251151560a08401525160c08084015260e08301906119ee565b0390f35b509060203660031901126103d157600854833590610dd190336001600160a01b0391821614908115610f48575b50611b0f565b610ddc341515611a9c565b803411600014610f4157610df08134611adf565b905b34811115610f385750610e08345b600254611b02565b8060025581158015610e57575b847fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b338585610e4534600654611b02565b6006558151903482526020820152a180f35b611b58908184029184830414811715610f2557612710809204916105dc8086029086820414831715610f1257819004916103e89081870291878304141715610f125792610ef383610ee883610ee28a6100a77fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b339e9f996100a7610efd9a610f079e9d04998a94611adf565b97611b02565b600255600354611b02565b6003558254611b02565b9055600554611b02565b600555839238610e15565b634e487b7160e01b885260118952602488fd5b634e487b7160e01b865260118752602486fd5b610e0890610e00565b8290610df2565b9050845416331438610dcb565b50346102e85760203660031901126102e85781610d9a9184358152600a602052209160ff60018060a01b0384541693600181015495610f9f60028301549160038401549301611948565b938051978897885260208801528601528181161515606086015260081c161515608084015260c060a084015260c08301906119ee565b5090346103d157816003193601126103d1576020906005549051908152f35b5090346103d157816003193601126103d157905490516001600160a01b039091168152602090f35b5091346103ae57826003193601126103ae57608092506002549160035491549060055492815194855260208501528301526060820152f35b509190346103ae57806003193601126103ae576008548235926001600160a01b03918216331480156111b8575b61108a90611b0f565b611092611c3c565b61109d841515611b54565b6002546110ac81861115611b98565b84471061116a57846110bd91611adf565b6002556110cc84600754611b02565b600755848080808786600854165af16110e3611c0c565b50156111275750907f548c9dd20f39d6f37ad6e223b8b731b33e008439efe7d3eefe4510cf69f91aed91600854169281519081526024356020820152a26001805580f35b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a20455448207472616e73666572206661696c65640000006044820152fd5b835162461bcd60e51b8152602081840152602260248201527f54726561737572793a20696e73756666696369656e74204554482062616c616e604482015261636560f01b6064820152608490fd5b50845482163314611081565b50346102e857806003193601126102e8576111dd611a44565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346103ae5761122e36611857565b9194969290939561123d611a44565b611245611c3c565b611250861515611b54565b678ac7230489e8000086101561131057506001600160a01b031695611276871515611c92565b84611282368884611cde565b9061128c91611f36565b846007549061129a91611b02565b60075587808080888b5af16112ad611c0c565b506112b790611d15565b82519586958652602086016060905260608601906112d492611d59565b91848303908501526112e592611d59565b037fe8d94e3a81117f0e80d635521a494c5710685347eb6fea78a7f89e9def859fa491a26001805580f35b608490602085519162461bcd60e51b8352820152602f60248201527f54726561737572793a207573652071756575655769746864726177616c20666f60448201526e72206c6172676520616d6f756e747360881b6064820152fd5b5090346103d157816003193601126103d1576020906006549051908152f35b5090346103d157816003193601126103d1576020906009549051908152f35b5090346103d157816003193601126103d157602090516202a3008152f35b5090346103d157816003193601126103d157602090516101f48152f35b5090346103d157816003193601126103d15760085490516001600160a01b039091168152602090f35b5090346103d157816003193601126103d1576020906003549051908152f35b5090346103d157816003193601126103d15760209051678ac7230489e800008152f35b5090346103d157816003193601126103d15760209051611b588152f35b5090816003193601126103d1573415906114868215611a9c565b611b5890813402913483041483171561150b57612710809204916105dc8034029034820414851715610f2557819004936103e89081340291348304141715610f2557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca269596916115059304906100ac826100a7886100a78934611adf565b0390a180f35b634e487b7160e01b845260118552602484fd5b509190346103ae57806003193601126103ae5781359060243567ffffffffffffffff81116116ed576115539036908501611824565b939061155d611a44565b611565611c3c565b838652600a60205282862091600383019160ff835461158682821615611d7a565b60081c166116b4576002840154421061167157600184019687549283156116355750602094926115de7fd6cddb3d69146e96ebc2c87b1b3dd0b20ee2d3b0eadf134e011afb434a3e56e69795936115e3933691611cde565b611f36565b600160ff198254161790556115fb8654600754611b02565b60075560018060a01b039061162488808080868654168c54905af161161e611c0c565b50611d15565b541694549051908152a36001805580f35b606490602088519162461bcd60e51b83528201526016602482015275151c99585cdd5c9e4e881e995c9bc81c995c5d595cdd60521b6044820152fd5b845162461bcd60e51b8152602081840152601a60248201527f54726561737572793a2074696d652d6c6f636b206163746976650000000000006044820152606490fd5b845162461bcd60e51b81526020818401526013602482015272151c99585cdd5c9e4e8818d85b98d95b1b1959606a1b6044820152606490fd5b8480fd5b5091346103ae5760203660031901126103ae5780359161170f611a44565b828452600a6020526003818520019182549161172e60ff841615611d7a565b60ff8360081c1661176d57505061ff0019166101001790557fe8de1e631ea541ac8e6cb398aafb71b991eb58d489298f7bc93ba7e17fa2042b8280a280f35b906020606492519162461bcd60e51b8352820152601b60248201527f54726561737572793a20616c72656164792063616e63656c6c656400000000006044820152fd5b5090346103d157816003193601126103d1576020906002549051908152f35b5091346103ae57826003193601126103ae5760209250549051908152f35b5090346103d157816003193601126103d15751478152602090f35b9050346103d157816003193601126103d157806105dc60209252f35b9181601f840112156118525782359167ffffffffffffffff8311611852576020838186019501011161185257565b600080fd5b9060806003198301126118525767ffffffffffffffff600435818111611852578361188491600401611824565b909390926024356001600160a01b0381168103611852579260443592606435918211611852576118b691600401611824565b9091565b90600182811c921680156118ea575b60208310146118d457565b634e487b7160e01b600052602260045260246000fd5b91607f16916118c9565b60c0810190811067ffffffffffffffff82111761191057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761191057604052565b906040519182600082549261195c846118ba565b9081845260019485811690816000146119cb5750600114611988575b505061198692500383611926565b565b9093915060005260209081600020936000915b8183106119b357505061198693508201013880611978565b8554888401850152948501948794509183019161199b565b91505061198694506020925060ff191682840152151560051b8201013880611978565b919082519283825260005b848110611a1a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016119f9565b600435906001600160a01b038216820361185257565b6000546001600160a01b03163303611a5857565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15611aa357565b60405162461bcd60e51b815260206004820152601460248201527354726561737572793a207a65726f2076616c756560601b6044820152606490fd5b91908203918211611aec57565b634e487b7160e01b600052601160045260246000fd5b91908201809211611aec57565b15611b1657565b60405162461bcd60e51b81526020600482015260166024820152752a3932b0b9bab93c9d103737ba1037b832b930ba37b960511b6044820152606490fd5b15611b5b57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881e995c9bc8185b5bdd5b9d605a1b6044820152606490fd5b15611b9f57565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e646578206361706044820152631a5d185b60e21b6064820152608490fd5b67ffffffffffffffff811161191057601f01601f191660200190565b3d15611c37573d90611c1d82611bf0565b91611c2b6040519384611926565b82523d6000602084013e565b606090565b600260015414611c4d576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15611c9957565b60405162461bcd60e51b815260206004820152601860248201527f54726561737572793a207a65726f20726563697069656e7400000000000000006044820152606490fd5b929192611cea82611bf0565b91611cf86040519384611926565b829481845281830111611852578281602093846000960137010152565b15611d1c57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881cd95b990819985a5b1959605a1b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b15611d8157565b60405162461bcd60e51b815260206004820152601a60248201527f54726561737572793a20616c72656164792065786563757465640000000000006044820152606490fd5b600052600a6020526040600020600381015460ff8116908115611e16575b508015611e08575b611e02576002611dff9101544290611adf565b90565b50600090565b506002810154421015611dec565b60ff915060081c1638611de4565b15611e2b57565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420636f6d6d756e6974796044820152672062616c616e636560c01b6064820152608490fd5b15611e8857565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420656d657267656e63796044820152672062616c616e636560c01b6064820152608490fd5b15611ee557565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e6672612062616c604482015263616e636560e01b6064820152608490fd5b602081519101207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f928114600014611f805750611f7b906002546100a782821015611b98565b600255565b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103611fc05750611fbb906003546100a782821015611ede565b600355565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036120005750611ffb906004546100a782821015611e81565b600455565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f530361203e57612039906005546100a782821015611e24565b600555565b60405162461bcd60e51b8152602060048201526018602482015277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b6044820152606490fdfea264697066735822122075b6894821563ed131b8311cea478399ae26c749b110f94e809ea448d0e8b96564736f6c63430008130033

Deployed Bytecode

0x608060408181526004918236101561014f575b50361561001e57600080fd5b341590811561002957005b611b5890813402913483041483171561013a57612710809204916105dc803402903482041485171561012557819004936103e8908134029134830414171561012557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca2695916101209304906100ac826100a7886100a78934611adf565b611adf565b926100b986600254611b02565b6002556100c887600354611b02565b6003556100d6838254611b02565b90556100e483600554611b02565b6005556100f334600654611b02565b6006555194859434869192608093969594919660a084019784526020840152604083015260608201520152565b0390a1005b601186634e487b7160e01b6000525260246000fd5b601184634e487b7160e01b6000525260246000fd5b600090813560e01c908163047cbe10146118085750806311841c41146117ed5780632741e9f2146117cf5780633b4dfafb146117b05780633efcfda4146116f157806342dfb2321461151e57806344e822501461146c57806348b58c511461144f5780634d37025c1461142c5780634d3dbec41461140d578063570ca735146113e457806357800d80146113c75780635ba1c1a9146113a95780636a84a9851461138a5780636e1682a01461136b5780636fa9f02d1461121e578063715018a6146111c45780638593906114611054578063867e7c271461101c5780638da5cb5b14610ff45780638e4cbc8314610fd5578063937b258114610f55578063a2d044d214610d9e578063ae48565114610cac578063b2118a8d146109f6578063b3ab15fb1461093f578063bdf06c6914610922578063c00dd0b714610514578063db2e21bc146103f2578063e1a45218146103d5578063e751ebf5146103b2578063f2fde38b146102eb5763fb1ff7af0361001257346102e85760203660031901126102e857506102e160209235611dc6565b9051908152f35b80fd5b5091346103ae5760203660031901126103ae57610306611a2e565b9061030f611a44565b6001600160a01b0391821692831561035c57505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b5090346103d157816003193601126103d1576020906007549051908152f35b5080fd5b5090346103d157816003193601126103d157602090516127108152f35b5091346103ae57826003193601126103ae5761040c611a44565b610414611c3c565b479081156104d15783600255836003558381558360055560018060a01b03908480808086868254165af1610446611c0c565b501561048257507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695916020918554169351908152a26001805580f35b608490602085519162461bcd60e51b8352820152602360248201527f54726561737572793a20656d657267656e6379207769746864726177206661696044820152621b195960ea1b6064820152fd5b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a206e6f7468696e6720746f2077697468647261770000006044820152fd5b5091346103ae5761055e9161052836611857565b9394610535989198611a44565b610540831515611b54565b6001600160a01b0393841695610557871515611c92565b3691611cde565b9687516020809901207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f92811460001461083857506105a0826002541015611b98565b6009549660001980891461082557600189016009556202a3004201948542116108125790828885898f8f8f98978f8d93600a8e948351996105e08b6118f4565b8a52808a01958652838a0196875261060860608b0199848b5260808c0199858b523691611cde565b9d60a08b019e8f52835252209551166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015560038301915115159060ff61ff0084549251151560081b1692169061ffff19161717905501925180519267ffffffffffffffff84116107ff575061067d84546118ba565b601f81116107bc575b509b8a9b9c819b98999a9b508d91601f8511600114610713579284927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639a9b95926106ff98979593610708575b50508260011b9260031b1c19161790555b885194859485528b8501526060898501526060840191611d59565b0390a351908152f35b0151915038806106d3565b9291908e601f1986169087865280862095905b82821061078c5750509285926106ff989795927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639c9d9760019610610774575b50505050811b0190556106e4565b01519060f88460031b161c1916905538808080610766565b849798999b9d9a9c506001819394959782939798870151815501970194018f9b999c9a9897969594939291610726565b848e528c8e20601f850160051c8101918e86106107f5575b601f0160051c01905b8181106107ea5750610686565b8e81556001016107dd565b90915081906107d4565b634e487b7160e01b8e526041905260248dfd5b634e487b7160e01b8c526011835260248cfd5b634e487b7160e01b8b526011825260248bfd5b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103610873575061086e826003541015611ede565b6105a0565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036108a8575061086e8288541015611e81565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f53036108dc5761086e826005541015611e24565b855162461bcd60e51b8152602081890181815260189181019190915277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b604082015281906060010390fd5b5090346103d157816003193601126103d157602090516103e88152f35b5091346103ae5760203660031901126103ae5761095a611a2e565b90610963611a44565b6001600160a01b039182169283156109b3575050816008549182167ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad038580a36001600160a01b0319161760085580f35b906020606492519162461bcd60e51b8352820152601760248201527f54726561737572793a207a65726f206f70657261746f720000000000000000006044820152fd5b5082346103d15760603660031901126103d157610a11611a2e565b6001600160a01b0360248035828116949193929190859003610ca8576044803592610a3a611a44565b610a42611c3c565b8416948515610c70578615610c365788516370a0823160e01b60208083019182523084840152838352969167ffffffffffffffff91906060810183811182821017610c24578d52518b9182919082865af1610a9b611c0c565b9015610be3578781805181010312610bdf578701519580610bd95750855b8611610b8c578a518781019163a9059cbb60e01b83528a858301528786830152858252608082019082821090821117610b7a578c52518a9283929083905af1610b00611c0c565b5015610b3957505050907f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e5918651908152a36001805580f35b885162461bcd60e51b8152928301859052601f908301527f54726561737572793a20746f6b656e207472616e73666572206661696c65640090820152606490fd5b634e487b7160e01b8c5260418752848cfd5b506084847f54726561737572793a20696e73756666696369656e7420746f6b656e2062616c85858a8f519462461bcd60e51b86528501528084015282015263616e636560e01b6064820152fd5b95610ab9565b8a80fd5b8b5162461bcd60e51b8152808701899052601a818601527f54726561737572793a2062616c616e63654f66206661696c656400000000000081870152606490fd5b634e487b7160e01b8d5260418852858dfd5b6064929160167554726561737572793a207a65726f206164647265737360501b9260208c519562461bcd60e51b8752860152840152820152fd5b606492916014732a3932b0b9bab93c9d103d32b937903a37b5b2b760611b9260208c519562461bcd60e51b8752860152840152820152fd5b8580fd5b508290346102e857602090816003193601126102e8579083610d9a92606060a08351610cd7816118f4565b838152838682015283858201528383820152836080820152015284358152600a83522092845193610d07856118f4565b60018060a01b0395868254168652600182015490848701918252600283015491818801928352610d5860038501549560608a019560ff88161515875260ff60808c019860081c161515885201611948565b9560a089019687528251998a99828b525116908901525190870152516060860152511515608085015251151560a08401525160c08084015260e08301906119ee565b0390f35b509060203660031901126103d157600854833590610dd190336001600160a01b0391821614908115610f48575b50611b0f565b610ddc341515611a9c565b803411600014610f4157610df08134611adf565b905b34811115610f385750610e08345b600254611b02565b8060025581158015610e57575b847fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b338585610e4534600654611b02565b6006558151903482526020820152a180f35b611b58908184029184830414811715610f2557612710809204916105dc8086029086820414831715610f1257819004916103e89081870291878304141715610f125792610ef383610ee883610ee28a6100a77fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b339e9f996100a7610efd9a610f079e9d04998a94611adf565b97611b02565b600255600354611b02565b6003558254611b02565b9055600554611b02565b600555839238610e15565b634e487b7160e01b885260118952602488fd5b634e487b7160e01b865260118752602486fd5b610e0890610e00565b8290610df2565b9050845416331438610dcb565b50346102e85760203660031901126102e85781610d9a9184358152600a602052209160ff60018060a01b0384541693600181015495610f9f60028301549160038401549301611948565b938051978897885260208801528601528181161515606086015260081c161515608084015260c060a084015260c08301906119ee565b5090346103d157816003193601126103d1576020906005549051908152f35b5090346103d157816003193601126103d157905490516001600160a01b039091168152602090f35b5091346103ae57826003193601126103ae57608092506002549160035491549060055492815194855260208501528301526060820152f35b509190346103ae57806003193601126103ae576008548235926001600160a01b03918216331480156111b8575b61108a90611b0f565b611092611c3c565b61109d841515611b54565b6002546110ac81861115611b98565b84471061116a57846110bd91611adf565b6002556110cc84600754611b02565b600755848080808786600854165af16110e3611c0c565b50156111275750907f548c9dd20f39d6f37ad6e223b8b731b33e008439efe7d3eefe4510cf69f91aed91600854169281519081526024356020820152a26001805580f35b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a20455448207472616e73666572206661696c65640000006044820152fd5b835162461bcd60e51b8152602081840152602260248201527f54726561737572793a20696e73756666696369656e74204554482062616c616e604482015261636560f01b6064820152608490fd5b50845482163314611081565b50346102e857806003193601126102e8576111dd611a44565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346103ae5761122e36611857565b9194969290939561123d611a44565b611245611c3c565b611250861515611b54565b678ac7230489e8000086101561131057506001600160a01b031695611276871515611c92565b84611282368884611cde565b9061128c91611f36565b846007549061129a91611b02565b60075587808080888b5af16112ad611c0c565b506112b790611d15565b82519586958652602086016060905260608601906112d492611d59565b91848303908501526112e592611d59565b037fe8d94e3a81117f0e80d635521a494c5710685347eb6fea78a7f89e9def859fa491a26001805580f35b608490602085519162461bcd60e51b8352820152602f60248201527f54726561737572793a207573652071756575655769746864726177616c20666f60448201526e72206c6172676520616d6f756e747360881b6064820152fd5b5090346103d157816003193601126103d1576020906006549051908152f35b5090346103d157816003193601126103d1576020906009549051908152f35b5090346103d157816003193601126103d157602090516202a3008152f35b5090346103d157816003193601126103d157602090516101f48152f35b5090346103d157816003193601126103d15760085490516001600160a01b039091168152602090f35b5090346103d157816003193601126103d1576020906003549051908152f35b5090346103d157816003193601126103d15760209051678ac7230489e800008152f35b5090346103d157816003193601126103d15760209051611b588152f35b5090816003193601126103d1573415906114868215611a9c565b611b5890813402913483041483171561150b57612710809204916105dc8034029034820414851715610f2557819004936103e89081340291348304141715610f2557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca269596916115059304906100ac826100a7886100a78934611adf565b0390a180f35b634e487b7160e01b845260118552602484fd5b509190346103ae57806003193601126103ae5781359060243567ffffffffffffffff81116116ed576115539036908501611824565b939061155d611a44565b611565611c3c565b838652600a60205282862091600383019160ff835461158682821615611d7a565b60081c166116b4576002840154421061167157600184019687549283156116355750602094926115de7fd6cddb3d69146e96ebc2c87b1b3dd0b20ee2d3b0eadf134e011afb434a3e56e69795936115e3933691611cde565b611f36565b600160ff198254161790556115fb8654600754611b02565b60075560018060a01b039061162488808080868654168c54905af161161e611c0c565b50611d15565b541694549051908152a36001805580f35b606490602088519162461bcd60e51b83528201526016602482015275151c99585cdd5c9e4e881e995c9bc81c995c5d595cdd60521b6044820152fd5b845162461bcd60e51b8152602081840152601a60248201527f54726561737572793a2074696d652d6c6f636b206163746976650000000000006044820152606490fd5b845162461bcd60e51b81526020818401526013602482015272151c99585cdd5c9e4e8818d85b98d95b1b1959606a1b6044820152606490fd5b8480fd5b5091346103ae5760203660031901126103ae5780359161170f611a44565b828452600a6020526003818520019182549161172e60ff841615611d7a565b60ff8360081c1661176d57505061ff0019166101001790557fe8de1e631ea541ac8e6cb398aafb71b991eb58d489298f7bc93ba7e17fa2042b8280a280f35b906020606492519162461bcd60e51b8352820152601b60248201527f54726561737572793a20616c72656164792063616e63656c6c656400000000006044820152fd5b5090346103d157816003193601126103d1576020906002549051908152f35b5091346103ae57826003193601126103ae5760209250549051908152f35b5090346103d157816003193601126103d15751478152602090f35b9050346103d157816003193601126103d157806105dc60209252f35b9181601f840112156118525782359167ffffffffffffffff8311611852576020838186019501011161185257565b600080fd5b9060806003198301126118525767ffffffffffffffff600435818111611852578361188491600401611824565b909390926024356001600160a01b0381168103611852579260443592606435918211611852576118b691600401611824565b9091565b90600182811c921680156118ea575b60208310146118d457565b634e487b7160e01b600052602260045260246000fd5b91607f16916118c9565b60c0810190811067ffffffffffffffff82111761191057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761191057604052565b906040519182600082549261195c846118ba565b9081845260019485811690816000146119cb5750600114611988575b505061198692500383611926565b565b9093915060005260209081600020936000915b8183106119b357505061198693508201013880611978565b8554888401850152948501948794509183019161199b565b91505061198694506020925060ff191682840152151560051b8201013880611978565b919082519283825260005b848110611a1a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016119f9565b600435906001600160a01b038216820361185257565b6000546001600160a01b03163303611a5857565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15611aa357565b60405162461bcd60e51b815260206004820152601460248201527354726561737572793a207a65726f2076616c756560601b6044820152606490fd5b91908203918211611aec57565b634e487b7160e01b600052601160045260246000fd5b91908201809211611aec57565b15611b1657565b60405162461bcd60e51b81526020600482015260166024820152752a3932b0b9bab93c9d103737ba1037b832b930ba37b960511b6044820152606490fd5b15611b5b57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881e995c9bc8185b5bdd5b9d605a1b6044820152606490fd5b15611b9f57565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e646578206361706044820152631a5d185b60e21b6064820152608490fd5b67ffffffffffffffff811161191057601f01601f191660200190565b3d15611c37573d90611c1d82611bf0565b91611c2b6040519384611926565b82523d6000602084013e565b606090565b600260015414611c4d576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15611c9957565b60405162461bcd60e51b815260206004820152601860248201527f54726561737572793a207a65726f20726563697069656e7400000000000000006044820152606490fd5b929192611cea82611bf0565b91611cf86040519384611926565b829481845281830111611852578281602093846000960137010152565b15611d1c57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881cd95b990819985a5b1959605a1b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b15611d8157565b60405162461bcd60e51b815260206004820152601a60248201527f54726561737572793a20616c72656164792065786563757465640000000000006044820152606490fd5b600052600a6020526040600020600381015460ff8116908115611e16575b508015611e08575b611e02576002611dff9101544290611adf565b90565b50600090565b506002810154421015611dec565b60ff915060081c1638611de4565b15611e2b57565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420636f6d6d756e6974796044820152672062616c616e636560c01b6064820152608490fd5b15611e8857565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420656d657267656e63796044820152672062616c616e636560c01b6064820152608490fd5b15611ee557565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e6672612062616c604482015263616e636560e01b6064820152608490fd5b602081519101207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f928114600014611f805750611f7b906002546100a782821015611b98565b600255565b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103611fc05750611fbb906003546100a782821015611ede565b600355565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036120005750611ffb906004546100a782821015611e81565b600455565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f530361203e57612039906005546100a782821015611e24565b600555565b60405162461bcd60e51b8152602060048201526018602482015277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b6044820152606490fdfea264697066735822122075b6894821563ed131b8311cea478399ae26c749b110f94e809ea448d0e8b96564736f6c63430008130033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.