ETH Price: $3,340.14 (-1.04%)
Gas: 7 Gwei

Contract

0x0000000006a0403952389B70d8EE4E45479023db
 
Transaction Hash
Method
Block
From
To
0x0bde99d3cb72e615f642411cb2b07d334cb711dc97991f643d1bd2228a959175 Claim Period(pending)2024-07-29 16:24:2919 hrs ago1722270269IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x0d376245a8862c5cb46c0cca7e35900c8df7ebec6ea266e9484190f4d8b03b73 Claim Period(pending)2024-07-29 15:52:4319 hrs ago1722268363IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x32051140dfa609fe75e2283a03ce7e4dec4604b68c03b13b57e94d2b810b6f35 Claim Period(pending)2024-07-29 15:21:4820 hrs ago1722266508IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x1e3c2420d8ae16516af5a1343b4eb4782b17ac8503dc520af38897869d32e8ba Claim Period(pending)2024-07-29 14:46:5620 hrs ago1722264416IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xab4c20d72efb308986a1049f4d29059208a1fa2f6a19e4358ea41d3d04c23ed9 Claim Periods(pending)2024-07-29 14:43:5521 hrs ago1722264235IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x5445ff4c44d765aa834df136944196f6abfdd27c899bcd20e5160a3da4b33213 Claim Period(pending)2024-07-29 14:40:3221 hrs ago1722264032IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xe6a8104d6d830c54e004e6effb45571d51b618d99dae5f383117fc6ef48fe6e4 Claim Period(pending)2024-07-29 14:38:2221 hrs ago1722263902IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x8be58dc4de6c9dce0305a190d9c355c4d7f14c58a352c25b75923fb78fa6740d Claim Periods(pending)2024-07-29 14:28:2521 hrs ago1722263305IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xfc4cde5b636ac9e864e4d2e9f0609d844ef360b2bbfe73b64d7e08070b7ffab8 Claim Periods(pending)2024-07-29 14:25:0421 hrs ago1722263104IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x2e7990d345bc9cbe41f2ab9290f8d1cbaf8447ebb600170bc50c4c94216b2bb5 Claim Period(pending)2024-07-29 14:09:2921 hrs ago1722262169IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xab92dba6825af8408ba27f7021b637758682c1ed1e4aca81e637c62bcc2e77a4 Claim Periods(pending)2024-07-29 14:09:0421 hrs ago1722262144IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x2dd8c58fe4bb0d4554190603247f2be3557a035fc4a20bde6042d674049bfd8d Claim Period(pending)2024-07-29 14:08:5021 hrs ago1722262130IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x2b798e6a269e1db16647f85e984e5f58783b7ff04cddb07bf983832bf35b93f5 Claim Period(pending)2024-07-29 14:07:1621 hrs ago1722262036IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x7a9ba02127ab4c6fd98381c2ed98e2fa6a7cf0107e7341ff009f351e12701651 Claim Periods(pending)2024-07-29 14:04:3921 hrs ago1722261879IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x54a0abb9c4bd6ccbb877e35a507c562fa522b06a38aea10cff49dde5f2fb9be2 Claim Period(pending)2024-07-29 1:01:5534 hrs ago1722214915IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x0e678cca45f02091a2e97af4886f60ae5bd4a08f5a1835cf5f4058ea0c318d51 Claim Period(pending)2024-07-29 1:01:5534 hrs ago1722214915IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x0e4519f81176f03600f11399a3ef9976b489b33d44e7e0e4fd51c19759359ef4 Claim Period(pending)2024-07-29 1:01:5534 hrs ago1722214915IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x1a577e200d31d981292113d9ff12283a937c72ec7144791b54ae8b78fd73827a Claim Period(pending)2024-07-29 1:01:5534 hrs ago1722214915IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xe007dcf9e20f181623ae030f6a0155e26d146a66c654a4492f41c5a6e788c9eb Claim Period(pending)2024-07-29 1:01:5534 hrs ago1722214915IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xfcd452f10b4217c206ed1edd2f2f176681ac155161b48c360f980e2dae85158f Claim Period(pending)2024-07-29 0:33:5035 hrs ago1722213230IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xe844858dfccfb5ee7607f0dfc2d0eee3f69ac7403f24d322b27e78416d0fd9ad Claim Period(pending)2024-07-29 0:33:5035 hrs ago1722213230IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x2a9c52fd371e9f651358a94a7413d093207274b76436f154d3e28296addacdc8 Claim Period(pending)2024-07-29 0:33:5035 hrs ago1722213230IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0xcfbf0fa7510e401b1af29c2d4cf497fc256b7d1b05c552caf6912b345351dec9 Claim Periods(pending)2024-07-28 22:46:5536 hrs ago1722206815IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x50977ce9861d8db134766189d9ef3a2a5bbc63a4a885cdd2a390dc03d4d23001 Claim Periods(pending)2024-07-28 17:47:5241 hrs ago1722188872IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
0x69f6835cbe48d58aec12e69afc3f4892a1340bd0e4ec57680aafddc98c346cc7 Claim Period(pending)2024-07-28 17:27:3442 hrs ago1722187654IN
Tokenlon: Merkle Redeem
0 ETH(Pending)(Pending)
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
114943922020-12-21 3:58:381317 days ago1608523118  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleRedeem

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 7 : MerkleRedeem.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
pragma experimental ABIEncoderV2;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";

