ETH Price: $1,974.64 (-4.13%)

Contract

0x4d6E0922E6b703F0FDf92745343A9b83EB656402
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cooperative Clos...46526192017-11-30 22:46:543017 days ago1512082014IN
0x4d6E0922...3EB656402
0 ETH0.000084781
Cooperative Clos...46523152017-11-30 21:39:503017 days ago1512077990IN
0x4d6E0922...3EB656402
0 ETH0.0019998820
Cooperative Clos...46522762017-11-30 21:30:273017 days ago1512077427IN
0x4d6E0922...3EB656402
0 ETH0.0016982620
Cooperative Clos...46522192017-11-30 21:14:403017 days ago1512076480IN
0x4d6E0922...3EB656402
0 ETH0.000169862
Cooperative Clos...46521502017-11-30 20:57:223017 days ago1512075442IN
0x4d6E0922...3EB656402
0 ETH0.000084911
Cooperative Clos...46520842017-11-30 20:39:273017 days ago1512074367IN
0x4d6E0922...3EB656402
0 ETH0.000099991

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RaidenMicroTransferChannels

Compiler Version
v0.4.17+commit.bdeb9e52

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-11-30
*/

pragma solidity ^0.4.17;

library ECVerify {

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

        bytes32 r;
        bytes32 s;
        uint8 v;

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

    // There is no ERC223 compatible Transfer event, with `_data` included.
}
/// @title Raiden MicroTransfer Channels Contract.
contract RaidenMicroTransferChannels {

    /*
     *  Data structures
     */

    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;

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

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

    struct ClosingRequest {
        uint192 closing_balance;
        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
     */

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

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

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

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

    /*
     *  External functions
     */

    /// @dev Opens a new channel or tops up an existing one, compatibility with ERC 223;
    /// msg.sender is 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
            );
        }
    }

    /// @dev Creates a new channel between a sender and a receiver and transfers
    /// the sender's 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));
    }

    /// @dev Increase the sender's current 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));
    }

    /// @dev Function called when any of the parties wants to close the channel and settle;
    /// receiver needs a balance proof to immediately settle, sender triggers a challenge period.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig The balance message signed by the sender.
    function uncooperativeClose(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance,
        bytes _balance_msg_sig)
        external
    {
        address sender = verifyBalanceProof(_receiver_address, _open_block_number, _balance, _balance_msg_sig);

        if(msg.sender == _receiver_address) {
            settleChannel(sender, _receiver_address, _open_block_number, _balance);
        } else {
            require(msg.sender == sender);
            initChallengePeriod(_receiver_address, _open_block_number, _balance);
        }
    }

    /// @dev Function called by the sender, when he has a closing signature from the receiver;
    /// channel is closed immediately.
    /// @param _receiver_address The address that receives tokens.
    /// @param _open_block_number The block number at which a channel between the
    /// sender and receiver was created.
    /// @param _balance The amount of tokens owed by the sender to the receiver.
    /// @param _balance_msg_sig The balance message signed by the sender.
    /// @param _closing_sig The hash of the signed balance message, signed by the receiver.
    function cooperativeClose(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance,
        bytes _balance_msg_sig,
        bytes _closing_sig)
        external
    {
        // Derive receiver address from signature
        address receiver = ECVerify.ecverify(keccak256(_balance_msg_sig), _closing_sig);
        require(receiver == _receiver_address);

        // Derive sender address from signed balance proof
        address sender = verifyBalanceProof(_receiver_address, _open_block_number, _balance, _balance_msg_sig);
        require(msg.sender == sender);

        settleChannel(sender, receiver, _open_block_number, _balance);
    }

    /// @dev Function for getting 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
        );
    }

    /// @dev Function called by the sender after the challenge period has ended,
    /// in case the receiver has not closed the channel.
    /// @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
        );
    }

    /*
     *  Private functions
     */

    /// @dev Creates a new channel between a sender and a receiver,
    /// only callable by the Token contract.
    /// @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, only callable by the Token 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.
    /// @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 Sender 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 initChallengePeriod(
        address _receiver_address,
        uint32 _open_block_number,
        uint192 _balance)
        private
    {
        bytes32 key = getKey(msg.sender, _receiver_address, _open_block_number);

        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;
        closing_requests[key].closing_balance = _balance;
        ChannelCloseRequested(msg.sender, _receiver_address, _open_block_number, _balance);
    }

    /// @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 pure 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 pure 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);
    }

    /// @notice 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 Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"challenge_period","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getChannelInfo","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint192"},{"name":"","type":"uint32"},{"name":"","type":"uint192"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"},{"name":"_closing_sig","type":"bytes"}],"name":"cooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_deposit","type":"uint192"}],"name":"createChannelERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"channel_deposit_bugbounty_limit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"verifyBalanceProof","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"closing_requests","outputs":[{"name":"closing_balance","type":"uint192"},{"name":"settle_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"deposit","type":"uint192"},{"name":"open_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getKey","outputs":[{"name":"data","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"uncooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_deposit","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_added_deposit","type":"uint192"}],"name":"topUpERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token_address","type":"address"},{"name":"_challenge_period","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","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"}]

