ETH Price: $2,451.85 (-1.12%)

Contract

0xDAaB884D083FE5c38b4679ae194c52f176Bd8783
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Transactions Sent

Latest: N/A First: N/A

Funded By

N/A

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim141554432022-02-06 23:18:351000 days ago1644189515IN
0xDAaB884D...176Bd8783
0 ETH0.0017051459.09971252
Claim141247312022-02-02 5:30:431005 days ago1643779843IN
0xDAaB884D...176Bd8783
0 ETH0.01737265113.62401287
Claim141220712022-02-01 19:36:081005 days ago1643744168IN
0xDAaB884D...176Bd8783
0 ETH0.01741295113.94572308
Claim141203972022-02-01 13:33:271005 days ago1643722407IN
0xDAaB884D...176Bd8783
0 ETH0.0131367785.94214936
Claim141180042022-02-01 4:31:451006 days ago1643689905IN
0xDAaB884D...176Bd8783
0 ETH0.01814254152.94418835
Claim141171392022-02-01 1:22:531006 days ago1643678573IN
0xDAaB884D...176Bd8783
0 ETH0.02184768107
Claim141134102022-01-31 11:34:431007 days ago1643628883IN
0xDAaB884D...176Bd8783
0 ETH0.0130277567.78370499
Claim141131242022-01-31 10:34:251007 days ago1643625265IN
0xDAaB884D...176Bd8783
0 ETH0.0066633756.14383846
Claim141109482022-01-31 2:27:011007 days ago1643596021IN
0xDAaB884D...176Bd8783
0 ETH0.01547809101.27255636
Claim141076452022-01-30 14:25:101007 days ago1643552710IN
0xDAaB884D...176Bd8783
0 ETH0.013254186.70067829
Claim141073522022-01-30 13:20:001007 days ago1643548800IN
0xDAaB884D...176Bd8783
0 ETH0.011707698.65353824
Claim141070002022-01-30 12:00:191008 days ago1643544019IN
0xDAaB884D...176Bd8783
0 ETH0.0104946168.67843429
Claim141065302022-01-30 10:13:571008 days ago1643537637IN
0xDAaB884D...176Bd8783
0 ETH0.0097840282.44451225
Claim141063022022-01-30 9:19:031008 days ago1643534343IN
0xDAaB884D...176Bd8783
0 ETH0.0101144654.06781783
Claim141061742022-01-30 8:52:321008 days ago1643532752IN
0xDAaB884D...176Bd8783
0 ETH0.009603362.82829604
Claim141059332022-01-30 8:01:441008 days ago1643529704IN
0xDAaB884D...176Bd8783
0 ETH0.01543026100.94903275
Claim141054822022-01-30 6:23:501008 days ago1643523830IN
0xDAaB884D...176Bd8783
0 ETH0.01242047104.66048263
Claim141044722022-01-30 2:33:541008 days ago1643510034IN
0xDAaB884D...176Bd8783
0 ETH0.00889875
Claim141044492022-01-30 2:29:381008 days ago1643509778IN
0xDAaB884D...176Bd8783
0 ETH0.0109551792.35830166
Claim141036762022-01-29 23:41:351008 days ago1643499695IN
0xDAaB884D...176Bd8783
0 ETH0.0097224571.59816062
Claim141035192022-01-29 23:02:211008 days ago1643497341IN
0xDAaB884D...176Bd8783
0 ETH0.02557223133.07641584
Claim141028812022-01-29 20:41:071008 days ago1643488867IN
0xDAaB884D...176Bd8783
0 ETH0.0115911976.65626713
Claim140996762022-01-29 8:40:301009 days ago1643445630IN
0xDAaB884D...176Bd8783
0 ETH0.0113186674.05564621
Claim140987602022-01-29 5:22:041009 days ago1643433724IN
0xDAaB884D...176Bd8783
0 ETH0.011362374.32463575
Claim140987312022-01-29 5:16:291009 days ago1643433389IN
0xDAaB884D...176Bd8783
0 ETH0.0132414586.59866056
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
141262662022-02-02 11:05:581005 days ago1643799958
0xDAaB884D...176Bd8783
0 ETH
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x5f2810605e33cdb303b1d2dbbbb1812678fba6189c1a9b2d9b02a29e1b96285c


