ETH Price: $2,882.98 (-3.33%)
Gas: 0.12 Gwei
 

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
Claim Payout182539602023-10-01 6:40:35781 days ago1696142435IN
0x058bD726...8EFB11cc8
0 ETH0.000224067.49962699
Claim Payout182539552023-10-01 6:39:35781 days ago1696142375IN
0x058bD726...8EFB11cc8
0 ETH0.000217147.26801124
Set Locked177094162023-07-17 0:28:47857 days ago1689553727IN
0x058bD726...8EFB11cc8
0 ETH0.0004872916.04648768
Claim Payout177087782023-07-16 22:19:35858 days ago1689545975IN
0x058bD726...8EFB11cc8
0 ETH0.001226313.5937554
Claim Payout177082012023-07-16 20:22:47858 days ago1689538967IN
0x058bD726...8EFB11cc8
0 ETH0.0016648618.29300572
Claim Payout177080452023-07-16 19:51:35858 days ago1689537095IN
0x058bD726...8EFB11cc8
0 ETH0.0016796315.53159469
Claim Payout177078992023-07-16 19:22:23858 days ago1689535343IN
0x058bD726...8EFB11cc8
0 ETH0.0013536712.52
Claim Payout177071492023-07-16 16:50:59858 days ago1689526259IN
0x058bD726...8EFB11cc8
0 ETH0.001738216.07496584
Claim Payout177070892023-07-16 16:38:47858 days ago1689525527IN
0x058bD726...8EFB11cc8
0 ETH0.002092419.35461504
Claim Payout177051792023-07-16 10:12:11858 days ago1689502331IN
0x058bD726...8EFB11cc8
0 ETH0.0014985716.46406463
Claim Payout177046972023-07-16 8:34:35858 days ago1689496475IN
0x058bD726...8EFB11cc8
0 ETH0.0015208114.06717438
Claim Payout177046762023-07-16 8:30:11858 days ago1689496211IN
0x058bD726...8EFB11cc8
0 ETH0.0015055114.02944293
Claim Payout177046632023-07-16 8:27:35858 days ago1689496055IN
0x058bD726...8EFB11cc8
0 ETH0.0012242213.44815042
Claim Payout177046532023-07-16 8:25:35858 days ago1689495935IN
0x058bD726...8EFB11cc8
0 ETH0.0014756313.64903828
Claim Payout177046392023-07-16 8:22:47858 days ago1689495767IN
0x058bD726...8EFB11cc8
0 ETH0.001536914.32140888
Claim Payout177046202023-07-16 8:18:59858 days ago1689495539IN
0x058bD726...8EFB11cc8
0 ETH0.0016702915.45100184
Claim Payout177046092023-07-16 8:16:35858 days ago1689495395IN
0x058bD726...8EFB11cc8
0 ETH0.0015406214.25017489
Claim Payout177045852023-07-16 8:11:47858 days ago1689495107IN
0x058bD726...8EFB11cc8
0 ETH0.0017750816.41791864
Claim Payout177045472023-07-16 8:03:59858 days ago1689494639IN
0x058bD726...8EFB11cc8
0 ETH0.0016243115.13310177
Claim Payout177045282023-07-16 8:00:11858 days ago1689494411IN
0x058bD726...8EFB11cc8
0 ETH0.0015731114.55252751
Claim Payout177045132023-07-16 7:57:11858 days ago1689494231IN
0x058bD726...8EFB11cc8
0 ETH0.0016072914.8684804
Claim Payout177045032023-07-16 7:55:11858 days ago1689494111IN
0x058bD726...8EFB11cc8
0 ETH0.0015614114.44109552
Claim Payout177044882023-07-16 7:52:11858 days ago1689493931IN
0x058bD726...8EFB11cc8
0 ETH0.0014774813.66767061
Claim Payout177044472023-07-16 7:43:59858 days ago1689493439IN
0x058bD726...8EFB11cc8
0 ETH0.0015459514.29992923
Claim Payout177044332023-07-16 7:41:11858 days ago1689493271IN
0x058bD726...8EFB11cc8
0 ETH0.0017162915.87621554
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
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:
PayoutClaimDistributor

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-08-19
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File @openzeppelin/contracts/cryptography/[email protected]

// SPDX-License-Identifier: MIT

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;
    }
}


// File @animoca/ethereum-contracts-assets/contracts/token/ERC20/interfaces/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, basic interface.
 * @dev See https://eips.ethereum.org/EIPS/eip-20
 * @dev Note: The ERC-165 identifier for this interface is 0x36372b07.
 */
