ETH Price: $3,453.73 (-0.78%)
Gas: 9 Gwei

Contract

0x0Efef0b34638aDDC8833Ba729aE20016b5F24ffc
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer162778162022-12-27 18:16:47568 days ago1672165007IN
0x0Efef0b3...6b5F24ffc
0.0006 ETH0.000367217.48590118
Withdraw162777922022-12-27 18:11:59568 days ago1672164719IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0025797720.23717672
Withdraw162251612022-12-20 9:58:23576 days ago1671530303IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0015874312.45271122
Withdraw158147172022-10-24 1:35:11633 days ago1666575311IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0011305314.63743289
Withdrawal154651062022-09-03 11:23:46684 days ago1662204226IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000146796.13886853
0xd0782461152776512022-08-04 19:07:48713 days ago1659640068IN
0x0Efef0b3...6b5F24ffc
0.01 ETH0.0002603210.86095421
0xd0782461152776452022-08-04 19:06:45713 days ago1659640005IN
0x0Efef0b3...6b5F24ffc
0.01 ETH0.000251410.49910846
Withdraw152776122022-08-04 18:58:58713 days ago1659639538IN
0x0Efef0b3...6b5F24ffc
0 ETH0.001203219.43870849
0xd078246173499672019-03-11 20:19:291955 days ago1552335569IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000066723
0x4147e89159523782018-07-12 18:59:042197 days ago1531421944IN
0x0Efef0b3...6b5F24ffc
0 ETH0.001447250
Withdraw52916632018-03-20 22:18:322311 days ago1521584312IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000126782
Withdraw52016572018-03-05 16:05:542326 days ago1520265954IN
0x0Efef0b3...6b5F24ffc
0 ETH0.002762883
Withdraw50922002018-02-15 2:42:322345 days ago1518662552IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0044034220
Withdraw50899152018-02-14 17:17:082345 days ago1518628628IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0011935654
Withdraw50899062018-02-14 17:16:102345 days ago1518628570IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0003315415
Withdraw50897672018-02-14 16:44:222345 days ago1518626662IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0136816915
Withdraw50788302018-02-12 20:29:202347 days ago1518467360IN
0x0Efef0b3...6b5F24ffc
0 ETH0.00019083.01
Transfer50194452018-02-02 21:32:552357 days ago1517607175IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000042762
Transfer50194222018-02-02 21:26:542357 days ago1517606814IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000021591.01
Transfer50193652018-02-02 21:15:272357 days ago1517606127IN
0x0Efef0b3...6b5F24ffc
0 ETH0.00086141
Withdraw50155462018-02-02 5:34:382358 days ago1517549678IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000127412.01
Withdraw50151162018-02-02 3:52:552358 days ago1517543575IN
0x0Efef0b3...6b5F24ffc
0 ETH0.000204034
Withdraw50099412018-02-01 6:03:132359 days ago1517464993IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0002210310
Withdraw50098992018-02-01 5:53:162359 days ago1517464396IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0002210310
Withdraw50098492018-02-01 5:41:422359 days ago1517463702IN
0x0Efef0b3...6b5F24ffc
0 ETH0.0005100810
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
52916632018-03-20 22:18:322311 days ago1521584312
0x0Efef0b3...6b5F24ffc
0.82430096 ETH
52016572018-03-05 16:05:542326 days ago1520265954
0x0Efef0b3...6b5F24ffc
0.57824097 ETH
52016572018-03-05 16:05:542326 days ago1520265954
0x0Efef0b3...6b5F24ffc
2.89252048 ETH
52016572018-03-05 16:05:542326 days ago1520265954
0x0Efef0b3...6b5F24ffc
0.00477885 ETH
50922002018-02-15 2:42:322345 days ago1518662552
0x0Efef0b3...6b5F24ffc
0.00477885 ETH
50897672018-02-14 16:44:222345 days ago1518626662
0x0Efef0b3...6b5F24ffc
0.57824097 ETH
50897672018-02-14 16:44:222345 days ago1518626662
0x0Efef0b3...6b5F24ffc
2.89252048 ETH
50897672018-02-14 16:44:222345 days ago1518626662
0x0Efef0b3...6b5F24ffc
0.00477885 ETH
50788302018-02-12 20:29:202347 days ago1518467360
0x0Efef0b3...6b5F24ffc
1.50096593 ETH
50155462018-02-02 5:34:382358 days ago1517549678
0x0Efef0b3...6b5F24ffc
1.50096593 ETH
50151162018-02-02 3:52:552358 days ago1517543575
0x0Efef0b3...6b5F24ffc
0.54839857 ETH
50098492018-02-01 5:41:422359 days ago1517463702
0x0Efef0b3...6b5F24ffc
0.99857651 ETH
50098322018-02-01 5:37:102359 days ago1517463430
0x0Efef0b3...6b5F24ffc
0.50238942 ETH
50083332018-01-31 23:41:202359 days ago1517442080
0x0Efef0b3...6b5F24ffc
4.03538383 ETH
50077262018-01-31 21:14:212359 days ago1517433261
0x0Efef0b3...6b5F24ffc
1.50096593 ETH
50071442018-01-31 18:38:322359 days ago1517423912
0x0Efef0b3...6b5F24ffc
4.03538383 ETH
50069462018-01-31 17:48:062359 days ago1517420886
0x0Efef0b3...6b5F24ffc
2.68205388 ETH
50061682018-01-31 14:45:542359 days ago1517409954
0x0Efef0b3...6b5F24ffc
2.68205388 ETH
50061232018-01-31 14:34:272359 days ago1517409267
0x0Efef0b3...6b5F24ffc
0.3846975 ETH
50061132018-01-31 14:32:002359 days ago1517409120
0x0Efef0b3...6b5F24ffc
0.19354346 ETH
50059682018-01-31 13:53:582359 days ago1517406838
0x0Efef0b3...6b5F24ffc
1.50096593 ETH
50058682018-01-31 13:25:222359 days ago1517405122
0x0Efef0b3...6b5F24ffc
19.2664972 ETH
50055202018-01-31 11:59:372359 days ago1517399977
0x0Efef0b3...6b5F24ffc
12.81779359 ETH
50052472018-01-31 10:54:012360 days ago1517396041
0x0Efef0b3...6b5F24ffc
12.81779359 ETH
50050352018-01-31 10:05:352360 days ago1517393135
0x0Efef0b3...6b5F24ffc
80.5 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x3Ed154e1...F91674681
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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"}]

