ETH Price: $3,055.02 (+1.63%)
Gas: 7 Gwei

Contract

0x4f896abE9E28C2Db248a8DdAC205ca1cf84A2771
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Claim188394992023-12-22 6:07:35119 days ago1703225255IN
0x4f896abE...cf84A2771
0 ETH0.0014999426.24624496
Claim181314352023-09-14 2:06:11219 days ago1694657171IN
0x4f896abE...cf84A2771
0 ETH0.0006613211.56958618
Claim177430702023-07-21 17:41:23273 days ago1689961283IN
0x4f896abE...cf84A2771
0 ETH0.0032665144
Claim173889922023-06-01 22:44:11323 days ago1685659451IN
0x4f896abE...cf84A2771
0 ETH0.0024166832.54224954
Claim172663522023-05-15 16:26:23340 days ago1684167983IN
0x4f896abE...cf84A2771
0 ETH0.0051685590.40209291
Claim168941732023-03-24 1:44:23393 days ago1679622263IN
0x4f896abE...cf84A2771
0 ETH0.0011585115.60777489
Claim168757052023-03-21 11:26:11395 days ago1679397971IN
0x4f896abE...cf84A2771
0 ETH0.0009522312.82251233
Claim166437872023-02-16 20:50:11428 days ago1676580611IN
0x4f896abE...cf84A2771
0 ETH0.0034500646.45984202
Claim165918242023-02-09 14:34:59435 days ago1675953299IN
0x4f896abE...cf84A2771
0 ETH0.0028553550
Claim162922122022-12-29 18:29:47477 days ago1672338587IN
0x4f896abE...cf84A2771
0 ETH0.0012011416.17030383
Claim162266102022-12-20 14:49:23486 days ago1671547763IN
0x4f896abE...cf84A2771
0 ETH0.0011430220
Claim160430862022-11-24 23:20:47512 days ago1669332047IN
0x4f896abE...cf84A2771
0 ETH0.0008665111.66668722
Claim158272222022-10-25 19:37:35542 days ago1666726655IN
0x4f896abE...cf84A2771
0 ETH0.0021780538.09719099
Claim157843592022-10-19 19:52:35548 days ago1666209155IN
0x4f896abE...cf84A2771
0 ETH0.00235531.71259837
Claim157338972022-10-12 18:44:23555 days ago1665600263IN
0x4f896abE...cf84A2771
0 ETH0.001659922.34574279
Claim154291872022-08-28 17:38:00600 days ago1661708280IN
0x4f896abE...cf84A2771
0 ETH0.00054879.59800791
Claim153769662022-08-20 10:00:09608 days ago1660989609IN
0x4f896abE...cf84A2771
0 ETH0.000319715.59105029
Claim153723552022-08-19 16:26:18609 days ago1660926378IN
0x4f896abE...cf84A2771
0 ETH0.001138515.33278646
Claim153612762022-08-17 22:18:11611 days ago1660774691IN
0x4f896abE...cf84A2771
0 ETH0.0010493118.35711139
Claim153565522022-08-17 4:21:08611 days ago1660710068IN
0x4f896abE...cf84A2771
0 ETH0.000419785.65339844
Claim152233462022-07-27 8:09:57632 days ago1658909397IN
0x4f896abE...cf84A2771
0 ETH0.000371986.50509285
Claim151824002022-07-20 23:17:05639 days ago1658359025IN
0x4f896abE...cf84A2771
0 ETH0.0009546216.70417182
Claim150909052022-07-06 19:46:20653 days ago1657136780IN
0x4f896abE...cf84A2771
0 ETH0.0028495838.37150159
Claim150080422022-06-22 14:24:47667 days ago1655907887IN
0x4f896abE...cf84A2771
0 ETH0.0039823769.68163799
Claim150030692022-06-21 15:58:36668 days ago1655827116IN
0x4f896abE...cf84A2771
0 ETH0.0029730540.03958654
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
179511152023-08-19 20:11:11244 days ago1692475871
0x4f896abE...cf84A2771
0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Airdrop

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Airdrop.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts-4.4.1/token/ERC20/IERC20.sol";
import "../utils/Owned.sol";
import "@openzeppelin/contracts-4.4.1/utils/cryptography/MerkleProof.sol";
import "../utils/Pausable.sol";

/**
 * Contract which implements a merkle airdrop for a given token
 * Based on an account balance snapshot stored in a merkle tree
 */