import "../interfaces/IEmergency.sol";

import "./Ownable.sol";
import "../utils/MerkleProof.sol";

contract MerkleRedeem is Ownable, ReentrancyGuard, IEmergency {
    using SafeMath for uint256;

    struct Claim {
        uint256 period;
        uint256 balance;
        bytes32[] proof;
    }

    IERC20 public rewardsToken;
    address public emergencyRecipient;

    // Recorded periods
    mapping(uint256 => bytes32) public periodMerkleRoots;
    mapping(uint256 => mapping(address => bool)) public claimed;

    /*==== PUBLIC FUNCTIONS =====*/
    constructor(address _owner, IERC20 _rewardsToken, address _emergencyRecipient) Ownable(_owner) {
       emergencyRecipient = _emergencyRecipient;
       rewardsToken = _rewardsToken;
    }

    function claimPeriod(address recipient, uint256 period, uint256 balance, bytes32[] memory proof) external nonReentrant {
        require(!claimed[period][recipient]);
        require(verifyClaim(recipient, period, balance, proof), "incorrect merkle proof");

        claimed[period][recipient] = true;
        _disburse(recipient, balance);
    }

    function verifyClaim(address recipient, uint256 period, uint256 balance, bytes32[] memory proof) public view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(recipient, balance));
        return MerkleProof.verify(proof, periodMerkleRoots[period], leaf);
    }

    function claimPeriods(address recipient, Claim[] memory claims) external nonReentrant {
        uint256 totalBalance = 0;
        Claim memory claim ;

        for(uint256 i = 0; i < claims.length; i++) {
            claim = claims[i];

            require(!claimed[claim.period][recipient]);
            require(verifyClaim(recipient, claim.period, claim.balance, claim.proof), "incorrect merkle proof");

            totalBalance = totalBalance.add(claim.balance);
            claimed[claim.period][recipient] = true;
        }

        _disburse(recipient, totalBalance);
    }

    function claimStatus(address recipient, uint256 begin, uint256 end) external view returns (bool[] memory) {
        uint256 size = 1 + end - begin;
        bool[] memory arr = new bool[](size);
        for(uint256 i = 0; i < size; i++) {
            arr[i] = claimed[begin + i][recipient];
        }
        return arr;
    }

    function merkleRoots(uint256 begin, uint256 end) external view returns (bytes32[] memory) {
        uint256 size = 1 + end - begin;
        bytes32[] memory arr = new bytes32[](size);
        for(uint256 i = 0; i < size; i++) {
            arr[i] = periodMerkleRoots[begin + i];
        }
        return arr;
    }

    function emergencyWithdraw(IERC20 token) external override {
      require(token != rewardsToken, "forbidden token");

      token.transfer(emergencyRecipient, token.balanceOf(address(this)));
    }

    function seedAllocations(uint256 period, bytes32 merkleRoot, uint256 totalAllocation) external onlyOwner {
        require(periodMerkleRoots[period] == bytes32(0), "already seed");

        periodMerkleRoots[period] = merkleRoot;
        require(rewardsToken.transferFrom(msg.sender, address(this), totalAllocation), "transfer failed");
    }

    function _disburse(address recipient, uint256 balance) private {
        if (balance > 0) {
            rewardsToken.transfer(recipient, balance);
            emit Claimed(recipient, balance);
        }
    }

    /*==== EVENTS ====*/
    event Claimed(address indexed recipient, uint256 balance);
}

