Contract 0x45e6ff0885ebf5d616e460d14855455d92d6cc04

 
Txn Hash Method
Block
From
To
Value
0xcc1c80aa9cc8e94272216d0d583018af0f95fc9ae2c48a6a5c8bab4b61844b47Release Grant117989132021-02-05 22:18:39133 days 15 hrs ago0x277c4bd386e3ff85f343a1a379ea536ff207d05e IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.01225133182
0xd8ec15064ea22561ec5fa65a9eda770d0228ab756fdab05e1075679b2ac8c39aRelease Grant117988402021-02-05 22:03:23133 days 15 hrs ago0x277c4bd386e3ff85f343a1a379ea536ff207d05e IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.014853941281
0xa64214ad8470b4923745e06e096be78673413b425fc2a5aa7a59f61b3487f05cRelease Grant117987962021-02-05 21:52:11133 days 15 hrs ago0x277c4bd386e3ff85f343a1a379ea536ff207d05e IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0148349454309.1
0x8d0fd320cd0a4529cee0ab22f9fdfa50850daf66f27594e6378a095f3074f907Withdraw116907692021-01-20 6:53:37150 days 6 hrs ago0x72a355d8e911704cd051707712e96c751d8dbe6d IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00169340436
0x3ca2b5e930ac9a8db1df222042614ce37bd96f7b594fafe40aac79280c5a29aeRelease Grant116011802021-01-06 13:05:08164 days 18 mins ago0xeacbc4529a76013376346f6982722d33e07f28c2 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.006454234088106.000001459
0x5b64a7469f7f3e582cbcebca9b289dd4b798eae9f8ababafa659b2d4db70c168Release Grant110628412020-10-15 21:24:31246 days 15 hrs ago0xd61231211287f19084a4e43640bdbf09063e97fa IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.001094320
0x1c450d45ef850a09e178ccde15c0531f831ee628a11b0f064680878e2e2e9d60Release Grant110335532020-10-11 10:07:07251 days 3 hrs ago0xeacbc4529a76013376346f6982722d33e07f28c2 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.002076314934.1
0xa2b74fc04e6e82113f4eca21cd910eb13a0324c9c0a779d22b479420199bebdcRelease Grant105857642020-08-03 8:31:39320 days 4 hrs ago0xd9bfa7bf6e5443707f15513ee12c2a8c28eb05f4 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00334889555
0x9dddf318459e7b0b385b1e06a94385a37fb4448257cc59f9270b973c5ffdc015Release Grant103446952020-06-27 0:41:29357 days 12 hrs ago0x156a5425d160738d53c2d592ac23fe6c07f3ff32 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012177820
0xcf95587297f2007b4de4c7ecddd1c5be2a975e17a1f3ead33c3bdfbfb65d5b57Release Grant103316072020-06-24 23:57:56359 days 13 hrs ago0x1534256d182acb857a690af7dfbebf0d648619a6 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0009491620
0x7f37d67596ff1d2b2d5931f6ea121ed9ca02410d95de36fc47bdc99056d21714Release Grant102070292020-06-05 17:20:28378 days 20 hrs ago0x2cc7df4792e363be72c2f8a1f3cd8f086b5107df IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0010991620
0x1fb12b40d1f783ffe7c654d902679ecb7501f5a808f6925a50c168b2246d619fRelease Grant102070292020-06-05 17:20:28378 days 20 hrs ago0x91e98164b2229e5186d5063701c80e8bd4713e27 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0010991620
0xf87b1c67cea44835937b6cba4cef27412d624bb84d60feca90bbaabb981ed99bRelease Grant98709722020-04-14 13:55:55430 days 23 hrs ago0xd9bfa7bf6e5443707f15513ee12c2a8c28eb05f4 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012177820
0x5cb02e7598af2961a156bac2bbe3785ed7a3701b4618bae7d19e01f720894e78Release Grant97934562020-04-02 15:52:07442 days 21 hrs ago0x156a5425d160738d53c2d592ac23fe6c07f3ff32 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012177820
0x65a245fd681ec8ffdbc0251d648f35ce9de90543190fd924da97e85c73b44376Release Grant97933092020-04-02 15:16:52442 days 22 hrs ago0xd127321c0f57d1293a52c1b4f9d7bf11dc97a9a5 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.001094320
0xf75c6d6b5dba2ab04d88e2aa998882976a5f207b3b6a0e1e614a43fca4a33f52Release Grant96086302020-03-05 2:53:05471 days 10 hrs ago0xda5a58e0569aa1d9d3b30a83b94a711ad6c8ddfb IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012491620
0xbcdfda56ad0bb45b6dd8a3a0afa692b0de911c198632cc81fbaa21be92a56158Release Grant94348912020-02-07 9:59:08498 days 3 hrs ago0x70900eba5488ae4266b49a02860e4cbe8695a3c3 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00024203585.1
0x8a4ef587dc2f3141af000521febef4c2afc46ad765718a65d4413b8775277ce9Release Grant88065962019-10-25 2:24:38603 days 10 hrs ago0xcafabc3c370a8959d26444255d5c3524a6a22811 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.001489120
0x4b37cb3db31246e3506e6a3c09275972abe2afe55d1a47c746cd77714f60ab08Release Grant87900332019-10-22 11:25:05606 days 1 hr ago0x058e17267141dfa8e55162a0acfe9ce66c6c551e IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0010445620
0x7d83374542037390ebcb5fd9bfab7c525913525addc2c8fe57d754d3dcc7576aRelease Grant86246762019-09-26 13:09:22632 days 14 mins ago0x058e17267141dfa8e55162a0acfe9ce66c6c551e IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012765820
0xe1bca461c64d20c252334fb16fa24e9d408af370d8acc4bf9b82a3bcfaf4f270Release Grant79841842019-06-18 19:28:36731 days 17 hrs ago0x1534256d182acb857a690af7dfbebf0d648619a6 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0012765820
0x0035070b9bb974b567b35e1518b3d0d264b38f0b3ad5005a3a197cf6a06c2fb2Release Grant78786332019-06-02 6:49:30748 days 6 hrs ago0xeacbc4529a76013376346f6982722d33e07f28c2 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00261698941
0x9cfc8ee3f5af69f6c5ee0ea3aefd4a8e4a88a892c6b804e8cc79941af2fda1dcRelease Grant78785902019-06-02 6:39:19748 days 6 hrs ago0xeacbc4529a76013376346f6982722d33e07f28c2 IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00366765541
0x26128e55041e37759c4c996c2a1526bde2aef719de91b9127bde47f222d32ebcRelease Grant78593612019-05-30 6:33:37751 days 6 hrs ago0x2cc7df4792e363be72c2f8a1f3cd8f086b5107df IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.0018765820
0xef3910307bab01db6b389a49d0a45191ab9bf3684b545a151d5b629506d13bfdWithdraw78592902019-05-30 6:17:22751 days 7 hrs ago0x2cc7df4792e363be72c2f8a1f3cd8f086b5107df IN  0x45e6ff0885ebf5d616e460d14855455d92d6cc040 Ether0.00034415257.5
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VestingERC20

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-04-25
*/