contract Airdrop is Owned, Pausable {
    IERC20 public token;

    bytes32 public root; // merkle tree root

    uint256 public startTime;

    mapping(uint256 => uint256) public _claimed;

    constructor(
        address _owner,
        IERC20 _token,
        bytes32 _root
    ) Owned(_owner) Pausable() {
        token = _token;
        root = _root;
        startTime = block.timestamp;
    }

    // Check if a given reward has already been claimed
    function claimed(uint256 index) public view returns (uint256 claimedBlock, uint256 claimedMask) {
        claimedBlock = _claimed[index / 256];
        claimedMask = (uint256(1) << uint256(index % 256));
        require((claimedBlock & claimedMask) == 0, "Tokens have already been claimed");
    }

    // helper for the dapp
    function canClaim(uint256 index) external view returns (bool) {
        uint256 claimedBlock = _claimed[index / 256];
        uint256 claimedMask = (uint256(1) << uint256(index % 256));
        return ((claimedBlock & claimedMask) == 0);
    }

    // Get airdrop tokens assigned to address
    // Requires sending merkle proof to the function
    function claim(
        uint256 index,
        uint256 amount,
        bytes32[] memory merkleProof
    ) public notPaused {
        require(token.balanceOf(address(this)) > amount, "Contract doesnt have enough tokens");

        // Make sure the tokens have not already been redeemed
        (uint256 claimedBlock, uint256 claimedMask) = claimed(index);
        _claimed[index / 256] = claimedBlock | claimedMask;

        // Compute the merkle leaf from index, recipient and amount
        bytes32 leaf = keccak256(abi.encodePacked(index, msg.sender, amount));
        // verify the proof is valid
        require(MerkleProof.verify(merkleProof, root, leaf), "Proof is not valid");
        // Redeem!
        token.transfer(msg.sender, amount);
        emit Claim(msg.sender, amount, block.timestamp);
    }

    function _selfDestruct(address payable beneficiary) external onlyOwner {
        token.transfer(beneficiary, token.balanceOf(address(this)));
        selfdestruct(beneficiary);
    }

    event Claim(address claimer, uint256 amount, uint timestamp);
}

File 3 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.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 5 : Owned.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

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

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

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

File 5 of 5 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
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) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee 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.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        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));
            }
        }
        return computedHash;
    }
}

File 6 of 5 : Pausable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// Inheritance
import "./Owned.sol";