Contract Source Code Verified (Exact Match)

Contract Name:
OngoingAirdrop

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : OngoingAirdrop.sol
pragma solidity ^0.5.16;

import "openzeppelin-solidity-2.3.0/contracts/token/ERC20/IERC20.sol";
import "synthetix-2.43.1/contracts/Owned.sol";
import "openzeppelin-solidity-2.3.0/contracts/cryptography/MerkleProof.sol";
import "synthetix-2.43.1/contracts/Pausable.sol";
import "../interfaces/IEscrowThales.sol";

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

    IEscrowThales public iEscrowThales;

    bytes32 public root; // merkle tree root

    uint256 public startTime;

    address public admin;

    uint256 public period;

    mapping(uint256 => mapping(uint256 => uint256)) public _claimed;

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

    // Set root of merkle tree
    function setRoot(bytes32 _root) public onlyOwner {
        require(address(iEscrowThales) != address(0), "Set Escrow Thales address");
        root = _root;
        startTime = block.timestamp; //reset time every period
        emit NewRoot(_root, block.timestamp, period);
        period = period + 1;
    }

    // Set EscrowThales contract address
    function setEscrow(address _escrowThalesContract) public onlyOwner {
        if (address(iEscrowThales) != address(0)) {
            token.approve(address(iEscrowThales), 0);
        }
        iEscrowThales = IEscrowThales(_escrowThalesContract);
        token.approve(_escrowThalesContract, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
    }

    // Check if a given reward has already been claimed
    function claimed(uint256 index) public view returns (uint256 claimedBlock, uint256 claimedMask) {
        claimedBlock = _claimed[period][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[period][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 {
        // Make sure the tokens have not already been redeemed
        (uint256 claimedBlock, uint256 claimedMask) = claimed(index);
        _claimed[period][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");

        // Send to EscrowThales contract
        iEscrowThales.addToEscrow(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);
    event NewRoot(bytes32 root, uint timestamp, uint256 period);
}

File 2 of 6 : IERC20.sol
pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
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.
     *
     * > 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 3 of 6 : Owned.sol
pragma solidity ^0.5.16;

// https://docs.synthetix.io/contracts/source/contracts/owned
contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) public {
        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 4 of 6 : MerkleProof.sol
pragma solidity ^0.5.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 5 of 6 : Pausable.sol
pragma solidity ^0.5.16;

// Inheritance
import "./Owned.sol";

// https://docs.synthetix.io/contracts/source/contracts/pausable
contract Pausable is Owned {
    uint public lastPauseTime;
    bool public paused;

    constructor() internal {
        // 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 = now;
        }

        // 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");
        _;
    }
}

File 6 of 6 : IEscrowThales.sol
pragma solidity >=0.4.24;

interface IEscrowThales {
    /* ========== VIEWS / VARIABLES ========== */
    function getStakerPeriod(address account, uint index) external view returns (uint);

    function getStakerAmounts(address account, uint index) external view returns (uint);

    function totalAccountEscrowedAmount(address account) external view returns (uint);

    function getStakedEscrowedBalanceForRewards(address account) external view returns (uint);

    function totalEscrowedRewards() external view returns (uint);

    function totalEscrowBalanceNotIncludedInStaking() external view returns (uint);

    function currentVestingPeriod() external view returns (uint);

    function updateCurrentPeriod() external returns (bool);

    function claimable(address account) external view returns (uint);

    function addToEscrow(address account, uint amount) external;

    function vest(uint amount) external returns (bool);

    function addTotalEscrowBalanceNotIncludedInStaking(uint amount) external;

    function subtractTotalEscrowBalanceNotIncludedInStaking(uint amount) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "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"}],"payable":false,"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":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"NewRoot","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"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"_selfDestruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"claimedBlock","type":"uint256"},{"internalType":"uint256","name":"claimedMask","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"iEscrowThales","outputs":[{"internalType":"contract IEscrowThales","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_escrowThalesContract","type":"address"}],"name":"setEscrow","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051610e98380380610e988339818101604052606081101561003357600080fd5b5080516020820151604090920151909190826001600160a01b0381166100a0576040805162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1506000546001600160a01b031661014a576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b600380546001600160a01b0390931661010002610100600160a81b03199093169290921790915560055550426006556001600855610d0b8061018d6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80639ea6ec29116100ad578063dbe7e3bd11610071578063dbe7e3bd1461034a578063ebf0c71714610380578063ef78d4fd14610388578063f851a44014610390578063fc0c546a146103985761012c565b80639ea6ec2914610215578063ae0b51df1461023b578063c10c3546146102ea578063c95c0d8914610310578063dab5f3401461032d5761012c565b8063642b0424116100f4578063642b0424146101c057806378e97925146101f557806379ba5097146101fd5780638da5cb5b1461020557806391b4ded91461020d5761012c565b80631627540c1461013157806316c38b3c146101595780632f3241581461017857806353a47bb71461019c5780635c975abb146101a4575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b03166103a0565b005b6101576004803603602081101561016f57600080fd5b503515156103fc565b610180610476565b604080516001600160a01b039092168252519081900360200190f35b610180610485565b6101ac610494565b604080519115158252519081900360200190f35b6101e3600480360360408110156101d657600080fd5b508035906020013561049d565b60408051918252519081900360200190f35b6101e36104ba565b6101576104c0565b61018061057c565b6101e361058b565b6101576004803603602081101561022b57600080fd5b50356001600160a01b0316610591565b6101576004803603606081101561025157600080fd5b81359160208101359181019060608101604082013564010000000081111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460208302840111640100000000831117156102ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506106a4945050505050565b6101576004803603602081101561030057600080fd5b50356001600160a01b0316610857565b6101ac6004803603602081101561032657600080fd5b503561099f565b6101576004803603602081101561034357600080fd5b50356109d0565b6103676004803603602081101561036057600080fd5b5035610a90565b6040805192835260208301919091528051918290030190f35b6101e3610b12565b6101e3610b18565b610180610b1e565b610180610b2d565b6103a8610b41565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b610404610b41565b60035460ff161515811515141561041a57610473565b6003805460ff1916821515179081905560ff161561043757426002555b6003546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b6004546001600160a01b031681565b6001546001600160a01b031681565b60035460ff1681565b600960209081526000928352604080842090915290825290205481565b60065481565b6001546001600160a01b031633146105095760405162461bcd60e51b8152600401808060200182810382526035815260200180610c376035913960400191505060405180910390fd5b600054600154604080516001600160a01b03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031681565b60025481565b610599610b41565b600354604080516370a0823160e01b815230600482015290516101009092046001600160a01b03169163a9059cbb91849184916370a08231916024808301926020929190829003018186803b1580156105f157600080fd5b505afa158015610605573d6000803e3d6000fd5b505050506040513d602081101561061b57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561066c57600080fd5b505af1158015610680573d6000803e3d6000fd5b505050506040513d602081101561069657600080fd5b50506001600160a01b038116ff5b60035460ff16156106e65760405162461bcd60e51b815260040180806020018281038252603c815260200180610c9b603c913960400191505060405180910390fd5b6000806106f285610a90565b60085460009081526009602090815260408083206101008b048452825291829020838517905581518082018a90523360601b8184015260548082018a905283518083039091018152607490910190925281519101206005549294509092509061075d90859083610b8c565b6107a3576040805162461bcd60e51b8152602060048201526012602482015271141c9bdbd9881a5cc81b9bdd081d985b1a5960721b604482015290519081900360640190fd5b600480546040805163b01ca88f60e01b8152339381019390935260248301889052516001600160a01b039091169163b01ca88f91604480830192600092919082900301818387803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50506040805133815260208101899052428183015290517f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79350908190036060019150a1505050505050565b61085f610b41565b6004546001600160a01b03161561090157600354600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260006024840181905290516101009094049091169263095ea7b3926044808201936020939283900390910190829087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b50505b600480546001600160a01b0319166001600160a01b0383811691821783556003546040805163095ea7b360e01b81529485019390935260001960248501529151610100909204169163095ea7b39160448083019260209291908290030181600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b505050565b600854600090815260096020908152604080832061010085048452909152902054600160ff9092169190911b161590565b6109d8610b41565b6004546001600160a01b0316610a35576040805162461bcd60e51b815260206004820152601960248201527f53657420457363726f77205468616c6573206164647265737300000000000000604482015290519081900360640190fd5b600581905542600681905560085460408051848152602081019390935282810191909152517f27ece7f6ab4136a488e703a30962e63b76b6f31f4d0b03e0e3a47bcd1dd6f5d19181900360600190a150600880546001019055565b600854600090815260096020908152604080832061010085048452909152902054600160ff83161b80821615610b0d576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d6564604482015290519081900360640190fd5b915091565b60055481565b60085481565b6007546001600160a01b031681565b60035461010090046001600160a01b031681565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040180806020018281038252602f815260200180610c6c602f913960400191505060405180910390fd5b565b600081815b8551811015610c2b576000868281518110610ba857fe5b6020026020010151905080831015610bf05782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610c22565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101610b91565b50909214939250505056fe596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e6572736869704f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e5468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e747261637420697320706175736564a265627a7a723158202088a825c50ad945acc3c99cd4a8ab43b53bb452cfacdcf9a0123e6513ec51b864736f6c634300051000320000000000000000000000004d03ef005e5f559fc9294a8e1cebba09284b1f8200000000000000000000000003e173ad8d1581a4802d3b532ace27a62c5b81dcabfc88f60dcac2cc17d518ff428a7033306dcd4633cff8fd688edc4eab042902

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80639ea6ec29116100ad578063dbe7e3bd11610071578063dbe7e3bd1461034a578063ebf0c71714610380578063ef78d4fd14610388578063f851a44014610390578063fc0c546a146103985761012c565b80639ea6ec2914610215578063ae0b51df1461023b578063c10c3546146102ea578063c95c0d8914610310578063dab5f3401461032d5761012c565b8063642b0424116100f4578063642b0424146101c057806378e97925146101f557806379ba5097146101fd5780638da5cb5b1461020557806391b4ded91461020d5761012c565b80631627540c1461013157806316c38b3c146101595780632f3241581461017857806353a47bb71461019c5780635c975abb146101a4575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b03166103a0565b005b6101576004803603602081101561016f57600080fd5b503515156103fc565b610180610476565b604080516001600160a01b039092168252519081900360200190f35b610180610485565b6101ac610494565b604080519115158252519081900360200190f35b6101e3600480360360408110156101d657600080fd5b508035906020013561049d565b60408051918252519081900360200190f35b6101e36104ba565b6101576104c0565b61018061057c565b6101e361058b565b6101576004803603602081101561022b57600080fd5b50356001600160a01b0316610591565b6101576004803603606081101561025157600080fd5b81359160208101359181019060608101604082013564010000000081111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460208302840111640100000000831117156102ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506106a4945050505050565b6101576004803603602081101561030057600080fd5b50356001600160a01b0316610857565b6101ac6004803603602081101561032657600080fd5b503561099f565b6101576004803603602081101561034357600080fd5b50356109d0565b6103676004803603602081101561036057600080fd5b5035610a90565b6040805192835260208301919091528051918290030190f35b6101e3610b12565b6101e3610b18565b610180610b1e565b610180610b2d565b6103a8610b41565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b610404610b41565b60035460ff161515811515141561041a57610473565b6003805460ff1916821515179081905560ff161561043757426002555b6003546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b6004546001600160a01b031681565b6001546001600160a01b031681565b60035460ff1681565b600960209081526000928352604080842090915290825290205481565b60065481565b6001546001600160a01b031633146105095760405162461bcd60e51b8152600401808060200182810382526035815260200180610c376035913960400191505060405180910390fd5b600054600154604080516001600160a01b03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b031681565b60025481565b610599610b41565b600354604080516370a0823160e01b815230600482015290516101009092046001600160a01b03169163a9059cbb91849184916370a08231916024808301926020929190829003018186803b1580156105f157600080fd5b505afa158015610605573d6000803e3d6000fd5b505050506040513d602081101561061b57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561066c57600080fd5b505af1158015610680573d6000803e3d6000fd5b505050506040513d602081101561069657600080fd5b50506001600160a01b038116ff5b60035460ff16156106e65760405162461bcd60e51b815260040180806020018281038252603c815260200180610c9b603c913960400191505060405180910390fd5b6000806106f285610a90565b60085460009081526009602090815260408083206101008b048452825291829020838517905581518082018a90523360601b8184015260548082018a905283518083039091018152607490910190925281519101206005549294509092509061075d90859083610b8c565b6107a3576040805162461bcd60e51b8152602060048201526012602482015271141c9bdbd9881a5cc81b9bdd081d985b1a5960721b604482015290519081900360640190fd5b600480546040805163b01ca88f60e01b8152339381019390935260248301889052516001600160a01b039091169163b01ca88f91604480830192600092919082900301818387803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50506040805133815260208101899052428183015290517f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79350908190036060019150a1505050505050565b61085f610b41565b6004546001600160a01b03161561090157600354600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260006024840181905290516101009094049091169263095ea7b3926044808201936020939283900390910190829087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b50505b600480546001600160a01b0319166001600160a01b0383811691821783556003546040805163095ea7b360e01b81529485019390935260001960248501529151610100909204169163095ea7b39160448083019260209291908290030181600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b505050565b600854600090815260096020908152604080832061010085048452909152902054600160ff9092169190911b161590565b6109d8610b41565b6004546001600160a01b0316610a35576040805162461bcd60e51b815260206004820152601960248201527f53657420457363726f77205468616c6573206164647265737300000000000000604482015290519081900360640190fd5b600581905542600681905560085460408051848152602081019390935282810191909152517f27ece7f6ab4136a488e703a30962e63b76b6f31f4d0b03e0e3a47bcd1dd6f5d19181900360600190a150600880546001019055565b600854600090815260096020908152604080832061010085048452909152902054600160ff83161b80821615610b0d576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e73206861766520616c7265616479206265656e20636c61696d6564604482015290519081900360640190fd5b915091565b60055481565b60085481565b6007546001600160a01b031681565b60035461010090046001600160a01b031681565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040180806020018281038252602f815260200180610c6c602f913960400191505060405180910390fd5b565b600081815b8551811015610c2b576000868281518110610ba857fe5b6020026020010151905080831015610bf05782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610c22565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101610b91565b50909214939250505056fe596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e6572736869704f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e5468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e747261637420697320706175736564a265627a7a723158202088a825c50ad945acc3c99cd4a8ab43b53bb452cfacdcf9a0123e6513ec51b864736f6c63430005100032

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

0000000000000000000000004d03ef005e5f559fc9294a8e1cebba09284b1f8200000000000000000000000003e173ad8d1581a4802d3b532ace27a62c5b81dcabfc88f60dcac2cc17d518ff428a7033306dcd4633cff8fd688edc4eab042902

-----Decoded View---------------
Arg [0] : _owner (address): 0x4D03eF005e5f559fc9294a8E1CeBbA09284B1F82
Arg [1] : _token (address): 0x03E173Ad8d1581A4802d3B532AcE27a62c5B81dc
Arg [2] : _root (bytes32): 0xabfc88f60dcac2cc17d518ff428a7033306dcd4633cff8fd688edc4eab042902

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d03ef005e5f559fc9294a8e1cebba09284b1f82
Arg [1] : 00000000000000000000000003e173ad8d1581a4802d3b532ace27a62c5b81dc
Arg [2] : abfc88f60dcac2cc17d518ff428a7033306dcd4633cff8fd688edc4eab042902


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.