Contract Overview
Balance: 0 Ether
Transactions: 443 txns
 Latest 25 transactions from a total of 443 transactions

TxHash Age From To Value [TxFee]
0xde12be8480e474d4648cc68e0f532abd89707cf1c73837eb23ed90bd587e2858106 days 5 hrs ago0x73ffe9ca861be7a2e0648a420d30a78192e708e1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.00013103
0xc0fbeb0ece1bdddc576d949f95512ef585a34262ce072b07269ca82c6f73ba5d106 days 5 hrs ago0xbd6b7cf1739f31621b158e4eb014826567693948  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x15c28e35c114b9363b76b823865dce1efb35fe0976147329f82b1cde947ec1d1106 days 11 hrs ago0x3bb641844a93fbcafae9a2b8a6fcae7f3416c28d  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.00013103
0x4a810e24fe67c00725c7fcc522ef8706bf80c01be919f5f7494dbde2fb3b2a44106 days 11 hrs ago0xf7c7af9dba87b134b3bb9f98083eccd2bc5798d5  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x4668388b0a0220e03360a57ebeed88e32e052043be6201c4c08b43b4f58121db106 days 13 hrs ago0x398cab54348d17d7b0eeb380dee491cb610dc3c3  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.00013074
0x928ce1d70e31315c5fb8855570dd0aceeb88d6d156836b1c6e2bbfbd57373e09106 days 13 hrs ago0x763737a18305a5af44e9493c860fdea8a355abdb  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x87ac5863473e6e0a0ab05975f236dcc57ac29a6f139a1f3a357c842634b4182c107 days 2 hrs ago0x763737a18305a5af44e9493c860fdea8a355abdb  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000131324
0x6aef082d67788a85d72bbc8b537e95edfd279d5eb0c605ac355c2db00fa28652107 days 2 hrs ago0x763737a18305a5af44e9493c860fdea8a355abdb  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000130936
0x958a357be6ffcde34f1fe28f74d42d5679051cf66dfdc476127888275b85d4a2107 days 2 hrs ago0x398cab54348d17d7b0eeb380dee491cb610dc3c3  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x208dd65cd215dd34f3a31dbe9d85f742ab3e28e8b3e47c6486d96337c4b76a23107 days 2 hrs ago0x763737a18305a5af44e9493c860fdea8a355abdb  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0xcde81d95201b7ae8c6836eb232e1347777641b1245ac2cff359d8f22924ef889108 days 7 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000120828
0x53672748a1e35eb11f2ced5b051633588808ec1727ba25e6b9774d0c64a82630108 days 7 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000130902
0xba5a3f930f62d15697f2912cd1da1b64ca1455618c42615949b49f90df0200e9108 days 7 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0xa09707016c39392a97e0818bf44ce3b498c4d6160bd9cc4eafe1540b729d3926108 days 7 hrs ago0xbbddf6c7d45d22d76bb9107c18f54527cf9f0c24  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x48ebd90853aeed297779a4c346a481737018d32ef714c7b933b51ade53f0387a108 days 8 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000131192
0xec0ed4deff23c04bc82d42361a30cf491221923973de3d34cdf5bfffa204a873108 days 9 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000131
0xd7960deec5219c87502056250bc1e75e672807f3b422e1d9bec06b7c3956a2fb108 days 9 hrs ago0xbbddf6c7d45d22d76bb9107c18f54527cf9f0c24  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x4310dc1da6904f4aca20c5a067bf8ea3d7fd534766ccb03e4318496ea41002e0108 days 9 hrs ago0x1227d98d14900172d1fd82b14d68797dce6c91c1  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000109086
0x99cf9b82321b6ddc02e843f515216f42b2bbeced9877299682d0f4beb35859ec109 days 6 hrs ago0x638d007b1f307213e2231436473b5c7ff9b5a55b  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.00010883
0x940b23291a17c1ff8b871bd82faa28986489f9c3950d77ea4106afdadf9df89a112 days 6 hrs ago0xca8e7468ce9a6b67e3612e4271b552f099bfaaab  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000110572
0x19581601822bac88bc85f15571e147d9c2d509cddec3fe723395f72fa78b8ea1189 days 6 hrs ago0x11f5eb8a079b92f0c4c8149061d5e5093da4e320  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000118686
0x080e055afff5af916619b30fc5799d38d9f4da809d6258cd7fa52f6f467d6cf6189 days 6 hrs ago0x11f5eb8a079b92f0c4c8149061d5e5093da4e320  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000111394
0x0614518e14a3beaaf965205a636da8f2d1c02ea9b74351aef112baa2c80e90ea189 days 6 hrs ago0x11f5eb8a079b92f0c4c8149061d5e5093da4e320  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000110572
0xd8650a79d1ba0a4588d1d94009f95cbc1c208e0cdd65fc0b000ae7870bc7cb1b189 days 6 hrs ago0x11f5eb8a079b92f0c4c8149061d5e5093da4e320  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000110572
0x18403a98d34446fe182e705c1453a39103b2754c9097644802d508a0bd07c818189 days 6 hrs ago0x11f5eb8a079b92f0c4c8149061d5e5093da4e320  IN   0x0f1736fa3eb54bd8c234725bd658201da0b4190d0 Ether0.000110572
[ 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
0xde12be8480e474d4648cc68e0f532abd89707cf1c73837eb23ed90bd587e28589256272106 days 5 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xde12be8480e474d4648cc68e0f532abd89707cf1c73837eb23ed90bd587e28589256272106 days 5 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xc0fbeb0ece1bdddc576d949f95512ef585a34262ce072b07269ca82c6f73ba5d9256232106 days 5 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x15c28e35c114b9363b76b823865dce1efb35fe0976147329f82b1cde947ec1d19253687106 days 11 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x15c28e35c114b9363b76b823865dce1efb35fe0976147329f82b1cde947ec1d19253687106 days 11 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x4a810e24fe67c00725c7fcc522ef8706bf80c01be919f5f7494dbde2fb3b2a449253652106 days 11 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x4668388b0a0220e03360a57ebeed88e32e052043be6201c4c08b43b4f58121db9252805106 days 13 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x4668388b0a0220e03360a57ebeed88e32e052043be6201c4c08b43b4f58121db9252805106 days 13 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x928ce1d70e31315c5fb8855570dd0aceeb88d6d156836b1c6e2bbfbd57373e099252778106 days 13 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x87ac5863473e6e0a0ab05975f236dcc57ac29a6f139a1f3a357c842634b4182c9247917107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x87ac5863473e6e0a0ab05975f236dcc57ac29a6f139a1f3a357c842634b4182c9247917107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x6aef082d67788a85d72bbc8b537e95edfd279d5eb0c605ac355c2db00fa286529247904107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x6aef082d67788a85d72bbc8b537e95edfd279d5eb0c605ac355c2db00fa286529247904107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x958a357be6ffcde34f1fe28f74d42d5679051cf66dfdc476127888275b85d4a29247891107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x208dd65cd215dd34f3a31dbe9d85f742ab3e28e8b3e47c6486d96337c4b76a239247873107 days 2 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xcde81d95201b7ae8c6836eb232e1347777641b1245ac2cff359d8f22924ef8899234357108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xcde81d95201b7ae8c6836eb232e1347777641b1245ac2cff359d8f22924ef8899234357108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x53672748a1e35eb11f2ced5b051633588808ec1727ba25e6b9774d0c64a826309234343108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x53672748a1e35eb11f2ced5b051633588808ec1727ba25e6b9774d0c64a826309234343108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xba5a3f930f62d15697f2912cd1da1b64ca1455618c42615949b49f90df0200e99234326108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xa09707016c39392a97e0818bf44ce3b498c4d6160bd9cc4eafe1540b729d39269234307108 days 7 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x48ebd90853aeed297779a4c346a481737018d32ef714c7b933b51ade53f0387a9233847108 days 8 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x48ebd90853aeed297779a4c346a481737018d32ef714c7b933b51ade53f0387a9233847108 days 8 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xec0ed4deff23c04bc82d42361a30cf491221923973de3d34cdf5bfffa204a8739233737108 days 9 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xec0ed4deff23c04bc82d42361a30cf491221923973de3d34cdf5bfffa204a8739233737108 days 9 hrs ago0x0f1736fa3eb54bd8c234725bd658201da0b4190d0x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: MicroRaidenRightMeshChannels
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.15;

/// @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.
}