Deployed Bytecode

0x60606040526004361061010e5763ffffffff60e060020a60003504166319262d30811461011b5780631f6eb6e71461014e5780632af4c31e1461017d5780633ccfd60b1461019e5780634147e891146101b157806344ab1409146101cc5780635bd693d414610203578063666a342714610222578063710bf3221461024157806379ba509714610260578063892db057146102735780638da5cb5b146102925780639cff53e0146102a5578063a142d608146102b8578063a3e7247a146102d7578063b02c43d0146102f9578063d078246114610343578063d091b5501461034e578063d836fbe814610361578063d8f5e6c914610380578063f5b6123014610396578063fe0f3a13146103a9575b61011860006103ce565b50005b341561012657600080fd5b61013a600160a060020a03600435166104a5565b604051901515815260200160405180910390f35b341561015957600080fd5b61016161066c565b604051600160a060020a03909116815260200160405180910390f35b341561018857600080fd5b61019c600160a060020a036004351661067b565b005b34156101a957600080fd5b61019c61070f565b34156101bc57600080fd5b61019c60043560243515156109c4565b34156101d757600080fd5b6101f1600160a060020a0360043516602435604435610a3e565b60405190815260200160405180910390f35b341561020e57600080fd5b6101f1600160a060020a0360043516610bb0565b341561022d57600080fd5b61019c600160a060020a0360043516610bc2565b341561024c57600080fd5b61019c600160a060020a0360043516610c3f565b341561026b57600080fd5b61019c610cb0565b341561027e57600080fd5b61013a600160a060020a0360043516610d30565b341561029d57600080fd5b610161610d4f565b34156102b057600080fd5b6101f1610d5e565b34156102c357600080fd5b61019c600160a060020a0360043516610d65565b34156102e257600080fd5b61013a600160a060020a0360043516602435610f97565b341561030457600080fd5b61030f600435610fc2565b604051938452600160a060020a03909216602084015260408084019190915290151560608301526080909101905180910390f35b6101f16004356103ce565b341561035957600080fd5b610161611006565b341561036c57600080fd5b61019c600160a060020a0360043516611015565b341561038b57600080fd5b61019c60043561106d565b34156103a157600080fd5b6101616110f9565b34156103b457600080fd5b6101f1600160a060020a0360043581169060243516611108565b60008054819033600160a060020a039081169116146103ec57600080fd5b600034116103f957600080fd5b43831061040557600080fd5b600580549061041790600183016113da565b915060058281548110151561042857fe5b9060005260206000209060040201905082600014610446578261044b565b600143035b8155600181018054600160a060020a0319169055346002820181905560009083907fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0309060405190815260200160405180910390a350919050565b600554600160a060020a038216600090815260076020526040812054909182918291829114156104d85760009350610664565b600160a060020a03331660009081526007602052604090205492505b60055483101561065f57600580548490811061050c57fe5b60009182526020909120600490910201600381015490925060ff1615801561053b57506105398584610f97565b155b15610654576006548254600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561059657600080fd5b6102c65a03f115156105a757600080fd5b50505060405180516006548454919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561061557600080fd5b6102c65a03f1151561062657600080fd5b5050506040518051905083600201540281151561063f57fe5b04905060008111156106545760019350610664565b6001909201916104f4565b600093505b505050919050565b600254600160a060020a031681565b6000805433600160a060020a0390811691161461069757600080fd5b600160a060020a03821615156106ac57600080fd5b5060008054600160a060020a03838116600160a060020a031980841691909117938490556001805490911690559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600160a060020a03331660009081526007602052604081205460055482908190831061073a57600080fd5b600580548490811061074857fe5b6000918252602090912060016004909202010154600160a060020a03169150620246085a1161077657600080fd5b600554831080156107895750620242205a115b1561096557600580548490811061079c57fe5b60009182526020909120600490910201600381015490915060ff161580156107cb57506107c93384610f97565b155b1561095a576001810154600160a060020a038381169116146108555733600160a060020a03811660009081526007602052604090208490556108149060001985019084876112a6565b151561081f57600080fd5b600160a060020a033316600090815260076020526040902054831461084057fe5b600181015460009450600160a060020a031691505b6006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156108ab57600080fd5b6102c65a03f115156108bc57600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90339060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561092a57600080fd5b6102c65a03f1151561093b57600080fd5b5050506040518051905082600201540281151561095457fe5b04840193505b600190920191610776565b33600160a060020a03811660009081526007602052604090208490556109929060001985019084876112a6565b151561099d57600080fd5b600160a060020a03331660009081526007602052604090205483146109be57fe5b50505050565b60055482106109d257600080fd5b33600160a060020a0316600090815260086020908152604080832085845290915290819020805460ff191683151517905582907fd6149459fde27a6c662cc59dbb1674a711ddb77e342754978130b5b3bd0cba1e90839051901515815260200160405180910390a25050565b60008054819033600160a060020a03908116911614610a5c57600080fd5b60008411610a6957600080fd5b438310610a7557600080fd5b84600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610adf57600080fd5b6102c65a03f11515610af057600080fd5b505050604051805190501515610b0557600080fd5b6005805490610b1790600183016113da565b9150600582815481101515610b2857fe5b9060005260206000209060040201905082600014610b465782610b4b565b600143035b8155600181018054600160a060020a031916600160a060020a03871690811790915560028201859055827fe6d83b1e0e5126a0574d0154ed77e40181534edcb74f035b158d92ed3d10a0308660405190815260200160405180910390a3509392505050565b60076020526000908152604090205481565b60005433600160a060020a03908116911614610bdd57600080fd5b610dac600160a060020a03821614610bf457600080fd5b60008054600160a060020a03199081169091556001805490911690557f94e8b32e01b9eedfddd778ffbd051a7718cdc14781702884561162dca6f74dbb60405160405180910390a150565b60005433600160a060020a03908116911614610c5a57600080fd5b60018054600160a060020a031916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60015460009033600160a060020a03908116911614610cce57600080fd5b506000805460018054600160a060020a0319808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600160a060020a031660009081526004602052604090205460ff161590565b600054600160a060020a031681565b6005545b90565b600254600090819033600160a060020a0390811691161480610d95575060005433600160a060020a039081169116145b1515610da057600080fd5b600160a060020a03831660009081526004602052604090205460ff1615610dc657600080fd5b600160a060020a0383161515610e5857600354600160a060020a033081163193501682156108fc0283604051600060405180830381858888f193505050501515610e0f57600080fd5b7fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a1610f92565b5081600160a060020a0381166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb157600080fd5b6102c65a03f11515610ec257600080fd5b5050506040518051600354909350600160a060020a03808416925063a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f3157600080fd5b6102c65a03f11515610f4257600080fd5b50505060405180519050507fa50dde912fa22ea0d215a0236093ac45b4d55d6ef0c604c319f900029c5d10f28383604051600160a060020a03909216825260208201526040908101905180910390a15b505050565b600160a060020a03919091166000908152600860209081526040808320938352929052205460ff1690565b6005805482908110610fd057fe5b60009182526020909120600490910201805460018201546002830154600390930154919350600160a060020a0316919060ff1684565b600154600160a060020a031681565b60025433600160a060020a0390811691161480611040575060005433600160a060020a039081169116145b151561104b57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461108857600080fd5b600554811061109657600080fd5b60016005828154811015156110a757fe5b60009182526020909120600490910201600301805460ff1916911515919091179055807fa3d465f21dc4259cc4c67491949fc38ff4518179cd78b168bff44bc41211500560405160405180910390a250565b600354600160a060020a031681565b600160a060020a0333166000908152600760205260408120548190815b60055482101561129c57600580548390811061113d57fe5b600091825260209091206004909102016001810154909150600160a060020a0387811691161480156111745750600381015460ff16155b801561118757506111858583610f97565b155b15611291576006548154600160a060020a039091169063981b24d09060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e257600080fd5b6102c65a03f115156111f357600080fd5b50505060405180516006548354919250600160a060020a031690634ee2cd7e90889060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561126157600080fd5b6102c65a03f1151561127257600080fd5b5050506040518051905082600201540281151561128b57fe5b04830192505b600190910190611125565b5090949350505050565b60008115156112b7575060016113d2565b600160a060020a038316151561130057600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156112fb575060006113d2565b611386565b82600160a060020a031663a9059cbb858460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561135d57600080fd5b6102c65a03f1151561136e57600080fd5b505050604051805190501515611386575060006113d2565b82600160a060020a031684600160a060020a0316867ffeb2000dca3e617cd6f3a8bbb63014bb54a124aac6ccbf73ee7229b4cd01f1208560405190815260200160405180910390a45060015b949350505050565b815481835581811511610f9257600083815260209020610f9291610d629160049182028101918502015b8082111561143c576000808255600182018054600160a060020a0319169055600282015560038101805460ff19169055600401611404565b50905600a165627a7a723058202006f388efc797568aea6630c05326f98da497a9d97d7f9eada22ce6d2bfbca70029

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