ETH Price: $3,996.73 (+0.98%)

Contract

0xfa686283F511D345fF64E71052fc4C993181B972
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Claim Tokens204536582024-08-04 7:20:59134 days ago1722756059IN
0xfa686283...93181B972
0 ETH0.000037120.96038325
Claim Tokens202511362024-07-07 0:44:35162 days ago1720313075IN
0xfa686283...93181B972
0 ETH0.000042511.1
Claim Tokens202510752024-07-07 0:32:23162 days ago1720312343IN
0xfa686283...93181B972
0 ETH0.000042881.10920834
Claim Tokens202510752024-07-07 0:32:23162 days ago1720312343IN
0xfa686283...93181B972
0 ETH0.000042531.1
Claim Tokens202508202024-07-06 23:41:23163 days ago1720309283IN
0xfa686283...93181B972
0 ETH0.00004251.1
Claim Tokens201496212024-06-22 20:27:11177 days ago1719088031IN
0xfa686283...93181B972
0 ETH0.000066951.73096044
Claim Tokens197366182024-04-26 2:40:35234 days ago1714099235IN
0xfa686283...93181B972
0 ETH0.000187814.85582492
Transfer189206422024-01-02 15:39:47349 days ago1704209987IN
0xfa686283...93181B972
0.01526917 ETH0.0008114238.55827036
Claim Tokens189108742024-01-01 6:41:11350 days ago1704091271IN
0xfa686283...93181B972
0 ETH0.000324698.4
Claim Tokens189091492024-01-01 0:51:59350 days ago1704070319IN
0xfa686283...93181B972
0 ETH0.000261449.01532109
Claim Tokens189037702023-12-31 6:46:47351 days ago1704005207IN
0xfa686283...93181B972
0 ETH0.000385139.95747844
Claim Tokens186155302023-11-20 20:58:47392 days ago1700513927IN
0xfa686283...93181B972
0 ETH0.0017096944.23075001
Claim Tokens186130022023-11-20 12:28:47392 days ago1700483327IN
0xfa686283...93181B972
0 ETH0.0008248621.6692123
Claim Tokens186129992023-11-20 12:28:11392 days ago1700483291IN
0xfa686283...93181B972
0 ETH0.0008103921.28932928
Claim Tokens186129922023-11-20 12:26:47392 days ago1700483207IN
0xfa686283...93181B972
0 ETH0.0008189721.51457761
Claim Tokens186049832023-11-19 9:32:11393 days ago1700386331IN
0xfa686283...93181B972
0 ETH0.0006133415.86754336
Claim Tokens186039552023-11-19 6:05:23393 days ago1700373923IN
0xfa686283...93181B972
0 ETH0.0004796212.41960623
Claim Tokens186038432023-11-19 5:42:47393 days ago1700372567IN
0xfa686283...93181B972
0 ETH0.0005340813.82139134
Claim Tokens186038432023-11-19 5:42:47393 days ago1700372567IN
0xfa686283...93181B972
0 ETH0.0005317713.76168619
Claim Tokens186017302023-11-18 22:35:59394 days ago1700346959IN
0xfa686283...93181B972
0 ETH0.0005631714.56515782
Claim Tokens186016292023-11-18 22:15:35394 days ago1700345735IN
0xfa686283...93181B972
0 ETH0.0005800314.99646106
Claim Tokens185896552023-11-17 5:55:23395 days ago1700200523IN
0xfa686283...93181B972
0 ETH0.0006964418.01743318
Claim Tokens185896542023-11-17 5:55:11395 days ago1700200511IN
0xfa686283...93181B972
0 ETH0.0007031118.18984721
Claim Tokens185828972023-11-16 7:16:59396 days ago1700119019IN
0xfa686283...93181B972
0 ETH0.0008862222.91997185
Claim Tokens185585042023-11-12 21:26:23400 days ago1699824383IN
0xfa686283...93181B972
0 ETH0.0010359126.79973926
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Claim

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : ratio_claim.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";

pragma solidity ^0.8.21;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

pragma solidity ^0.8.21;

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.21;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.21;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.21;

contract Claim is Ownable {
    IERC20 public token;

    bytes32 public merkleRoot;
    mapping(address => bool) public userClaimed;

    constructor(address _token) {
        token = IERC20(_token);
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setToken(address _target) external onlyOwner {
        token = IERC20(_target);
    }

    function checkProof(
        bytes32[] memory _proof,
        uint256 _tokens,
        bytes32 root
    ) internal view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender, _tokens));
        return MerkleProof.verify(_proof, root, leaf);
    }

    function claimTokens(
        uint256 _tokens,
        bytes32[] memory _proof
    ) external {
        require(token.balanceOf(address(this)) >= _tokens, "Contract tokens depleted");
        require(!userClaimed[msg.sender], "User has already claimed");
        require(checkProof(_proof, _tokens, merkleRoot), "Invalid proof");
        userClaimed[msg.sender] = true;
        token.transfer(msg.sender, _tokens);
    }

    function manualRemoveTokens() external onlyOwner {
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }

    function manualRemoveEther() external onlyOwner {
        bool success;

        uint256 totalETH = address(this).balance;
        (success,) = address(owner()).call{value: totalETH}("");
    }

    function manualRemoveSpecificTokens(address _target) external onlyOwner {
        IERC20 tokenToRemove = IERC20(_target);
        tokenToRemove.transfer(msg.sender, tokenToRemove.balanceOf(address(this)));
    }
}