interface IERC20 {
    /**
     * @dev Emitted when tokens are transferred, including zero value transfers.
     * @param _from The account where the transferred tokens are withdrawn from.
     * @param _to The account where the transferred tokens are deposited to.
     * @param _value The amount of tokens being transferred.
     */
    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    /**
     * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made.
     * @param _owner The account granting an allowance to `_spender`.
     * @param _spender The account being granted an allowance from `_owner`.
     * @param _value The allowance amount being granted.
     */
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    /**
     * @notice Returns the total token supply.
     * @return The total token supply.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Returns the account balance of another account with address `owner`.
     * @param owner The account whose balance will be returned.
     * @return The account balance of another account with address `owner`.
     */
    function balanceOf(address owner) external view returns (uint256);

    /**
     * Transfers `value` amount of tokens to address `to`.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if the sender does not have enough balance.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @notice Transfers `value` amount of tokens from address `from` to address `to`.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if `from` does not have at least `value` of balance.
     * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param from The emitter account.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    /**
     * Sets `value` as the allowance from the caller to `spender`.
     *  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
     * @dev Reverts if `spender` is the zero address.
     * @dev Emits the {IERC20-Approval} event.
     * @param spender The account being granted the allowance by the message caller.
     * @param value The allowance amount to grant.
     * @return True if the approval succeeds, false otherwise.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * Returns the amount which `spender` is allowed to spend on behalf of `owner`.
     * @param owner The account that has granted an allowance to `spender`.
     * @param spender The account that was granted an allowance by `owner`.
     * @return The amount which `spender` is allowed to spend on behalf of `owner`.
     */
    function allowance(address owner, address spender) external view returns (uint256);
}


// File @animoca/ethereum-contracts-core/contracts/metatx/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/*
 * 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.
 */
abstract contract ManagedIdentity {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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


// File @animoca/ethereum-contracts-core/contracts/access/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC-173 Contract Ownership Standard
 * Note: the ERC-165 identifier for this interface is 0x7f5828d0
 */
interface IERC173 {
    /**
     * Event emited when ownership of a contract changes.
     * @param previousOwner the previous owner.
     * @param newOwner the new owner.
     */
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * Get the address of the owner
     * @return The address of the owner.
     */
    function owner() external view returns (address);

    /**
     * Set the address of the new owner of the contract
     * Set newOwner to address(0) to renounce any ownership.
     * @dev Emits an {OwnershipTransferred} event.
     * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership.
     */
    function transferOwnership(address newOwner) external;
}


// File @animoca/ethereum-contracts-core/contracts/access/[email protected]

pragma solidity >=0.7.6 <0.8.0;


/**
 * @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 ManagedIdentity, IERC173 {
    address internal _owner;

    /**
     * Initializes the contract, setting the deployer as the initial owner.
     * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event.
     */
    constructor(address owner_) {
        _owner = owner_;
        emit OwnershipTransferred(address(0), owner_);
    }

    /**
     * Gets the address of the current contract owner.
     */
    function owner() public view virtual override returns (address) {
        return _owner;
    }

    /**
     * See {IERC173-transferOwnership(address)}
     * @dev Reverts if the sender is not the current contract owner.
     * @param newOwner the address of the new owner. Use the zero address to renounce the ownership.
     */
    function transferOwnership(address newOwner) public virtual override {
        _requireOwnership(_msgSender());
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }

    /**
     * @dev Reverts if `account` is not the contract owner.
     * @param account the account to test.
     */
    function _requireOwnership(address account) internal virtual {
        require(account == this.owner(), "Ownable: not the owner");
    }
}


// File contracts/payout/PayoutClaimDistributor.sol
pragma solidity >=0.7.6 <0.8.0;



/// @title PayoutClaimDistributor
/// @notice Through this contract, users could claim ERC20 token s/he is eligible to claim the rewards.
///      - The owner/deployer of the contract could set merkle root, distributor address or lock/unlock the distribution.
///      - Owner sets the ERC20 Token address (`token`) when deploying the contract, the owner also
///        sets distributor address (`distAddress`) through `setDistributorAddress` function from which to distribute the tokens.
///      - Owner should also approve the amount of ERC20 tokens allowed to distribute through this contract.
///      - For owner to set new merkle root through `setMerkleRoot` function, contract distribution should be locked though
///         `setLocked`.
///      - To enable distribution again, it should be unlocked with `setLocked` function.
///      - Users could claim the ERC20 token payout when the distributor is unlocked.

