Contract 0x8e306b005773bee6ba6a6e8972bc79d766cc15c8

 

TxHash Block Age From To Value [TxFee]
0x0175e1ccb8b84bb688b999747e5be9c16020080b2a3f78e8f191e36ce504db9d72470452 days 21 hrs ago0x75d4f5db318baceb1cb5821f8afc63474ad68319 IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000359105
0xc1e7ddec4d7d13fc650fb8974d166986f2fcfeb5c08641441a7a041649ab0f2a72469692 days 21 hrs ago0x75d4f5db318baceb1cb5821f8afc63474ad68319 IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000071821
0xfbd3b696683f2efbc89b904093e86529ad52d2dea55115c8b184a973426e16cc708937236 days 2 hrs ago0x466505beb050587772194ae19409fef3dec9954d IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80.000146642 Ether0.000042
0xd755248a73fea0768ce422711a4b41e2cc412e725587f348a2f6a1a30e0f937a698590454 days 10 hrs ago0x61b5568f5175a41283367ec49c4b2ec90b2a26aa IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000214887
0x21b68ab26103a4e2ccf07646f370fd692f1da42204187e32cbdd3e5dc49e1dc9685093677 days 2 hrs ago0xad62d29f6e34e60e91158fa23b16da1df4ddd78c IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000287028
0x9691713aa349dd0c3788724a5a27fef58e9a7f0e03e19d77e5b27c9b06252bc8685091677 days 2 hrs ago0xad62d29f6e34e60e91158fa23b16da1df4ddd78c IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000287028
0xaf6b2c4ff14af38b1e7a2cfd3e0178908e47bde7e8978f62874d4e31694ac25a678715487 days 15 hrs ago0x2fbd3ec5bd9230954c157bc8b0a5ae2cbebf01a1 IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000357505
0x06537a6d9b12a8bccd4ff533d54c89237204854e8366fed7cc7ff6fb2efba3bd676648291 days 1 hr ago0xde1d3f6b9fe90a9b64064ce5fd7343bff0bb939b IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.00132912
0x1e2b9d59c67f561377d31b8410cdac44dfaf21fa20c958148285fcf99a972d6f676647291 days 1 hr ago0xde1d3f6b9fe90a9b64064ce5fd7343bff0bb939b IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.00132912
0xe66328af48361fd2280101ca27d36fa7756e616c329557e485b8fb7c64413eb3674096895 days 5 hrs ago0xa00e47c8fbe274ab3c24b08081d661c8536bc80c IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0002424506
0xf6539973fe935eb11117ee5454b03a273e54858be2ad88443385e8b5e7166da06711644100 days 1 hr ago0xd92a3f51e24b042feb1ee4f2423615820edf8830 IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.00059468
0x972b1f584c0d9197f033c1e07a547ba9605a4dd29cceb3aa6d7d16fd641194556674329106 days 3 hrs ago0xcaba2231bc28f0fce76fea1f97e4c9225899b4ee IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000357825
0x4f257ddee33df0d39f8220c93c768ec84457535548ce65fcff69017475d533616543394127 days 14 hrs ago0x257ea6e6f84a570ef128c65a73940877e24d9e8a IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.00080726625
0x661ccf74f812bc69ff8099b09fc86a52d58727aaf1b05c942c5a460720a47bec6539742128 days 5 hrs ago0x257ea6e6f84a570ef128c65a73940877e24d9e8a IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000502299
0xbe1124cd7123e9a1c275863beec2a4ed437b4d99b368e1f0804c45dcc03050c66478275138 days 4 hrs ago0x5b97f7286fb4ea45299692a130fa868125620547 IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000214887
0x7aed186c9a0a68672ead5c1e8fc4c850c120fa9c3790461083d7cf7737e1ac206469458139 days 14 hrs ago0x14d16982a7c8764bcf921b6419148fd60f24194a IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.000071821
0xd4f31b37284e28923ad9503cffa28eee838def3db51612ff6a086e421399e93c6440783144 days 6 hrs ago0x13370775eaa7e37df49ed4936e0503d0884b734f IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.00139184
0x91f0ac2a2e99c818f4685c4398faeefc1d106896805f7a73ea07c194486f3e6d6439687144 days 11 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0001578654
0x04e756533bb89b2a7dd1dbe2eb94aa941f6d7e54c8234256cf922383538b3e576436411144 days 23 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0001481502
0xfbf1ffc336f14947dabf19304627fd79050855b19fc688e97b2652a5f96963e16433992145 days 9 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0003326708
0x30a9da4ea252972d9f1719f5e69e4785ab15d1273d541f55a42d9e12122ad0f16433068145 days 13 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0003322044
0xa4d2b45f8cf5d0b4f3989fc550f925ec7a177a0a2d830f1579ed8186097e36706428344146 days 7 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0003323364
0x9d64fcc447ecf89f6285231378f785890a2c9dfb9fe29350a684ce2c8e1a8a326425724146 days 18 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0003216444
0xaa4217b2c7074ca724f02cf18264e9c2425bb5e3b1d18e184547a1eed65d7d226424226146 days 23 hrs ago0x7ebf523075979e6ab20c9c4b4f91c9f86e78d3fb IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0003323232
0x68293b7ed6338d185cef876f99ac7492b398bc21c3b82aa799a7284d9beeaa846423754147 days 1 hr ago0x6c2b5eaec16669a0b5eb23ed6800683e3bd9850b IN  0x8e306b005773bee6ba6a6e8972bc79d766cc15c80 Ether0.0013743912
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0xe999ac1e8065d112ff3af3d8440bde70f1cb42f1
Contract Name: MerkleMine
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
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 view 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 view 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 pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure 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 pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

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