File 2 of 7 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 3 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 7 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.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 make 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 5 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

abstract contract Ownable {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        owner = _owner;
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "not nominated");
        emit OwnerChanged(owner, nominatedOwner);

        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    function renounceOwnership() external onlyOwner {
        emit OwnerChanged(owner, address(0));
        owner = address(0);
    }

    function nominateNewOwner(address newOwner) external onlyOwner {
        nominatedOwner = newOwner;
        emit OwnerNominated(newOwner);
    }

    modifier onlyOwner {
        require(msg.sender == owner, "not owner");
        _;
    }

    event OwnerNominated(address indexed newOwner);
    event OwnerChanged(address indexed oldOwner, address indexed newOwner);
}

File 6 of 7 : IEmergency.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IEmergency {
    function emergencyWithdraw(IERC20 token) external ;
}

File 7 of 7 : MerkleProof.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev These functions deal with verification of Merkle trees (hash trees),
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract IERC20","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_emergencyRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claimPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"internalType":"struct MerkleRedeem.Claim[]","name":"claims","type":"tuple[]"}],"name":"claimPeriods","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"claimStatus","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","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":"uint256","name":"","type":"uint256"}],"name":"periodMerkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"totalAllocation","type":"uint256"}],"name":"seedAllocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"verifyClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620022ad380380620022ad83398181016040528101906200003791906200013a565b82806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160028190555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200020c565b6000815190506200011d81620001d8565b92915050565b6000815190506200013481620001f2565b92915050565b6000806000606084860312156200015057600080fd5b600062000160868287016200010c565b9350506020620001738682870162000123565b925050604062000186868287016200010c565b9150509250925092565b60006200019d82620001b8565b9050919050565b6000620001b18262000190565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001e38162000190565b8114620001ef57600080fd5b50565b620001fd81620001a4565b81146200020957600080fd5b50565b612091806200021c6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063727a7c5a11610097578063b03d8c2f11610066578063b03d8c2f14610285578063be9ee11f146102a1578063d1af0c7d146102bf578063eb0d07f5146102dd57610100565b8063727a7c5a1461021157806379ba5097146102415780638da5cb5b1461024b5780638dbfd5e81461026957610100565b80634cd488ab116100d35780634cd488ab146101b157806353a47bb7146101cd5780636ff1c9bc146101eb578063715018a61461020757610100565b8063120aa877146101055780631627540c1461013557806339436b001461015157806347fb23c114610181575b600080fd5b61011f600480360381019061011a91906118b1565b61030d565b60405161012c9190611cf5565b60405180910390f35b61014f600480360381019061014a91906116c6565b61033c565b005b61016b6004803603810190610166919061193c565b610484565b6040516101789190611cd3565b60405180910390f35b61019b60048036038101906101969190611743565b61052d565b6040516101a89190611cb1565b60405180910390f35b6101cb60048036038101906101c691906118ed565b610627565b005b6101d561084d565b6040516101e29190611c36565b60405180910390f35b61020560048036038101906102009190611836565b610873565b005b61020f610a3f565b005b61022b6004803603810190610226919061185f565b610bbe565b6040516102389190611d10565b60405180910390f35b610249610bd6565b005b610253610ddb565b6040516102609190611c36565b60405180910390f35b610283600480360381019061027e9190611792565b610dff565b005b61029f600480360381019061029a91906116ef565b610fb2565b005b6102a96111cc565b6040516102b69190611c36565b60405180910390f35b6102c76111f2565b6040516102d49190611d2b565b60405180910390f35b6102f760048036038101906102f29190611792565b611218565b6040516103049190611cf5565b60405180910390f35b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260405160405180910390a250565b60606000838360010103905060608167ffffffffffffffff811180156104a957600080fd5b506040519080825280602002602001820160405280156104d85781602001602082028036833780820191505090505b50905060005b82811015610521576005600082880181526020019081526020016000205482828151811061050857fe5b60200260200101818152505080806001019150506104de565b50809250505092915050565b60606000838360010103905060608167ffffffffffffffff8111801561055257600080fd5b506040519080825280602002602001820160405280156105815781602001602082028036833780820191505090505b50905060005b8281101561061a5760066000828801815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168282815181106105fb57fe5b6020026020010190151590811515815250508080600101915050610587565b5080925050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000801b600560008581526020019081526020016000205414610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073790611d66565b60405180910390fd5b816005600085815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016107b793929190611c51565b602060405180830381600087803b1580156107d157600080fd5b505af11580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610809919061180d565b610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f90611d86565b60405180910390fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90611d46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161097c9190611c36565b60206040518083038186803b15801561099457600080fd5b505afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190611888565b6040518363ffffffff1660e01b81526004016109e9929190611c88565b602060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3b919061180d565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60056020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f74206e6f6d696e617465640000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280541415610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600280819055506006600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ee657600080fd5b610ef284848484611218565b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611da6565b60405180910390fd5b60016006600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610fa4848361126f565b600160028190555050505050565b60028054141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60028081905550600061103b6114b8565b60005b83518110156111b35783818151811061105357fe5b60200260200101519150600660008360000151815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110c957600080fd5b6110e185836000015184602001518560400151611218565b611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790611da6565b60405180910390fd5b61113782602001518461137b90919063ffffffff16565b92506001600660008460000151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061103e565b506111be848361126f565b505060016002819055505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080858460405160200161122e929190611c0a565b60405160208183030381529060405280519060200120905061126483600560008881526020019081526020016000205483611403565b915050949350505050565b600081111561137757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112d5929190611c88565b602060405180830381600087803b1580156112ef57600080fd5b505af1158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061180d565b508173ffffffffffffffffffffffffffffffffffffffff167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a8260405161136e9190611dc6565b60405180910390a25b5050565b6000808284019050838110156113f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008082905060005b85518110156114aa57600086828151811061142357fe5b6020026020010151905080831161146a578281604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061149c565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50808060010191505061140c565b508381149150509392505050565b60405180606001604052806000815260200160008152602001606081525090565b6000813590506114e881611fe8565b92915050565b600082601f8301126114ff57600080fd5b813561151261150d82611e12565b611de1565b9150818183526020840193506020810190508385602084028201111561153757600080fd5b60005b83811015611567578161154d88826115fa565b84526020840193506020830192505060018101905061153a565b5050505092915050565b600082601f83011261158257600080fd5b813561159561159082611e3e565b611de1565b9150818183526020840193506020810190508360005b838110156115db57813586016115c18882611624565b8452602084019350602083019250506001810190506115ab565b5050505092915050565b6000815190506115f481611fff565b92915050565b60008135905061160981612016565b92915050565b60008135905061161e8161202d565b92915050565b60006060828403121561163657600080fd5b6116406060611de1565b905060006116508482850161169c565b60008301525060206116648482850161169c565b602083015250604082013567ffffffffffffffff81111561168457600080fd5b611690848285016114ee565b60408301525092915050565b6000813590506116ab81612044565b92915050565b6000815190506116c081612044565b92915050565b6000602082840312156116d857600080fd5b60006116e6848285016114d9565b91505092915050565b6000806040838503121561170257600080fd5b6000611710858286016114d9565b925050602083013567ffffffffffffffff81111561172d57600080fd5b61173985828601611571565b9150509250929050565b60008060006060848603121561175857600080fd5b6000611766868287016114d9565b93505060206117778682870161169c565b92505060406117888682870161169c565b9150509250925092565b600080600080608085870312156117a857600080fd5b60006117b6878288016114d9565b94505060206117c78782880161169c565b93505060406117d88782880161169c565b925050606085013567ffffffffffffffff8111156117f557600080fd5b611801878288016114ee565b91505092959194509250565b60006020828403121561181f57600080fd5b600061182d848285016115e5565b91505092915050565b60006020828403121561184857600080fd5b60006118568482850161160f565b91505092915050565b60006020828403121561187157600080fd5b600061187f8482850161169c565b91505092915050565b60006020828403121561189a57600080fd5b60006118a8848285016116b1565b91505092915050565b600080604083850312156118c457600080fd5b60006118d28582860161169c565b92505060206118e3858286016114d9565b9150509250929050565b60008060006060848603121561190257600080fd5b60006119108682870161169c565b9350506020611921868287016115fa565b92505060406119328682870161169c565b9150509250925092565b6000806040838503121561194f57600080fd5b600061195d8582860161169c565b925050602061196e8582860161169c565b9150509250929050565b60006119848383611a99565b60208301905092915050565b600061199c8383611ab7565b60208301905092915050565b6119b181611f51565b82525050565b6119c081611eed565b82525050565b6119d76119d282611eed565b611fab565b82525050565b60006119e882611e8a565b6119f28185611eba565b93506119fd83611e6a565b8060005b83811015611a2e578151611a158882611978565b9750611a2083611ea0565b925050600181019050611a01565b5085935050505092915050565b6000611a4682611e95565b611a508185611ecb565b9350611a5b83611e7a565b8060005b83811015611a8c578151611a738882611990565b9750611a7e83611ead565b925050600181019050611a5f565b5085935050505092915050565b611aa281611eff565b82525050565b611ab181611eff565b82525050565b611ac081611f0b565b82525050565b611acf81611f0b565b82525050565b611ade81611f63565b82525050565b6000611af1600f83611edc565b91507f666f7262696464656e20746f6b656e00000000000000000000000000000000006000830152602082019050919050565b6000611b31600c83611edc565b91507f616c7265616479207365656400000000000000000000000000000000000000006000830152602082019050919050565b6000611b71600f83611edc565b91507f7472616e73666572206661696c656400000000000000000000000000000000006000830152602082019050919050565b6000611bb1601683611edc565b91507f696e636f7272656374206d65726b6c652070726f6f66000000000000000000006000830152602082019050919050565b611bed81611f47565b82525050565b611c04611bff82611f47565b611fcf565b82525050565b6000611c1682856119c6565b601482019150611c268284611bf3565b6020820191508190509392505050565b6000602082019050611c4b60008301846119b7565b92915050565b6000606082019050611c6660008301866119a8565b611c7360208301856119b7565b611c806040830184611be4565b949350505050565b6000604082019050611c9d60008301856119b7565b611caa6020830184611be4565b9392505050565b60006020820190508181036000830152611ccb81846119dd565b905092915050565b60006020820190508181036000830152611ced8184611a3b565b905092915050565b6000602082019050611d0a6000830184611aa8565b92915050565b6000602082019050611d256000830184611ac6565b92915050565b6000602082019050611d406000830184611ad5565b92915050565b60006020820190508181036000830152611d5f81611ae4565b9050919050565b60006020820190508181036000830152611d7f81611b24565b9050919050565b60006020820190508181036000830152611d9f81611b64565b9050919050565b60006020820190508181036000830152611dbf81611ba4565b9050919050565b6000602082019050611ddb6000830184611be4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611e0857611e07611fd9565b5b8060405250919050565b600067ffffffffffffffff821115611e2d57611e2c611fd9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611e5957611e58611fd9565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611ef882611f27565b9050919050565b60008115159050919050565b6000819050919050565b6000611f2082611eed565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611f5c82611f87565b9050919050565b6000611f6e82611f75565b9050919050565b6000611f8082611f27565b9050919050565b6000611f9282611f99565b9050919050565b6000611fa482611f27565b9050919050565b6000611fb682611fbd565b9050919050565b6000611fc882611fdb565b9050919050565b6000819050919050565bfe5b60008160601b9050919050565b611ff181611eed565b8114611ffc57600080fd5b50565b61200881611eff565b811461201357600080fd5b50565b61201f81611f0b565b811461202a57600080fd5b50565b61203681611f15565b811461204157600080fd5b50565b61204d81611f47565b811461205857600080fd5b5056fea26469706673582212204b30e6131aa4ad87b80e6e4c88368ab7bbf8f164a69917c9f50abe093d1eb5f164736f6c634300070400330000000000000000000000003b1b761ec28b63227a1e7204a80622180dccc22f0000000000000000000000000000000000095413afc295d19edeb1ad7b71c95200000000000000000000000000000000d49a1772a9ed1533f0d6b7f54a4a814e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063727a7c5a11610097578063b03d8c2f11610066578063b03d8c2f14610285578063be9ee11f146102a1578063d1af0c7d146102bf578063eb0d07f5146102dd57610100565b8063727a7c5a1461021157806379ba5097146102415780638da5cb5b1461024b5780638dbfd5e81461026957610100565b80634cd488ab116100d35780634cd488ab146101b157806353a47bb7146101cd5780636ff1c9bc146101eb578063715018a61461020757610100565b8063120aa877146101055780631627540c1461013557806339436b001461015157806347fb23c114610181575b600080fd5b61011f600480360381019061011a91906118b1565b61030d565b60405161012c9190611cf5565b60405180910390f35b61014f600480360381019061014a91906116c6565b61033c565b005b61016b6004803603810190610166919061193c565b610484565b6040516101789190611cd3565b60405180910390f35b61019b60048036038101906101969190611743565b61052d565b6040516101a89190611cb1565b60405180910390f35b6101cb60048036038101906101c691906118ed565b610627565b005b6101d561084d565b6040516101e29190611c36565b60405180910390f35b61020560048036038101906102009190611836565b610873565b005b61020f610a3f565b005b61022b6004803603810190610226919061185f565b610bbe565b6040516102389190611d10565b60405180910390f35b610249610bd6565b005b610253610ddb565b6040516102609190611c36565b60405180910390f35b610283600480360381019061027e9190611792565b610dff565b005b61029f600480360381019061029a91906116ef565b610fb2565b005b6102a96111cc565b6040516102b69190611c36565b60405180910390f35b6102c76111f2565b6040516102d49190611d2b565b60405180910390f35b6102f760048036038101906102f29190611792565b611218565b6040516103049190611cf5565b60405180910390f35b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260405160405180910390a250565b60606000838360010103905060608167ffffffffffffffff811180156104a957600080fd5b506040519080825280602002602001820160405280156104d85781602001602082028036833780820191505090505b50905060005b82811015610521576005600082880181526020019081526020016000205482828151811061050857fe5b60200260200101818152505080806001019150506104de565b50809250505092915050565b60606000838360010103905060608167ffffffffffffffff8111801561055257600080fd5b506040519080825280602002602001820160405280156105815781602001602082028036833780820191505090505b50905060005b8281101561061a5760066000828801815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168282815181106105fb57fe5b6020026020010190151590811515815250508080600101915050610587565b5080925050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000801b600560008581526020019081526020016000205414610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073790611d66565b60405180910390fd5b816005600085815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016107b793929190611c51565b602060405180830381600087803b1580156107d157600080fd5b505af11580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610809919061180d565b610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f90611d86565b60405180910390fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90611d46565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161097c9190611c36565b60206040518083038186803b15801561099457600080fd5b505afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190611888565b6040518363ffffffff1660e01b81526004016109e9929190611c88565b602060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3b919061180d565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74206f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60056020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f74206e6f6d696e617465640000000000000000000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280541415610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600280819055506006600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ee657600080fd5b610ef284848484611218565b610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611da6565b60405180910390fd5b60016006600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610fa4848361126f565b600160028190555050505050565b60028054141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60028081905550600061103b6114b8565b60005b83518110156111b35783818151811061105357fe5b60200260200101519150600660008360000151815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110c957600080fd5b6110e185836000015184602001518560400151611218565b611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790611da6565b60405180910390fd5b61113782602001518461137b90919063ffffffff16565b92506001600660008460000151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061103e565b506111be848361126f565b505060016002819055505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080858460405160200161122e929190611c0a565b60405160208183030381529060405280519060200120905061126483600560008881526020019081526020016000205483611403565b915050949350505050565b600081111561137757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112d5929190611c88565b602060405180830381600087803b1580156112ef57600080fd5b505af1158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061180d565b508173ffffffffffffffffffffffffffffffffffffffff167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a8260405161136e9190611dc6565b60405180910390a25b5050565b6000808284019050838110156113f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008082905060005b85518110156114aa57600086828151811061142357fe5b6020026020010151905080831161146a578281604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061149c565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50808060010191505061140c565b508381149150509392505050565b60405180606001604052806000815260200160008152602001606081525090565b6000813590506114e881611fe8565b92915050565b600082601f8301126114ff57600080fd5b813561151261150d82611e12565b611de1565b9150818183526020840193506020810190508385602084028201111561153757600080fd5b60005b83811015611567578161154d88826115fa565b84526020840193506020830192505060018101905061153a565b5050505092915050565b600082601f83011261158257600080fd5b813561159561159082611e3e565b611de1565b9150818183526020840193506020810190508360005b838110156115db57813586016115c18882611624565b8452602084019350602083019250506001810190506115ab565b5050505092915050565b6000815190506115f481611fff565b92915050565b60008135905061160981612016565b92915050565b60008135905061161e8161202d565b92915050565b60006060828403121561163657600080fd5b6116406060611de1565b905060006116508482850161169c565b60008301525060206116648482850161169c565b602083015250604082013567ffffffffffffffff81111561168457600080fd5b611690848285016114ee565b60408301525092915050565b6000813590506116ab81612044565b92915050565b6000815190506116c081612044565b92915050565b6000602082840312156116d857600080fd5b60006116e6848285016114d9565b91505092915050565b6000806040838503121561170257600080fd5b6000611710858286016114d9565b925050602083013567ffffffffffffffff81111561172d57600080fd5b61173985828601611571565b9150509250929050565b60008060006060848603121561175857600080fd5b6000611766868287016114d9565b93505060206117778682870161169c565b92505060406117888682870161169c565b9150509250925092565b600080600080608085870312156117a857600080fd5b60006117b6878288016114d9565b94505060206117c78782880161169c565b93505060406117d88782880161169c565b925050606085013567ffffffffffffffff8111156117f557600080fd5b611801878288016114ee565b91505092959194509250565b60006020828403121561181f57600080fd5b600061182d848285016115e5565b91505092915050565b60006020828403121561184857600080fd5b60006118568482850161160f565b91505092915050565b60006020828403121561187157600080fd5b600061187f8482850161169c565b91505092915050565b60006020828403121561189a57600080fd5b60006118a8848285016116b1565b91505092915050565b600080604083850312156118c457600080fd5b60006118d28582860161169c565b92505060206118e3858286016114d9565b9150509250929050565b60008060006060848603121561190257600080fd5b60006119108682870161169c565b9350506020611921868287016115fa565b92505060406119328682870161169c565b9150509250925092565b6000806040838503121561194f57600080fd5b600061195d8582860161169c565b925050602061196e8582860161169c565b9150509250929050565b60006119848383611a99565b60208301905092915050565b600061199c8383611ab7565b60208301905092915050565b6119b181611f51565b82525050565b6119c081611eed565b82525050565b6119d76119d282611eed565b611fab565b82525050565b60006119e882611e8a565b6119f28185611eba565b93506119fd83611e6a565b8060005b83811015611a2e578151611a158882611978565b9750611a2083611ea0565b925050600181019050611a01565b5085935050505092915050565b6000611a4682611e95565b611a508185611ecb565b9350611a5b83611e7a565b8060005b83811015611a8c578151611a738882611990565b9750611a7e83611ead565b925050600181019050611a5f565b5085935050505092915050565b611aa281611eff565b82525050565b611ab181611eff565b82525050565b611ac081611f0b565b82525050565b611acf81611f0b565b82525050565b611ade81611f63565b82525050565b6000611af1600f83611edc565b91507f666f7262696464656e20746f6b656e00000000000000000000000000000000006000830152602082019050919050565b6000611b31600c83611edc565b91507f616c7265616479207365656400000000000000000000000000000000000000006000830152602082019050919050565b6000611b71600f83611edc565b91507f7472616e73666572206661696c656400000000000000000000000000000000006000830152602082019050919050565b6000611bb1601683611edc565b91507f696e636f7272656374206d65726b6c652070726f6f66000000000000000000006000830152602082019050919050565b611bed81611f47565b82525050565b611c04611bff82611f47565b611fcf565b82525050565b6000611c1682856119c6565b601482019150611c268284611bf3565b6020820191508190509392505050565b6000602082019050611c4b60008301846119b7565b92915050565b6000606082019050611c6660008301866119a8565b611c7360208301856119b7565b611c806040830184611be4565b949350505050565b6000604082019050611c9d60008301856119b7565b611caa6020830184611be4565b9392505050565b60006020820190508181036000830152611ccb81846119dd565b905092915050565b60006020820190508181036000830152611ced8184611a3b565b905092915050565b6000602082019050611d0a6000830184611aa8565b92915050565b6000602082019050611d256000830184611ac6565b92915050565b6000602082019050611d406000830184611ad5565b92915050565b60006020820190508181036000830152611d5f81611ae4565b9050919050565b60006020820190508181036000830152611d7f81611b24565b9050919050565b60006020820190508181036000830152611d9f81611b64565b9050919050565b60006020820190508181036000830152611dbf81611ba4565b9050919050565b6000602082019050611ddb6000830184611be4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611e0857611e07611fd9565b5b8060405250919050565b600067ffffffffffffffff821115611e2d57611e2c611fd9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611e5957611e58611fd9565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611ef882611f27565b9050919050565b60008115159050919050565b6000819050919050565b6000611f2082611eed565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611f5c82611f87565b9050919050565b6000611f6e82611f75565b9050919050565b6000611f8082611f27565b9050919050565b6000611f9282611f99565b9050919050565b6000611fa482611f27565b9050919050565b6000611fb682611fbd565b9050919050565b6000611fc882611fdb565b9050919050565b6000819050919050565bfe5b60008160601b9050919050565b611ff181611eed565b8114611ffc57600080fd5b50565b61200881611eff565b811461201357600080fd5b50565b61201f81611f0b565b811461202a57600080fd5b50565b61203681611f15565b811461204157600080fd5b50565b61204d81611f47565b811461205857600080fd5b5056fea26469706673582212204b30e6131aa4ad87b80e6e4c88368ab7bbf8f164a69917c9f50abe093d1eb5f164736f6c63430007040033

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

0000000000000000000000003b1b761ec28b63227a1e7204a80622180dccc22f0000000000000000000000000000000000095413afc295d19edeb1ad7b71c95200000000000000000000000000000000d49a1772a9ed1533f0d6b7f54a4a814e

-----Decoded View---------------
Arg [0] : _owner (address): 0x3B1b761ec28B63227a1e7204a80622180DCcC22f
Arg [1] : _rewardsToken (address): 0x0000000000095413afC295d19EDeb1Ad7B71c952
Arg [2] : _emergencyRecipient (address): 0x00000000D49A1772A9Ed1533f0d6b7f54A4A814e

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003b1b761ec28b63227a1e7204a80622180dccc22f
Arg [1] : 0000000000000000000000000000000000095413afc295d19edeb1ad7b71c952
Arg [2] : 00000000000000000000000000000000d49a1772a9ed1533f0d6b7f54a4a814e


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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