library ECVerify {

    function ecverify(bytes32 hash, bytes32 r, bytes32 s, uint8 v) internal constant returns (address signature_address) {

        // 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 Raiden MicroTransfer Channels Contract.
contract MicroRaidenRightMeshChannels {

    /*
     *  Data structures
     */

    // 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.1.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;

    // 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;
    }

    /*
     *  Events
     */

    event ChannelCreated(
        address indexed _sender,
        address indexed _receiver,
        uint192 _deposit);
    event ChannelToppedUp (
        address indexed _sender,
        address indexed _receiver,
        uint32 indexed _open_block_number,
        uint192 _added_deposit);
    event ChannelCloseRequested(
        address indexed _sender,
        address indexed _receiver,
        uint32 indexed _open_block_number,
        uint192 _balance);
    event ChannelSettled(
        address indexed _sender,
        address indexed _receiver,
        uint32 indexed _open_block_number,
        uint192 _balance);


    /*
     *  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.
    function MicroRaidenRightMeshChannels(address _token_address, uint32 _challenge_period) 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;
    }

    /*
     *  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 sends the tokens.
    /// @param _deposit The amount of tokens that the sender escrows.
    /// @param _data Receiver address in bytes.
    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);

        uint length = _data.length;

        // createChannel - receiver address (20 bytes)
        // topUp - receiver address (20 bytes) + open_block_number (4 bytes) = 24 bytes
        require(length == 20 || length == 24);

        address receiver = addressFromData(_data);

        if(length == 20) {
            createChannelPrivate(_sender_address, receiver, deposit);
        } else {
            uint32 open_block_number = blockNumberFromData(_data);
            updateInternalBalanceStructs(
                _sender_address,
                receiver,
                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 createChannelERC20(address _receiver_address, uint192 _deposit) external {
        createChannelPrivate(msg.sender, _receiver_address, _deposit);

        // transferFrom deposit from sender to contract
        // ! needs prior approval from user
        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 _added_deposit The added token deposit with which the current deposit is increased.
    function topUpERC20(
        address _receiver_address,
        uint192 _added_deposit)
        external
    {
        updateInternalBalanceStructs(
            msg.sender,
            _receiver_address,
            _added_deposit
        );

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

    /// @notice Function called by the sender, with all the needed
    /// signatures to close the channel and settle immediately.
    /// @param _receiver_address The address that receives tokens.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig_r The balance message signed by the sender.
    /// @param _balance_msg_sig_s The balance message signed by the sender.
    /// @param _balance_msg_sig_v The balance message signed by the sender.
    /// @param _closing_sig_r The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_s The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_v The receiver's signed balance message, containing the sender's address.
    function cooperativeCloseSender(
        address _receiver_address,
        uint192 _balance,
        bytes32 _balance_msg_sig_r,
	    bytes32 _balance_msg_sig_s,
	    uint8 _balance_msg_sig_v,
        bytes32 _closing_sig_r,
	    bytes32 _closing_sig_s,
	    uint8 _closing_sig_v)
        external
    {
        // Derive sender address from signed balance proof
        address sender = extractBalanceProofSignature(_receiver_address, _balance, _balance_msg_sig_r,_balance_msg_sig_s,_balance_msg_sig_v);
        require(sender == msg.sender);
        // Derive receiver address from closing signature
        address receiver = extractClosingSignature(sender, _balance, _closing_sig_r,_closing_sig_s,_closing_sig_v);
        require(receiver == _receiver_address);
        
        // Both signatures have been verified and the channel can be settled.
        settleChannel(sender, receiver, _balance);
    }
    
    /// @notice Function called by the receiver, with all the needed
    /// signatures to close the channel and settle immediately.
    /// @param _sender_address The address that sends tokens.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig_r The balance message signed by the sender.
    /// @param _balance_msg_sig_s The balance message signed by the sender.
    /// @param _balance_msg_sig_v The balance message signed by the sender.
    /// @param _closing_sig_r The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_s The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_v The receiver's signed balance message, containing the sender's address.
    function cooperativeCloseReceiver(
        address _sender_address,
        uint192 _balance,
        bytes32 _balance_msg_sig_r,
	    bytes32 _balance_msg_sig_s,
	    uint8 _balance_msg_sig_v,
        bytes32 _closing_sig_r,
	    bytes32 _closing_sig_s,
    	uint8 _closing_sig_v)
        external
    {
        // Derive sender address from signed balance proof
        address receiver = extractClosingSignature(_sender_address, _balance, _closing_sig_r,_closing_sig_s,_closing_sig_v);
        require(receiver == msg.sender);
        // Derive receiver address from closing signature
        address sender = extractBalanceProofSignature(receiver, _balance, _balance_msg_sig_r,_balance_msg_sig_s,_balance_msg_sig_v);
        require(sender == _sender_address);

        // Both signatures have been verified and the channel can be settled.
        settleChannel(sender, receiver, _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.
    /// the sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    function uncooperativeClose(
        address _receiver_address,
        uint192 _balance)
        external
    {
        bytes32 key = getKey(msg.sender, _receiver_address);

        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, channels[key].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.
    /// the sender and receiver was created.
    function settle(address _receiver_address) external {
        bytes32 key = getKey(msg.sender, _receiver_address);

        // 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, 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.
    /// sender and receiver was created.
    /// @return Channel information (unique_identifier, deposit, settle_block_number, closing_balance).
    function getChannelInfo(
        address _sender_address,
        address _receiver_address)
        external
        constant
        returns (bytes32, uint192, uint32, uint192)
    {
        bytes32 key = getKey(_sender_address, _receiver_address);
        require(channels[key].open_block_number > 0);

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

    /*
     *  Public functions
     */

    /// @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 _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig_r The balance message signed by the sender.
    /// @param _balance_msg_sig_s The balance message signed by the sender.
    /// @param _balance_msg_sig_v The balance message signed by the sender.
    /// @return Address of the balance proof signer.
    function extractBalanceProofSignature(
        address _receiver_address,
        uint192 _balance,
        bytes32 _balance_msg_sig_r,
	    bytes32 _balance_msg_sig_s,
	    uint8 _balance_msg_sig_v)
        public
        constant
        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 = getBalanceHash(
                _receiver_address,
                _balance);
        

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

    function getClosingHash(
	    address _sender_address,
	    uint192 _balance) 
	constant returns (bytes32 message_hash)
    {
    	message_hash = keccak256(
            keccak256(
                'string message_id',
                'address sender',
                'uint192 balance',
                'address contract'
            ),
            keccak256(
                'Receiver closing signature',
                _sender_address,
                _balance,
                address(this)
            )
        );
	return message_hash;
    }

    function getBalanceHash(
        address _receiver_address,
        uint192 _balance) 
	constant returns (bytes32 message_hash)
    {
	message_hash = keccak256(
            keccak256(
                'string message_id',
                'address receiver',
                'uint192 balance',
                'address contract'
            ),
            keccak256(
                'Sender balance proof signature',
                _receiver_address,
                _balance,
                address(this)
            )
        );
	return message_hash;
    }

    /// @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 _balance The amount of tokens owed by the sender to the receiver.
    /// @param _closing_sig_r The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_s The receiver's signed balance message, containing the sender's address.
    /// @param _closing_sig_v The receiver's signed balance message, containing the sender's address.
    /// @return Address of the closing signature signer.
    function extractClosingSignature(
        address _sender_address,
        uint192 _balance,
        bytes32 _closing_sig_r,
	    bytes32 _closing_sig_s,
	    uint8 _closing_sig_v)
        public
        constant
        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 = getClosingHash(
                _sender_address,
                _balance);
        

        // Derive address from signature
        address signer = ECVerify.ecverify(message_hash, _closing_sig_r, _closing_sig_s, _closing_sig_v);
        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.
    /// @return Unique channel identifier.
    function getKey(
        address _sender_address,
        address _receiver_address)
        public
        constant
        returns (bytes32 data)
    {
        return keccak256(_sender_address, _receiver_address);
    }

    /*
     *  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);

        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 _added_deposit The added token deposit with which the current deposit is increased.
    function updateInternalBalanceStructs(
        address _sender_address,
        address _receiver_address,
        uint192 _added_deposit)
        private
    {
        require(_added_deposit > 0);

        bytes32 key = getKey(_sender_address, _receiver_address);

        require(channels[key].open_block_number > 0);
        require(channels[key].deposit > 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, channels[key].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 _balance The amount of tokens owed by the sender to the receiver.
    function settleChannel(
        address _sender_address,
        address _receiver_address,
        uint192 _balance)
        private
    {
        bytes32 key = getKey(_sender_address, _receiver_address);
        Channel memory channel = channels[key];

        require(channel.open_block_number > 0);
        require(_balance <= channel.deposit);

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

        // Send _balance to the receiver, as it is always <= deposit
        require(token.transfer(_receiver_address, _balance));

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

        ChannelSettled(_sender_address, _receiver_address, channels[key].open_block_number, _balance);
    }

    /*
     *  Internal functions
     */

    /// @dev Internal function for getting an address from tokenFallback data bytes.
    /// @param b Bytes received.
    /// @return Address resulted.
    function addressFromData (bytes b) internal constant returns (address) {
        bytes20 addr;
        assembly {
            // Read address bytes
            // Offset of 32 bytes, representing b.length
            addr := mload(add(b, 0x20))
        }
        return address(addr);
    }

    /// @dev Internal function for getting the block number from tokenFallback data bytes.
    /// @param b Bytes received.
    /// @return Block number.
    function blockNumberFromData(bytes b) internal constant returns (uint32) {
        bytes4 block_number;
        assembly {
            // Read block number bytes
            // Offset of 32 bytes (b.length) + 20 bytes (address)
            block_number := mload(add(b, 0x34))
        }
        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 constant returns (bool) {
        uint size;
        assembly {
            size := extcodesize(_contract)
        }

        return size > 0;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"challenge_period","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_deposit","type":"uint192"}],"name":"createChannelERC20","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"channel_deposit_bugbounty_limit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"}],"name":"settle","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_balance","type":"uint192"}],"name":"uncooperativeClose","outputs":[],"payable":false,"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,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"deposit","type":"uint192"},{"name":"open_block_number","type":"uint32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_balance","type":"uint192"}],"name":"getClosingHash","outputs":[{"name":"message_hash","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig_r","type":"bytes32"},{"name":"_balance_msg_sig_s","type":"bytes32"},{"name":"_balance_msg_sig_v","type":"uint8"},{"name":"_closing_sig_r","type":"bytes32"},{"name":"_closing_sig_s","type":"bytes32"},{"name":"_closing_sig_v","type":"uint8"}],"name":"cooperativeCloseReceiver","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_balance","type":"uint192"},{"name":"_closing_sig_r","type":"bytes32"},{"name":"_closing_sig_s","type":"bytes32"},{"name":"_closing_sig_v","type":"uint8"}],"name":"extractClosingSignature","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"}],"name":"getKey","outputs":[{"name":"data","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig_r","type":"bytes32"},{"name":"_balance_msg_sig_s","type":"bytes32"},{"name":"_balance_msg_sig_v","type":"uint8"},{"name":"_closing_sig_r","type":"bytes32"},{"name":"_closing_sig_s","type":"bytes32"},{"name":"_closing_sig_v","type":"uint8"}],"name":"cooperativeCloseSender","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_deposit","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_balance","type":"uint192"}],"name":"getBalanceHash","outputs":[{"name":"message_hash","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_added_deposit","type":"uint192"}],"name":"topUpERC20","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"}],"name":"getChannelInfo","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint192"},{"name":"","type":"uint32"},{"name":"","type":"uint192"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig_r","type":"bytes32"},{"name":"_balance_msg_sig_s","type":"bytes32"},{"name":"_balance_msg_sig_v","type":"uint8"}],"name":"extractBalanceProofSignature","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_token_address","type":"address"},{"name":"_challenge_period","type":"uint32"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":false,"name":"_deposit","type":"uint192"}],"name":"ChannelCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","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","type":"address"},{"indexed":true,"name":"_receiver","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","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_balance","type":"uint192"}],"name":"ChannelSettled","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b6040516040806200290c833981016040528080519060200190919080519060200190919050505b60008273ffffffffffffffffffffffffffffffffffffffff16141515156200005e57600080fd5b6200007d82620001c464010000000002620026e4176401000000009004565b15156200008957600080fd5b6101f48163ffffffff1610151515620000a157600080fd5b81600060046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200017257600080fd5b6102c65a03f115156200018457600080fd5b505050604051805190501115156200019b57600080fd5b806000806101000a81548163ffffffff021916908363ffffffff1602179055505b5050620001d8565b600080823b90506000811191505b50919050565b61272480620001e86000396000f30060606040523615610105576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c1461010a57806354fd4d501461013f5780635989c283146101ce5780636108b5ff1461022a5780636a256b29146102535780636a7a23751461028c57806377c13323146102e85780637a7ebd7b1461036a5780637e500023146103ec578063af6da78414610464578063b560870d1461050c578063bc298553146105ce578063c08b3a5a14610642578063c0ee0b8a146106ea578063c2c4ca3714610740578063ef05c8be146107b8578063f94c9e1314610814578063fc0c546a14610911578063ffc850e614610966575b600080fd5b341561011557600080fd5b61011d610a28565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561014a57600080fd5b610152610a3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101935780820151818401525b602081019050610177565b50505050905090810190601f1680156101c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d957600080fd5b610228600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610a76565b005b341561023557600080fd5b61023d610bc7565b6040518082815260200191505060405180910390f35b341561025e57600080fd5b61028a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610bd4565b005b341561029757600080fd5b6102e6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610cb9565b005b34156102f357600080fd5b61030d600480803560001916906020019091905050610f9d565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561037557600080fd5b61038f600480803560001916906020019091905050610ff5565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b34156103f757600080fd5b610446600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190505061104d565b60405180826000191660001916815260200191505060405180910390f35b341561046f57600080fd5b61050a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091905050611238565b005b341561051757600080fd5b61058c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff169060200190919050506112e5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105d957600080fd5b610624600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611313565b60405180826000191660001916815260200191505060405180910390f35b341561064d57600080fd5b6106e8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803560ff169060200190919050506113b2565b005b34156106f557600080fd5b61073e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019082018035906020019190919290505061145f565b005b341561074b57600080fd5b61079a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506115b6565b60405180826000191660001916815260200191505060405180910390f35b34156107c357600080fd5b610812600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506117a1565b005b341561081f57600080fd5b61086a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118f2565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561091c57600080fd5b610924611a12565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561097157600080fd5b6109e6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091905050611a38565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610a81338383611a66565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610b9c57600080fd5b6102c65a03f11515610bad57600080fd5b505050604051805190501515610bc257600080fd5b5b5050565b68056bc75e2d6310000081565b6000610be03383611313565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610c2557600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515610c6757600080fd5b610cb4338360026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16611d05565b5b5050565b6000610cc53384611313565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610d0a57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515610d4d57600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515610dd257600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055504360026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610e6457600080fd5b8160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060016000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f616464726573732073656e646572000000000000000000000000000000000000815250600e01807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902083833060405180807f526563656976657220636c6f73696e67207369676e6174757265000000000000815250601a018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902090508090505b92915050565b6000806112488a8a8787876112e5565b91503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151561128457600080fd5b611291828a8a8a8a611a38565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156112cd57600080fd5b6112d881838b611d05565b5b50505050505050505050565b60008060006112f4888861104d565b9150611302828787876121e1565b90508092505b505095945050505050565b60008282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051809103902090505b92915050565b6000806113c28a8a8a8a8a611a38565b91503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415156113fe57600080fd5b61140b828a8787876112e5565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561144757600080fd5b61145282828b611d05565b5b50505050505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c157600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff161415156114ec57600080fd5b85859050925060148314806115015750601883145b151561150c57600080fd5b61154786868080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122d1565b915060148314156115625761155d888386611a66565b6115ab565b61159d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506122f5565b90506115aa888386612329565b5b5b5050505050505050565b600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902083833060405180807f53656e6465722062616c616e63652070726f6f66207369676e61747572650000815250601e018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902090508090505b92915050565b6117ac338383612329565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15156118c757600080fd5b6102c65a03f115156118d857600080fd5b5050506040518051905015156118ed57600080fd5b5b5050565b60008060008060006119048787611313565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561194957600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505b5092959194509250565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000611a4788886115b6565b9150611a55828787876121e1565b90508092505b505095945050505050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a9b57600080fd5b439150611aa88585611313565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611b1557600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b5857600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b9b57600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b5050505050565b6000611d0f6126aa565b611d198585611313565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff16111515611de457600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611e2b57600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515611fd257600080fd5b6102c65a03f11515611fe357600080fd5b505050604051805190501515611ff857600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156120e557600080fd5b6102c65a03f115156120f657600080fd5b50505060405180519050151561210b57600080fd5b60016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b5050505050565b6000601b8260ff1610156121f657601b820191505b601b8260ff16148061220b5750601c8260ff16145b151561221657600080fd5b600185838686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561229457600080fd5b505060206040510351905060008173ffffffffffffffffffffffffffffffffffffffff16141515156122c557600080fd5b8090505b949350505050565b60008060208301519050806c01000000000000000000000000900491505b50919050565b60008060348301519050807c0100000000000000000000000000000000000000000000000000000000900491505b50919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff1611151561235357600080fd5b61235d8484611313565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff161115156123a257600080fd5b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561240d57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561245057600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff16111515156124c657600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff161115156125d557fe5b60016000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b50505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b90506000811191505b509190505600a165627a7a72305820ab633e88aceae6bd50d1dac01283e4e3719f91962aaac5cbb827db788f0508fd00290000000000000000000000000fc373426c87f555715e6fe673b07fe9e7f0e6e700000000000000000000000000000000000000000000000000000000000001f4

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000fc373426c87f555715e6fe673b07fe9e7f0e6e7
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001f4


   Swarm Source:
bzzr://ab633e88aceae6bd50d1dac01283e4e3719f91962aaac5cbb827db788f0508fd

 

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