/*
 * @title MerkleProof
 * @dev Merkle proof verification
 * @note Based on https://github.com/ameensol/merkle-tree-solidity/blob/master/src/MerkleProof.sol
 */
library MerkleProof {
  /*
   * @dev Verifies a Merkle proof proving the existence of a leaf in a Merkle tree. Assumes that each pair of leaves
   * and each pair of pre-images is sorted.
   * @param _proof Merkle proof containing sibling hashes on the branch from the leaf to the root of the Merkle tree
   * @param _root Merkle root
   * @param _leaf Leaf of Merkle tree
   */
  function verifyProof(bytes _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) {
    // Check if proof length is a multiple of 32
    if (_proof.length % 32 != 0) return false;

    bytes32 proofElement;
    bytes32 computedHash = _leaf;

    for (uint256 i = 32; i <= _proof.length; i += 32) {
      assembly {
        // Load the current element of the proof
        proofElement := mload(add(_proof, i))
      }

      if (computedHash < proofElement) {
        // Hash(current computed hash + current element of the proof)
        computedHash = keccak256(computedHash, proofElement);
      } else {
        // Hash(current element of the proof + current computed hash)
        computedHash = keccak256(proofElement, computedHash);
      }
    }

    // Check if the computed hash (root) is equal to the provided root
    return computedHash == _root;
  }
}

/**
 * @title MerkleMine
 * @dev Token distribution based on providing Merkle proofs of inclusion in genesis state to generate allocation
 */