contract PayoutClaimDistributor is Ownable {
    using MerkleProof for bytes32[];

    event SetMerkleRoot(bytes32 indexed merkleRoot);
    event ClaimedPayout(address indexed account, uint256 amount, uint256 batch);
    event DistributionLocked(bool isLocked);
    event SetDistributorAddress(address indexed ownerAddress, address indexed distAddress);

    bytes32 public merkleRoot;
    IERC20 public token;
    address public distAddress;
    bool public isLocked;

    /*
     * Mapping for hash for (address, amount, batch) for claimed status
     */
    mapping(bytes32 => bool) public claimed;

    /// @dev Constructor for setting ERC token address on deployment
    /// @param token_ Address for token to distribute
    /// @dev `distAddress` deployer address will be distributor address by default
    constructor(IERC20 token_) Ownable(msg.sender) {
        token = token_;
        distAddress = msg.sender;
    }

    /// @notice Merkle Root for current period to use for payout.
    ///    - distributor contract should be locked before setting new merkle root
    /// @dev Owner sets merkle hash generated based on the payout set
    /// @dev Reverts if the distribution contract is not locked while setting new merkle root
    /// @dev Emits SetMerkleRoot event.
    /// @param merkleRoot_ bytes32 string of merkle root to set for specific period
    function setMerkleRoot(bytes32 merkleRoot_) public {
        _requireOwnership(_msgSender());
        require(isLocked, "Payout not locked");

        merkleRoot = merkleRoot_;
        emit SetMerkleRoot(merkleRoot_);
    }

    /// @notice Set locked/unlocked status  for PayoutClaim Distributor
    /// @dev Owner lock/unlock each time new merkle root is being generated
    /// @dev Emits DistributionLocked event.
    /// @param isLocked_ = true/false status
    function setLocked(bool isLocked_) public {
        _requireOwnership(_msgSender());
        isLocked = isLocked_;
        emit DistributionLocked(isLocked_);
    }

    /// @notice Distributor address in PayoutClaim Distributor
    /// @dev Wallet that holds token for distribution
    /// @dev Emits SetDistributorAddress event.
    /// @param distributorAddress Distributor address used for distribution of `token` token
    function setDistributorAddress(address distributorAddress) public {
        address msgSender = _msgSender();
        _requireOwnership(msgSender);

        distAddress = distributorAddress;
        emit SetDistributorAddress(msgSender, distributorAddress);
    }

    /// @notice Payout method that user calls to claim
    /// @dev Method user calls for claiming the payout for user
    /// @dev Emits ClaimedPayout event.
    /// @param account Address of the user to claim the payout
    /// @param amount Claimable amount of address
    /// @param batch Unique value for each new merkle root generating
    /// @param merkleProof Merkle proof of the user based on the merkle root
    function claimPayout(
        address account,
        uint256 amount,
        uint256 batch,
        bytes32[] calldata merkleProof
    ) external {
        require(!isLocked, "Payout locked");

        bytes32 leafHash = keccak256(abi.encodePacked(account, amount, batch));

        require(!claimed[leafHash], "Payout already claimed");
        require(merkleProof.verify(merkleRoot, leafHash), "Invalid proof");

        claimed[leafHash] = true;

        IERC20(token).transferFrom(distAddress, account, amount);

        emit ClaimedPayout(account, amount, batch);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"batch","type":"uint256"}],"name":"ClaimedPayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isLocked","type":"bool"}],"name":"DistributionLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"ownerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"distAddress","type":"address"}],"name":"SetDistributorAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"SetMerkleRoot","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"batch","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claimPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"distributorAddress","type":"address"}],"name":"setDistributorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isLocked_","type":"bool"}],"name":"setLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516109103803806109108339818101604052602081101561003357600080fd5b5051600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b039092166001600160a01b03199283161790556003805490911633179055610862806100ae6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806387950f491161007157806387950f49146101b65780638da5cb5b146101dc578063a4e2d634146101e4578063cc3c0f0614610200578063f2fde38b1461021d578063fc0c546a14610243576100a9565b8063211e28b6146100ae57806321c3df25146100cf5780632eb4a7ab1461015b5780637cb6475914610175578063878e065814610192575b600080fd5b6100cd600480360360208110156100c457600080fd5b5035151561024b565b005b6100cd600480360360808110156100e557600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184602083028401116401000000008311171561015057600080fd5b5090925090506102ae565b610163610518565b60408051918252519081900360200190f35b6100cd6004803603602081101561018b57600080fd5b503561051e565b61019a6105ae565b604080516001600160a01b039092168252519081900360200190f35b6100cd600480360360208110156101cc57600080fd5b50356001600160a01b03166105bd565b61019a610623565b6101ec610632565b604080519115158252519081900360200190f35b6101ec6004803603602081101561021657600080fd5b5035610642565b6100cd6004803603602081101561023357600080fd5b50356001600160a01b0316610657565b61019a6106b0565b61025b6102566106bf565b6106c3565b60038054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f02facaa785222e4bd80c10706458a82b36f6c826954368073e6a0cbf0405ae709181900360200190a150565b600354600160a01b900460ff16156102fd576040805162461bcd60e51b815260206004820152600d60248201526c14185e5bdd5d081b1bd8dad959609a1b604482015290519081900360640190fd5b604080516bffffffffffffffffffffffff19606088901b166020808301919091526034820187905260548083018790528351808403909101815260749092018352815191810191909120600081815260049092529190205460ff16156103a3576040805162461bcd60e51b815260206004820152601660248201527514185e5bdd5d08185b1c9958591e4818db185a5b595960521b604482015290519081900360640190fd5b6103e7600154828585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509294939250506107839050565b610428576040805162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015290519081900360640190fd5b6000818152600460208181526040808420805460ff1916600117905560025460035482516323b872dd60e01b81526001600160a01b03918216958101959095528b81166024860152604485018b905291519116936323b872dd936064808201949392918390030190829087803b1580156104a157600080fd5b505af11580156104b5573d6000803e3d6000fd5b505050506040513d60208110156104cb57600080fd5b5050604080518681526020810186905281516001600160a01b038916927f50bfd7a1ed22b77390b27d4c62acb66656778c2f221853834365a348f894077b928290030190a2505050505050565b60015481565b6105296102566106bf565b600354600160a01b900460ff1661057b576040805162461bcd60e51b815260206004820152601160248201527014185e5bdd5d081b9bdd081b1bd8dad959607a1b604482015290519081900360640190fd5b600181905560405181907f914960aef5e033ce5cae8a7992d4b7a6f0f9741227b66acb67c605b7019f8a4690600090a250565b6003546001600160a01b031681565b60006105c76106bf565b90506105d2816106c3565b600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907fe9286a175900d0389b36adb63c9d6992999e166909e1050adf0fc5efa15c91fd90600090a35050565b6000546001600160a01b031690565b600354600160a01b900460ff1681565b60046020526000908152604090205460ff1681565b6106626102566106bf565b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6002546001600160a01b031681565b3390565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106fc57600080fd5b505afa158015610710573d6000803e3d6000fd5b505050506040513d602081101561072657600080fd5b50516001600160a01b03828116911614610780576040805162461bcd60e51b815260206004820152601660248201527527bbb730b136329d103737ba103a34329037bbb732b960511b604482015290519081900360640190fd5b50565b600081815b855181101561082157600086828151811061079f57fe5b602002602001015190508083116107e65782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610818565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101610788565b50909214939250505056fea26469706673582212207ef6c24ae9947e0bee0a808e941938541b7c0bdca71145d39e581f1b2847617764736f6c6343000706003300000000000000000000000046e98ffe40e408ba6412beb670507e083c8b95ff

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806387950f491161007157806387950f49146101b65780638da5cb5b146101dc578063a4e2d634146101e4578063cc3c0f0614610200578063f2fde38b1461021d578063fc0c546a14610243576100a9565b8063211e28b6146100ae57806321c3df25146100cf5780632eb4a7ab1461015b5780637cb6475914610175578063878e065814610192575b600080fd5b6100cd600480360360208110156100c457600080fd5b5035151561024b565b005b6100cd600480360360808110156100e557600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561011c57600080fd5b82018360208201111561012e57600080fd5b8035906020019184602083028401116401000000008311171561015057600080fd5b5090925090506102ae565b610163610518565b60408051918252519081900360200190f35b6100cd6004803603602081101561018b57600080fd5b503561051e565b61019a6105ae565b604080516001600160a01b039092168252519081900360200190f35b6100cd600480360360208110156101cc57600080fd5b50356001600160a01b03166105bd565b61019a610623565b6101ec610632565b604080519115158252519081900360200190f35b6101ec6004803603602081101561021657600080fd5b5035610642565b6100cd6004803603602081101561023357600080fd5b50356001600160a01b0316610657565b61019a6106b0565b61025b6102566106bf565b6106c3565b60038054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f02facaa785222e4bd80c10706458a82b36f6c826954368073e6a0cbf0405ae709181900360200190a150565b600354600160a01b900460ff16156102fd576040805162461bcd60e51b815260206004820152600d60248201526c14185e5bdd5d081b1bd8dad959609a1b604482015290519081900360640190fd5b604080516bffffffffffffffffffffffff19606088901b166020808301919091526034820187905260548083018790528351808403909101815260749092018352815191810191909120600081815260049092529190205460ff16156103a3576040805162461bcd60e51b815260206004820152601660248201527514185e5bdd5d08185b1c9958591e4818db185a5b595960521b604482015290519081900360640190fd5b6103e7600154828585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509294939250506107839050565b610428576040805162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015290519081900360640190fd5b6000818152600460208181526040808420805460ff1916600117905560025460035482516323b872dd60e01b81526001600160a01b03918216958101959095528b81166024860152604485018b905291519116936323b872dd936064808201949392918390030190829087803b1580156104a157600080fd5b505af11580156104b5573d6000803e3d6000fd5b505050506040513d60208110156104cb57600080fd5b5050604080518681526020810186905281516001600160a01b038916927f50bfd7a1ed22b77390b27d4c62acb66656778c2f221853834365a348f894077b928290030190a2505050505050565b60015481565b6105296102566106bf565b600354600160a01b900460ff1661057b576040805162461bcd60e51b815260206004820152601160248201527014185e5bdd5d081b9bdd081b1bd8dad959607a1b604482015290519081900360640190fd5b600181905560405181907f914960aef5e033ce5cae8a7992d4b7a6f0f9741227b66acb67c605b7019f8a4690600090a250565b6003546001600160a01b031681565b60006105c76106bf565b90506105d2816106c3565b600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907fe9286a175900d0389b36adb63c9d6992999e166909e1050adf0fc5efa15c91fd90600090a35050565b6000546001600160a01b031690565b600354600160a01b900460ff1681565b60046020526000908152604090205460ff1681565b6106626102566106bf565b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6002546001600160a01b031681565b3390565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106fc57600080fd5b505afa158015610710573d6000803e3d6000fd5b505050506040513d602081101561072657600080fd5b50516001600160a01b03828116911614610780576040805162461bcd60e51b815260206004820152601660248201527527bbb730b136329d103737ba103a34329037bbb732b960511b604482015290519081900360640190fd5b50565b600081815b855181101561082157600086828151811061079f57fe5b602002602001015190508083116107e65782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610818565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101610788565b50909214939250505056fea26469706673582212207ef6c24ae9947e0bee0a808e941938541b7c0bdca71145d39e581f1b2847617764736f6c63430007060033

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