abstract contract Pausable is Owned {
    uint public lastPauseTime;
    bool public paused;

    constructor() {
        // This contract is abstract, and thus cannot be instantiated directly
        require(owner != address(0), "Owner must be set");
        // Paused will be false, and lastPauseTime will be 0 upon initialisation
    }

    /**
     * @notice Change the paused state of the contract
     * @dev Only the contract owner may call this.
     */
    function setPaused(bool _paused) external onlyOwner {
        // Ensure we're actually changing the state before we do anything
        if (_paused == paused) {
            return;
        }

        // Set our paused state.
        paused = _paused;

        // If applicable, set the last pause time.
        if (paused) {
            lastPauseTime = block.timestamp;
        }

        // Let everyone know that our pause state has changed.
        emit PauseChanged(paused);
    }

    event PauseChanged(bool isPaused);

    modifier notPaused {
        require(!paused, "This action cannot be performed while the contract is paused");
        _;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"_selfDestruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"claimedBlock","type":"uint256"},{"internalType":"uint256","name":"claimedMask","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051610e2a380380610e2a83398101604081905261002f91610163565b826001600160a01b03811661008b5760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f7420626520300000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1506000546001600160a01b031661012f5760405162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b6044820152606401610082565b600380546001600160a01b0390931661010002610100600160a81b03199093169290921790915560045550426005556101bd565b600080600060608486031215610177578283fd5b8351610182816101a5565b6020850151909350610193816101a5565b80925050604084015190509250925092565b6001600160a01b03811681146101ba57600080fd5b50565b610c5e806101cc6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391b4ded911610097578063dbe7e3bd11610066578063dbe7e3bd146101e3578063ebf0c7171461020b578063f4ddedcf14610214578063fc0c546a1461023457600080fd5b806391b4ded9146101a15780639ea6ec29146101aa578063ae0b51df146101bd578063c95c0d89146101d057600080fd5b80635c975abb116100d35780635c975abb1461015257806378e979251461016f57806379ba5097146101865780638da5cb5b1461018e57600080fd5b80631627540c146100fa57806316c38b3c1461010f57806353a47bb714610122575b600080fd5b61010d610108366004610a2a565b61024c565b005b61010d61011d366004610a4d565b6102a9565b600154610135906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60035461015f9060ff1681565b6040519015158152602001610149565b61017860055481565b604051908152602001610149565b61010d61031f565b600054610135906001600160a01b031681565b61017860025481565b61010d6101b8366004610a2a565b61040e565b61010d6101cb366004610ab5565b61052a565b61015f6101de366004610a85565b610817565b6101f66101f1366004610a85565b61085a565b60408051928352602083019190915201610149565b61017860045481565b610178610222366004610a85565b60066020526000908152604090205481565b6003546101359061010090046001600160a01b031681565b6102546108e6565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b6102b16108e6565b60035460ff16151581151514156102c55750565b6003805460ff191682151590811790915560ff16156102e357426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59060200161029e565b50565b6001546001600160a01b0316331461039c5760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6104166108e6565b6003546040516370a0823160e01b81523060048201526101009091046001600160a01b03169063a9059cbb90839083906370a082319060240160206040518083038186803b15801561046757600080fd5b505afa15801561047b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049f9190610a9d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156104e557600080fd5b505af11580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d9190610a69565b50806001600160a01b0316ff5b60035460ff16156105a35760405162461bcd60e51b815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e747261637420697320706175736564000000006064820152608401610393565b6003546040516370a0823160e01b8152306004820152839161010090046001600160a01b0316906370a082319060240160206040518083038186803b1580156105eb57600080fd5b505afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190610a9d565b1161067b5760405162461bcd60e51b815260206004820152602260248201527f436f6e747261637420646f65736e74206861766520656e6f75676820746f6b656044820152616e7360f01b6064820152608401610393565b6000806106878561085a565b90925090508181176006600061069f61010089610b8a565b8152602080820192909252604090810160009081209390935580519182018890526bffffffffffffffffffffffff193360601b169082015260548101869052607401604051602081830303815290604052805190602001209050610706846004548361095a565b6107475760405162461bcd60e51b8152602060048201526012602482015271141c9bdbd9881a5cc81b9bdd081d985b1a5960721b6044820152606401610393565b60035460405163a9059cbb60e01b8152336004820152602481018790526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561079757600080fd5b505af11580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190610a69565b506040805133815260208101879052428183015290517f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79181900360600190a1505050505050565b60008060068161082961010086610b8a565b815260200190815260200160002054905060006101008461084a9190610bc5565b6001901b91909116159392505050565b60008060068161086c61010086610b8a565b81526020019081526020016000205491506101008361088b9190610bc5565b6001901b9050818116156108e15760405162461bcd60e51b815260206004820181905260248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d65646044820152606401610393565b915091565b6000546001600160a01b031633146109585760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610393565b565b6000826109678584610970565b14949350505050565b600081815b8451811015610a225760008582815181106109a057634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116109e2576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610a0f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080610a1a81610b9e565b915050610975565b509392505050565b600060208284031215610a3b578081fd5b8135610a4681610c05565b9392505050565b600060208284031215610a5e578081fd5b8135610a4681610c1a565b600060208284031215610a7a578081fd5b8151610a4681610c1a565b600060208284031215610a96578081fd5b5035919050565b600060208284031215610aae578081fd5b5051919050565b600080600060608486031215610ac9578182fd5b833592506020808501359250604085013567ffffffffffffffff80821115610aef578384fd5b818701915087601f830112610b02578384fd5b813581811115610b1457610b14610bef565b8060051b604051601f19603f83011681018181108582111715610b3957610b39610bef565b604052828152858101935084860182860187018c1015610b57578788fd5b8795505b83861015610b79578035855260019590950194938601938601610b5b565b508096505050505050509250925092565b600082610b9957610b99610bd9565b500490565b6000600019821415610bbe57634e487b7160e01b81526011600452602481fd5b5060010190565b600082610bd457610bd4610bd9565b500690565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461031c57600080fd5b801515811461031c57600080fdfea26469706673582212205182f98ed3bfe6f3fb9c5217e01f3cf8b90199d2e2490b8a3ea5781ec94c677364736f6c634300080400330000000000000000000000008314125c8b68af2afd0d151eb4a551e88128a2ae0000000000000000000000008947da500eb47f82df21143d0c01a29862a8c3c558807adb2928b9149b4b98aa29ef1fd7471266552822833a7aadbb60b1e04331

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806391b4ded911610097578063dbe7e3bd11610066578063dbe7e3bd146101e3578063ebf0c7171461020b578063f4ddedcf14610214578063fc0c546a1461023457600080fd5b806391b4ded9146101a15780639ea6ec29146101aa578063ae0b51df146101bd578063c95c0d89146101d057600080fd5b80635c975abb116100d35780635c975abb1461015257806378e979251461016f57806379ba5097146101865780638da5cb5b1461018e57600080fd5b80631627540c146100fa57806316c38b3c1461010f57806353a47bb714610122575b600080fd5b61010d610108366004610a2a565b61024c565b005b61010d61011d366004610a4d565b6102a9565b600154610135906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60035461015f9060ff1681565b6040519015158152602001610149565b61017860055481565b604051908152602001610149565b61010d61031f565b600054610135906001600160a01b031681565b61017860025481565b61010d6101b8366004610a2a565b61040e565b61010d6101cb366004610ab5565b61052a565b61015f6101de366004610a85565b610817565b6101f66101f1366004610a85565b61085a565b60408051928352602083019190915201610149565b61017860045481565b610178610222366004610a85565b60066020526000908152604090205481565b6003546101359061010090046001600160a01b031681565b6102546108e6565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b6102b16108e6565b60035460ff16151581151514156102c55750565b6003805460ff191682151590811790915560ff16156102e357426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59060200161029e565b50565b6001546001600160a01b0316331461039c5760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6104166108e6565b6003546040516370a0823160e01b81523060048201526101009091046001600160a01b03169063a9059cbb90839083906370a082319060240160206040518083038186803b15801561046757600080fd5b505afa15801561047b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049f9190610a9d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156104e557600080fd5b505af11580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d9190610a69565b50806001600160a01b0316ff5b60035460ff16156105a35760405162461bcd60e51b815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e747261637420697320706175736564000000006064820152608401610393565b6003546040516370a0823160e01b8152306004820152839161010090046001600160a01b0316906370a082319060240160206040518083038186803b1580156105eb57600080fd5b505afa1580156105ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106239190610a9d565b1161067b5760405162461bcd60e51b815260206004820152602260248201527f436f6e747261637420646f65736e74206861766520656e6f75676820746f6b656044820152616e7360f01b6064820152608401610393565b6000806106878561085a565b90925090508181176006600061069f61010089610b8a565b8152602080820192909252604090810160009081209390935580519182018890526bffffffffffffffffffffffff193360601b169082015260548101869052607401604051602081830303815290604052805190602001209050610706846004548361095a565b6107475760405162461bcd60e51b8152602060048201526012602482015271141c9bdbd9881a5cc81b9bdd081d985b1a5960721b6044820152606401610393565b60035460405163a9059cbb60e01b8152336004820152602481018790526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561079757600080fd5b505af11580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190610a69565b506040805133815260208101879052428183015290517f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79181900360600190a1505050505050565b60008060068161082961010086610b8a565b815260200190815260200160002054905060006101008461084a9190610bc5565b6001901b91909116159392505050565b60008060068161086c61010086610b8a565b81526020019081526020016000205491506101008361088b9190610bc5565b6001901b9050818116156108e15760405162461bcd60e51b815260206004820181905260248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d65646044820152606401610393565b915091565b6000546001600160a01b031633146109585760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610393565b565b6000826109678584610970565b14949350505050565b600081815b8451811015610a225760008582815181106109a057634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116109e2576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610a0f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080610a1a81610b9e565b915050610975565b509392505050565b600060208284031215610a3b578081fd5b8135610a4681610c05565b9392505050565b600060208284031215610a5e578081fd5b8135610a4681610c1a565b600060208284031215610a7a578081fd5b8151610a4681610c1a565b600060208284031215610a96578081fd5b5035919050565b600060208284031215610aae578081fd5b5051919050565b600080600060608486031215610ac9578182fd5b833592506020808501359250604085013567ffffffffffffffff80821115610aef578384fd5b818701915087601f830112610b02578384fd5b813581811115610b1457610b14610bef565b8060051b604051601f19603f83011681018181108582111715610b3957610b39610bef565b604052828152858101935084860182860187018c1015610b57578788fd5b8795505b83861015610b79578035855260019590950194938601938601610b5b565b508096505050505050509250925092565b600082610b9957610b99610bd9565b500490565b6000600019821415610bbe57634e487b7160e01b81526011600452602481fd5b5060010190565b600082610bd457610bd4610bd9565b500690565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461031c57600080fd5b801515811461031c57600080fdfea26469706673582212205182f98ed3bfe6f3fb9c5217e01f3cf8b90199d2e2490b8a3ea5781ec94c677364736f6c63430008040033

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

0000000000000000000000008314125c8b68af2afd0d151eb4a551e88128a2ae0000000000000000000000008947da500eb47f82df21143d0c01a29862a8c3c558807adb2928b9149b4b98aa29ef1fd7471266552822833a7aadbb60b1e04331

-----Decoded View---------------
Arg [0] : _owner (address): 0x8314125C8B68aF2AfD0D151eb4A551E88128A2aE
Arg [1] : _token (address): 0x8947da500Eb47F82df21143D0C01A29862a8C3c5
Arg [2] : _root (bytes32): 0x58807adb2928b9149b4b98aa29ef1fd7471266552822833a7aadbb60b1e04331

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000008314125c8b68af2afd0d151eb4a551e88128a2ae
Arg [1] : 0000000000000000000000008947da500eb47f82df21143d0c01a29862a8c3c5
Arg [2] : 58807adb2928b9149b4b98aa29ef1fd7471266552822833a7aadbb60b1e04331


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
[ 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.