contract MerkleMine {
    using SafeMath for uint256;

    // ERC20 token being distributed
    ERC20 public token;
    // Merkle root representing genesis state which encodes token recipients
    bytes32 public genesisRoot;
    // Total amount of tokens that can be generated
    uint256 public totalGenesisTokens;
    // Total number of recipients included in genesis state
    uint256 public totalGenesisRecipients;
    // Amount of tokens per recipient allocation. Equal to `totalGenesisTokens` / `totalGenesisRecipients`
    uint256 public tokensPerAllocation;
    // Minimum ETH balance threshold for recipients included in genesis state
    uint256 public balanceThreshold;
    // Block number of genesis - used to determine which ETH accounts are included in the genesis state
    uint256 public genesisBlock;
    // Start block where a third party caller (not the recipient) can generate and split the allocation with the recipient
    // As the current block gets closer to `callerAllocationEndBlock`, the caller receives a larger precentage of the allocation
    uint256 public callerAllocationStartBlock;
    // From this block onwards, a third party caller (not the recipient) can generate and claim the recipient's full allocation
    uint256 public callerAllocationEndBlock;
    // Number of blocks in the caller allocation period as defined by `callerAllocationEndBlock` - `callerAllocationStartBlock`
    uint256 public callerAllocationPeriod;

    // Track if the generation process is started
    bool public started;

    // Track the already generated allocations for recipients
    mapping (address => bool) public generated;

    // Check that a recipient's allocation has not been generated
    modifier notGenerated(address _recipient) {
        require(!generated[_recipient]);
        _;
    }

    // Check that the generation period is started
    modifier isStarted() {
        require(started);
        _;
    }

    // Check that the generation period is not started
    modifier isNotStarted() {
        require(!started);
        _;
    }

    event Generate(address indexed _recipient, address indexed _caller, uint256 _recipientTokenAmount, uint256 _callerTokenAmount, uint256 _block);

    /**
     * @dev MerkleMine constructor
     * @param _token ERC20 token being distributed
     * @param _genesisRoot Merkle root representing genesis state which encodes token recipients
     * @param _totalGenesisTokens Total amount of tokens that can be generated
     * @param _totalGenesisRecipients Total number of recipients included in genesis state
     * @param _balanceThreshold Minimum ETH balance threshold for recipients included in genesis state
     * @param _genesisBlock Block number of genesis - used to determine which ETH accounts are included in the genesis state
     * @param _callerAllocationStartBlock Start block where a third party caller (not the recipient) can generate and split the allocation with the recipient
     * @param _callerAllocationEndBlock From this block onwards, a third party caller (not the recipient) can generate and claim the recipient's full allocation
     */
    function MerkleMine(
        address _token,
        bytes32 _genesisRoot,
        uint256 _totalGenesisTokens,
        uint256 _totalGenesisRecipients,
        uint256 _balanceThreshold,
        uint256 _genesisBlock,
        uint256 _callerAllocationStartBlock,
        uint256 _callerAllocationEndBlock
    )
        public
    {
        // Address of token contract must not be null
        require(_token != address(0));
        // Number of recipients must be non-zero
        require(_totalGenesisRecipients > 0);
        // Genesis block must be at or before the current block
        require(_genesisBlock <= block.number);
        // Start block for caller allocation must be after current block
        require(_callerAllocationStartBlock > block.number);
        // End block for caller allocation must be after caller allocation start block
        require(_callerAllocationEndBlock > _callerAllocationStartBlock);

        token = ERC20(_token);
        genesisRoot = _genesisRoot;
        totalGenesisTokens = _totalGenesisTokens;
        totalGenesisRecipients = _totalGenesisRecipients;
        tokensPerAllocation = _totalGenesisTokens.div(_totalGenesisRecipients);
        balanceThreshold = _balanceThreshold;
        genesisBlock = _genesisBlock;
        callerAllocationStartBlock = _callerAllocationStartBlock;
        callerAllocationEndBlock = _callerAllocationEndBlock;
        callerAllocationPeriod = _callerAllocationEndBlock.sub(_callerAllocationStartBlock);
    }

    /**
     * @dev Start the generation period - first checks that this contract's balance is equal to `totalGenesisTokens`
     * The generation period must not already be started
     */
    function start() external isNotStarted {
        // Check that this contract has a sufficient balance for the generation period
        require(token.balanceOf(this) >= totalGenesisTokens);

        started = true;
    }

    /**
     * @dev Generate a recipient's token allocation. Generation period must be started. Starting from `callerAllocationStartBlock`
     * a third party caller (not the recipient) can invoke this function to generate the recipient's token
     * allocation and claim a percentage of it. The percentage of the allocation claimed by the
     * third party caller is determined by how many blocks have elapsed since `callerAllocationStartBlock`.
     * After `callerAllocationEndBlock`, a third party caller can claim the full allocation
     * @param _recipient Recipient of token allocation
     * @param _merkleProof Proof of recipient's inclusion in genesis state Merkle root
     */
    function generate(address _recipient, bytes _merkleProof) external isStarted notGenerated(_recipient) {
        // Check the Merkle proof
        bytes32 leaf = keccak256(_recipient);
        // _merkleProof must prove inclusion of _recipient in the genesis state root
        require(MerkleProof.verifyProof(_merkleProof, genesisRoot, leaf));

        generated[_recipient] = true;

        address caller = msg.sender;

        if (caller == _recipient) {
            // If the caller is the recipient, transfer the full allocation to the caller/recipient
            require(token.transfer(_recipient, tokensPerAllocation));

            Generate(_recipient, _recipient, tokensPerAllocation, 0, block.number);
        } else {
            // If the caller is not the recipient, the token allocation generation
            // can only take place if we are in the caller allocation period
            require(block.number >= callerAllocationStartBlock);

            uint256 callerTokenAmount = callerTokenAmountAtBlock(block.number);
            uint256 recipientTokenAmount = tokensPerAllocation.sub(callerTokenAmount);

            if (callerTokenAmount > 0) {
                require(token.transfer(caller, callerTokenAmount));
            }

            if (recipientTokenAmount > 0) {
                require(token.transfer(_recipient, recipientTokenAmount));
            }

            Generate(_recipient, caller, recipientTokenAmount, callerTokenAmount, block.number);
        }
    }

    /**
     * @dev Return the amount of tokens claimable by a third party caller when generating a recipient's token allocation at a given block
     * @param _blockNumber Block at which to compute the amount of tokens claimable by a third party caller
     */
    function callerTokenAmountAtBlock(uint256 _blockNumber) public view returns (uint256) {
        if (_blockNumber < callerAllocationStartBlock) {
            // If the block is before the start of the caller allocation period, the third party caller can claim nothing
            return 0;
        } else if (_blockNumber >= callerAllocationEndBlock) {
            // If the block is at or after the end block of the caller allocation period, the third party caller can claim everything
            return tokensPerAllocation;
        } else {
            // During the caller allocation period, the third party caller can claim an increasing percentage
            // of the recipient's allocation based on a linear curve - as more blocks pass in the caller allocation
            // period, the amount claimable by the third party caller increases linearly
            uint256 blocksSinceCallerAllocationStartBlock = _blockNumber.sub(callerAllocationStartBlock);
            return tokensPerAllocation.mul(blocksSinceCallerAllocationStartBlock).div(callerAllocationPeriod);
        }
    }
}