00000000000000000000000046e98ffe40e408ba6412beb670507e083c8b95ff

-----Decoded View---------------
Arg [0] : token_ (address): 0x46e98FFE40E408bA6412bEb670507e083C8B95ff

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000046e98ffe40e408ba6412beb670507e083c8b95ff


Deployed Bytecode Sourcemap

10449:3616:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12327:168;;;;;;;;;;;;;;;;-1:-1:-1;12327:168:0;;;;:::i;:::-;;13468:594;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13468:594:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13468:594:0;;-1:-1:-1;13468:594:0;-1:-1:-1;13468:594:0;:::i;10816:25::-;;;:::i;:::-;;;;;;;;;;;;;;;;11848:229;;;;;;;;;;;;;;;;-1:-1:-1;11848:229:0;;:::i;10874:26::-;;;:::i;:::-;;;;-1:-1:-1;;;;;10874:26:0;;;;;;;;;;;;;;12765:269;;;;;;;;;;;;;;;;-1:-1:-1;12765:269:0;-1:-1:-1;;;;;12765:269:0;;:::i;8599:96::-;;;:::i;10907:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;11026:39;;;;;;;;;;;;;;;;-1:-1:-1;11026:39:0;;:::i;8942:201::-;;;;;;;;;;;;;;;;-1:-1:-1;8942:201:0;-1:-1:-1;;;;;8942:201:0;;:::i;10848:19::-;;;:::i;12327:168::-;12380:31;12398:12;:10;:12::i;:::-;12380:17;:31::i;:::-;12422:8;:20;;;;;-1:-1:-1;;;12422:20:0;;-1:-1:-1;;;;12422:20:0;;;;;;;;;;12458:29;;;;;;;;;;;;;;;;12327:168;:::o;13468:594::-;13641:8;;-1:-1:-1;;;13641:8:0;;;;13640:9;13632:35;;;;;-1:-1:-1;;;13632:35:0;;;;;;;;;;;;-1:-1:-1;;;13632:35:0;;;;;;;;;;;;;;;13709:40;;;-1:-1:-1;;13709:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13699:51;;;;;;;;;13680:16;13772:17;;;:7;:17;;;;;;;;;13771:18;13763:53;;;;;-1:-1:-1;;;13763:53:0;;;;;;;;;;;;-1:-1:-1;;;13763:53:0;;;;;;;;;;;;;;;13835:40;13854:10;;13866:8;13835:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13835:18:0;;:40;;-1:-1:-1;;13835:18:0;:40;-1:-1:-1;13835:40:0:i;:::-;13827:66;;;;;-1:-1:-1;;;13827:66:0;;;;;;;;;;;;-1:-1:-1;;;13827:66:0;;;;;;;;;;;;;;;13906:17;;;;:7;:17;;;;;;;;:24;;-1:-1:-1;;13906:24:0;13926:4;13906:24;;;13950:5;;13970:11;;13943:56;;-1:-1:-1;;;13943:56:0;;-1:-1:-1;;;;;13970:11:0;;;13943:56;;;;;;;;;;;;;;;;;;;;;;13950:5;;;13943:26;;:56;;;;;13906:17;13943:56;;;;;;;;;13950:5;13943:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14017:37:0;;;;;;13943:56;14017:37;;;;;;;-1:-1:-1;;;;;14017:37:0;;;;;;;;;;;13468:594;;;;;;:::o;10816:25::-;;;;:::o;11848:229::-;11910:31;11928:12;:10;:12::i;11910:31::-;11960:8;;-1:-1:-1;;;11960:8:0;;;;11952:38;;;;;-1:-1:-1;;;11952:38:0;;;;;;;;;;;;-1:-1:-1;;;11952:38:0;;;;;;;;;;;;;;;12003:10;:24;;;12043:26;;12016:11;;12043:26;;;;;11848:229;:::o;10874:26::-;;;-1:-1:-1;;;;;10874:26:0;;:::o;12765:269::-;12842:17;12862:12;:10;:12::i;:::-;12842:32;;12885:28;12903:9;12885:17;:28::i;:::-;12926:11;:32;;-1:-1:-1;;;;;;12926:32:0;-1:-1:-1;;;;;12926:32:0;;;;;;;;;12974:52;;12926:32;;12974:52;;;;;-1:-1:-1;;12974:52:0;12765:269;;:::o;8599:96::-;8654:7;8681:6;-1:-1:-1;;;;;8681:6:0;8599:96;:::o;10907:20::-;;;-1:-1:-1;;;10907:20:0;;;;;:::o;11026:39::-;;;;;;;;;;;;;;;:::o;8942:201::-;9022:31;9040:12;:10;:12::i;9022:31::-;9064:6;:17;;-1:-1:-1;;;;;;9064:17:0;-1:-1:-1;;;;;9064:17:0;;;;;;;;;9097:38;;9064:17;;9118:6;;;9097:38;;9064:6;9097:38;8942:201;:::o;10848:19::-;;;-1:-1:-1;;;;;10848:19:0;;:::o;6241:106::-;6329:10;6241:106;:::o;9274:138::-;9365:4;-1:-1:-1;;;;;9365:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9365:12:0;-1:-1:-1;;;;;9354:23:0;;;;;;9346:58;;;;;-1:-1:-1;;;9346:58:0;;;;;;;;;;;;-1:-1:-1;;;9346:58:0;;;;;;;;;;;;;;;9274:138;:::o;654:796::-;745:4;785;745;802:525;826:5;:12;822:1;:16;802:525;;;860:20;883:5;889:1;883:8;;;;;;;;;;;;;;860:31;;928:12;912;:28;908:408;;1082:12;1096;1065:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1055:55;;;;;;1040:70;;908:408;;;1272:12;1286;1255:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:55;;;;;;1230:70;;908:408;-1:-1:-1;840:3:0;;802:525;;;-1:-1:-1;1422:20:0;;;;654:796;-1:-1:-1;;;654:796:0:o

Swarm Source

ipfs://7ef6c24ae9947e0bee0a808e941938541b7c0bdca71145d39e581f1b28476177

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