ETH Price: $3,457.54 (-0.87%)
Gas: 10 Gwei

Contract

0x3Ed154e1d39Ec872721F7183F23Df3bF91674681
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Change Ownership44889462017-11-04 13:23:522447 days ago1509801832IN
0x3Ed154e1...F91674681
0 ETH0.000171774.83
0x6060604044889072017-11-04 13:15:262447 days ago1509801326IN
 Create: WithdrawContract
0 ETH0.008504285.52

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WithdrawContract

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-11-04
*/

//File: node_modules/giveth-common-contracts/contracts/ERC20.sol
pragma solidity ^0.4.15;


/**
 * @title ERC20
 * @dev A standard interface for tokens.
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
 */
contract ERC20 {
  
    /// @dev Returns the total token supply.
    function totalSupply() public constant returns (uint256 supply);

    /// @dev Returns the account balance of another account with address _owner.
    function balanceOf(address _owner) public constant returns (uint256 balance);

    /// @dev Transfers _value amount of tokens to address _to
    function transfer(address _to, uint256 _value) public returns (bool success);

    /// @dev Transfers _value amount of tokens from address _from to address _to
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    /// @dev Allows _spender to withdraw from your account multiple times, up to the _value amount
    function approve(address _spender, uint256 _value) public returns (bool success);

    /// @dev Returns the amount which _spender is still allowed to withdraw from _owner.
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

}
//File: node_modules/giveth-common-contracts/contracts/Owned.sol
pragma solidity ^0.4.15;


/// @title Owned
/// @author Adrià Massanet <[email protected]>
/// @notice The Owned contract has an owner address, and provides basic 
///  authorization control functions, this simplifies & the implementation of
///  "user permissions"
contract Owned {

    address public owner;
    address public newOwnerCandidate;

    event OwnershipRequested(address indexed by, address indexed to);
    event OwnershipTransferred(address indexed from, address indexed to);
    event OwnershipRemoved();

    /// @dev The constructor sets the `msg.sender` as the`owner` of the contract
    function Owned() {
        owner = msg.sender;
    }

    /// @dev `owner` is the only address that can call a function with this
    /// modifier
    modifier onlyOwner() {
        require (msg.sender == owner);
        _;
    }

    /// @notice `owner` can step down and assign some other address to this role
    /// @param _newOwner The address of the new owner.
    function changeOwnership(address _newOwner) onlyOwner {
        require(_newOwner != 0x0);

        address oldOwner = owner;
        owner = _newOwner;
        newOwnerCandidate = 0x0;

        OwnershipTransferred(oldOwner, owner);
    }

    /// @notice `onlyOwner` Proposes to transfer control of the contract to a
    ///  new owner
    /// @param _newOwnerCandidate The address being proposed as the new owner
    function proposeOwnership(address _newOwnerCandidate) onlyOwner {
        newOwnerCandidate = _newOwnerCandidate;
        OwnershipRequested(msg.sender, newOwnerCandidate);
    }

    /// @notice Can only be called by the `newOwnerCandidate`, accepts the
    ///  transfer of ownership
    function acceptOwnership() {
        require(msg.sender == newOwnerCandidate);

        address oldOwner = owner;
        owner = newOwnerCandidate;
        newOwnerCandidate = 0x0;

        OwnershipTransferred(oldOwner, owner);
    }

    /// @notice Decentralizes the contract, this operation cannot be undone 
    /// @param _dac `0xdac` has to be entered for this function to work
    function removeOwnership(address _dac) onlyOwner {
        require(_dac == 0xdac);
        owner = 0x0;
        newOwnerCandidate = 0x0;
        OwnershipRemoved();     
    }

} 