606060405234156200001057600080fd5b604051604080620024958339810160405280805190602001909190805190602001909190505060008273ffffffffffffffffffffffffffffffffffffffff16141515156200005d57600080fd5b6200007c82620001c26401000000000262002271176401000000009004565b15156200008857600080fd5b6101f48163ffffffff1610151515620000a057600080fd5b81600060046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200017157600080fd5b6102c65a03f115156200018357600080fd5b505050604051805190501115156200019a57600080fd5b806000806101000a81548163ffffffff021916908363ffffffff1602179055505050620001d5565b600080823b905060008111915050919050565b6122b080620001e56000396000f300606060405236156100d9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c146100de5780630eba6b06146101135780631c6f609b1461021f57806354fd4d50146102b25780635989c283146103405780635a8e9d661461039c5780636108b5ff146103e45780636c68c8371461040d57806377c13323146104fb5780637a7ebd7b1461057d578063803c8383146105ff5780638df4893514610682578063c0ee0b8a14610701578063ce90bafa14610757578063fc0c546a146107c2575b600080fd5b34156100e957600080fd5b6100f1610817565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561011e57600080fd5b610178600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190505061082c565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561022a57600080fd5b6102b0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192908035906020019082018035906020019190919290505061094c565b005b34156102bd57600080fd5b6102c5610a74565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103055780820151818401526020810190506102ea565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034b57600080fd5b61039a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610aad565b005b34156103a757600080fd5b6103e2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610bfd565b005b34156103ef57600080fd5b6103f7610ce4565b6040518082815260200191505060405180910390f35b341561041857600080fd5b6104b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cf1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050657600080fd5b610520600480803560001916906020019091905050610ef9565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561058857600080fd5b6105a2600480803560001916906020019091905050610f51565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561060a57600080fd5b610664600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610fa9565b60405180826000191660001916815260200191505060405180910390f35b341561068d57600080fd5b6106ff600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019190919290505061107b565b005b341561070c57600080fd5b610755600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050611150565b005b341561076257600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506112a7565b005b34156107cd57600080fd5b6107d56113f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b600080600080600061083f888888610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561088457600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505093509350935093565b6000806109a7868660405180838380828437820191505092505050604051809103902085858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061141f565b91508873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415156109e357600080fd5b610a2189898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5d57600080fd5b610a6981838a8a61153b565b505050505050505050565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610ab83383836119ea565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610bd357600080fd5b6102c65a03f11515610be457600080fd5b505050604051805190501515610bf957600080fd5b5050565b6000610c0a338484610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610c4f57600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515610c9157600080fd5b610cdf33848460026000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1661153b565b505050565b68056bc75e2d6310000081565b600080600060405180807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902087878730604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401945050505050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150610eea828561141f565b90508092505050949350505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090509392505050565b60006110bb86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611102576110fd8187878761153b565b611148565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113c57600080fd5b611147868686611c89565b5b505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b257600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff161415156111dd57600080fd5b85859050925060148314806111f25750601883145b15156111fd57600080fd5b61123886868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ebb565b915060148314156112535761124e8883866119ea565b61129d565b61128e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ede565b905061129c88838387611f11565b5b5050505050505050565b6112b333848484611f11565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b5050506040518051905015156113f457600080fd5b505050565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806041855114151561143557600080fd5b6020850151925060408501519150606085015160001a9050601b8160ff16101561146057601b810190505b601b8160ff1614806114755750601c8160ff16145b151561148057600080fd5b600186828585604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114fe57600080fd5b505060206040510351935060008473ffffffffffffffffffffffffffffffffffffffff161415151561152f57600080fd5b83935050505092915050565b6000611545612237565b611550868686610fa9565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff1611151561161b57600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff161115151561166257600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561180957600080fd5b6102c65a03f1151561181a57600080fd5b50505060405180519050151561182f57600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561191c57600080fd5b6102c65a03f1151561192d57600080fd5b50505060405180519050151561194257600080fd5b8363ffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4505050505050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a1f57600080fd5b439150611a2d858584610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611a9a57600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611add57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b2057600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35050505050565b6000611c96338585610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611cdb57600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611d6057600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055508160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050565b60008060208301519050806c010000000000000000000000009004915050919050565b60008060348301519050807c01000000000000000000000000000000000000000000000000000000009004915050919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff16111515611f3b57600080fd5b60008363ffffffff16111515611f5057600080fd5b611f5b858585610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16111515611fc857600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561200b57600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff161115151561208157600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561219057fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45050505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b9050600081119150509190505600a165627a7a72305820b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe0029000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e600000000000000000000000000000000000000000000000000000000000021c0

