Latest 25 transactions from a total of 1131 transactions

TxHash Age From To Value [TxFee]
0x8d24104ada135a3c7de55e9850be2d1766d20ddf832af3d34c6cbb8997d748237 days 4 hrs ago0x9ddacc8b0a1856ce3bf5c550503ab9137aacaac3  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000052487
0xbf9c67196272a34e3fe707fb6f6bcd161d75b0288ac1710e2336693677c5f13c7 days 4 hrs ago0x9ddacc8b0a1856ce3bf5c550503ab9137aacaac3  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000052487
0x709e186ffe857e19e4b7f5d0ef5b02e8d3025d8168b2f118081a29e27cec4bb37 days 4 hrs ago0xa19f5e1e0a30477ef41fa382638e1dcac608d487  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000052487
0x0f7781bf0f6d0fe81e53fa5adcf4dc3777f7789d990369d2bd0961aeb32fc4868 days 3 hrs ago0xa19f5e1e0a30477ef41fa382638e1dcac608d487  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000054137
0x611d2a7a9d3b5be1bff0f14f161faf363ebb50a4b688bc47de4e2b41aa6dc52a8 days 3 hrs ago0xa19f5e1e0a30477ef41fa382638e1dcac608d487  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.00143666
0x35b8361ab8349b07e34fb3d103d3b92cdcbdf609106d07253d393c607b0999c58 days 3 hrs ago0xa19f5e1e0a30477ef41fa382638e1dcac608d487  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000054201
0xa234dee6fb5b057afe98b239eebe987a9161db78043155c4a3816acff312b1788 days 4 hrs ago0x9ddacc8b0a1856ce3bf5c550503ab9137aacaac3  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000053753
0x5f94bf8c7d369f26c462ac43013a64577feab33149e9c3b8287c8c1072c330b68 days 4 hrs ago0x9ddacc8b0a1856ce3bf5c550503ab9137aacaac3  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000054137
0x62c19bf743593d97181b33a68b3c2b453f6615ff871be060ba8b782d68de96c313 days 14 hrs ago0xa19f5e1e0a30477ef41fa382638e1dcac608d487  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000086833
0xb3b4736ccb0f00fe79d48d876703ff01865b006e043a3fd23c00b784a45e7b2f32 days 6 mins ago0xf6da68519f78b0d0bc93c701e86affcb75c92428  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049209
0x0f10b81074e1cf8d4da99f59e74f7577ff1f5f1e2c6437f6dc01c4ce4f2250ff35 days 5 hrs ago0xb9eb427911bab56e8b7683cc3d82821b44d2c7cc  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0x729a3c5fe8d5bddca4ff7bc02959e458539dfb1cb905f1c9aa8745efe5fb5d1255 days 22 hrs ago0x22e82e84d211341b867839dfc45ea3280b834fcc  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000048889
0x6370fa5ef5d55460a553798e92e02d12a4bc845f539b33af860f4767cce06afe57 days 19 hrs ago0xe6b9ccc9c98083ee55d6eaf27ce6a517fac33b35  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0x836806b8a4506b90be31c7fd0bda81951d0eb471ca7f97d76a8ca4233a93230262 days 4 hrs ago0x6d22e49e5cf61dd056a12abdf9361963e7d39844  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000295638
0x782a6ad039c9fe2cb09c6cb77691348d20af2729fd74a98c6c1515f8d46ad83664 days 8 hrs ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000062769
0xb9ec4b4956cfa8dbca78d9ca96103b2845ea173b9dc763c5d82d3dc0ec896c9664 days 8 hrs ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000033287
0xd800fb2a668b446d2862fcaf739b5cad9503cec708a329666528e95cc9e33d4a66 days 18 hrs ago0xb71455b02bb8cd42552744b8bd720763711d6d66  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0x0eec894c0966bb75b7069b2207ea598d5811d0f1023736e56ca7d0b6527aefe566 days 18 hrs ago0xb71455b02bb8cd42552744b8bd720763711d6d66  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0x7fbcb58c519e46c2f4a7c13d6c532d9d11b75c12ff2ee94241bde8ad3ffd628869 days 23 hrs ago0x35f8220bc83577458aea4a1085a8b832dea79b7a  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0x22430e9fb7ac77dad5a7d952b5c74b416c70be5947f7fce0643c5b46d4ce88ed73 days 20 hrs ago0x8b00868fb5f0d45a462be8817ca116f7b7ecabc5  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0xd024d1649ee94d826f484b2d08b6eab0280163390dfea66cad75ff052bc95af273 days 20 hrs ago0x8b00868fb5f0d45a462be8817ca116f7b7ecabc5  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000049273
0xe113ec565d91d20fbceb399ae7ae7ce6fe720fc1abce58372e77a95275250f3591 days 1 hr ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000048953
0x0cc736b53c944a1989901da113c3e9d5f1d52f3c78ec9f62dc5cca9956831de392 days 2 hrs ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000033287
0x4ffb4253cdfc1d204406ef9597feae5e33ce8d7c20fda8b6490b53ff5380f06f92 days 3 hrs ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000067552
0xd823063b185e3b428047f5970cb486d17b71660945e165f2d9e6bf75bb1ae69c92 days 5 hrs ago0x9751034c228adba308822c095d21dd2ade0e4686  IN   0x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether0.000048953
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x8d24104ada135a3c7de55e9850be2d1766d20ddf832af3d34c6cbb8997d7482350033327 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x8d24104ada135a3c7de55e9850be2d1766d20ddf832af3d34c6cbb8997d7482350033327 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0xbf9c67196272a34e3fe707fb6f6bcd161d75b0288ac1710e2336693677c5f13c50033287 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0xbf9c67196272a34e3fe707fb6f6bcd161d75b0288ac1710e2336693677c5f13c50033287 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x709e186ffe857e19e4b7f5d0ef5b02e8d3025d8168b2f118081a29e27cec4bb350033217 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x709e186ffe857e19e4b7f5d0ef5b02e8d3025d8168b2f118081a29e27cec4bb350033217 days 4 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x1cc91b1ebf78d980e2f2690776985734a343eb46fcbe18657e639a28d1be979349970078 days 3 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x611d2a7a9d3b5be1bff0f14f161faf363ebb50a4b688bc47de4e2b41aa6dc52a49969948 days 3 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x611d2a7a9d3b5be1bff0f14f161faf363ebb50a4b688bc47de4e2b41aa6dc52a49969948 days 3 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x7a512e351abd6d75eb93b13fd588c18fabad1dcfdbcef7f422981889264fc9b249966928 days 4 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0xb6528af1116fe8fd4c0976cca4bf562cea256a1b27656339ab60d8b498ea5fa649966758 days 4 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x2635da269c8b30d6a3d73601c8c1e72ca6f1860426c58e3909f799383a6c73b849965388 days 5 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x15ef79551e42ff068406e8df278da88f3f6b55aefa6075a79a94363cbc0a460749964978 days 5 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0xb971b657fb224009642196943bda7ee2d8f592956f46fb16c990e9e9b400f70c49964678 days 5 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x641c187b559abefaec0ec3a2c05f169990fd34a35f13c1f69fca1312b96306f849964488 days 5 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x1857325c0dd4c308c407a85064ea0595c600bcab714b43a8341ce26ce2e61b12497702311 days 5 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x51107c26e9f0c5717f875b06bd99c219868ff923d4c731f97d9b4c0bac582f68496288613 days 6 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x6e0e5a7c26783012e9d6bda84017160c7cfe7cfe55b645cd678a7825ca96ae5d496068913 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x0e5c6bb38c905994be08962f7721e7e192327ceaab4e32bacad88b1b44324fc7496068713 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x049a1545d7ce97ee683d1af72df76dfbcdce3792f1e010e0b92255bd2e1882c6496067013 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x62c19bf743593d97181b33a68b3c2b453f6615ff871be060ba8b782d68de96c3496066713 days 14 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0x62c19bf743593d97181b33a68b3c2b453f6615ff871be060ba8b782d68de96c3496066713 days 14 hrs ago0x74434527b8e6c8296506d61d0faf3d18c9e4649a0xff24d15afb9eb080c089053be99881dd18aa10900 Ether
0xccc51c7996ff9a73e87d8d11735515df654e2cc1f3c38d137977b75f97c297c2496066313 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0xf5dd23fd6faec562120843eeaa02b8072c76c2951f193b30a65786e6100b1ce5496064513 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
0x89632ca124e49de8031bf40feca77309cf61b1e73adf11c6dfba320d2ef1a55b496063013 days 14 hrs ago0xff24d15afb9eb080c089053be99881dd18aa10900x74434527b8e6c8296506d61d0faf3d18c9e4649a0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: RaidenMicroTransferChannels
Compiler Version: v0.4.17+commit.bdeb9e52
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.17;