//File: node_modules/giveth-common-contracts/contracts/Escapable.sol
/*
    Copyright 2016, Jordi Baylina
    Contributor: Adrià Massanet <[email protected]>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

pragma solidity ^0.4.15;





/// @dev `Escapable` is a base level contract built off of the `Owned`
///  contract that creates an escape hatch function to send its ether to
///  `escapeHatchDestination` when called by the `escapeHatchCaller` in the case that
///  something unexpected happens
contract Escapable is Owned {
    address public escapeHatchCaller;
    address public escapeHatchDestination;
    mapping (address=>bool) private escapeBlacklist;

    /// @notice The Constructor assigns the `escapeHatchDestination` and the
    ///  `escapeHatchCaller`
    /// @param _escapeHatchDestination The address of a safe location (usu a
    ///  Multisig) to send the ether held in this contract
    /// @param _escapeHatchCaller The address of a trusted account or contract to
    ///  call `escapeHatch()` to send the ether in this contract to the
    ///  `escapeHatchDestination` it would be ideal that `escapeHatchCaller` cannot move
    ///  funds out of `escapeHatchDestination`
    function Escapable(address _escapeHatchCaller, address _escapeHatchDestination) {
        escapeHatchCaller = _escapeHatchCaller;
        escapeHatchDestination = _escapeHatchDestination;
    }

    modifier onlyEscapeHatchCallerOrOwner {
        require ((msg.sender == escapeHatchCaller)||(msg.sender == owner));
        _;
    }

    /// @notice The `blacklistEscapeTokens()` marks a token in a whitelist to be
    ///   escaped. The proupose is to be done at construction time.
    /// @param _token the be bloacklisted for escape
    function blacklistEscapeToken(address _token) internal {
        escapeBlacklist[_token] = true;
        EscapeHatchBlackistedToken(_token);
    }

    function isTokenEscapable(address _token) constant public returns (bool) {
        return !escapeBlacklist[_token];
    }

    /// @notice The `escapeHatch()` should only be called as a last resort if a
    /// security issue is uncovered or something unexpected happened
    /// @param _token to transfer, use 0x0 for ethers
    function escapeHatch(address _token) public onlyEscapeHatchCallerOrOwner {   
        require(escapeBlacklist[_token]==false);

        uint256 balance;

        if (_token == 0x0) {
            balance = this.balance;
            escapeHatchDestination.transfer(balance);
            EscapeHatchCalled(_token, balance);
            return;
        }

        ERC20 token = ERC20(_token);
        balance = token.balanceOf(this);
        token.transfer(escapeHatchDestination, balance);
        EscapeHatchCalled(_token, balance);
    }

    /// @notice Changes the address assigned to call `escapeHatch()`
    /// @param _newEscapeHatchCaller The address of a trusted account or contract to
    ///  call `escapeHatch()` to send the ether in this contract to the
    ///  `escapeHatchDestination` it would be ideal that `escapeHatchCaller` cannot
    ///  move funds out of `escapeHatchDestination`
    function changeHatchEscapeCaller(address _newEscapeHatchCaller) onlyEscapeHatchCallerOrOwner {
        escapeHatchCaller = _newEscapeHatchCaller;
    }

    event EscapeHatchBlackistedToken(address token);
    event EscapeHatchCalled(address token, uint amount);
}

//File: ./contracts/WithdrawContract.sol
pragma solidity ^0.4.18;
/*
    Copyright 2017, Jordi Baylina

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


/// @dev This declares a few functions from `MiniMeToken` so that the
///  `WithdrawContract` can interface with the `MiniMeToken`
contract MiniMeToken {
    function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint);
    function totalSupplyAt(uint _blockNumber) public constant returns(uint);
}




/// @dev This is the main contract, it is intended to distribute deposited funds
///  from a TRUSTED `owner` to token holders of a MiniMe style ERC-20 Token;
///  only deposits from the `owner` using the functions `newTokenPayment()` &
///  `newEtherPayment()` will be distributed, any other funds sent to this
///  contract can only be removed via the `escapeHatch()`
contract WithdrawContract is Escapable {

    /// @dev Tracks the deposits made to this contract
    struct Deposit {
        uint block;    // Determines which token holders are able to collect
        ERC20 token;   // The token address (0x0 if ether)
        uint amount;   // The amount deposited in the smallest unit (wei if ETH)
        bool canceled; // True if canceled by the `owner`
    }

    Deposit[] public deposits; // Array of deposits to this contract
    MiniMeToken rewardToken;     // Token that is used for withdraws

    mapping (address => uint) public nextDepositToPayout; // Tracks Payouts
    mapping (address => mapping(uint => bool)) skipDeposits;

/////////
// Constructor
/////////

    /// @notice The Constructor creates the `WithdrawContract` on the blockchain
    ///  the `owner` role is assigned to the address that deploys this contract
    /// @param _rewardToken The address of the token that is used to determine the
    ///  distribution of the deposits according to the balance held at the
    ///  deposit's specified `block`
    /// @param _escapeHatchCaller The address of a trusted account or contract
    ///  to call `escapeHatch()` to send the specified token (or ether) held in
    ///  this contract to the `escapeHatchDestination`
    /// @param _escapeHatchDestination The address of a safe location (usu a
    ///  Multisig) to send the ether and tokens held in this contract when the
    ///  `escapeHatch()` is called
    function WithdrawContract(
        MiniMeToken _rewardToken,
        address _escapeHatchCaller,
        address _escapeHatchDestination)
        Escapable(_escapeHatchCaller, _escapeHatchDestination)
        public
    {
        rewardToken = _rewardToken;
    }

    /// @dev When ether is sent to this contract `newEtherDeposit()` is called
    function () payable public {
        newEtherDeposit(0);
    }
/////////
// Owner Functions
/////////

    /// @notice Adds an ether deposit to `deposits[]`; only the `owner` can
    ///  deposit into this contract
    /// @param _block The block height that determines the snapshot of token
    ///  holders that will be able to withdraw their share of this deposit; this
    ///  block must be set in the past, if 0 it defaults to one block before the
    ///  transaction
    /// @return _idDeposit The id number for the deposit
    function newEtherDeposit(uint _block)
        public onlyOwner payable
        returns (uint _idDeposit)
    {
        require(msg.value>0);
        require(_block < block.number);
        _idDeposit = deposits.length ++;

        // Record the deposit
        Deposit storage d = deposits[_idDeposit];
        d.block = _block == 0 ? block.number -1 : _block;
        d.token = ERC20(0);
        d.amount = msg.value;
        NewDeposit(_idDeposit, ERC20(0), msg.value);
    }

    /// @notice Adds a token deposit to `deposits[]`; only the `owner` can
    ///  call this function and it will only work if the account sending the
    ///  tokens has called `approve()` so that this contract can call
    ///  `transferFrom()` and take the tokens
    /// @param _token The address for the ERC20 that is being deposited
    /// @param _amount The quantity of tokens that is deposited into the
    ///  contract in the smallest unit of tokens (if a token has its decimals
    ///  set to 18 and 1 token is sent, the `_amount` would be 10^18)
    /// @param _block The block height that determines the snapshot of token
    ///  holders that will be able to withdraw their share of this deposit; this
    ///  block must be set in the past, if 0 it defaults to one block before the
    ///  transaction
    /// @return _idDeposit The id number for the deposit
    function newTokenDeposit(ERC20 _token, uint _amount, uint _block)
        public onlyOwner
        returns (uint _idDeposit)
    {
        require(_amount > 0);
        require(_block < block.number);

        // Must `approve()` this contract in a previous transaction
        require( _token.transferFrom(msg.sender, address(this), _amount) );
        _idDeposit = deposits.length ++;

        // Record the deposit
        Deposit storage d = deposits[_idDeposit];
        d.block = _block == 0 ? block.number -1 : _block;
        d.token = _token;
        d.amount = _amount;
        NewDeposit(_idDeposit, _token, _amount);
    }

    /// @notice This function is a failsafe function in case a token is
    ///  deposited that has an issue that could prevent it's withdraw loop break
    ///  (e.g. transfers are disabled), can only be called by the `owner`
    /// @param _idDeposit The id number for the deposit being canceled
    function cancelPaymentGlobally(uint _idDeposit) public onlyOwner {
        require(_idDeposit < deposits.length);
        deposits[_idDeposit].canceled = true;
        CancelPaymentGlobally(_idDeposit);
    }

/////////
// Public Functions
/////////
    /// @notice Sends all the tokens and ether to the token holder by looping
    ///  through all the deposits, determining the appropriate amount by
    ///  dividing the `totalSupply` by the number of tokens the token holder had
    ///  at `deposit.block` for each deposit; this function may have to be
    ///  called multiple times if their are many deposits
    function withdraw() public {
        uint acc = 0; // Accumulates the amount of tokens/ether to be sent
        uint i = nextDepositToPayout[msg.sender]; // Iterates through the deposits
        require(i<deposits.length);
        ERC20 currentToken = deposits[i].token; // Sets the `currentToken` to ether

        require(msg.gas>149000); // Throws if there is no gas to do at least a single transfer.
        while (( i< deposits.length) && ( msg.gas > 148000)) {
            Deposit storage d = deposits[i];

            // Make sure `deposit[i]` shouldn't be skipped
            if ((!d.canceled)&&(!isDepositSkiped(msg.sender, i))) {

                // The current diposti is different of the accumulated until now,
                // so we return the accumulated tokens until now and resset the
                // accumulator.
                if (currentToken != d.token) {
                    nextDepositToPayout[msg.sender] = i;
                    require(doPayment(i-1, msg.sender, currentToken, acc));
                    assert(nextDepositToPayout[msg.sender] == i);
                    currentToken = d.token;
                    acc =0;
                }

                // Accumulate the amount to send for the `currentToken`
                acc +=  d.amount *
                        rewardToken.balanceOfAt(msg.sender, d.block) /
                            rewardToken.totalSupplyAt(d.block);
            }

            i++; // Next deposit :-D
        }
        // Return the accumulated tokens.
        nextDepositToPayout[msg.sender] = i;
        require(doPayment(i-1, msg.sender, currentToken, acc));
        assert(nextDepositToPayout[msg.sender] == i);
    }

    /// @notice This function is a failsafe function in case a token holder
    ///  wants to skip a payment, can only be applied to one deposit at a time
    ///  and only affects the payment for the `msg.sender` calling the function;
    ///  can be undone by calling again with `skip == false`
    /// @param _idDeposit The id number for the deposit being canceled
    /// @param _skip True if the caller wants to skip the payment for `idDeposit`
    function skipPayment(uint _idDeposit, bool _skip) public {
        require(_idDeposit < deposits.length);
        skipDeposits[msg.sender][_idDeposit] = _skip;
        SkipPayment(_idDeposit, _skip);
    }

/////////
// Constant Functions
/////////

    /// @notice Calculates the amount of a given token (or ether) the holder can
    ///  receive
    /// @param _token The address of the token being queried, 0x0 = ether
    /// @param _holder The address being checked
    /// @return The amount of `token` able to be collected in the smallest
    ///  unit of the `token` (wei for ether)
    function getPendingReward(ERC20 _token, address _holder) public constant returns(uint) {
        uint acc =0;
        for (uint i=nextDepositToPayout[msg.sender]; i<deposits.length; i++) {
            Deposit storage d = deposits[i];
            if ((d.token == _token)&&(!d.canceled) && (!isDepositSkiped(_holder, i))) {
                acc +=  d.amount *
                    rewardToken.balanceOfAt(_holder, d.block) /
                        rewardToken.totalSupplyAt(d.block);
            }
        }
        return acc;
    }

    /// @notice A check to see if a specific address has anything to collect
    /// @param _holder The address being checked for available deposits
    /// @return True if there are payments to be collected
    function canWithdraw(address _holder) public constant returns (bool) {
        if (nextDepositToPayout[_holder] == deposits.length) return false;
        for (uint i=nextDepositToPayout[msg.sender]; i<deposits.length; i++) {
            Deposit storage d = deposits[i];
            if ((!d.canceled) && (!isDepositSkiped(_holder, i))) {
                uint amount =  d.amount *
                    rewardToken.balanceOfAt(_holder, d.block) /
                        rewardToken.totalSupplyAt(d.block);
                if (amount>0) return true;
            }
        }
        return false;
    }

    /// @notice Checks how many deposits have been made
    /// @return The number of deposits
    function nDeposits() public constant returns (uint) {
        return deposits.length;
    }

    /// @notice Checks to see if a specific deposit has been skipped
    /// @param _holder The address being checked for available deposits
    /// @param _idDeposit The id number for the deposit being canceled
    /// @return True if the specified deposit has been skipped
    function isDepositSkiped(address _holder, uint _idDeposit) public constant returns(bool) {
        return skipDeposits[_holder][_idDeposit];
    }

/////////
// Internal Functions
/////////

    /// @notice Transfers `amount` of `token` to `dest`, only used internally,
    ///  and does not throw, will always return `true` or `false`
    /// @param _token The address for the ERC20 that is being transferred
    /// @param _dest The destination address of the transfer
    /// @param _amount The quantity of tokens that is being transferred
    ///  denominated in the smallest unit of tokens (if a token has its decimals
    ///  set to 18 and 1 token is being transferred the `amount` would be 10^18)
    /// @return True if the payment succeeded
    function doPayment(uint _idDeposit,  address _dest, ERC20 _token, uint _amount) internal returns (bool) {
        if (_amount == 0) return true;
        if (address(_token) == 0) {
            if (!_dest.send(_amount)) return false;   // If we can't send, we continue...
        } else {
            if (!_token.transfer(_dest, _amount)) return false;
        }
        Withdraw(_idDeposit, _dest, _token, _amount);
        return true;
    }

    function getBalance(ERC20 _token, address _holder) internal constant returns (uint) {
        if (address(_token) == 0) {
            return _holder.balance;
        } else {
            return _token.balanceOf(_holder);
        }
    }

/////////
// Events
/////////

    event Withdraw(uint indexed lastIdPayment, address indexed holder, ERC20 indexed tokenContract, uint amount);
    event NewDeposit(uint indexed idDeposit, ERC20 indexed tokenContract, uint amount);
    event CancelPaymentGlobally(uint indexed idDeposit);
    event SkipPayment(uint indexed idDeposit, bool skip);
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"escapeHatchCaller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idDeposit","type":"uint256"},{"name":"_skip","type":"bool"}],"name":"skipPayment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_block","type":"uint256"}],"name":"newTokenDeposit","outputs":[{"name":"_idDeposit","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"nextDepositToPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dac","type":"address"}],"name":"removeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"proposeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"isTokenEscapable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nDeposits","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"escapeHatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_idDeposit","type":"uint256"}],"name":"isDepositSkiped","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"deposits","outputs":[{"name":"block","type":"uint256"},{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"canceled","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_block","type":"uint256"}],"name":"newEtherDeposit","outputs":[{"name":"_idDeposit","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newEscapeHatchCaller","type":"address"}],"name":"changeHatchEscapeCaller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_idDeposit","type":"uint256"}],"name":"cancelPaymentGlobally","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"escapeHatchDestination","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_holder","type":"address"}],"name":"getPendingReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_rewardToken","type":"address"},{"name":"_escapeHatchCaller","type":"address"},{"name":"_escapeHatchDestination","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"lastIdPayment","type":"uint256"},{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"tokenContract","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDeposit","type":"uint256"},{"indexed":true,"name":"tokenContract","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"NewDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDeposit","type":"uint256"}],"name":"CancelPaymentGlobally","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"idDeposit","type":"uint256"},{"indexed":false,"name":"skip","type":"bool"}],"name":"SkipPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"}],"name":"EscapeHatchBlackistedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"EscapeHatchCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipRemoved","type":"event"}]

6060604052341561000f57600080fd5b60405160608061150183398101604052808051919060200180519190602001805160008054600160a060020a03338116600160a060020a0319928316179092556002805496831696821696909617909555600380549282169286169290921790915560068054959091169490931693909317909155505061146c806100956000396000f30060606040526004361061010e5763ffffffff60e060020a60003504166319262d30811461011b5780631f6eb6e71461014e5780632af4c31e1461017d5780633ccfd60b1461019e5780634147e891146101b157806344ab1409146101cc5780635bd693d414610203578063666a342714610222578063710bf3221461024157806379ba509714610260578063892db057146102735780638da5cb5b146102925780639cff53e0146102a5578063a142d608146102b8578063a3e7247a146102d7578063b02c43d0146102f9578063d078246114610343578063d091b5501461034e578063d836fbe814610361578063d8f5e6c914610380578063f5b6123014610396578063fe0f3a13146103a9575b61011860006103ce565b50005b341561012657600080fd5b61013a600160a060020a03600435166104a5565b604051901515815260200160405180910390f35b341561015957600080fd5b61016161066c565b604051600160a060020a03909116815260200160405180910390f35b341561018857600080fd5b61019c600160a060020a036004351661067b565b005b34156101a957600080fd5b61019c61070f565b34156101bc57600080fd5b61019c60043560243515156109c4565b34156101d757600080fd5b6101f1600160a060020a0360043516602435604435610a3e565b60405190815260200160405180910390f35b341561020e57600080fd5b6101f1600160a060020a0360043516610bb0565b341561022d57600080fd5b61019c600160a060020a0360043516610bc2565b341561024c57600080fd5b61019c600160a060020a0360043516610c3f565b341561026b57600080fd5b61019c610cb0565b341561027e57600080fd5b61013a600160a060020a0360043516610d30565b341561029d57600080fd5b610161610d4f565b34156102b057600080fd5b6101f1610d5e565b34156102c357600080fd5b61019c600160a060020a0360043516610d65565b34156102e257600080fd5b61013a600160a060020a0360043516602435610f97565b341561030457600080fd5b61030f600435610fc2565b604051938452600160a060020a03909216602084015260408084019190915290151560608301526080909101905180910390f35b6101f16004356103ce565b341561035957600080fd5b610161611006565b341561036c57600080fd5b61019c600160a060020a0360043516611015565b341561038b57600080fd5b61019c60043561106d565b34156103a157600080fd5b6101616110f9565b34156103b457600080fd5b6101f1600160a060020a0360043581169060243516611108565b60008054819033600160a060020a039081169116146103ec57600080fd5b600034116103f957600080fd5b43831061040557600080fd5b600580549061041790600183016113da565b915060058281548110151561042857fe5b9060005260206000209060040201905082600014610446578261044b565b600143035b8155600181018054600160a060020a0319169055346002820181905560009083907fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0309060405190815260200160405180910390a350919050565b600554600160a060020a038216600090815260076020526040812054909182918291829114156104d85760009350610664565b600160a060020a03331660009081526007602052604090205492505b60055483101561065f57600580548490811061050c57fe5b60009182526020909120600490910201600381015490925060ff1615801561053b57506105398584610f97565b155b15610654576006548254600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561059657600080fd5b6102c65a03f115156105a757600080fd5b50505060405180516006548454919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561061557600080fd5b6102c65a03f1151561062657600080fd5b5050506040518051905083600201540281151561063f57fe5b04905060008111156106545760019350610664565b6001909201916104f4565b600093505b505050919050565b600254600160a060020a031681565b6000805433600160a060020a0390811691161461069757600080fd5b600160a060020a03821615156106ac57600080fd5b5060008054600160a060020a03838116600160a060020a031980841691909117938490556001805490911690559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160a060020a03331660009081526007602052604081205460055482908190831061073a57600080fd5b600580548490811061074857fe5b6000918252602090912060016004909202010154600160a060020a03169150620246085a1161077657600080fd5b600554831080156107895750620242205a115b1561096557600580548490811061079c57fe5b60009182526020909120600490910201600381015490915060ff161580156107cb57506107c93384610f97565b155b1561095a576001810154600160a060020a038381169116146108555733600160a060020a03811660009081526007602052604090208490556108149060001985019084876112a6565b151561081f57600080fd5b600160a060020a033316600090815260076020526040902054831461084057fe5b600181015460009450600160a060020a031691505b6006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156108ab57600080fd5b6102c65a03f115156108bc57600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90339060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561092a57600080fd5b6102c65a03f1151561093b57600080fd5b5050506040518051905082600201540281151561095457fe5b04840193505b600190920191610776565b33600160a060020a03811660009081526007602052604090208490556109929060001985019084876112a6565b151561099d57600080fd5b600160a060020a03331660009081526007602052604090205483146109be57fe5b50505050565b60055482106109d257600080fd5b33600160a060020a0316600090815260086020908152604080832085845290915290819020805460ff191683151517905582907fd6149459fde27a6c662cc59dbb1674a711ddb77e342754978130b5b3bd0cba1e90839051901515815260200160405180910390a25050565b60008054819033600160a060020a03908116911614610a5c57600080fd5b60008411610a6957600080fd5b438310610a7557600080fd5b84600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610adf57600080fd5b6102c65a03f11515610af057600080fd5b505050604051805190501515610b0557600080fd5b6005805490610b1790600183016113da565b9150600582815481101515610b2857fe5b9060005260206000209060040201905082600014610b465782610b4b565b600143035b8155600181018054600160a060020a031916600160a060020a03871690811790915560028201859055827fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0308660405190815260200160405180910390a3509392505050565b60076020526000908152604090205481565b60005433600160a060020a03908116911614610bdd57600080fd5b610dac600160a060020a03821614610bf457600080fd5b60008054600160a060020a03199081169091556001805490911690557f94e8b32e01b9eedfddd778ffbd051a7718cdc14781702884561162dca6f74dbb60405160405180910390a150565b60005433600160a060020a03908116911614610c5a57600080fd5b60018054600160a060020a031916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60015460009033600160a060020a03908116911614610cce57600080fd5b506000805460018054600160a060020a0319808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600160a060020a031660009081526004602052604090205460ff161590565b600054600160a060020a031681565b6005545b90565b600254600090819033600160a060020a0390811691161480610d95575060005433600160a060020a039081169116145b1515610da057600080fd5b600160a060020a03831660009081526004602052604090205460ff1615610dc657600080fd5b600160a060020a0383161515610e5857600354600160a060020a033081163193501682156108fc0283604051600060405180830381858888f193505050501515610e0f57600080fd5b7fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a1610f92565b5081600160a060020a0381166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb157600080fd5b6102c65a03f11515610ec257600080fd5b5050506040518051600354909350600160a060020a03808416925063a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f3157600080fd5b6102c65a03f11515610f4257600080fd5b50505060405180519050507fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a15b505050565b600160a060020a03919091166000908152600860209081526040808320938352929052205460ff1690565b6005805482908110610fd057fe5b60009182526020909120600490910201805460018201546002830154600390930154919350600160a060020a0316919060ff1684565b600154600160a060020a031681565b60025433600160a060020a0390811691161480611040575060005433600160a060020a039081169116145b151561104b57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461108857600080fd5b600554811061109657600080fd5b60016005828154811015156110a757fe5b60009182526020909120600490910201600301805460ff1916911515919091179055807fa3d465f21dc4259cc4c67491949fc38ff4518179cd78b168bff44bc41211500560405160405180910390a250565b600354600160a060020a031681565b600160a060020a0333166000908152600760205260408120548190815b60055482101561129c57600580548390811061113d57fe5b600091825260209091206004909102016001810154909150600160a060020a0387811691161480156111745750600381015460ff16155b801561118757506111858583610f97565b155b15611291576006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e257600080fd5b6102c65a03f115156111f357600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561126157600080fd5b6102c65a03f1151561127257600080fd5b5050506040518051905082600201540281151561128b57fe5b04830192505b600190910190611125565b5090949350505050565b60008115156112b7575060016113d2565b600160a060020a038316151561130057600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156112fb575060006113d2565b611386565b82600160a060020a031663a9059cbb858460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561135d57600080fd5b6102c65a03f1151561136e57600080fd5b505050604051805190501515611386575060006113d2565b82600160a060020a031684600160a060020a0316867ffeb2000dca3e617cd6f3a8bbb63014bb54a124aac6ccbf73ee7229b4cd01f1208560405190815260200160405180910390a45060015b949350505050565b815481835581811511610f9257600083815260209020610f9291610d629160049182028101918502015b8082111561143c576000808255600182018054600160a060020a0319169055600282015560038101805460ff19169055600401611404565b50905600a165627a7a723058202006f388efc797568aea6630c05326f98da497a9d97d7f9eada22ce6d2bfbca70029000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d0000000000000000000000001dba1131000664b884a1ba238464159892252d3a000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d

Deployed Bytecode

0x60606040526004361061010e5763ffffffff60e060020a60003504166319262d30811461011b5780631f6eb6e71461014e5780632af4c31e1461017d5780633ccfd60b1461019e5780634147e891146101b157806344ab1409146101cc5780635bd693d414610203578063666a342714610222578063710bf3221461024157806379ba509714610260578063892db057146102735780638da5cb5b146102925780639cff53e0146102a5578063a142d608146102b8578063a3e7247a146102d7578063b02c43d0146102f9578063d078246114610343578063d091b5501461034e578063d836fbe814610361578063d8f5e6c914610380578063f5b6123014610396578063fe0f3a13146103a9575b61011860006103ce565b50005b341561012657600080fd5b61013a600160a060020a03600435166104a5565b604051901515815260200160405180910390f35b341561015957600080fd5b61016161066c565b604051600160a060020a03909116815260200160405180910390f35b341561018857600080fd5b61019c600160a060020a036004351661067b565b005b34156101a957600080fd5b61019c61070f565b34156101bc57600080fd5b61019c60043560243515156109c4565b34156101d757600080fd5b6101f1600160a060020a0360043516602435604435610a3e565b60405190815260200160405180910390f35b341561020e57600080fd5b6101f1600160a060020a0360043516610bb0565b341561022d57600080fd5b61019c600160a060020a0360043516610bc2565b341561024c57600080fd5b61019c600160a060020a0360043516610c3f565b341561026b57600080fd5b61019c610cb0565b341561027e57600080fd5b61013a600160a060020a0360043516610d30565b341561029d57600080fd5b610161610d4f565b34156102b057600080fd5b6101f1610d5e565b34156102c357600080fd5b61019c600160a060020a0360043516610d65565b34156102e257600080fd5b61013a600160a060020a0360043516602435610f97565b341561030457600080fd5b61030f600435610fc2565b604051938452600160a060020a03909216602084015260408084019190915290151560608301526080909101905180910390f35b6101f16004356103ce565b341561035957600080fd5b610161611006565b341561036c57600080fd5b61019c600160a060020a0360043516611015565b341561038b57600080fd5b61019c60043561106d565b34156103a157600080fd5b6101616110f9565b34156103b457600080fd5b6101f1600160a060020a0360043581169060243516611108565b60008054819033600160a060020a039081169116146103ec57600080fd5b600034116103f957600080fd5b43831061040557600080fd5b600580549061041790600183016113da565b915060058281548110151561042857fe5b9060005260206000209060040201905082600014610446578261044b565b600143035b8155600181018054600160a060020a0319169055346002820181905560009083907fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0309060405190815260200160405180910390a350919050565b600554600160a060020a038216600090815260076020526040812054909182918291829114156104d85760009350610664565b600160a060020a03331660009081526007602052604090205492505b60055483101561065f57600580548490811061050c57fe5b60009182526020909120600490910201600381015490925060ff1615801561053b57506105398584610f97565b155b15610654576006548254600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561059657600080fd5b6102c65a03f115156105a757600080fd5b50505060405180516006548454919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561061557600080fd5b6102c65a03f1151561062657600080fd5b5050506040518051905083600201540281151561063f57fe5b04905060008111156106545760019350610664565b6001909201916104f4565b600093505b505050919050565b600254600160a060020a031681565b6000805433600160a060020a0390811691161461069757600080fd5b600160a060020a03821615156106ac57600080fd5b5060008054600160a060020a03838116600160a060020a031980841691909117938490556001805490911690559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160a060020a03331660009081526007602052604081205460055482908190831061073a57600080fd5b600580548490811061074857fe5b6000918252602090912060016004909202010154600160a060020a03169150620246085a1161077657600080fd5b600554831080156107895750620242205a115b1561096557600580548490811061079c57fe5b60009182526020909120600490910201600381015490915060ff161580156107cb57506107c93384610f97565b155b1561095a576001810154600160a060020a038381169116146108555733600160a060020a03811660009081526007602052604090208490556108149060001985019084876112a6565b151561081f57600080fd5b600160a060020a033316600090815260076020526040902054831461084057fe5b600181015460009450600160a060020a031691505b6006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156108ab57600080fd5b6102c65a03f115156108bc57600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90339060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561092a57600080fd5b6102c65a03f1151561093b57600080fd5b5050506040518051905082600201540281151561095457fe5b04840193505b600190920191610776565b33600160a060020a03811660009081526007602052604090208490556109929060001985019084876112a6565b151561099d57600080fd5b600160a060020a03331660009081526007602052604090205483146109be57fe5b50505050565b60055482106109d257600080fd5b33600160a060020a0316600090815260086020908152604080832085845290915290819020805460ff191683151517905582907fd6149459fde27a6c662cc59dbb1674a711ddb77e342754978130b5b3bd0cba1e90839051901515815260200160405180910390a25050565b60008054819033600160a060020a03908116911614610a5c57600080fd5b60008411610a6957600080fd5b438310610a7557600080fd5b84600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610adf57600080fd5b6102c65a03f11515610af057600080fd5b505050604051805190501515610b0557600080fd5b6005805490610b1790600183016113da565b9150600582815481101515610b2857fe5b9060005260206000209060040201905082600014610b465782610b4b565b600143035b8155600181018054600160a060020a031916600160a060020a03871690811790915560028201859055827fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0308660405190815260200160405180910390a3509392505050565b60076020526000908152604090205481565b60005433600160a060020a03908116911614610bdd57600080fd5b610dac600160a060020a03821614610bf457600080fd5b60008054600160a060020a03199081169091556001805490911690557f94e8b32e01b9eedfddd778ffbd051a7718cdc14781702884561162dca6f74dbb60405160405180910390a150565b60005433600160a060020a03908116911614610c5a57600080fd5b60018054600160a060020a031916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60015460009033600160a060020a03908116911614610cce57600080fd5b506000805460018054600160a060020a0319808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600160a060020a031660009081526004602052604090205460ff161590565b600054600160a060020a031681565b6005545b90565b600254600090819033600160a060020a0390811691161480610d95575060005433600160a060020a039081169116145b1515610da057600080fd5b600160a060020a03831660009081526004602052604090205460ff1615610dc657600080fd5b600160a060020a0383161515610e5857600354600160a060020a033081163193501682156108fc0283604051600060405180830381858888f193505050501515610e0f57600080fd5b7fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a1610f92565b5081600160a060020a0381166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb157600080fd5b6102c65a03f11515610ec257600080fd5b5050506040518051600354909350600160a060020a03808416925063a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f3157600080fd5b6102c65a03f11515610f4257600080fd5b50505060405180519050507fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a15b505050565b600160a060020a03919091166000908152600860209081526040808320938352929052205460ff1690565b6005805482908110610fd057fe5b60009182526020909120600490910201805460018201546002830154600390930154919350600160a060020a0316919060ff1684565b600154600160a060020a031681565b60025433600160a060020a0390811691161480611040575060005433600160a060020a039081169116145b151561104b57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461108857600080fd5b600554811061109657600080fd5b60016005828154811015156110a757fe5b60009182526020909120600490910201600301805460ff1916911515919091179055807fa3d465f21dc4259cc4c67491949fc38ff4518179cd78b168bff44bc41211500560405160405180910390a250565b600354600160a060020a031681565b600160a060020a0333166000908152600760205260408120548190815b60055482101561129c57600580548390811061113d57fe5b600091825260209091206004909102016001810154909150600160a060020a0387811691161480156111745750600381015460ff16155b801561118757506111858583610f97565b155b15611291576006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e257600080fd5b6102c65a03f115156111f357600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561126157600080fd5b6102c65a03f1151561127257600080fd5b5050506040518051905082600201540281151561128b57fe5b04830192505b600190910190611125565b5090949350505050565b60008115156112b7575060016113d2565b600160a060020a038316151561130057600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156112fb575060006113d2565b611386565b82600160a060020a031663a9059cbb858460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561135d57600080fd5b6102c65a03f1151561136e57600080fd5b505050604051805190501515611386575060006113d2565b82600160a060020a031684600160a060020a0316867ffeb2000dca3e617cd6f3a8bbb63014bb54a124aac6ccbf73ee7229b4cd01f1208560405190815260200160405180910390a45060015b949350505050565b815481835581811511610f9257600083815260209020610f9291610d629160049182028101918502015b8082111561143c576000808255600182018054600160a060020a0319169055600282015560038101805460ff19169055600401611404565b50905600a165627a7a723058202006f388efc797568aea6630c05326f98da497a9d97d7f9eada22ce6d2bfbca70029

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

000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d0000000000000000000000001dba1131000664b884a1ba238464159892252d3a000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d

-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x667Dd163f1a0e6Ef3e7bbe8E0676f62146d5662d
Arg [1] : _escapeHatchCaller (address): 0x1DBA1131000664b884A1Ba238464159892252D3a
Arg [2] : _escapeHatchDestination (address): 0x667Dd163f1a0e6Ef3e7bbe8E0676f62146d5662d

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d
Arg [1] : 0000000000000000000000001dba1131000664b884a1ba238464159892252d3a
Arg [2] : 000000000000000000000000667dd163f1a0e6ef3e7bbe8e0676f62146d5662d


Swarm Source

bzzr://2006f388efc797568aea6630c05326f98da497a9d97d7f9eada22ce6d2bfbca7

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.