Contract ABI
[{"constant":true,"inputs":[],"name":"started","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_merkleProof","type":"bytes"}],"name":"generate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"genesisBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"generated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGenesisTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balanceThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"genesisRoot","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callerAllocationStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callerAllocationEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callerAllocationPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"callerTokenAmountAtBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGenesisRecipients","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_genesisRoot","type":"bytes32"},{"name":"_totalGenesisTokens","type":"uint256"},{"name":"_totalGenesisRecipients","type":"uint256"},{"name":"_balanceThreshold","type":"uint256"},{"name":"_genesisBlock","type":"uint256"},{"name":"_callerAllocationStartBlock","type":"uint256"},{"name":"_callerAllocationEndBlock","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":true,"name":"_caller","type":"address"},{"indexed":false,"name":"_recipientTokenAmount","type":"uint256"},{"indexed":false,"name":"_callerTokenAmount","type":"uint256"},{"indexed":false,"name":"_block","type":"uint256"}],"name":"Generate","type":"event"}]

Contract Creation Code
6060604052341561000f57600080fd5b6040516101008061099a8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051915050600160a060020a038816151561006c57600080fd5b6000851161007957600080fd5b4383111561008657600080fd5b43821161009257600080fd5b81811161009e57600080fd5b60008054600160a060020a031916600160a060020a038a161790556001879055600286905560038590556100df868664010000000061011e81026108011704565b600455600584905560068390556007829055600881905561010d81836401000000006107b961013582021704565b600955506101479650505050505050565b600080828481151561012c57fe5b04949350505050565b60008282111561014157fe5b50900390565b610844806101566000396000f3006060604052600436106100c15763ffffffff60e060020a6000350416631f2698ab81146100c65780632c84bfa6146100ed5780634cdc9c631461011a57806362bea2951461013f57806378d8e17b1461015e578063ba88544614610171578063be9a655514610184578063c317377414610197578063c7033721146101aa578063de0cf58b146101bd578063dfc10ea8146101d0578063e4cfe9eb146101e3578063f61cd7de146101f6578063fc0c546a1461020c578063fda962d31461023b575b600080fd5b34156100d157600080fd5b6100d961024e565b604051901515815260200160405180910390f35b34156100f857600080fd5b61011860048035600160a060020a03169060248035908101910135610257565b005b341561012557600080fd5b61012d61064b565b60405190815260200160405180910390f35b341561014a57600080fd5b6100d9600160a060020a0360043516610651565b341561016957600080fd5b61012d610666565b341561017c57600080fd5b61012d61066c565b341561018f57600080fd5b610118610672565b34156101a257600080fd5b61012d610717565b34156101b557600080fd5b61012d61071d565b34156101c857600080fd5b61012d610723565b34156101db57600080fd5b61012d610729565b34156101ee57600080fd5b61012d61072f565b341561020157600080fd5b61012d600435610735565b341561021757600080fd5b61021f6107a4565b604051600160a060020a03909116815260200160405180910390f35b341561024657600080fd5b61012d6107b3565b600a5460ff1681565b600a5460009081908190819060ff16151561027157600080fd5b600160a060020a0387166000908152600b6020526040902054879060ff161561029957600080fd5b87604051600160a060020a03919091166c010000000000000000000000000281526014016040518091039020945073289ba1701c2f088cf0faf8b3705246331cb8a83963101f13e288886001548960006040516020015260405160e060020a63ffffffff871602815260248101839052604481018290526060600482019081526064820185905290819060840186868082843782019150509550505050505060206040518083038186803b151561034f57600080fd5b6102c65a03f4151561036057600080fd5b50505060405180519050151561037557600080fd5b600160a060020a038089166000818152600b60205260409020805460ff1916600117905533955090851614156104935760008054600454600160a060020a039091169163a9059cbb918b916040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561040a57600080fd5b6102c65a03f1151561041b57600080fd5b50505060405180519050151561043057600080fd5b87600160a060020a031688600160a060020a03167f5a85ed1ee645c51ffdeeb66ec8978efd1c03d5069a212315c8b430756d848d6960045460004360405180848152602001838152602001828152602001935050505060405180910390a3610641565b6007544310156104a257600080fd5b6104ab43610735565b6004549093506104c1908463ffffffff6107b916565b915060008311156105545760008054600160a060020a03169063a9059cbb90869086906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561052e57600080fd5b6102c65a03f1151561053f57600080fd5b50505060405180519050151561055457600080fd5b60008211156105e55760008054600160a060020a03169063a9059cbb908a9085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156105bf57600080fd5b6102c65a03f115156105d057600080fd5b5050506040518051905015156105e557600080fd5b83600160a060020a031688600160a060020a03167f5a85ed1ee645c51ffdeeb66ec8978efd1c03d5069a212315c8b430756d848d6984864360405180848152602001838152602001828152602001935050505060405180910390a35b5050505050505050565b60065481565b600b6020526000908152604090205460ff1681565b60025481565b60045481565b600a5460ff161561068257600080fd5b60025460008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106e057600080fd5b6102c65a03f115156106f157600080fd5b505050604051805190501015151561070857600080fd5b600a805460ff19166001179055565b60055481565b60015481565b60075481565b60085481565b60095481565b60008060075483101561074b576000915061079e565b600854831061075e57600454915061079e565b60075461077290849063ffffffff6107b916565b905061079b60095461078f836004546107cb90919063ffffffff16565b9063ffffffff61080116565b91505b50919050565b600054600160a060020a031681565b60035481565b6000828211156107c557fe5b50900390565b6000808315156107de57600091506107fa565b508282028284828115156107ee57fe5b04146107f657fe5b8091505b5092915050565b600080828481151561080f57fe5b049493505050505600a165627a7a723058205d35076b8b058765077c4b44ba0e998f34f5dd270b87b2ee61142443fb50b8620029000000000000000000000000ecb81b96e169882b8d6276b87a19cb47efbd1c4a53f35a304a1e1e20d6648e09bb3073ccd44a5bf1638a01355897a71e801879f8000000000000000000000000000000000000000000053f54aa8434ecc3d00000000000000000000000000000000000000000000000000000000000000027a4b7000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000050538900000000000000000000000000000000000000000000000000000000005c0f1700000000000000000000000000000000000000000000000000000000008234b7


   Library Used
MerkleProof : 0x289ba1701c2f088cf0faf8b3705246331cb8a839

   Swarm Source:
bzzr://5d35076b8b058765077c4b44ba0e998f34f5dd270b87b2ee61142443fb50b862
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.