Deployed Bytecode

0x606060405236156100d9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c146100de5780630eba6b06146101135780631c6f609b1461021f57806354fd4d50146102b25780635989c283146103405780635a8e9d661461039c5780636108b5ff146103e45780636c68c8371461040d57806377c13323146104fb5780637a7ebd7b1461057d578063803c8383146105ff5780638df4893514610682578063c0ee0b8a14610701578063ce90bafa14610757578063fc0c546a146107c2575b600080fd5b34156100e957600080fd5b6100f1610817565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561011e57600080fd5b610178600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190505061082c565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561022a57600080fd5b6102b0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192908035906020019082018035906020019190919290505061094c565b005b34156102bd57600080fd5b6102c5610a74565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103055780820151818401526020810190506102ea565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034b57600080fd5b61039a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610aad565b005b34156103a757600080fd5b6103e2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610bfd565b005b34156103ef57600080fd5b6103f7610ce4565b6040518082815260200191505060405180910390f35b341561041857600080fd5b6104b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cf1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050657600080fd5b610520600480803560001916906020019091905050610ef9565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561058857600080fd5b6105a2600480803560001916906020019091905050610f51565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561060a57600080fd5b610664600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610fa9565b60405180826000191660001916815260200191505060405180910390f35b341561068d57600080fd5b6106ff600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019190919290505061107b565b005b341561070c57600080fd5b610755600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050611150565b005b341561076257600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506112a7565b005b34156107cd57600080fd5b6107d56113f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b600080600080600061083f888888610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561088457600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505093509350935093565b6000806109a7868660405180838380828437820191505092505050604051809103902085858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061141f565b91508873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415156109e357600080fd5b610a2189898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5d57600080fd5b610a6981838a8a61153b565b505050505050505050565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610ab83383836119ea565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610bd357600080fd5b6102c65a03f11515610be457600080fd5b505050604051805190501515610bf957600080fd5b5050565b6000610c0a338484610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610c4f57600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515610c9157600080fd5b610cdf33848460026000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1661153b565b505050565b68056bc75e2d6310000081565b600080600060405180807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902087878730604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401945050505050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150610eea828561141f565b90508092505050949350505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090509392505050565b60006110bb86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611102576110fd8187878761153b565b611148565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113c57600080fd5b611147868686611c89565b5b505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b257600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff161415156111dd57600080fd5b85859050925060148314806111f25750601883145b15156111fd57600080fd5b61123886868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ebb565b915060148314156112535761124e8883866119ea565b61129d565b61128e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ede565b905061129c88838387611f11565b5b5050505050505050565b6112b333848484611f11565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b5050506040518051905015156113f457600080fd5b505050565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806041855114151561143557600080fd5b6020850151925060408501519150606085015160001a9050601b8160ff16101561146057601b810190505b601b8160ff1614806114755750601c8160ff16145b151561148057600080fd5b600186828585604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114fe57600080fd5b505060206040510351935060008473ffffffffffffffffffffffffffffffffffffffff161415151561152f57600080fd5b83935050505092915050565b6000611545612237565b611550868686610fa9565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff1611151561161b57600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff161115151561166257600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561180957600080fd5b6102c65a03f1151561181a57600080fd5b50505060405180519050151561182f57600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561191c57600080fd5b6102c65a03f1151561192d57600080fd5b50505060405180519050151561194257600080fd5b8363ffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4505050505050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a1f57600080fd5b439150611a2d858584610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611a9a57600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611add57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b2057600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35050505050565b6000611c96338585610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611cdb57600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611d6057600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055508160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050565b60008060208301519050806c010000000000000000000000009004915050919050565b60008060348301519050807c01000000000000000000000000000000000000000000000000000000009004915050919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff16111515611f3b57600080fd5b60008363ffffffff16111515611f5057600080fd5b611f5b858585610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16111515611fc857600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561200b57600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff161115151561208157600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561219057fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45050505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b9050600081119150509190505600a165627a7a72305820b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe0029

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

000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e600000000000000000000000000000000000000000000000000000000000021C0

-----Decoded View---------------
Arg [0] : _token_address (address): 0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6
Arg [1] : _challenge_period (uint32): 8640

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6
Arg [1] : 00000000000000000000000000000000000000000000000000000000000021C0


Swarm Source

bzzr://b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.