pragma solidity 0.4.18;



/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}



/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath64 {
  function mul(uint64 a, uint64 b) internal constant returns (uint64) {
    uint64 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint64 a, uint64 b) internal constant returns (uint64) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint64 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint64 a, uint64 b) internal constant returns (uint64) {
    assert(b <= a);
    return a - b;
  }

  function add(uint64 a, uint64 b) internal constant returns (uint64) {
    uint64 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title VestingERC20
 * @dev VestingERC20 is a contract for managing vesting of ERC20 Token.
 * @dev The tokens are unlocked continuously to the vester.
 * @dev The contract host the tokens that are locked for the vester.
 */
contract VestingERC20 {
    using SafeMath for uint256;
    using SafeMath64 for uint64;

    struct Grant {
        uint256 vestedAmount;
        uint64 startTime;
        uint64 cliffTime;
        uint64 endTime;
        uint256 withdrawnAmount;
    }

    // list of the grants (token => granter => vester => Grant).
    mapping(address => mapping(address => mapping(address => Grant))) public grantPerTokenGranterVester;

    // Ledger of the tokens hodled (this not a typo ;) ) in this contract (token => user => balance).
    mapping(address => mapping(address => uint256)) private balancePerPersonPerToken;


    event NewGrant(address granter, address vester, address token, uint256 vestedAmount, uint64 startTime, uint64 cliffTime, uint64 endTime);
    event GrantRevoked(address granter, address vester, address token);
    event Deposit(address token, address granter, uint amount, uint balance);
    event TokenReleased(address token, address granter, address vester, uint amount);
    event Withdraw(address token, address user, uint amount);

    /**
     * @dev Create a vesting to an ethereum address.
     *
     * If there is not enough tokens available on the contract, an exception is thrown.
     *
     * @param _token The ERC20 token contract address.
     * @param _vester The address where the token will be sent.
     * @param _vestedAmount The amount of tokens to be sent during the vesting period.
     * @param _startTime The time when the vesting starts.
     * @param _grantPeriod The period of the grant in sec.
     * @param _cliffPeriod The period in sec during which time the tokens cannot be withraw.
     */
    function createVesting(
        address _token, 
        address _vester,  
        uint256 _vestedAmount,
        uint64 _startTime,
        uint64 _grantPeriod,
        uint64 _cliffPeriod) 
        external
    {
        require(_token != 0);
        require(_vester != 0);
        require(_cliffPeriod <= _grantPeriod);
        require(_vestedAmount != 0);
        require(_grantPeriod==0 || _vestedAmount * _grantPeriod >= _vestedAmount); // no overflow allow here! (to make getBalanceVestingInternal safe).

        // verify that there is not already a grant between the addresses for this specific contract.
        require(grantPerTokenGranterVester[_token][msg.sender][_vester].vestedAmount==0);

        var cliffTime = _startTime.add(_cliffPeriod);
        var endTime = _startTime.add(_grantPeriod);

        grantPerTokenGranterVester[_token][msg.sender][_vester] = Grant(_vestedAmount, _startTime, cliffTime, endTime, 0);

        // update the balance
        balancePerPersonPerToken[_token][msg.sender] = balancePerPersonPerToken[_token][msg.sender].sub(_vestedAmount);

        NewGrant(msg.sender, _vester, _token, _vestedAmount, _startTime, cliffTime, endTime);
    }

    /**
     * @dev Revoke a vesting
     *
     * The vesting is deleted and the tokens already released are sent to the vester.
     *
     * @param _token The address of the token.
     * @param _vester The address of the vester.
     */
    function revokeVesting(address _token, address _vester) 
        external
    {
        require(_token != 0);
        require(_vester != 0);

        Grant storage _grant = grantPerTokenGranterVester[_token][msg.sender][_vester];

        // verify if the grant exists
        require(_grant.vestedAmount!=0);

        // send token available
        sendTokenReleasedToBalanceInternal(_token, msg.sender, _vester);

        // unlock the tokens reserved for this grant
        balancePerPersonPerToken[_token][msg.sender] = 
            balancePerPersonPerToken[_token][msg.sender].add(
                _grant.vestedAmount.sub(_grant.withdrawnAmount)
            );

        // delete the grants
        delete grantPerTokenGranterVester[_token][msg.sender][_vester];

        GrantRevoked(msg.sender, _vester, _token);
    }

    /**
     * @dev Send the released token to the user balance and eventually withdraw
     *
     * Put the tokens released to the user balance.
     * If _doWithdraw is true, send the whole balance to the user.

     * @param _token The address of the token.
     * @param _granter The address of the granter.
     * @param _doWithdraw bool, true to withdraw in the same time.
     */
    function releaseGrant(address _token, address _granter, bool _doWithdraw) 
        external
    {
        // send token to the vester
        sendTokenReleasedToBalanceInternal(_token, _granter, msg.sender);

        if(_doWithdraw) {
            withdraw(_token);           
        }

        // delete grant if fully withdrawn
        Grant storage _grant = grantPerTokenGranterVester[_token][_granter][msg.sender];
        if(_grant.vestedAmount == _grant.withdrawnAmount) 
        {
            delete grantPerTokenGranterVester[_token][_granter][msg.sender];
        }
    }

    /**
     * @dev Withdraw tokens avaibable
     *
     * The tokens are sent to msg.sender and his balancePerPersonPerToken is updated to zero.
     * If there is the token transfer fail, the transaction is revert.
     *
     * @param _token The address of the token.
     */
    function withdraw(address _token) 
        public
    {
        uint amountToSend = balancePerPersonPerToken[_token][msg.sender];
        balancePerPersonPerToken[_token][msg.sender] = 0;
        Withdraw(_token, msg.sender, amountToSend);
        require(ERC20(_token).transfer(msg.sender, amountToSend));
    }

    /**
     * @dev Send the token released to the balance address
     *
     * The token released for the address are sent and his withdrawnAmount are updated.
     * If there is nothing the send, return false.
     * 
     * @param _token The address of the token.
     * @param _granter The address of the granter.
     * @param _vester The address of the vester.
     * @return true if tokens have been sent.
     */
    function sendTokenReleasedToBalanceInternal(address _token, address _granter, address _vester) 
        internal
    {
        Grant storage _grant = grantPerTokenGranterVester[_token][_granter][_vester];
        uint256 amountToSend = getBalanceVestingInternal(_grant);

        // update withdrawnAmount
        _grant.withdrawnAmount = _grant.withdrawnAmount.add(amountToSend);

        TokenReleased(_token, _granter, _vester, amountToSend);

        // send tokens to the vester's balance
        balancePerPersonPerToken[_token][_vester] = balancePerPersonPerToken[_token][_vester].add(amountToSend); 
    }

    /**
     * @dev Calculate the amount of tokens released for a grant
     * 
     * @param _grant Grant information.
     * @return the number of tokens released.
     */
    function getBalanceVestingInternal(Grant _grant)
        internal
        constant
        returns(uint256)
    {
        if(now < _grant.cliffTime) 
        {
            // the grant didn't start 
            return 0;
        }
        else if(now >= _grant.endTime)
        {
            // after the end of the grant release everything
            return _grant.vestedAmount.sub(_grant.withdrawnAmount);
        }
        else
        {
            //  token available = vestedAmount * (now - startTime) / (endTime - startTime)  - withdrawnAmount
            //  => in other words : (number_of_token_granted_per_second * second_since_grant_started) - amount_already_withdraw
            return _grant.vestedAmount.mul( 
                        now.sub(_grant.startTime)
                    ).div(
                        _grant.endTime.sub(_grant.startTime) 
                    ).sub(_grant.withdrawnAmount);
        }
    }

    /**
     * @dev Get the amount of tokens released for a vesting
     * 
     * @param _token The address of the token.
     * @param _granter The address of the granter.
     * @param _vester The address of the vester.
     * @return the number of tokens available.
     */
    function getVestingBalance(address _token, address _granter, address _vester) 
        external
        constant 
        returns(uint256) 
    {
        Grant memory _grant = grantPerTokenGranterVester[_token][_granter][_vester];
        return getBalanceVestingInternal(_grant);
    }

    /**
     * @dev Get the token balance of the contract
     * 
     * @param _token The address of the token.
     * @param _user The address of the user.
     * @return the balance of tokens on the contract for _user.
     */
    function getContractBalance(address _token, address _user) 
        external
        constant 
        returns(uint256) 
    {
        return balancePerPersonPerToken[_token][_user];
    }

    /**
     * @dev Make a deposit of tokens on the contract
     *
     * Before using this function the user needs to do a token allowance from the user to the contract.
     *
     * @param _token The address of the token.
     * @param _amount Amount of token to deposit.
     * 
     * @return the balance of tokens on the contract for msg.sender.
     */
    function deposit(address _token, uint256 _amount) 
        external
        returns(uint256) 
    {
        require(_token!=0);
        require(ERC20(_token).transferFrom(msg.sender, this, _amount));
        balancePerPersonPerToken[_token][msg.sender] = balancePerPersonPerToken[_token][msg.sender].add(_amount);
        Deposit(_token, msg.sender, _amount, balancePerPersonPerToken[_token][msg.sender]);

        return balancePerPersonPerToken[_token][msg.sender];
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_vester","type":"address"},{"name":"_vestedAmount","type":"uint256"},{"name":"_startTime","type":"uint64"},{"name":"_grantPeriod","type":"uint64"},{"name":"_cliffPeriod","type":"uint64"}],"name":"createVesting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_granter","type":"address"},{"name":"_vester","type":"address"}],"name":"getVestingBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"address"}],"name":"grantPerTokenGranterVester","outputs":[{"name":"vestedAmount","type":"uint256"},{"name":"startTime","type":"uint64"},{"name":"cliffTime","type":"uint64"},{"name":"endTime","type":"uint64"},{"name":"withdrawnAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_vester","type":"address"}],"name":"revokeVesting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_user","type":"address"}],"name":"getContractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_granter","type":"address"},{"name":"_doWithdraw","type":"bool"}],"name":"releaseGrant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"granter","type":"address"},{"indexed":false,"name":"vester","type":"address"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"vestedAmount","type":"uint256"},{"indexed":false,"name":"startTime","type":"uint64"},{"indexed":false,"name":"cliffTime","type":"uint64"},{"indexed":false,"name":"endTime","type":"uint64"}],"name":"NewGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"granter","type":"address"},{"indexed":false,"name":"vester","type":"address"},{"indexed":false,"name":"token","type":"address"}],"name":"GrantRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"granter","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"granter","type":"address"},{"indexed":false,"name":"vester","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"}]

