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

TxHash Age From To Value [TxFee]
0xee4a71d2115ba4c38653e45f42098cdd6d44e2df75dab16a3847e4efc585a7c566 days 10 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000060792
0x7b5332b187644e4da15300e7039c253ce7b08c50d381ac7c69f50daf4a19566266 days 10 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000039632
0x9d07d0ba019f26b8e6525408e641257cc749cebc3ab2aa0e998b04179556816d66 days 10 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.00007592
0x5889dafb862941b86f5886510ecd03d6274f66acd2797eed92862e0ca0475a9066 days 10 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000054632
0x9fdd625a10c7cbc0725e5f40b61088dcfc5f665e61e60986b1fe416a6419f0dd70 days 18 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000075984
0x373ad91789afe3b3d38b2a4d72a63fd4443fb66ab0edf74052cfa28043c3d4e770 days 18 hrs ago0xecc849cc92bc20eeb1f6eb4a90ac856c71876941  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000054696
0xad0279ac77ce2d4a4f151a5a1e447f2e04035cc604b88375f19151dd88948673168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000085001
0xe1896b2eba321577c7853410cf8976ecc2d00f52d330de98449e0fe135ad68cc168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000085082
0x07b26cadfae89c803220562f635b6dfb1993bd150f193d5452d7191fc125d70c168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059432
0xcd9a7bfc1dce0aed0f42c957c9afb1c2ae43178dced74d7c9ed51791eb1bb071168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059432
0x81193b689b10b0fac1e9599af68e5eda3276fd59d83a14815090418aaef315d5168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000100001
0x95098683ed7b43509ad3980babee5a62d62b782272a1c93bd70fedfad81ed4b2168 days 4 hrs ago0x1150c55e16c10f72e77b9876ddc7d70b106b6a39  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x5aec435c07ec3aa9836a39fec637a3aecd148c7f33419e182becfbca1112b3f2213 days 21 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000085001
0x462eeda9993956b81f834199bd72e3c28a312c73b30927143b87102b40a35f8c213 days 21 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000085001
0x0dc15ed61ba9880c9f6ff16743121495bcce399b8c40e656effc677081e34988213 days 21 hrs ago0x8fa6f0a177553ac85d967c320f44e4990dbf8594  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000084873
0x96438998f822455907df4027afb27339787860612dcd443814539641303369b1213 days 21 hrs ago0x5f971b6047d9291e83da6e9649dfb91925d6169e  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x609209e96140612bf5255bada8694b224161ef2d82bab48aeba49fff9a153cc3213 days 21 hrs ago0x1bfad454ad74680585210302f5e993abb68fa42e  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x0c5d87ee7d691e916ddf27e93bb9243162988e60c41350bea79f7f5ec15be5a8213 days 21 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x003fbd948c1534e58eb57497fcce51d843f5f2bcfe010845650af33a9d57ff5e213 days 22 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000084553
0xc12353f365e4614f69aa196fc44df96838a25e463a81f54d9a8d58cbbf44464b213 days 22 hrs ago0x8fa6f0a177553ac85d967c320f44e4990dbf8594  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000084617
0x29be14117d8be8d3cc6d9793dc28fd6d60da0b50053d1eb4b11c96c327246153213 days 22 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000084698
0x4b8f085f19099527ea90be6a93ded0c465a4927b5b5bfbd71c5f1e0f6026b554213 days 22 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x341a0f44fec24a9c487c25cbfe8371a9d32596f6627259a7b8c9e3fb047e9bc1213 days 22 hrs ago0x5f971b6047d9291e83da6e9649dfb91925d6169e  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x2359a737243a872a6aa640f7c1054738f93d0bfc6a0ac28803d04b01d9c09cd1213 days 22 hrs ago0x1bfad454ad74680585210302f5e993abb68fa42e  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000059496
0x82f81e37ca8cb3aca30c9d7f385dc56880d26f36667bb90e199c2db21452e476220 days 19 hrs ago0xd6111d3a255a60e84bbebd15f13a03319d16393c  IN   0x5832edf9da129aa13fda0fbff93379d3ed8a4a930 Ether0.000085082
[ 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
0xee4a71d2115ba4c38653e45f42098cdd6d44e2df75dab16a3847e4efc585a7c5937338366 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xee4a71d2115ba4c38653e45f42098cdd6d44e2df75dab16a3847e4efc585a7c5937338366 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x7b5332b187644e4da15300e7039c253ce7b08c50d381ac7c69f50daf4a195662937338066 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x9d07d0ba019f26b8e6525408e641257cc749cebc3ab2aa0e998b04179556816d937333266 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x9d07d0ba019f26b8e6525408e641257cc749cebc3ab2aa0e998b04179556816d937333266 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x5889dafb862941b86f5886510ecd03d6274f66acd2797eed92862e0ca0475a90937331466 days 10 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x9fdd625a10c7cbc0725e5f40b61088dcfc5f665e61e60986b1fe416a6419f0dd933190370 days 18 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x9fdd625a10c7cbc0725e5f40b61088dcfc5f665e61e60986b1fe416a6419f0dd933190370 days 18 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x373ad91789afe3b3d38b2a4d72a63fd4443fb66ab0edf74052cfa28043c3d4e7933189770 days 18 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xad0279ac77ce2d4a4f151a5a1e447f2e04035cc604b88375f19151dd889486738251091168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xad0279ac77ce2d4a4f151a5a1e447f2e04035cc604b88375f19151dd889486738251091168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xe1896b2eba321577c7853410cf8976ecc2d00f52d330de98449e0fe135ad68cc8251087168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xe1896b2eba321577c7853410cf8976ecc2d00f52d330de98449e0fe135ad68cc8251087168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x07b26cadfae89c803220562f635b6dfb1993bd150f193d5452d7191fc125d70c8251067168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0xcd9a7bfc1dce0aed0f42c957c9afb1c2ae43178dced74d7c9ed51791eb1bb0718250977168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x81193b689b10b0fac1e9599af68e5eda3276fd59d83a14815090418aaef315d58250960168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x81193b689b10b0fac1e9599af68e5eda3276fd59d83a14815090418aaef315d58250960168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x95098683ed7b43509ad3980babee5a62d62b782272a1c93bd70fedfad81ed4b28250940168 days 4 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x5aec435c07ec3aa9836a39fec637a3aecd148c7f33419e182becfbca1112b3f27703284213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x5aec435c07ec3aa9836a39fec637a3aecd148c7f33419e182becfbca1112b3f27703284213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x462eeda9993956b81f834199bd72e3c28a312c73b30927143b87102b40a35f8c7703282213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x462eeda9993956b81f834199bd72e3c28a312c73b30927143b87102b40a35f8c7703282213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x0dc15ed61ba9880c9f6ff16743121495bcce399b8c40e656effc677081e349887703282213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x0dc15ed61ba9880c9f6ff16743121495bcce399b8c40e656effc677081e349887703282213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 Ether
0x96438998f822455907df4027afb27339787860612dcd443814539641303369b17703147213 days 21 hrs ago0x5832edf9da129aa13fda0fbff93379d3ed8a4a930x0fc373426c87f555715e6fe673b07fe9e7f0e6e70 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: RaidenMicroTransferChannels
Compiler Text: 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);
	//bytes memory prefix = "\x19Ethereum Signed Message:\n32";
        //bytes32 prefixedHash = keccak256(prefix, hash);
        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 RaidenMicroTransferChannels {

    /*
     *  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 RaidenMicroTransferChannels(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,
                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 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 _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 topUpERC20(
        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 user
        // Do transfer after any state change
        require(token.transferFrom(msg.sender, address(this), _added_deposit));
    }

    /// @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_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 cooperativeClose(
        address _receiver_address,
        uint32 _open_block_number,
        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, _open_block_number, _balance, _balance_msg_sig_r,_balance_msg_sig_s,_balance_msg_sig_v);

        // Derive receiver address from closing signature
        address receiver = extractClosingSignature(sender, _open_block_number, _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, _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).
    function getChannelInfo(
        address _sender_address,
        address _receiver_address,
        uint32 _open_block_number)
        external
        constant
        returns (bytes32, uint192, uint32, 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
        );
    }

    /*
     *  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 _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_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,
        uint32 _open_block_number,
        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,
                _open_block_number,
                _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,
	uint32 _open_block_number,
	uint192 _balance) 
	constant returns (bytes32 message_hash)
    {
    	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)
            )
        );
	return message_hash;
    }

    function getBalanceHash(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance) 
	constant returns (bytes32 message_hash)
    {
	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)
            )
        );
	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 _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_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,
        uint32 _open_block_number,
        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,
                _open_block_number,
                _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.
    /// @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
        constant
        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].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, _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);

        // 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, _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":"_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"}],"payable":false,"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,"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":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"settle","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"}],"name":"getClosingHash","outputs":[{"name":"message_hash","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"channel_deposit_bugbounty_limit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"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"},{"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":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getKey","outputs":[{"name":"data","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"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":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_deposit","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_added_deposit","type":"uint192"}],"name":"topUpERC20","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"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":"_open_block_number","type":"uint32"},{"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":"cooperativeClose","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","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
606060405234156200001057600080fd5b60405160408062002852833981016040528080519060200190919080519060200190919050505b60008273ffffffffffffffffffffffffffffffffffffffff16141515156200005e57600080fd5b6200007d82620001c4640100000000026200262a176401000000009004565b15156200008957600080fd5b6101f48163ffffffff1610151515620000a157600080fd5b81600060046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200017257600080fd5b6102c65a03f115156200018457600080fd5b505050604051805190501115156200019b57600080fd5b806000806101000a81548163ffffffff021916908363ffffffff1602179055505b5050620001d8565b600080823b90506000811191505b50919050565b61266a80620001e86000396000f300606060405236156100fa576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c146100ff5780630eba6b0614610134578063323cb59b1461024057806354fd4d50146102ab5780635989c2831461033a5780635a8e9d66146103965780635b8e7fda146103de5780636108b5ff146104655780636ab6d4d41461048e57806377c133231461055f5780637a7ebd7b146105e1578063803c838314610663578063ae5b845e146106e6578063c0ee0b8a146107b7578063ce90bafa1461080d578063d275ced414610878578063dfde16f2146108ff578063fc0c546a146109b6575b600080fd5b341561010a57600080fd5b610112610a0b565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561013f57600080fd5b610199600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610a20565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561024b57600080fd5b6102a9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610b41565b005b34156102b657600080fd5b6102be610df9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ff5780820151818401525b6020810190506102e3565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034557600080fd5b610394600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610e32565b005b34156103a157600080fd5b6103dc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610f83565b005b34156103e957600080fd5b610447600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190505061106b565b60405180826000191660001916815260200191505060405180910390f35b341561047057600080fd5b6104786112b2565b6040518082815260200191505060405180910390f35b341561049957600080fd5b61051d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff169060200190919050506112bf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561056a57600080fd5b6105846004808035600019169060200190919050506112ef565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b34156105ec57600080fd5b610606600480803560001916906020019091905050611347565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561066e57600080fd5b6106c8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190505061139f565b60405180826000191660001916815260200191505060405180910390f35b34156106f157600080fd5b610775600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091905050611472565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107c257600080fd5b61080b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001919091929050506114a2565b005b341561081857600080fd5b610876600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506115fa565b005b341561088357600080fd5b6108e1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190505061174d565b60405180826000191660001916815260200191505060405180910390f35b341561090a57600080fd5b6109b4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803560ff16906020019091905050611994565b005b34156109c157600080fd5b6109c9611a0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b6000806000806000610a3388888861139f565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610a7857600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505b5093509350935093565b6000610b4e33858561139f565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610b9357600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515610bd657600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515610c5b57600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055504360026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610ced57600080fd5b8160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b50505050565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610e3d338383611a31565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610f5857600080fd5b6102c65a03f11515610f6957600080fd5b505050604051805190501515610f7e57600080fd5b5b5050565b6000610f9033848461139f565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610fd557600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff164311151561101757600080fd5b61106533848460026000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16611cd1565b5b505050565b600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f616464726573732073656e646572000000000000000000000000000000000000815250600e01807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e747261637400000000000000000000000000000000815250601001905060405180910390208484843060405180807f526563656976657220636c6f73696e67207369676e6174757265000000000000815250601a018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019450505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902090508090505b9392505050565b68056bc75e2d6310000081565b60008060006112cf89898961174d565b91506112dd82878787612181565b90508092505b50509695505050505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090505b9392505050565b600080600061148289898961106b565b915061149082878787612181565b90508092505b50509695505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561150457600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff1614151561152f57600080fd5b85859050925060148314806115445750601883145b151561154f57600080fd5b61158a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612271565b915060148314156115a5576115a0888386611a31565b6115ef565b6115e086868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612295565b90506115ee888383876122c9565b5b5b5050505050505050565b611606338484846122c9565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b151561172157600080fd5b6102c65a03f1151561173257600080fd5b50505060405180519050151561174757600080fd5b5b505050565b600060405180807f737472696e67206d6573736167655f6964000000000000000000000000000000815250601101807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e747261637400000000000000000000000000000000815250601001905060405180910390208484843060405180807f53656e6465722062616c616e63652070726f6f66207369676e61747572650000815250601e018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019450505050506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902090508090505b9392505050565b6000806119a58b8b8b8b8b8b6112bf565b91506119b5828b8b888888611472565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156119f157600080fd5b6119fd82828c8c611cd1565b5b5050505050505050505050565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a6657600080fd5b439150611a7485858461139f565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611ae157600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b2457600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b6757600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35b5050505050565b6000611cdb6125f0565b611ce686868661139f565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff16111515611db157600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611df857600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1515611f9f57600080fd5b6102c65a03f11515611fb057600080fd5b505050604051805190501515611fc557600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15156120b257600080fd5b6102c65a03f115156120c357600080fd5b5050506040518051905015156120d857600080fd5b8363ffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b505050505050565b6000601b8260ff16101561219657601b820191505b601b8260ff1614806121ab5750601c8260ff16145b15156121b657600080fd5b600185838686604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561223457600080fd5b505060206040510351905060008173ffffffffffffffffffffffffffffffffffffffff161415151561226557600080fd5b8090505b949350505050565b60008060208301519050806c01000000000000000000000000900491505b50919050565b60008060348301519050807c0100000000000000000000000000000000000000000000000000000000900491505b50919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff161115156122f357600080fd5b60008363ffffffff1611151561230857600080fd5b61231385858561139f565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561238057600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff161415156123c357600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff161115151561243957600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561254857fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45b5050505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b90506000811191505b509190505600a165627a7a7230582000507399f99c2b4ac767eaaf3a2aaabd65785d9062f4355269cef3d99875bc9500290000000000000000000000000fc373426c87f555715e6fe673b07fe9e7f0e6e700000000000000000000000000000000000000000000000000000000000001f4

    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://00507399f99c2b4ac767eaaf3a2aaabd65785d9062f4355269cef3d99875bc95

 

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