File 2 of 2 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.20;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the Merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates Merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @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) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Sorts the pair (a, b) and hashes the result.
     */
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualRemoveEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"manualRemoveSpecificTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualRemoveTokens","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"setToken","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b50604051610b5e380380610b5e83398101604081905261002e916100ab565b6100373361005c565b600180546001600160a01b0319166001600160a01b03929092169190911790556100d8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100bb575f80fd5b81516001600160a01b03811681146100d1575f80fd5b9392505050565b610a79806100e55f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461013b5780639a114cb21461015f578063bb5f193a14610172578063f2c725b514610185578063f2fde38b1461018d578063fc0c546a146101a0575f80fd5b8063144fa6d7146100b55780632eb4a7ab146100ca5780633b7fcdca146100e6578063437bbf0414610118578063715018a6146101205780637cb6475914610128575b5f80fd5b6100c86100c336600461088a565b6101b3565b005b6100d360025481565b6040519081526020015b60405180910390f35b6101086100f436600461088a565b60036020525f908152604090205460ff1681565b60405190151581526020016100dd565b6100c8610207565b6100c8610296565b6100c86101363660046108b0565b6102ca565b5f546001600160a01b03165b6040516001600160a01b0390911681526020016100dd565b6100c861016d3660046108db565b6102f8565b6100c861018036600461088a565b6104eb565b6100c86105b7565b6100c861019b36600461088a565b6106c3565b600154610147906001600160a01b031681565b5f546001600160a01b031633146101e55760405162461bcd60e51b81526004016101dc906109a0565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146102305760405162461bcd60e51b81526004016101dc906109a0565b5f476102435f546001600160a01b031690565b6001600160a01b0316816040515f6040518083038185875af1925050503d805f811461028a576040519150601f19603f3d011682016040523d82523d5f602084013e61028f565b606091505b5050505050565b5f546001600160a01b031633146102bf5760405162461bcd60e51b81526004016101dc906109a0565b6102c85f610756565b565b5f546001600160a01b031633146102f35760405162461bcd60e51b81526004016101dc906109a0565b600255565b6001546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561033e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061036291906109d5565b10156103b05760405162461bcd60e51b815260206004820152601860248201527f436f6e747261637420746f6b656e73206465706c65746564000000000000000060448201526064016101dc565b335f9081526003602052604090205460ff161561040f5760405162461bcd60e51b815260206004820152601860248201527f557365722068617320616c726561647920636c61696d6564000000000000000060448201526064016101dc565b61041c81836002546107a5565b6104585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016101dc565b335f8181526003602052604090819020805460ff1916600190811790915554905163a9059cbb60e01b81526004810192909252602482018490526001600160a01b03169063a9059cbb906044015b6020604051808303815f875af11580156104c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e691906109ec565b505050565b5f546001600160a01b031633146105145760405162461bcd60e51b81526004016101dc906109a0565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610562573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058691906109d5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016104a6565b5f546001600160a01b031633146105e05760405162461bcd60e51b81526004016101dc906109a0565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610630573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065491906109d5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561069c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c091906109ec565b50565b5f546001600160a01b031633146106ec5760405162461bcd60e51b81526004016101dc906109a0565b6001600160a01b0381166107515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101dc565b6106c0815b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516bffffffffffffffffffffffff193360601b166020820152603481018390525f9081906054016040516020818303038152906040528051906020012090506107f18584836107fa565b95945050505050565b5f82610806858461080f565b14949350505050565b5f81815b84518110156108535761083f8286838151811061083257610832610a0b565b602002602001015161085b565b91508061084b81610a1f565b915050610813565b509392505050565b5f818310610875575f828152602084905260409020610883565b5f8381526020839052604090205b9392505050565b5f6020828403121561089a575f80fd5b81356001600160a01b0381168114610883575f80fd5b5f602082840312156108c0575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156108ec575f80fd5b8235915060208084013567ffffffffffffffff8082111561090b575f80fd5b818601915086601f83011261091e575f80fd5b813581811115610930576109306108c7565b8060051b604051601f19603f83011681018181108582111715610955576109556108c7565b604052918252848201925083810185019189831115610972575f80fd5b938501935b8285101561099057843584529385019392850192610977565b8096505050505050509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156109e5575f80fd5b5051919050565b5f602082840312156109fc575f80fd5b81518015158114610883575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201610a3c57634e487b7160e01b5f52601160045260245ffd5b506001019056fea2646970667358221220501c44ce03149a8ec811c21947f156ef7d17660eb78c739889c10f041075876164736f6c634300081500330000000000000000000000009be236ee350d18aaaf18619c5776d4096e94a0c7

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461013b5780639a114cb21461015f578063bb5f193a14610172578063f2c725b514610185578063f2fde38b1461018d578063fc0c546a146101a0575f80fd5b8063144fa6d7146100b55780632eb4a7ab146100ca5780633b7fcdca146100e6578063437bbf0414610118578063715018a6146101205780637cb6475914610128575b5f80fd5b6100c86100c336600461088a565b6101b3565b005b6100d360025481565b6040519081526020015b60405180910390f35b6101086100f436600461088a565b60036020525f908152604090205460ff1681565b60405190151581526020016100dd565b6100c8610207565b6100c8610296565b6100c86101363660046108b0565b6102ca565b5f546001600160a01b03165b6040516001600160a01b0390911681526020016100dd565b6100c861016d3660046108db565b6102f8565b6100c861018036600461088a565b6104eb565b6100c86105b7565b6100c861019b36600461088a565b6106c3565b600154610147906001600160a01b031681565b5f546001600160a01b031633146101e55760405162461bcd60e51b81526004016101dc906109a0565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146102305760405162461bcd60e51b81526004016101dc906109a0565b5f476102435f546001600160a01b031690565b6001600160a01b0316816040515f6040518083038185875af1925050503d805f811461028a576040519150601f19603f3d011682016040523d82523d5f602084013e61028f565b606091505b5050505050565b5f546001600160a01b031633146102bf5760405162461bcd60e51b81526004016101dc906109a0565b6102c85f610756565b565b5f546001600160a01b031633146102f35760405162461bcd60e51b81526004016101dc906109a0565b600255565b6001546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561033e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061036291906109d5565b10156103b05760405162461bcd60e51b815260206004820152601860248201527f436f6e747261637420746f6b656e73206465706c65746564000000000000000060448201526064016101dc565b335f9081526003602052604090205460ff161561040f5760405162461bcd60e51b815260206004820152601860248201527f557365722068617320616c726561647920636c61696d6564000000000000000060448201526064016101dc565b61041c81836002546107a5565b6104585760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016101dc565b335f8181526003602052604090819020805460ff1916600190811790915554905163a9059cbb60e01b81526004810192909252602482018490526001600160a01b03169063a9059cbb906044015b6020604051808303815f875af11580156104c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e691906109ec565b505050565b5f546001600160a01b031633146105145760405162461bcd60e51b81526004016101dc906109a0565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610562573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058691906109d5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016104a6565b5f546001600160a01b031633146105e05760405162461bcd60e51b81526004016101dc906109a0565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610630573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065491906109d5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561069c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c091906109ec565b50565b5f546001600160a01b031633146106ec5760405162461bcd60e51b81526004016101dc906109a0565b6001600160a01b0381166107515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101dc565b6106c0815b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516bffffffffffffffffffffffff193360601b166020820152603481018390525f9081906054016040516020818303038152906040528051906020012090506107f18584836107fa565b95945050505050565b5f82610806858461080f565b14949350505050565b5f81815b84518110156108535761083f8286838151811061083257610832610a0b565b602002602001015161085b565b91508061084b81610a1f565b915050610813565b509392505050565b5f818310610875575f828152602084905260409020610883565b5f8381526020839052604090205b9392505050565b5f6020828403121561089a575f80fd5b81356001600160a01b0381168114610883575f80fd5b5f602082840312156108c0575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156108ec575f80fd5b8235915060208084013567ffffffffffffffff8082111561090b575f80fd5b818601915086601f83011261091e575f80fd5b813581811115610930576109306108c7565b8060051b604051601f19603f83011681018181108582111715610955576109556108c7565b604052918252848201925083810185019189831115610972575f80fd5b938501935b8285101561099057843584529385019392850192610977565b8096505050505050509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156109e5575f80fd5b5051919050565b5f602082840312156109fc575f80fd5b81518015158114610883575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201610a3c57634e487b7160e01b5f52601160045260245ffd5b506001019056fea2646970667358221220501c44ce03149a8ec811c21947f156ef7d17660eb78c739889c10f041075876164736f6c63430008150033

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

0000000000000000000000009be236ee350d18aaaf18619c5776d4096e94a0c7

-----Decoded View---------------
Arg [0] : _token (address): 0x9Be236eE350D18AaaF18619C5776D4096E94A0c7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009be236ee350d18aaaf18619c5776d4096e94a0c7


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  ]

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.