6060604052341561000f57600080fd5b611f008061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ac10c0d146100935780631c20be7e1461012d578063341f115c146101b85780633613b7811461029b57806347e7ef24146102f357806351cff8d9146103495780636a8ae1361461038257806373582884146103ee575b600080fd5b341561009e57600080fd5b61012b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff16906020019091905050610451565b005b341561013857600080fd5b6101a2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506109ee565b6040518082815260200191505060405180910390f35b34156101c357600080fd5b61022d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b7b565b604051808681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019550505050505060405180910390f35b34156102a657600080fd5b6102f1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c07565b005b34156102fe57600080fd5b610333600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611042565b6040518082815260200191505060405180910390f35b341561035457600080fd5b610380600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611425565b005b341561038d57600080fd5b6103d8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061169c565b6040518082815260200191505060405180910390f35b34156103f957600080fd5b61044f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080351515906020019091905050611723565b005b60008060008873ffffffffffffffffffffffffffffffffffffffff161415151561047a57600080fd5b60008773ffffffffffffffffffffffffffffffffffffffff16141515156104a057600080fd5b8367ffffffffffffffff168367ffffffffffffffff16111515156104c357600080fd5b600086141515156104d357600080fd5b60008467ffffffffffffffff1614806104f85750858467ffffffffffffffff16870210155b151561050357600080fd5b60008060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156105cd57600080fd5b6105ea838667ffffffffffffffff1661192d90919063ffffffff16565b9150610609848667ffffffffffffffff1661192d90919063ffffffff16565b905060a0604051908101604052808781526020018667ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff16815260200160008152506000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506080820151816002015590505061083d86600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461195f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f12b95d2f99d5fc2b9b56572a50adafae25a54fee212a5f365397dea9963b54fa33888a89898787604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018267ffffffffffffffff1667ffffffffffffffff16815260200197505050505050505060405180910390a15050505050505050565b60006109f8611e86565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060a06040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820154815250509050610b7181611978565b9150509392505050565b600060205282600052604060002060205281600052604060002060205280600052604060002060009250925050508060000154908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900467ffffffffffffffff16908060010160109054906101000a900467ffffffffffffffff16908060020154905085565b6000808373ffffffffffffffffffffffffffffffffffffffff1614151515610c2e57600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515610c5457600080fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015414151515610d2257600080fd5b610d2d833384611a67565b610dd6610d4b8260020154836000015461195f90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ded90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549067ffffffffffffffff0219169055600282016000905550507f95acf6574c905c09a5459c4ebd51d190525d79c5f6a58b4ad03d15261c0e9412338385604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050565b6000808373ffffffffffffffffffffffffffffffffffffffff161415151561106957600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561114857600080fd5b6102c65a03f1151561115957600080fd5b50505060405180519050151561116e57600080fd5b6111fd82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ded90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7833384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb823383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561167257600080fd5b6102c65a03f1151561168357600080fd5b50505060405180519050151561169857600080fd5b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611730848433611a67565b81156117405761173f84611425565b5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806002015481600001541415611927576000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549067ffffffffffffffff0219169055600282016000905550505b50505050565b60008082840190508367ffffffffffffffff168167ffffffffffffffff161015151561195557fe5b8091505092915050565b600082821115151561196d57fe5b818303905092915050565b6000816040015167ffffffffffffffff164210156119995760009050611a62565b816060015167ffffffffffffffff16421015156119d2576119cb8260800151836000015161195f90919063ffffffff16565b9050611a62565b611a5f8260800151611a51611a028560200151866060015167ffffffffffffffff16611e0b90919063ffffffff16565b67ffffffffffffffff16611a43611a30876020015167ffffffffffffffff164261195f90919063ffffffff16565b8760000151611e3890919063ffffffff16565b611e6b90919063ffffffff16565b61195f90919063ffffffff16565b90505b919050565b6000806000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209150611be38260a06040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152602001600282015481525050611978565b9050611bfc818360020154611ded90919063ffffffff16565b82600201819055507f91380886b3dc3bdb2a18ebf38a52b446b7dcb635a27b3da3108cfa439859f6a185858584604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a1611d6681600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ded90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000808284019050838110151515611e0157fe5b8091505092915050565b60008267ffffffffffffffff168267ffffffffffffffff1611151515611e2d57fe5b818303905092915050565b60008082840290506000841480611e595750828482811515611e5657fe5b04145b1515611e6157fe5b8091505092915050565b6000808284811515611e7957fe5b0490508091505092915050565b60a06040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff1681526020016000815250905600a165627a7a72305820e4390e1d40e4a063b5f28d565ac0886c8660b755fdfd76c2c02bcbbf486cd8170029

Swarm Source

bzzr://e4390e1d40e4a063b5f28d565ac0886c8660b755fdfd76c2c02bcbbf486cd817
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.