library ECVerify {

    function ecverify(bytes32 hash, bytes signature) internal pure returns (address signature_address) {
        require(signature.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;

        // The signature format is a compact form of:
        //   {bytes32 r}{bytes32 s}{uint8 v}
        // Compact means, uint8 is not padded to 32 bytes.
        assembly {
            r := mload(add(signature, 32))
            s := mload(add(signature, 64))

            // Here we are loading the last 32 bytes, including 31 bytes of 's'.
            v := byte(0, mload(add(signature, 96)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible
        if (v < 27) {
            v += 27;
        }

        require(v == 27 || v == 28);

        signature_address = ecrecover(hash, v, r, s);

        // ecrecover returns zero on error
        require(signature_address != 0x0);

        return signature_address;
    }
}

/// @title Base Token contract - Functions to be implemented by token contracts.
contract Token {
    /*
     * Implements ERC 20 standard.
     * https://github.com/ethereum/EIPs/blob/f90864a3d2b2b45c4decf95efd26b3f0c276051a/EIPS/eip-20-token-standard.md
     * https://github.com/ethereum/EIPs/issues/20
     *
     *  Added support for the ERC 223 "tokenFallback" method in a "transfer" function with a payload.
     *  https://github.com/ethereum/EIPs/issues/223
     */

    /*
     * This is a slight change to the ERC20 base standard.
     * function totalSupply() constant returns (uint256 supply);
     * is replaced with:
     * uint256 public totalSupply;
     * This automatically creates a getter function for the totalSupply.
     * This is moved to the base contract since public getter functions are not
     * currently recognised as an implementation of the matching abstract
     * function by the compiler.
     */
    uint256 public totalSupply;

    /*
     * NOTE:
     * The following variables were optional. Now, they are included in ERC 223 interface.
     * They allow one to customise the token contract & in no way influences the core functionality.
     */
    string public name;                   //fancy name: eg Simon Bucks
    uint8 public decimals;                //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
    string public symbol;                 //An identifier: eg SBX


    /// @param _owner The address from which the balance will be retrieved.
    /// @return The balance.
    function balanceOf(address _owner) public constant returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`.
    /// @param _to The address of the recipient.
    /// @param _value The amount of token to be transferred.
    /// @param _data Data to be sent to `tokenFallback.
    /// @return Returns success of function call.
    function transfer(address _to, uint256 _value, bytes _data) public returns (bool success);

    /// @notice send `_value` token to `_to` from `msg.sender`.
    /// @param _to The address of the recipient.
    /// @param _value The amount of token to be transferred.
    /// @return Whether the transfer was successful or not.
    function transfer(address _to, uint256 _value) public returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`.
    /// @param _from The address of the sender.
    /// @param _to The address of the recipient.
    /// @param _value The amount of token to be transferred.
    /// @return Whether the transfer was successful or not.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens.
    /// @param _spender The address of the account able to transfer the tokens.
    /// @param _value The amount of tokens to be approved for transfer.
    /// @return Whether the approval was successful or not.
    function approve(address _spender, uint256 _value) public returns (bool success);

    /// @param _owner The address of the account owning tokens.
    /// @param _spender The address of the account able to transfer the tokens.
    /// @return Amount of remaining tokens allowed to spent.
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);

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

    // There is no ERC223 compatible Transfer event, with `_data` included.
}


/// @title Raiden MicroTransfer Channels Contract.
contract RaidenMicroTransferChannels {

    /*
     *  Data structures
     */

    // The only role of the owner_address is to add or remove trusted contracts
    address public owner_address;

    // Number of blocks to wait from an uncooperativeClose initiated by the sender
    // in order to give the receiver a chance to respond with a balance proof
    // in case the sender cheats. After the challenge period, the sender can settle
    // and delete the channel.
    uint32 public challenge_period;

    // Contract semantic version
    string public constant version = '0.2.0';

    // We temporarily limit total token deposits in a channel to 100 tokens with 18 decimals.
    // This was calculated just for RDN with its current (as of 30/11/2017) price and should
    // not be considered to be the same for other tokens.
    // This is just for the bug bounty release, as a safety measure.
    uint256 public constant channel_deposit_bugbounty_limit = 10 ** 18 * 100;

    Token public token;

    mapping (bytes32 => Channel) public channels;
    mapping (bytes32 => ClosingRequest) public closing_requests;
    mapping (address => bool) public trusted_contracts;
    mapping (bytes32 => uint192) public withdrawn_balances;

    // 24 bytes (deposit) + 4 bytes (block number)
    struct Channel {
        // uint192 is the maximum uint size needed for deposit based on a
        // 10^8 * 10^18 token totalSupply.
        uint192 deposit;

        // Block number at which the channel was opened. Used in creating
        // a unique identifier for the channel between a sender and receiver.
        // Supports creation of multiple channels between the 2 parties and prevents
        // replay of messages in later channels.
        uint32 open_block_number;
    }

    // 24 bytes (deposit) + 4 bytes (block number)
    struct ClosingRequest {
        // Number of tokens owed by the sender when closing the channel.
        uint192 closing_balance;

        // Block number at which the challenge period ends, in case it has been initiated.
        uint32 settle_block_number;
    }

    /*
     * Modifiers
     */

    modifier isOwner() {
        require(msg.sender == owner_address);
        _;
    }

    modifier isTrustedContract() {
        require(trusted_contracts[msg.sender]);
        _;
    }

    /*
     *  Events
     */

    event ChannelCreated(
        address indexed _sender_address,
        address indexed _receiver_address,
        uint192 _deposit);
    event ChannelToppedUp (
        address indexed _sender_address,
        address indexed _receiver_address,
        uint32 indexed _open_block_number,
        uint192 _added_deposit);
    event ChannelCloseRequested(
        address indexed _sender_address,
        address indexed _receiver_address,
        uint32 indexed _open_block_number,
        uint192 _balance);
    event ChannelSettled(
        address indexed _sender_address,
        address indexed _receiver_address,
        uint32 indexed _open_block_number,
        uint192 _balance,
        uint192 _receiver_tokens);
    event ChannelWithdraw(
        address indexed _sender_address,
        address indexed _receiver_address,
        uint32 indexed _open_block_number,
        uint192 _withdrawn_balance);
    event TrustedContract(
        address indexed _trusted_contract_address,
        bool _trusted_status);


    /*
     *  Constructor
     */

    /// @notice Constructor for creating the uRaiden microtransfer channels contract.
    /// @param _token_address The address of the Token used by the uRaiden contract.
    /// @param _challenge_period A fixed number of blocks representing the challenge period.
    /// We enforce a minimum of 500 blocks waiting period.
    /// after a sender requests the closing of the channel without the receiver's signature.
    /// @param _trusted_contracts Array of contract addresses that can be trusted to
    /// open and top up channels on behalf of a sender.
    function RaidenMicroTransferChannels(
        address _token_address,
        uint32 _challenge_period,
        address[] _trusted_contracts)
        public
    {
        require(_token_address != 0x0);
        require(addressHasCode(_token_address));
        require(_challenge_period >= 500);

        token = Token(_token_address);

        // Check if the contract is indeed a token contract
        require(token.totalSupply() > 0);

        challenge_period = _challenge_period;
        owner_address = msg.sender;
        addTrustedContracts(_trusted_contracts);
    }

    /*
     *  External functions
     */

    /// @notice Opens a new channel or tops up an existing one, compatibility with ERC 223.
    /// @dev Can only be called from the trusted Token contract.
    /// @param _sender_address The address that sent the tokens to this contract.
    /// @param _deposit The amount of tokens that the sender escrows.
    /// @param _data Data needed for either creating a channel or topping it up.
    /// It always contains the sender and receiver addresses +/- a block number.
    function tokenFallback(address _sender_address, uint256 _deposit, bytes _data) external {
        // Make sure we trust the token
        require(msg.sender == address(token));

        uint192 deposit = uint192(_deposit);
        require(deposit == _deposit);

        // Create channel - sender address + receiver address = 2 * 20 bytes
        // Top up channel - sender address + receiver address + block number = 2 * 20 + 4 bytes
        uint length = _data.length;
        require(length == 40 || length == 44);

        // Offset of 32 bytes, representing _data.length
        address channel_sender_address = address(addressFromBytes(_data, 0x20));

        // The channel can be opened by the sender or by a trusted contract
        require(_sender_address == channel_sender_address || trusted_contracts[_sender_address]);

        // Offset of 32 bytes (data.length) + 20 bytes (sender address)
        address channel_receiver_address = address(addressFromBytes(_data, 0x34));

        if (length == 40) {
            createChannelPrivate(channel_sender_address, channel_receiver_address, deposit);
        } else {
            // Offset of: 32 bytes (_data.length) + 20 bytes (sender address)
            // + 20 bytes (receiver address)
            uint32 open_block_number = uint32(blockNumberFromBytes(_data, 0x48));
            updateInternalBalanceStructs(
                channel_sender_address,
                channel_receiver_address,
                open_block_number,
                deposit
            );
        }
    }

    /// @notice Creates a new channel between `msg.sender` and `_receiver_address` and transfers
    /// the `_deposit` token deposit to this contract. Compatibility with ERC20 tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _deposit The amount of tokens that the sender escrows.
    function createChannel(address _receiver_address, uint192 _deposit) external {
        createChannelPrivate(msg.sender, _receiver_address, _deposit);

        // transferFrom deposit from msg.sender to contract
        // ! needs prior approval from msg.sender
        require(token.transferFrom(msg.sender, address(this), _deposit));
    }

    /// @notice Function that allows a delegate contract to create a new channel between
    /// `_sender_address` and `_receiver_address` and transfers the token deposit to this contract.
    /// Can only be called by a trusted contract. Compatibility with ERC20 tokens.
    /// @param _sender_address The sender's address in behalf of whom the delegate sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _deposit The amount of tokens that the sender escrows.
    function createChannelDelegate(
        address _sender_address,
        address _receiver_address,
        uint192 _deposit)
        isTrustedContract
        external
    {
        createChannelPrivate(_sender_address, _receiver_address, _deposit);

        // transferFrom deposit from msg.sender to contract
        // ! needs prior approval from msg.sender
        require(token.transferFrom(msg.sender, address(this), _deposit));
    }

    /// @notice Increase the channel deposit with `_added_deposit`.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _added_deposit The added token deposit with which the current deposit is increased.
    function topUp(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _added_deposit)
        external
    {
        updateInternalBalanceStructs(
            msg.sender,
            _receiver_address,
            _open_block_number,
            _added_deposit
        );

        // transferFrom deposit from msg.sender to contract
        // ! needs prior approval from msg.sender
        // Do transfer after any state change
        require(token.transferFrom(msg.sender, address(this), _added_deposit));
    }

    /// @notice Function that allows a delegate contract to increase the channel deposit
    /// with `_added_deposit`. Can only be called by a trusted contract. Compatibility with ERC20 tokens.
    /// @param _sender_address The sender's address in behalf of whom the delegate sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _added_deposit The added token deposit with which the current deposit is increased.
    function topUpDelegate(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _added_deposit)
        isTrustedContract
        external
    {
        updateInternalBalanceStructs(
            _sender_address,
            _receiver_address,
            _open_block_number,
            _added_deposit
        );

        // transferFrom deposit from msg.sender to contract
        // ! needs prior approval from the trusted contract
        // Do transfer after any state change
        require(token.transferFrom(msg.sender, address(this), _added_deposit));
    }

    /// @notice Allows channel receiver to withdraw tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance Partial or total amount of tokens owed by the sender to the receiver.
    /// Has to be smaller or equal to the channel deposit. Has to match the balance value from
    /// `_balance_msg_sig` - the balance message signed by the sender.
    /// Has to be smaller or equal to the channel deposit.
    /// @param _balance_msg_sig The balance message signed by the sender.
    function withdraw(
        uint32 _open_block_number,
        uint192 _balance,
        bytes _balance_msg_sig)
        external
    {
        require(_balance > 0);

        // Derive sender address from signed balance proof
        address sender_address = extractBalanceProofSignature(
            msg.sender,
            _open_block_number,
            _balance,
            _balance_msg_sig
        );

        bytes32 key = getKey(sender_address, msg.sender, _open_block_number);

        // Make sure the channel exists
        require(channels[key].open_block_number > 0);

        // Make sure the channel is not in the challenge period
        require(closing_requests[key].settle_block_number == 0);

        require(_balance <= channels[key].deposit);
        require(withdrawn_balances[key] < _balance);

        uint192 remaining_balance = _balance - withdrawn_balances[key];
        withdrawn_balances[key] = _balance;

        // Send the remaining balance to the receiver
        require(token.transfer(msg.sender, remaining_balance));

        ChannelWithdraw(sender_address, msg.sender, _open_block_number, remaining_balance);
    }

    /// @notice Function called by the sender, receiver or a delegate, with all the needed
    /// signatures to close the channel and settle immediately.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig The balance message signed by the sender.
    /// @param _closing_sig The receiver's signed balance message, containing the sender's address.
    function cooperativeClose(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance,
        bytes _balance_msg_sig,
        bytes _closing_sig)
        external
    {
        // Derive sender address from signed balance proof
        address sender = extractBalanceProofSignature(
            _receiver_address,
            _open_block_number,
            _balance,
            _balance_msg_sig
        );

        // Derive receiver address from closing signature
        address receiver = extractClosingSignature(
            sender,
            _open_block_number,
            _balance,
            _closing_sig
        );
        require(receiver == _receiver_address);

        // Both signatures have been verified and the channel can be settled.
        settleChannel(sender, receiver, _open_block_number, _balance);
    }

    /// @notice Sender requests the closing of the channel and starts the challenge period.
    /// This can only happen once.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between
    /// the sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    function uncooperativeClose(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance)
        external
    {
        bytes32 key = getKey(msg.sender, _receiver_address, _open_block_number);

        require(channels[key].open_block_number > 0);
        require(closing_requests[key].settle_block_number == 0);
        require(_balance <= channels[key].deposit);

        // Mark channel as closed
        closing_requests[key].settle_block_number = uint32(block.number) + challenge_period;
        require(closing_requests[key].settle_block_number > block.number);
        closing_requests[key].closing_balance = _balance;
        ChannelCloseRequested(msg.sender, _receiver_address, _open_block_number, _balance);
    }


    /// @notice Function called by the sender after the challenge period has ended, in order to
    /// settle and delete the channel, in case the receiver has not closed the channel himself.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between
    /// the sender and receiver was created.
    function settle(address _receiver_address, uint32 _open_block_number) external {
        bytes32 key = getKey(msg.sender, _receiver_address, _open_block_number);

        // Make sure an uncooperativeClose has been initiated
        require(closing_requests[key].settle_block_number > 0);

        // Make sure the challenge_period has ended
	    require(block.number > closing_requests[key].settle_block_number);

        settleChannel(msg.sender, _receiver_address, _open_block_number,
            closing_requests[key].closing_balance
        );
    }

    /// @notice Function for retrieving information about a channel.
    /// @param _sender_address The address that sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @return Channel information: unique_identifier, deposit, settle_block_number,
    /// closing_balance, withdrawn balance).
    function getChannelInfo(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number)
        external
        view
        returns (bytes32, uint192, uint32, uint192, uint192)
    {
        bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);
        require(channels[key].open_block_number > 0);

        return (
            key,
            channels[key].deposit,
            closing_requests[key].settle_block_number,
            closing_requests[key].closing_balance,
            withdrawn_balances[key]
        );
    }

    /*
     *  Public functions
     */

    /// @notice Function for adding trusted contracts. Can only be called by owner_address.
    /// @param _trusted_contracts Array of contract addresses that can be trusted to
    /// open and top up channels on behalf of a sender.
    function addTrustedContracts(address[] _trusted_contracts) isOwner public {
        for (uint256 i = 0; i < _trusted_contracts.length; i++) {
            if (addressHasCode(_trusted_contracts[i])) {
                trusted_contracts[_trusted_contracts[i]] = true;
                TrustedContract(_trusted_contracts[i], true);
            }
        }
    }

    /// @notice Function for removing trusted contracts. Can only be called by owner_address.
    /// @param _trusted_contracts Array of contract addresses to be removed from
    /// the trusted_contracts mapping.
    function removeTrustedContracts(address[] _trusted_contracts) isOwner public {
        for (uint256 i = 0; i < _trusted_contracts.length; i++) {
            if (trusted_contracts[_trusted_contracts[i]]) {
                trusted_contracts[_trusted_contracts[i]] = false;
                TrustedContract(_trusted_contracts[i], false);
            }
        }
    }

    /// @notice Returns the sender address extracted from the balance proof.
    /// dev Works with eth_signTypedData https://github.com/ethereum/EIPs/pull/712.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig The balance message signed by the sender.
    /// @return Address of the balance proof signer.
    function extractBalanceProofSignature(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance,
        bytes _balance_msg_sig)
        public
        view
        returns (address)
    {
        // The variable names from below will be shown to the sender when signing
        // the balance proof, so they have to be kept in sync with the Dapp client.
        // The hashed strings should be kept in sync with this function's parameters
        // (variable names and types).
        // ! Note that EIP712 might change how hashing is done, triggering a
        // new contract deployment with updated code.
        bytes32 message_hash = keccak256(
            keccak256(
                'string message_id',
                'address receiver',
                'uint32 block_created',
                'uint192 balance',
                'address contract'
            ),
            keccak256(
                'Sender balance proof signature',
                _receiver_address,
                _open_block_number,
                _balance,
                address(this)
            )
        );

        // Derive address from signature
        address signer = ECVerify.ecverify(message_hash, _balance_msg_sig);
        return signer;
    }

    /// @dev Returns the receiver address extracted from the closing signature.
    /// Works with eth_signTypedData https://github.com/ethereum/EIPs/pull/712.
    /// @param _sender_address The address that sends tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _closing_sig The receiver's signed balance message, containing the sender's address.
    /// @return Address of the closing signature signer.
    function extractClosingSignature(
        address _sender_address,
        uint32 _open_block_number,
        uint192 _balance,
        bytes _closing_sig)
        public
        view
        returns (address)
    {
        // The variable names from below will be shown to the sender when signing
        // the balance proof, so they have to be kept in sync with the Dapp client.
        // The hashed strings should be kept in sync with this function's parameters
        // (variable names and types).
        // ! Note that EIP712 might change how hashing is done, triggering a
        // new contract deployment with updated code.
        bytes32 message_hash = keccak256(
            keccak256(
                'string message_id',
                'address sender',
                'uint32 block_created',
                'uint192 balance',
                'address contract'
            ),
            keccak256(
                'Receiver closing signature',
                _sender_address,
                _open_block_number,
                _balance,
                address(this)
            )
        );

        // Derive address from signature
        address signer = ECVerify.ecverify(message_hash, _closing_sig);
        return signer;
    }

    /// @notice Returns the unique channel identifier used in the contract.
    /// @param _sender_address The address that sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @return Unique channel identifier.
    function getKey(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number)
        public
        pure
        returns (bytes32 data)
    {
        return keccak256(_sender_address, _receiver_address, _open_block_number);
    }

    /*
     *  Private functions
     */

    /// @dev Creates a new channel between a sender and a receiver.
    /// @param _sender_address The address that sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _deposit The amount of tokens that the sender escrows.
    function createChannelPrivate(
        address _sender_address,
        address _receiver_address,
        uint192 _deposit)
        private
    {
        require(_deposit <= channel_deposit_bugbounty_limit);

        uint32 open_block_number = uint32(block.number);

        // Create unique identifier from sender, receiver and current block number
        bytes32 key = getKey(_sender_address, _receiver_address, open_block_number);

        require(channels[key].deposit == 0);
        require(channels[key].open_block_number == 0);
        require(closing_requests[key].settle_block_number == 0);

        // Store channel information
        channels[key] = Channel({deposit: _deposit, open_block_number: open_block_number});
        ChannelCreated(_sender_address, _receiver_address, _deposit);
    }

    /// @dev Updates internal balance Structures when the sender adds tokens to the channel.
    /// @param _sender_address The address that sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _added_deposit The added token deposit with which the current deposit is increased.
    function updateInternalBalanceStructs(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _added_deposit)
        private
    {
        require(_added_deposit > 0);
        require(_open_block_number > 0);

        bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);

        require(channels[key].open_block_number > 0);
        require(closing_requests[key].settle_block_number == 0);
        require(channels[key].deposit + _added_deposit <= channel_deposit_bugbounty_limit);

        channels[key].deposit += _added_deposit;
        assert(channels[key].deposit >= _added_deposit);
        ChannelToppedUp(_sender_address, _receiver_address, _open_block_number, _added_deposit);
    }

    /// @dev Deletes the channel and settles by transfering the balance to the receiver
    /// and the rest of the deposit back to the sender.
    /// @param _sender_address The address that sends tokens.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    function settleChannel(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance)
        private
    {
        bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);
        Channel memory channel = channels[key];

        require(channel.open_block_number > 0);
        require(_balance <= channel.deposit);
        require(withdrawn_balances[key] <= _balance);

        // Remove closed channel structures
        // channel.open_block_number will become 0
        // Change state before transfer call
        delete channels[key];
        delete closing_requests[key];

        // Send the unwithdrawn _balance to the receiver
        uint192 receiver_remaining_tokens = _balance - withdrawn_balances[key];
        require(token.transfer(_receiver_address, receiver_remaining_tokens));

        // Send deposit - balance back to sender
        require(token.transfer(_sender_address, channel.deposit - _balance));

        ChannelSettled(
            _sender_address,
            _receiver_address,
            _open_block_number,
            _balance,
            receiver_remaining_tokens
        );
    }

    /*
     *  Internal functions
     */

    /// @dev Internal function for getting an address from tokenFallback data bytes.
    /// @param data Bytes received.
    /// @param offset Number of bytes to offset.
    /// @return Extracted address.
    function addressFromBytes (bytes data, uint256 offset) internal pure returns (address) {
        bytes20 extracted_address;
        assembly {
            extracted_address := mload(add(data, offset))
        }
        return address(extracted_address);
    }

    /// @dev Internal function for getting the block number from tokenFallback data bytes.
    /// @param data Bytes received.
    /// @param offset Number of bytes to offset.
    /// @return Block number.
    function blockNumberFromBytes(bytes data, uint256 offset) internal pure returns (uint32) {
        bytes4 block_number;
        assembly {
            block_number := mload(add(data, offset))
        }
        return uint32(block_number);
    }

    /// @dev Check if a contract exists.
    /// @param _contract The address of the contract to check for.
    /// @return True if a contract exists, false otherwise.
    function addressHasCode(address _contract) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(_contract)
        }

        return size > 0;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_added_deposit","type":"uint192"}],"name":"topUp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"challenge_period","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getChannelInfo","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint192"},{"name":"","type":"uint32"},{"name":"","type":"uint192"},{"name":"","type":"uint192"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"extractBalanceProofSignature","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"},{"name":"_closing_sig","type":"bytes"}],"name":"cooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_closing_sig","type":"bytes"}],"name":"extractClosingSignature","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trusted_contracts","type":"address[]"}],"name":"removeTrustedContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawn_balances","outputs":[{"name":"","type":"uint192"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"}],"name":"uncooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"channel_deposit_bugbounty_limit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"closing_requests","outputs":[{"name":"closing_balance","type":"uint192"},{"name":"settle_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_added_deposit","type":"uint192"}],"name":"topUpDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"deposit","type":"uint192"},{"name":"open_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getKey","outputs":[{"name":"data","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trusted_contracts","type":"address[]"}],"name":"addTrustedContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"trusted_contracts","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_deposit","type":"uint192"}],"name":"createChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_deposit","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_deposit","type":"uint192"}],"name":"createChannelDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_token_address","type":"address"},{"name":"_challenge_period","type":"uint32"},{"name":"_trusted_contracts","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender_address","type":"address"},{"indexed":true,"name":"_receiver_address","type":"address"},{"indexed":false,"name":"_deposit","type":"uint192"}],"name":"ChannelCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender_address","type":"address"},{"indexed":true,"name":"_receiver_address","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_added_deposit","type":"uint192"}],"name":"ChannelToppedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender_address","type":"address"},{"indexed":true,"name":"_receiver_address","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_balance","type":"uint192"}],"name":"ChannelCloseRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender_address","type":"address"},{"indexed":true,"name":"_receiver_address","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_balance","type":"uint192"},{"indexed":false,"name":"_receiver_tokens","type":"uint192"}],"name":"ChannelSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender_address","type":"address"},{"indexed":true,"name":"_receiver_address","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_withdrawn_balance","type":"uint192"}],"name":"ChannelWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_trusted_contract_address","type":"address"},{"indexed":false,"name":"_trusted_status","type":"bool"}],"name":"TrustedContract","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60405162003aa838038062003aa88339810160405280805190602001909190805190602001909190805182019190505060008373ffffffffffffffffffffffffffffffffffffffff16141515156200006757600080fd5b62000086836200022e6401000000000262003351176401000000009004565b15156200009257600080fd5b6101f48263ffffffff1610151515620000aa57600080fd5b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200017c57600080fd5b6102c65a03f115156200018e57600080fd5b50505060405180519050111515620001a557600080fd5b81600060146101000a81548163ffffffff021916908363ffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200022581620002416401000000000262001e3b176401000000009004565b505050620003d9565b600080823b905060008111915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200029f57600080fd5b600090505b8151811015620003d557620002e58282815181101515620002c157fe5b906020019060200201516200022e6401000000000262003351176401000000009004565b15620003c75760016004600084848151811015156200030057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081818151811015156200036a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fe2ad9d0600e2a93ef46991efd2c22f65f9ebe472487cc7551647bc52d79328996001604051808215151515815260200191505060405180910390a25b8080600101915050620002a4565b5050565b6136bf80620003e96000396000f3006060604052361561013c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063016a8cf6146101415780630a00840c146101ac5780630eba6b06146101e15780631ac25e99146103285780631c6f609b146104165780631d8ceb44146104a95780631f52cc351461059757806322a3eab5146105f1578063323cb59b1461066057806354fd4d50146106cb5780635a8e9d66146107595780636108b5ff146107a157806377c13323146107ca57806379694f081461084c5780637a7ebd7b146108d6578063803c83831461095857806380edef8e146109db5780638c76b4b714610a30578063990030cc14610a8a578063a6b7fa3614610adb578063a6d1596314610b3b578063c0ee0b8a14610b97578063fc0c546a14610bed578063fcff5ed614610c42575b600080fd5b341561014c57600080fd5b6101aa600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610cbd565b005b34156101b757600080fd5b6101bf610e0f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34156101ec57600080fd5b610246600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610e25565b6040518086600019166000191681526020018577ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018463ffffffff1663ffffffff1681526020018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b341561033357600080fd5b6103d4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610f8a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561042157600080fd5b6104a7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019190919290803590602001908201803590602001919091929050506111e2565b005b34156104b457600080fd5b610555600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506112b6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105a257600080fd5b6105ef60048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190505061150e565b005b34156105fc57600080fd5b6106166004808035600019169060200190919050506116cd565b604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066b57600080fd5b6106c9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050611704565b005b34156106d657600080fd5b6106de6119bc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561071e578082015181840152602081019050610703565b50505050905090810190601f16801561074b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561076457600080fd5b61079f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff169060200190919050506119f5565b005b34156107ac57600080fd5b6107b4611adc565b6040518082815260200191505060405180910390f35b34156107d557600080fd5b6107ef600480803560001916906020019091905050611ae9565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561085757600080fd5b6108d4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050611b41565b005b34156108e157600080fd5b6108fb600480803560001916906020019091905050611cec565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561096357600080fd5b6109bd600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050611d44565b60405180826000191660001916815260200191505060405180910390f35b34156109e657600080fd5b6109ee611e16565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a3b57600080fd5b610a88600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050611e3b565b005b3415610a9557600080fd5b610ac1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611fb6565b604051808215151515815260200191505060405180910390f35b3415610ae657600080fd5b610b39600480803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050611fd6565b005b3415610b4657600080fd5b610b95600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050612438565b005b3415610ba257600080fd5b610beb600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050612588565b005b3415610bf857600080fd5b610c006127b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c4d57600080fd5b610cbb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506127d9565b005b610cc933848484612982565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610de457600080fd5b6102c65a03f11515610df557600080fd5b505050604051805190501515610e0a57600080fd5b505050565b600060149054906101000a900463ffffffff1681565b600080600080600080610e39898989611d44565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610e7e57600080fd5b8060026000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660036000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660036000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660056000866000191660001916815260200190815260200160002060009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff169550955095509550955050939792965093509350565b600080600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e747261637400000000000000000000000000000000815250601001905060405180910390208787873060405180807f53656e6465722062616c616e63652070726f6f66207369676e61747572650000815250601e018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019450505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902091506111d38285612c81565b90508092505050949350505050565b60008061122389898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610f8a565b915061126382898987878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506112b6565b90508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561129f57600080fd5b6112ab82828a8a612d9d565b505050505050505050565b600080600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f616464726573732073656e646572000000000000000000000000000000000000815250600e01807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e747261637400000000000000000000000000000000815250601001905060405180910390208787873060405180807f526563656976657220636c6f73696e67207369676e6174757265000000000000815250601a018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019450505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902091506114ff8285612c81565b90508092505050949350505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561156b57600080fd5b600090505b81518110156116c95760046000838381518110151561158b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116bc5760006004600084848151811015156115f657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110151561165f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fe2ad9d0600e2a93ef46991efd2c22f65f9ebe472487cc7551647bc52d79328996000604051808215151515815260200191505060405180910390a25b8080600101915050611570565b5050565b60056020528060005260406000206000915054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1681565b6000611711338585611d44565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561175657600080fd5b600060036000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561179957600080fd5b60026000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff161115151561181e57600080fd5b600060149054906101000a900463ffffffff16430160036000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055504360036000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff161115156118b157600080fd5b8160036000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050565b6040805190810160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6000611a02338484611d44565b9050600060036000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515611a4757600080fd5b60036000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515611a8957600080fd5b611ad733848460036000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16612d9d565b505050565b68056bc75e2d6310000081565b60036020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611b9957600080fd5b611ba584848484612982565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515611cc057600080fd5b6102c65a03f11515611cd157600080fd5b505050604051805190501515611ce657600080fd5b50505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e9857600080fd5b600090505b8151811015611fb257611ec68282815181101515611eb757fe5b90602001906020020151613351565b15611fa5576001600460008484815181101515611edf57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508181815181101515611f4857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fe2ad9d0600e2a93ef46991efd2c22f65f9ebe472487cc7551647bc52d79328996001604051808215151515815260200191505060405180910390a25b8080600101915050611e9d565b5050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000806000808677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561200357600080fd5b61204133888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610f8a565b925061204e833389611d44565b9150600060026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561209357600080fd5b600060036000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff161415156120d657600080fd5b60026000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168677ffffffffffffffffffffffffffffffffffffffffffffffff161115151561215b57600080fd5b8577ffffffffffffffffffffffffffffffffffffffffffffffff1660056000846000191660001916815260200190815260200160002060009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff161015156121dc57600080fd5b60056000836000191660001916815260200190815260200160002060009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16860390508560056000846000191660001916815260200190815260200160002060006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561236957600080fd5b6102c65a03f1151561237a57600080fd5b50505060405180519050151561238f57600080fd5b8663ffffffff163373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe588a2bb9921c62e0da981f10952a3bb82216bf11a1f731da610fd2542eef27d84604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050505050565b612443338383613364565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b151561255e57600080fd5b6102c65a03f1151561256f57600080fd5b50505060405180519050151561258457600080fd5b5050565b6000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125ec57600080fd5b879450878577ffffffffffffffffffffffffffffffffffffffffffffffff1614151561261757600080fd5b868690509350602884148061262c5750602c84145b151561263757600080fd5b61267487878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506020613603565b92508273ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614806126f95750600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b151561270457600080fd5b61274187878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506034613603565b9150602884141561275c57612757838387613364565b6127a8565b61279987878080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506048613626565b90506127a783838388612982565b5b505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561283157600080fd5b61283c838383613364565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b151561295757600080fd5b6102c65a03f1151561296857600080fd5b50505060405180519050151561297d57600080fd5b505050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff161115156129ac57600080fd5b60008363ffffffff161115156129c157600080fd5b6129cc858585611d44565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515612a1157600080fd5b600060036000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515612a5457600080fd5b68056bc75e2d631000008260026000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff1611151515612aca57600080fd5b8160026000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660026000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1610151515612bda57fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45050505050565b60008060008060418551141515612c9757600080fd5b6020850151925060408501519150606085015160001a9050601b8160ff161015612cc257601b810190505b601b8160ff161480612cd75750601c8160ff16145b1515612ce257600080fd5b600186828585604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f11515612d6057600080fd5b505060206040510351935060008473ffffffffffffffffffffffffffffffffffffffff1614151515612d9157600080fd5b83935050505092915050565b6000612da7613659565b6000612db4878787611d44565b92506002600084600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505091506000826020015163ffffffff16111515612e7f57600080fd5b816000015177ffffffffffffffffffffffffffffffffffffffffffffffff168477ffffffffffffffffffffffffffffffffffffffffffffffff1611151515612ec657600080fd5b8377ffffffffffffffffffffffffffffffffffffffffffffffff1660056000856000191660001916815260200190815260200160002060009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151515612f4857600080fd5b600260008460001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600360008460001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff0219169055505060056000846000191660001916815260200190815260200160002060009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1684039050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561313357600080fd5b6102c65a03f1151561314457600080fd5b50505060405180519050151561315957600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb88868560000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561324657600080fd5b6102c65a03f1151561325757600080fd5b50505060405180519050151561326c57600080fd5b8463ffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f5f32714de7650ec742b858687d8db145623b99b0748db73df3ffc4d718867a8d8785604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a450505050505050565b600080823b905060008111915050919050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff161115151561339957600080fd5b4391506133a7858584611d44565b9050600060026000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1614151561341457600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561345757600080fd5b600060036000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561349a57600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060026000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35050505050565b600080828401519050806c01000000000000000000000000900491505092915050565b600080828401519050807c0100000000000000000000000000000000000000000000000000000000900491505092915050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff16815250905600a165627a7a72305820e070624cdc8cf91295dfc490388f1f74244f0009535a3da5d1cb9cb285ea47bc0029000000000000000000000000ff24d15afb9eb080c089053be99881dd18aa109000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff24d15afb9eb080c089053be99881dd18aa1090
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://e070624cdc8cf91295dfc490388f1f74244f0009535a3da5d1cb9cb285ea47bc

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward