Contract 0xc7c9b856d33651cc2bcd9e0099efa85f59f78302

 

TxHash Block Age From To Value [TxFee]
0x15da02d79bc0af1b2a06852173649e0759f86f48eb277f12fd3f2fce3c73d59174028501 hr 16 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003095292
0x9f9be875381a9bf6611562231072897049ca8faffc946c1de24799db335977a274024022 hrs 56 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0x851993b2134251e878e798120005a8395fbfbf91aeb22b2d0e45d9362d0c5abd74024012 hrs 57 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003078275
0xf76c31ff99a8b670326e259bf57da593c74a644d34b7048db1409ee26ee872f074023982 hrs 57 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0x20304fcab76686ea546b8d9666f1dcef4016527575855c90b92a27993fd0eeda74023972 hrs 57 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0x545dab7dc554f1859bf3425cf2d2c3a8ac11aff5ee0e8802b45a19ab20266e0674023952 hrs 58 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0xa597f01abcf83484fe141bce739be8ef58a574fb8fae9bcd8a513c754e505b1474023932 hrs 59 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003078275
0x707e224a1bc7b2b613e7d6629d2d7e84e52b71ce539fbf973f08f83002a0750174023922 hrs 59 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003078275
0x7814e0668f7cda31831dee5bd47d18f053814afb707f82c101d836865be5d41e74023903 hrs ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0xa4424b2501ac93da3bb2ee25e39f6b9f36c2da0c8cb6bb7c0c1397792595ccdd74023893 hrs ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003078275
0x3987984d6191768f6638c115d838be4914980c1beb431e7e3f1e0270eb49150274023883 hrs ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003077187
0xb6cb3d83391a25bf4df2aa6a1bad460057afba016361141176241450984e55e374023863 hrs 1 min ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0x23ed924dc4a3e634d7779042590df90bf5159a929c5bed7868c5210eb925061b74023843 hrs 1 min ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0xacc76d139654dbb2bb7088eaf5a5fdecab7b7e2ed4a8c964e12a6603776cb45d74023823 hrs 1 min ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003079363
0xb3d7a549f7a96d8ea150bc94bc6cc8d8da38f8b831bd52957650fa5cb186c37174023803 hrs 2 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002899248
0x0810fa78a2513f238a5b2523c083e0344a0647923655a46467ca3b633ab3271c74023793 hrs 2 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002899248
0x83a513e6777d3105128df7f1371ce3a643d40724f480ed0f4a21b10e01df4f2874023783 hrs 2 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002899248
0x271f50cdc9b0b3cdbeb04b34b5ded03fc760e5bcb74241e36f9053406d4a2dd374023763 hrs 3 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002899248
0xfa147485d88a26852761faa5c96e6980d45078b71aa3554f1bb57965ae2b1dc774023753 hrs 4 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002898224
0x6c24bf3107b300d9b876597efbd376afd125427fc297667b922b373d8550691574023723 hrs 4 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002899248
0x6a9bd58ce0062840e2e7777fa8e3e9e33a248670dac979f5a2a0e301b9f73b6774023713 hrs 4 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.002898224
0xb54db164ae9b99c43d670d1847c679f01de1c4d4b76bd76397c5404b35df113774023083 hrs 18 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.00313446
0xd18485ed012f1130c8c5d5d11a576742122662e6593ee57915bae975b4ec2774739951613 hrs 43 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003131196
0xfa41ea1ffcccfd565625899cdcebae5390763e3c439ab199fc27b2d0c01b30eb739951313 hrs 44 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.003089852
0xba714f4da4c0f12a1e220e25f179c31de1ef01948890518f1fb90252891e33b3739951113 hrs 45 mins ago0x457804851eaf090dad4871f9609010c6868d99d4 IN  0xc7c9b856d33651cc2bcd9e0099efa85f59f783020 Ether0.0031399
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0xa4e08da65ce968ac8bc8e8f21983cbc50c86d440db7b41bd8b89a40f303506c6739737421 hrs 42 mins ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xe5f1c6930357a6e6efa00f6931453b2c485197cb0.09860978 Ether
0x19b4cc959e633d002f94de02591af22aa0c0774aca65cb38ba7a321cc2356a7173917681 day 18 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xf242b862725d82ff70119108496794e9f6f5baff2.41202033 Ether
0x577ea6014e11c1fe66a99b12f04fa4bcba2f7f4a37ec3a9c6db35eeef9353b3e73789673 days 18 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xeb8a55bb0a391a6da45184068c817e98907f32b942.41159159 Ether
0xee904d7aea6d236022a35d41836c324ea52a8dff63485c06bf5aac403cce8a5873775074 days 11 mins ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xec7c792e88b6cc4f640858aa321f3ad1005f42fb7.99895 Ether
0x17d283a5056279beecc6501d13615f9ea30b639f82790ae1eefc75a08e170c4973722044 days 19 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x6d23b6b2608c097af3b75fc8cf3e29c33e07773e1.9991 Ether
0x25405b2914909ec71337f171a5d653279c2c3c158f27dee4155281537343e63673722024 days 19 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x5a407730a3e7420af233d4a5a1095f9dac62a7d51.98395086 Ether
0xbaa9fb757785264e61867674c9718970f5e14aea54bc77148a07ee202df7dc6573722004 days 19 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x2e7b205ece75709ab6822f43ce52bf829b2d99ea2.13268658 Ether
0x7d947505763f94ce0575a1e58c727002eaf1d7c1e42667a51a26152648c288a973671325 days 14 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x6d23b6b2608c097af3b75fc8cf3e29c33e07773e50.99895 Ether
0x9651d605f67b3d73db41e14d7620d6fa3314147787932a2402ce30b005cfc83673604046 days 15 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x38ea73377fe70c9fcf07da5ddb2ad6618cc204180.01395 Ether
0xc52d7e5f4b99244fd77b975bb134ba89fbe64a04e99faf845accaa7d04135da673591046 days 20 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x2e7b205ece75709ab6822f43ce52bf829b2d99ea48.99895 Ether
0x8b072f8ca91dbdb7fb71c43b5fb5ea505f7a01817beb815ff08ffe16fea499b273590346 days 20 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xee0a3a37fab959b857b15bb4c07efba5347db2d848.6955001 Ether
0x7982a22cb74f2f4d0c5007aef928f5e1efa54dba4808a58530423c4625021b1c73435269 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x40a1239fdcdb6b01f373bdf8cfb14ac40ea683610.14658235 Ether
0xf98efb010085659ca0e2368366f74dcea6ff60c62c6b709eae86d5c8f6fe0d1273435269 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x71e9e68c849e4c7e9548d55f573e64f040f71c810.1459006 Ether
0xc40d84e613273c4c8c4e66b53f7015aa2076c3089e2dab0839fce35d7605171b73435259 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xa7ef6281d59de6387121e4cfbad985bad218b0310.14617904 Ether
0x490dd122a312755d57c10525a97ef74199aed16f78c1f897d32b437ac08d1e0a73435249 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xca3e887c4fb6c94b824e83e2562d2d23e21560ce0.14662393 Ether
0x8015ff8ac3c2bc30a5ac8b9f7600973c30a6fd71a67158622bb62d2379b1a82573435229 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x22a08bb10ab9b723130b72cec7572a1187e30cfd0.1466007 Ether
0xdb364fee07711c1d51f5d4029296ba3ffe263c0cea174b3dc282cd1fa545491773435209 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x46c1b1744094c950aa22e8245fbfec94233eeab00.14605284 Ether
0x973f17c757f823bcf71504e0becc2bba0f786e80e74bc5bbcef6c8ad3694308573435199 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x4f4cfce2e56c1f02587c6bf32dddd1fea350f02b0.14655267 Ether
0x9a6abc0493c1fb5953dc8c6e9efd9c8a1d3b468697817099eea0e7dadc1707d673435189 days 6 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x28e127b60fb4281d5f41ebb9fbb0e854259c8fa40.14534954 Ether
0x02042f5a610960023b27c830275d36d286417613f0a2e30b7f1af73b9074a35c73435049 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x59ef85adcd209db51232a05373b5b1aeef46be630.2452839 Ether
0xa7eed170eaef4d866c029a430d420bbb4fbc1427dc9870156350bfbfc51d6ff273435029 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x62d22894d1e406f2691f149f6ff69f03f63c90e70.2451294 Ether
0xb13afc9936333d83b9d9f030f742add52a44814a3dbe6e87d9a7b8729f8de5ed73434969 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020xe782379ca9ef1b4f57f1ea1b2c4802174334f3660.24556759 Ether
0xe6625a621190e288786e5cf7e86867f14186d0f3355f1eb9a51eb656a6de3d9473434949 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x16bc17b86c5a450882957edd420e1653eb6f8b050.24682985 Ether
0x3d3c39f36ac8531123c637a82b23b950e4257259e9564784eddf550958a7389073434929 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x57e3d750f5bb1b8ba60e9f4b67f75a6604e671800.246722 Ether
0xf6c1945052d877b06bb1b199c6d06811023e76cb49f00246aa6420ef46f924ba73434919 days 7 hrs ago0xc7c9b856d33651cc2bcd9e0099efa85f59f783020x3fd1acc8d39d0b34eae5f1fc8024c4e1c1cbb1130.24722069 Ether
[ Download CSV Export 

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x63cef38c75d9805a36d92fa291bae781b41861e1

Contract Name:
R1Exchange

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

///auto-generated single file for verifying contract on etherscan
pragma solidity ^0.4.20;

contract SafeMath {

    function safeAdd(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x + _y;
        assert(z >= _x);
        return z;
    }

    function safeSub(uint256 _x, uint256 _y) internal pure returns (uint256) {
        assert(_x >= _y);
        return _x - _y;
    }

    function safeMul(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 z = _x * _y;
        assert(_x == 0 || z / _x == _y);
        return z;
    }
}

contract Ownable {
    address public owner;


    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    function Ownable() public {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

contract Token {
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);

    function transfer(address _to, uint256 _value) public returns (bool success);

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    function approve(address _spender, uint256 _value) public returns (bool success);

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract R1Exchange is SafeMath, Ownable {
    mapping(address => bool) public admins;
    mapping(address => bool) public feeAccounts;
    // mapping(token address => mapping(owner address => mapping(channelId uint => uint256))) public tokenList;
    mapping(address => mapping(address => mapping(uint256 => uint256))) public tokenList;
    // mapping(owner address =>  mapping(orderHash bytes32 => uint256)) public tokenList;
    mapping(address => mapping(bytes32 => uint256)) public orderFilled;//tokens filled
    mapping(bytes32 => bool) public withdrawn;
    mapping(address => mapping(address => mapping(uint256 => uint256))) public withdrawAllowance;
    mapping(address => mapping(address => mapping(uint256 => uint256))) public applyList;//withdraw apply list
    mapping(address => mapping(address => mapping(uint256 => uint))) public latestApply;//save the latest apply timestamp
    // mapping(owner address => mapping(channelId uint => nonce uint256))) public canceled;
    mapping(address => mapping(uint256 => uint)) public canceled;
    string public constant version = '2.0.0';
    uint public applyWait = 1 days;
    uint public feeRate = 10;
    bool public withdrawEnabled = false;
    bool public stop = false;
    uint256 private DEFAULT_CHANNEL_ID = 0;
    bool public depositToEnabled = true;
    bool public transferEnabled = false;
    bool public changeChannelEnabled = false;
    event Deposit(address indexed token, address indexed user, uint256 amount, uint256 balance, uint256 channelId);
    event DepositTo(address indexed token, address indexed from, address indexed user, uint256 amount, uint256 balance, uint256 channelId);
    event Withdraw(address indexed token, address indexed user, uint256 amount, uint256 balance, uint256 channelId);
    event ApplyWithdraw(address indexed token, address indexed user, uint256 amount, uint256 time, uint256 channelId);
    event ApproveWithdraw(address indexed token, address indexed user, uint256 channelId);
    event Trade(address indexed maker, address indexed taker, uint256 amount, uint256 makerFee, uint256 takerFee, uint256 makerNonce, uint256 takerNonce);
    event InnerTransfer(address indexed token, address indexed from, address indexed to, uint256 amount, uint256 balance, uint256 channelId);
    event ChangeChannel(address indexed token, address indexed user, uint256 amount, uint256 fromChannelId, uint256 toChannelId);
    event BatchCancel(uint256 count, uint256 channelId);
    modifier onlyAdmin {
        require(admins[msg.sender]);
        _;
    }
    modifier isWithdrawEnabled {
        require(withdrawEnabled);
        _;
    }
    modifier isFeeAccount(address fa) {
        require(feeAccounts[fa]);
        _;
    }
    modifier notStop() {
        require(!stop);
        _;
    }
    modifier isDepositToEnabled() {
        require(depositToEnabled);
        _;
    }
    modifier isTransferEnabled() {
        require(transferEnabled);
        _;
    }
    modifier isChangeChannelEnabled() {
        require(changeChannelEnabled);
        _;
    }
    function() public {
        revert();
    }
    function setAdmin(address admin, bool isAdmin) public onlyOwner {
        require(admin != 0);
        admins[admin] = isAdmin;
    }
    function setFeeAccount(address acc, bool asFee) public onlyOwner {
        require(acc != 0);
        feeAccounts[acc] = asFee;
    }
    function enableWithdraw(bool enabled) public onlyOwner {
        withdrawEnabled = enabled;
    }
    function enableDepositTo(bool enabled) public onlyOwner {
        depositToEnabled = enabled;
    }
    function enableTransfer(bool enabled) public onlyOwner {
        transferEnabled = enabled;
    }
    function enableChangeChannel(bool enabled) public onlyOwner {
        changeChannelEnabled = enabled;
    }
    function changeLockTime(uint lock) public onlyOwner {
        require(lock <= 7 days);
        applyWait = lock;
    }
    function changeFeeRate(uint fr) public onlyOwner {
        //max fee rate MUST <=10%
        require(fr >= 10);
        feeRate = fr;
    }
    function stopTrade() public onlyOwner {
        stop = true;
    }
    /**
    * cancel the order that before nonce.
    **/
    function batchCancel(address[] users, uint256[] nonces, uint256 channelId) public onlyAdmin {
        require(users.length == nonces.length);
        uint256 count = 0;
        for (uint i = 0; i < users.length; i++) {
            require(nonces[i] >= canceled[users[i]][channelId]);
            canceled[users[i]][channelId] = nonces[i];
            count++;
        }
        BatchCancel(count, channelId);
    }
    function deposit(uint256 channelId) public payable {
        tokenList[0][msg.sender][channelId] = safeAdd(tokenList[0][msg.sender][channelId], msg.value);
        Deposit(0, msg.sender, msg.value, tokenList[0][msg.sender][channelId], channelId);
    }
    function depositToken(address token, uint256 amount, uint256 channelId) public {
        require(token != 0);
        tokenList[token][msg.sender][channelId] = safeAdd(tokenList[token][msg.sender][channelId], amount);
        require(Token(token).transferFrom(msg.sender, this, amount));
        Deposit(token, msg.sender, amount, tokenList[token][msg.sender][channelId], channelId);
    }
    function depositTo(address to, uint256 channelId) public payable isDepositToEnabled {
        require(to != 0 && msg.value > 0);
        tokenList[0][to][channelId] = safeAdd(tokenList[0][to][channelId], msg.value);
        DepositTo(0, msg.sender, to, msg.value, tokenList[0][to][channelId], channelId);
    }
    function depositTokenTo(address token, address to, uint256 amount, uint256 channelId) public isDepositToEnabled {
        require(token != 0 && to != 0 && amount > 0);
        tokenList[token][to][channelId] = safeAdd(tokenList[token][to][channelId], amount);
        require(Token(token).transferFrom(msg.sender, this, amount));
        DepositTo(token, msg.sender, to, amount, tokenList[token][to][channelId], channelId);
    }
    function batchDepositTokenTo(address[] token, address[] to, uint256[] amount, uint256 channelId) public isDepositToEnabled {
        require(to.length == amount.length && to.length <= 200);
        for (uint i = 0; i < to.length; i++) {
            depositTokenTo(token[i], to[i], amount[i], channelId);
        }
    }
    function innerTransfer(address token, address to, uint256 amount, uint256 channelId) public isTransferEnabled {
        require(to != 0);
        require(amount <= tokenList[token][msg.sender][channelId]);
        tokenList[token][msg.sender][channelId] = safeSub(tokenList[token][msg.sender][channelId], amount);
        tokenList[token][to][channelId] = safeAdd(tokenList[token][to][channelId], amount);
        InnerTransfer(token, msg.sender, to, amount, tokenList[token][msg.sender][channelId], channelId);
    }
    function batchInnerTransfer(address[] token, address[] to, uint256[] amount, uint256 channelId) public isTransferEnabled {
        require(to.length == amount.length && to.length <= 200);
        for (uint i = 0; i < to.length; i++) {
            innerTransfer(token[i], to[i], amount[i], channelId);
        }
    }
    function changeChannel(address token, uint256 amount, uint256 fromChannelId, uint256 toChannelId) public isChangeChannelEnabled {
        require(amount <= tokenList[token][msg.sender][fromChannelId]);
        tokenList[token][msg.sender][fromChannelId] = safeSub(tokenList[token][msg.sender][fromChannelId], amount);
        tokenList[token][msg.sender][toChannelId] = safeAdd(tokenList[token][msg.sender][toChannelId], amount);
        ChangeChannel(token, msg.sender, amount, fromChannelId, toChannelId);
    }
    function batchChangeChannel(address[] token, uint256[] amount, uint256 fromChannelId, uint256 toChannelId) public isChangeChannelEnabled {
        require(token.length == amount.length && amount.length <= 200);
        for (uint i = 0; i < amount.length; i++) {
            changeChannel(token[i], amount[i], fromChannelId, toChannelId);
        }
    }
    function applyWithdraw(address token, uint256 amount, uint256 channelId) public {
        uint256 apply = safeAdd(applyList[token][msg.sender][channelId], amount);
        require(safeAdd(apply, withdrawAllowance[token][msg.sender][channelId]) <= tokenList[token][msg.sender][channelId]);
        applyList[token][msg.sender][channelId] = apply;
        latestApply[token][msg.sender][channelId] = block.timestamp;
        ApplyWithdraw(token, msg.sender, amount, block.timestamp, channelId);
    }
    /**
    * approve user's withdraw application
    **/
    function approveWithdraw(address token, address user, uint256 channelId) public onlyAdmin {
        withdrawAllowance[token][user][channelId] = safeAdd(withdrawAllowance[token][user][channelId], applyList[token][user][channelId]);
        applyList[token][user][channelId] = 0;
        latestApply[token][user][channelId] = 0;
        ApproveWithdraw(token, user, channelId);
    }
    /**
    * user's withdraw will success in two cases:
    *    1. when the admin calls the approveWithdraw function;
    * or 2. when the lock time has passed since the application;
    **/
    function withdraw(address token, uint256 amount, uint256 channelId) public {
        require(amount <= tokenList[token][msg.sender][channelId]);
        if (amount > withdrawAllowance[token][msg.sender][channelId]) {
            //withdraw wait over time
            require(latestApply[token][msg.sender][channelId] != 0 && safeSub(block.timestamp, latestApply[token][msg.sender][channelId]) > applyWait);
            withdrawAllowance[token][msg.sender][channelId] = safeAdd(withdrawAllowance[token][msg.sender][channelId], applyList[token][msg.sender][channelId]);
            applyList[token][msg.sender][channelId] = 0;
        }
        require(amount <= withdrawAllowance[token][msg.sender][channelId]);
        withdrawAllowance[token][msg.sender][channelId] = safeSub(withdrawAllowance[token][msg.sender][channelId], amount);
        tokenList[token][msg.sender][channelId] = safeSub(tokenList[token][msg.sender][channelId], amount);
        latestApply[token][msg.sender][channelId] = 0;
        if (token == 0) {//withdraw ether
            require(msg.sender.send(amount));
        } else {//withdraw token
            require(Token(token).transfer(msg.sender, amount));
        }
        Withdraw(token, msg.sender, amount, tokenList[token][msg.sender][channelId], channelId);
    }
    /**
    * withdraw directly when withdrawEnabled=true
    **/
    function withdrawNoLimit(address token, uint256 amount, uint256 channelId) public isWithdrawEnabled {
        require(amount <= tokenList[token][msg.sender][channelId]);
        tokenList[token][msg.sender][channelId] = safeSub(tokenList[token][msg.sender][channelId], amount);
        if (token == 0) {//withdraw ether
            require(msg.sender.send(amount));
        } else {//withdraw token
            require(Token(token).transfer(msg.sender, amount));
        }
        Withdraw(token, msg.sender, amount, tokenList[token][msg.sender][channelId], channelId);
    }
    struct AdminWithdrawParam {
        address user;
        address token;
        address feeAccount;
        address channelFeeAccount;
        uint256 amount;
        uint256 nonce;
        uint256 fee;
        uint256 channelFee;
        uint256 channelId;
    }
    /**
    * admin withdraw according to user's signed withdraw info
    * PARAMS:
    * addresses:
    * [0] user
    * [1] token
    * [2] feeAccount
    * [3] channelFeeAccount
    * values:
    * [0] amount
    * [1] nonce
    * [2] fee
    * [3] channelFee
    * [4] channelId
    **/
    function adminWithdraw(address[4] addresses, uint256[5] values, uint8 v, bytes32 r, bytes32 s)
    public
    onlyAdmin
    isFeeAccount(addresses[2])
    {
        AdminWithdrawParam memory param = AdminWithdrawParam({
            user : addresses[0],
            token : addresses[1],
            feeAccount : addresses[2],
            channelFeeAccount : addresses[3],
            amount : values[0],
            nonce : values[1],
            fee : values[2],
            channelFee : values[3],
            channelId : values[4]
            });
        require(param.amount <= tokenList[param.token][param.user][param.channelId]);
        param.fee = checkFee(param.amount, param.fee);
        param.channelFee = checkFee(param.amount, param.channelFee);
        bytes32 hash = keccak256(this, param.user, param.token, param.amount, param.nonce, param.channelFeeAccount, param.channelId);
        require(!withdrawn[hash]);
        withdrawn[hash] = true;
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == param.user);
        tokenList[param.token][param.user][param.channelId] = safeSub(tokenList[param.token][param.user][param.channelId], param.amount);
        tokenList[param.token][param.feeAccount][DEFAULT_CHANNEL_ID] = safeAdd(tokenList[param.token][param.feeAccount][DEFAULT_CHANNEL_ID], param.fee);
        tokenList[param.token][param.channelFeeAccount][param.channelId] = safeAdd(tokenList[param.token][param.channelFeeAccount][param.channelId], param.channelFee);
        param.amount = safeSub(param.amount, param.fee);
        param.amount = safeSub(param.amount, param.channelFee);
        if (param.token == 0) {//withdraw ether
            require(param.user.send(param.amount));
        } else {//withdraw token
            require(Token(param.token).transfer(param.user, param.amount));
        }
        Withdraw(param.token, param.user, param.amount, tokenList[param.token][param.user][param.channelId], param.channelId);
    }
    function checkFee(uint256 amount, uint256 fee) private returns (uint256){
        uint256 maxFee = fee;
        if (safeMul(fee, feeRate) > amount) {
            maxFee = amount / feeRate;
        }
        return maxFee;
    }
    function getOrderHash(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, address base, uint256 expires, uint256 nonce, address feeToken, address channelFeeAccount, uint256 channelId) public view returns (bytes32) {
        return keccak256(this, tokenBuy, amountBuy, tokenSell, amountSell, base, expires, nonce, feeToken, channelFeeAccount, channelId);
    }
    function balanceOf(address token, address user, uint256 channelId) public constant returns (uint256) {
        return tokenList[token][user][channelId];
    }
    struct Order {
        address tokenBuy;
        address tokenSell;
        uint256 amountBuy;
        uint256 amountSell;
        address user;
        uint256 fee;
        uint256 expires;
        uint256 nonce;
        bytes32 orderHash;
        address baseToken;
        address feeToken;//0:default;others:payed with erc-20 token
        address channelFeeAccount;
        uint256 channelFee;
        uint256 channelId;
    }
    /**
    * swap maker and taker's tokens according to their signed order info.
    *
    * PARAMS:
    * addresses:
    * [0]:maker tokenBuy
    * [1]:taker tokenBuy
    * [2]:maker tokenSell
    * [3]:taker tokenSell
    * [4]:maker user
    * [5]:taker user
    * [6]:maker baseTokenAddr .default:0 ,then baseToken is ETH
    * [7]:taker baseTokenAddr .default:0 ,then baseToken is ETH
    * [8]:maker feeToken .
    * [9]:taker feeToken .
    * [10]:feeAccount
    * [11]:makerChannelAccount
    * [12]:takerChannelAccount
    * values:
    * [0]:maker amountBuy
    * [1]:taker amountBuy
    * [2]:maker amountSell
    * [3]:taker amountSell
    * [4]:maker fee
    * [5]:taker fee
    * [6]:maker expires
    * [7]:taker expires
    * [8]:maker nonce
    * [9]:taker nonce
    * [10]:tradeAmount of token
    * [11]:makerChannelFee
    * [12]:takerChannelFee
    * [13]:makerChannelId
    * [14]:takerChannelId
    * v,r,s:maker and taker's signature
    **/
    function trade(
        address[13] addresses,
        uint256[15] values,
        uint8[2] v,
        bytes32[2] r,
        bytes32[2] s
    ) public
    onlyAdmin
    isFeeAccount(addresses[10])
    notStop
    {
        Order memory makerOrder = Order({
            tokenBuy : addresses[0],
            tokenSell : addresses[2],
            user : addresses[4],
            amountBuy : values[0],
            amountSell : values[2],
            fee : values[4],
            expires : values[6],
            nonce : values[8],
            orderHash : 0,
            baseToken : addresses[6],
            feeToken : addresses[8],
            channelFeeAccount : addresses[11],
            channelFee : values[11],
            channelId : values[13]
            });
        Order memory takerOrder = Order({
            tokenBuy : addresses[1],
            tokenSell : addresses[3],
            user : addresses[5],
            amountBuy : values[1],
            amountSell : values[3],
            fee : values[5],
            expires : values[7],
            nonce : values[9],
            orderHash : 0,
            baseToken : addresses[7],
            feeToken : addresses[9],
            channelFeeAccount : addresses[12],
            channelFee : values[12],
            channelId : values[14]
            });
        uint256 tradeAmount = values[10];
        //check expires
        require(makerOrder.expires >= block.number && takerOrder.expires >= block.number);
        //check order nonce canceled
        require(makerOrder.nonce >= canceled[makerOrder.user][makerOrder.channelId] && takerOrder.nonce >= canceled[takerOrder.user][takerOrder.channelId]);
        //make sure both is the same trade pair
        require(makerOrder.baseToken == takerOrder.baseToken && makerOrder.tokenBuy == takerOrder.tokenSell && makerOrder.tokenSell == takerOrder.tokenBuy);
        require(takerOrder.baseToken == takerOrder.tokenBuy || takerOrder.baseToken == takerOrder.tokenSell);
        makerOrder.orderHash = getOrderHash(makerOrder.tokenBuy, makerOrder.amountBuy, makerOrder.tokenSell, makerOrder.amountSell, makerOrder.baseToken, makerOrder.expires, makerOrder.nonce, makerOrder.feeToken, makerOrder.channelFeeAccount, makerOrder.channelId);
        takerOrder.orderHash = getOrderHash(takerOrder.tokenBuy, takerOrder.amountBuy, takerOrder.tokenSell, takerOrder.amountSell, takerOrder.baseToken, takerOrder.expires, takerOrder.nonce, takerOrder.feeToken, takerOrder.channelFeeAccount, takerOrder.channelId);
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", makerOrder.orderHash), v[0], r[0], s[0]) == makerOrder.user);
        require(ecrecover(keccak256("\x19Ethereum Signed Message:\n32", takerOrder.orderHash), v[1], r[1], s[1]) == takerOrder.user);
        balance(makerOrder, takerOrder, addresses[10], tradeAmount);
        //event
        Trade(makerOrder.user, takerOrder.user, tradeAmount, makerOrder.fee, takerOrder.fee, makerOrder.nonce, takerOrder.nonce);
    }
    function balance(Order makerOrder, Order takerOrder, address feeAccount, uint256 tradeAmount) internal {
        ///check the price meets the condition.
        ///match condition: (makerOrder.amountSell*takerOrder.amountSell)/(makerOrder.amountBuy*takerOrder.amountBuy) >=1
        require(safeMul(makerOrder.amountSell, takerOrder.amountSell) >= safeMul(makerOrder.amountBuy, takerOrder.amountBuy));
        ///If the price is ok,always use maker's price first!
        uint256 takerBuy = 0;
        uint256 takerSell = 0;
        if (takerOrder.baseToken == takerOrder.tokenBuy) {
            //taker sell tokens
            uint256 makerAmount = safeSub(makerOrder.amountBuy, orderFilled[makerOrder.user][makerOrder.orderHash]);
            uint256 takerAmount = safeSub(takerOrder.amountSell, orderFilled[takerOrder.user][takerOrder.orderHash]);
            require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount);
            takerSell = tradeAmount;
            takerBuy = safeMul(makerOrder.amountSell, takerSell) / makerOrder.amountBuy;
            orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerSell);
            orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerSell);
        } else {
            // taker buy tokens
            takerAmount = safeSub(takerOrder.amountBuy, orderFilled[takerOrder.user][takerOrder.orderHash]);
            makerAmount = safeSub(makerOrder.amountSell, orderFilled[makerOrder.user][makerOrder.orderHash]);
            require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount);
            takerBuy = tradeAmount;
            takerSell = safeMul(makerOrder.amountBuy, takerBuy) / makerOrder.amountSell;
            orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerBuy);
            orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerBuy);
        }
        //taker give tokens
        tokenList[takerOrder.tokenSell][takerOrder.user][takerOrder.channelId] = safeSub(tokenList[takerOrder.tokenSell][takerOrder.user][takerOrder.channelId], takerSell);
        //taker get tokens
        tokenList[takerOrder.tokenBuy][takerOrder.user][takerOrder.channelId] = safeAdd(tokenList[takerOrder.tokenBuy][takerOrder.user][takerOrder.channelId], takerBuy);
        //maker give tokens
        tokenList[makerOrder.tokenSell][makerOrder.user][makerOrder.channelId] = safeSub(tokenList[makerOrder.tokenSell][makerOrder.user][makerOrder.channelId], takerBuy);
        //maker get tokens
        tokenList[makerOrder.tokenBuy][makerOrder.user][makerOrder.channelId] = safeAdd(tokenList[makerOrder.tokenBuy][makerOrder.user][makerOrder.channelId], takerSell);
        chargeFee(makerOrder, feeAccount, takerSell);
        chargeFee(takerOrder, feeAccount, takerBuy);
    }
    ///charge fees.fee can be payed as other erc20 token or the tokens that user get
    ///returns:fees to reduce from the user's tokenBuy
    function chargeFee(Order order, address feeAccount, uint256 amountBuy) internal returns (uint256){
        uint256 totalFee = 0;
        if (order.feeToken != 0) {
            ///use erc-20 token as fee .
            //make sure the user has enough tokens
            totalFee = safeAdd(order.fee, order.channelFee);
            require(totalFee <= tokenList[order.feeToken][order.user][order.channelId]);
            tokenList[order.feeToken][feeAccount][DEFAULT_CHANNEL_ID] = safeAdd(tokenList[order.feeToken][feeAccount][DEFAULT_CHANNEL_ID], order.fee);
            tokenList[order.feeToken][order.channelFeeAccount][order.channelId] = safeAdd(tokenList[order.feeToken][order.channelFeeAccount][order.channelId], order.channelFee);
            tokenList[order.feeToken][order.user][order.channelId] = safeSub(tokenList[order.feeToken][order.user][order.channelId], totalFee);
        } else {
            order.fee = checkFee(amountBuy, order.fee);
            order.channelFee = checkFee(amountBuy, order.channelFee);
            totalFee = safeAdd(order.fee, order.channelFee);
            tokenList[order.tokenBuy][feeAccount][DEFAULT_CHANNEL_ID] = safeAdd(tokenList[order.tokenBuy][feeAccount][DEFAULT_CHANNEL_ID], order.fee);
            tokenList[order.tokenBuy][order.channelFeeAccount][order.channelId] = safeAdd(tokenList[order.tokenBuy][order.channelFeeAccount][order.channelId], order.channelFee);
            tokenList[order.tokenBuy][order.user][order.channelId] = safeSub(tokenList[order.tokenBuy][order.user][order.channelId], totalFee);
        }
    }
    function batchTrade(
        address[13][] addresses,
        uint256[15][] values,
        uint8[2][] v,
        bytes32[2][] r,
        bytes32[2][] s
    ) public onlyAdmin {
        for (uint i = 0; i < addresses.length; i++) {
            trade(addresses[i], values[i], v[i], r[i], s[i]);
        }
    }
    ///help to refund token to users.this method is called when contract needs updating
    function refund(address user, address[] tokens, uint256[] channelIds) public onlyAdmin {
        for (uint i = 0; i < tokens.length; i++) {
            address token = tokens[i];
            for (uint j = 0; j < channelIds.length; j++) {
                uint256 channelId = channelIds[j];
                uint256 amount = tokenList[token][user][channelId];
                if (amount > 0) {
                    tokenList[token][user][channelId] = 0;
                    if (token == 0) {//withdraw ether
                        require(user.send(amount));
                    } else {//withdraw token
                        require(Token(token).transfer(user, amount));
                    }
                    Withdraw(token, user, amount, tokenList[token][user][channelId], channelId);
                }
            }
        }
    }
}

Contract ABI

[{"constant":true,"inputs":[],"name":"stop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenBuy","type":"address"},{"name":"amountBuy","type":"uint256"},{"name":"tokenSell","type":"address"},{"name":"amountSell","type":"uint256"},{"name":"base","type":"address"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"feeToken","type":"address"},{"name":"channelFeeAccount","type":"address"},{"name":"channelId","type":"uint256"}],"name":"getOrderHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address[]"},{"name":"amount","type":"uint256[]"},{"name":"fromChannelId","type":"uint256"},{"name":"toChannelId","type":"uint256"}],"name":"batchChangeChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"applyList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"withdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"withdrawNoLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"tokenList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositToEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"tokens","type":"address[]"},{"name":"channelIds","type":"uint256[]"}],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"},{"name":"isAdmin","type":"bool"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"innerTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orderFilled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"changeChannelEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"applyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"depositTokenTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"},{"name":"channelId","type":"uint256"}],"name":"approveWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"users","type":"address[]"},{"name":"nonces","type":"uint256[]"},{"name":"channelId","type":"uint256"}],"name":"batchCancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address[]"},{"name":"to","type":"address[]"},{"name":"amount","type":"uint256[]"},{"name":"channelId","type":"uint256"}],"name":"batchDepositTokenTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"stopTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"enabled","type":"bool"}],"name":"enableWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"lock","type":"uint256"}],"name":"changeLockTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"acc","type":"address"},{"name":"asFee","type":"bool"}],"name":"setFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"enabled","type":"bool"}],"name":"enableDepositTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"fromChannelId","type":"uint256"},{"name":"toChannelId","type":"uint256"}],"name":"changeChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[13]"},{"name":"values","type":"uint256[15]"},{"name":"v","type":"uint8[2]"},{"name":"r","type":"bytes32[2]"},{"name":"s","type":"bytes32[2]"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[13][]"},{"name":"values","type":"uint256[15][]"},{"name":"v","type":"uint8[2][]"},{"name":"r","type":"bytes32[2][]"},{"name":"s","type":"bytes32[2][]"}],"name":"batchTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"fr","type":"uint256"}],"name":"changeFeeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"canceled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"enabled","type":"bool"}],"name":"enableChangeChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"channelId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"uint256"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address[]"},{"name":"to","type":"address[]"},{"name":"amount","type":"uint256[]"},{"name":"channelId","type":"uint256"}],"name":"batchInnerTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"latestApply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"feeAccounts","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"withdrawAllowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"},{"name":"channelId","type":"uint256"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"enabled","type":"bool"}],"name":"enableTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"applyWait","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[4]"},{"name":"values","type":"uint256[5]"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"adminWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"channelId","type":"uint256"}],"name":"depositTo","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"DepositTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"ApplyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"ApproveWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"maker","type":"address"},{"indexed":true,"name":"taker","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"makerFee","type":"uint256"},{"indexed":false,"name":"takerFee","type":"uint256"},{"indexed":false,"name":"makerNonce","type":"uint256"},{"indexed":false,"name":"takerNonce","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"InnerTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fromChannelId","type":"uint256"},{"indexed":false,"name":"toChannelId","type":"uint256"}],"name":"ChangeChannel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"count","type":"uint256"},{"indexed":false,"name":"channelId","type":"uint256"}],"name":"BatchCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

606060405262015180600a908155600b55600c805461ffff191690556000600d819055600e805460ff191660011762ffff00191690558054600160a060020a03191633600160a060020a03161781556145e890819061005e90396000f30060606040526004361061022c5763ffffffff60e060020a60003504166307da68f5811461023c5780630f4665aa146102635780631d793e9a146102c15780632066b2e4146103595780632287e96a146103815780632c8668d4146103945780632e08c6f4146103b95780633823d66c146103e157806339dd48da146103f7578063411927881461040a578063429b62e5146104a75780634b0bddd2146104c65780634cd412d5146104ea57806354fd4d50146104fd5780635601da3d14610587578063560b3cba146105b257806359a13c4d146105d45780635c8b94e7146105e7578063610043641461060c5780636bf9b3e71461063757806377922e571461065f578063839affc3146106f05780638baeefce146107c15780638da5cb5b146107d457806392e33d141461080357806396cf52271461081b578063978bbdb91461083157806399c6d2de14610844578063a4de3c1914610869578063a5609ab51461088d578063a95bc9a7146108a5578063adf96752146108cd578063af857a84146109b7578063affca93214610c0a578063b0fff5d214610c20578063b42220ad14610c42578063b5c5f67214610c5a578063b6b55f2514610c7f578063bdd9f4e714610c8a578063dcfddcbb14610d5b578063e2e71f9314610d83578063e3ed7bb114610da2578063e93119d914610dca578063ef7ac0e514610df2578063f2eaee0214610e0a578063f2fde38b14610e1d578063fcf3276914610e3c578063ffaad6a514610eab575b341561023757600080fd5b600080fd5b341561024757600080fd5b61024f610ec2565b604051901515815260200160405180910390f35b341561026e57600080fd5b6102af600160a060020a03600435811690602435906044358116906064359060843581169060a4359060c4359060e435811690610104351661012435610ed0565b60405190815260200160405180910390f35b34156102cc57600080fd5b61035760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965050843594602001359350610f7092505050565b005b341561036457600080fd5b6102af600160a060020a0360043581169060243516604435610ffa565b341561038c57600080fd5b61024f61101d565b341561039f57600080fd5b610357600160a060020a0360043516602435604435611026565b34156103c457600080fd5b6102af600160a060020a0360043581169060243516604435611220565b34156103ec57600080fd5b61024f600435611243565b341561040257600080fd5b61024f611258565b341561041557600080fd5b61035760048035600160a060020a03169060446024803590810190830135806020808202016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061126195505050505050565b34156104b257600080fd5b61024f600160a060020a03600435166114a5565b34156104d157600080fd5b610357600160a060020a036004351660243515156114ba565b34156104f557600080fd5b61024f611515565b341561050857600080fd5b610510611523565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561054c578082015183820152602001610534565b50505050905090810190601f1680156105795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561059257600080fd5b610357600160a060020a036004358116906024351660443560643561155a565b34156105bd57600080fd5b6102af600160a060020a03600435166024356116e4565b34156105df57600080fd5b61024f611701565b34156105f257600080fd5b610357600160a060020a0360043516602435604435611710565b341561061757600080fd5b610357600160a060020a0360043581169060243516604435606435611857565b341561064257600080fd5b610357600160a060020a0360043581169060243516604435611a18565b341561066a57600080fd5b6103576004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505093359350611b3d92505050565b34156106fb57600080fd5b610357600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505093359350611c9592505050565b34156107cc57600080fd5b610357611d27565b34156107df57600080fd5b6107e7611d53565b604051600160a060020a03909116815260200160405180910390f35b341561080e57600080fd5b6103576004351515611d62565b341561082657600080fd5b610357600435611d90565b341561083c57600080fd5b6102af611dc0565b341561084f57600080fd5b610357600160a060020a0360043516602435604435611dc6565b341561087457600080fd5b610357600160a060020a03600435166024351515611f51565b341561089857600080fd5b6103576004351515611fac565b34156108b057600080fd5b610357600160a060020a0360043516602435604435606435611fda565b34156108d857600080fd5b61035760046101a481600d6101a0604051908101604052919082826101a08082843782019150505050509190806101e00190600f80602002604051908101604052919082826101e08082843782019150505050509190806040019060028060200260405190810160405280929190826002602002808284378201915050505050919080604001906002806020026040519081016040528092919082600260200280828437820191505050505091908060400190600280602002604051908101604052809291908260026020028082843750939550612131945050505050565b34156109c257600080fd5b61035760046024813581810190830135806020818102016040519081016040528181529291906000602085015b82821015610a2d576101a0808302860190600d90604051908101604052919082826101a08082843750505091835250506001909101906020016109ef565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b82821015610aa0576101e0808302860190600f90604051908101604052919082826101e0808284375050509183525050600190910190602001610a62565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b82821015610b14576040808302860190600290805190810160405280929190826002602002808284375050509183525050600190910190602001610ad5565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b82821015610b88576040808302860190600290805190810160405280929190826002602002808284375050509183525050600190910190602001610b49565b505050505091908035906020019082018035906020019080806020026020016040519081016040528181529291906000602085015b82821015610bfc576040808302860190600290805190810160405280929190826002602002808284375050509183525050600190910190602001610bbd565b505050505091905050612798565b3415610c1557600080fd5b610357600435612852565b3415610c2b57600080fd5b6102af600160a060020a0360043516602435612880565b3415610c4d57600080fd5b610357600435151561289d565b3415610c6557600080fd5b610357600160a060020a03600435166024356044356128d4565b610357600435612bc8565b3415610c9557600080fd5b610357600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505093359350612c8592505050565b3415610d6657600080fd5b6102af600160a060020a0360043581169060243516604435612d1c565b3415610d8e57600080fd5b61024f600160a060020a0360043516612d3f565b3415610dad57600080fd5b6102af600160a060020a0360043581169060243516604435612d54565b3415610dd557600080fd5b6102af600160a060020a0360043581169060243516604435612d77565b3415610dfd57600080fd5b6103576004351515612da9565b3415610e1557600080fd5b6102af612dde565b3415610e2857600080fd5b610357600160a060020a0360043516612de4565b3415610e4757600080fd5b610357600460848180608060405190810160405291908282608080828437820191505050505091908060a001906005806020026040519081016040529190828260a080828437509395505050823560ff169260208101359250604001359050612e7f565b610357600160a060020a03600435166024356135fc565b600c54610100900460ff1681565b6000308b8b8b8b8b8b8b8b8b8b6040516c01000000000000000000000000600160a060020a039c8d16810282529a8c168b0260148201526028810199909952968a1689026048890152605c8801959095529288168702607c870152609086019190915260b08501528516840260d084015290931690910260e482015260f881019190915261011801604051809103902090509a9950505050505050505050565b600e5460009062010000900460ff161515610f8a57600080fd5b83518551148015610f9d575060c8845111155b1515610fa857600080fd5b5060005b8351811015610ff357610feb858281518110610fc457fe5b90602001906020020151858381518110610fda57fe5b906020019060200201518585611fda565b600101610fac565b5050505050565b600760209081526000938452604080852082529284528284209052825290205481565b600c5460ff1681565b600c5460ff16151561103757600080fd5b600160a060020a0380841660009081526003602090815260408083203390941683529281528282208483529052205482111561107257600080fd5b600160a060020a038084166000908152600360209081526040808320339094168352928152828220848352905220546110ab90836136f4565b600160a060020a03808516600081815260036020908152604080832033909516835293815283822086835290529190912091909155151561111c57600160a060020a03331682156108fc0283604051600060405180830381858888f19350505050151561111757600080fd5b61119f565b82600160a060020a031663a9059cbb338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561117957600080fd5b6102c65a03f1151561118a57600080fd5b50505060405180519050151561119f57600080fd5b600160a060020a0383811660008181526003602090815260408083203390951680845294825280832086845290915290819020547febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9186919086905180848152602001838152602001828152602001935050505060405180910390a3505050565b600360209081526000938452604080852082529284528284209052825290205481565b60056020526000908152604090205460ff1681565b600e5460ff1681565b600160a060020a033316600090815260016020526040812054819081908190819060ff16151561129057600080fd5b600094505b865185101561149b578685815181106112aa57fe5b906020019060200201519350600092505b8551831015611490578583815181106112d057fe5b90602001906020020151600160a060020a038086166000908152600360209081526040808320938d16835292815282822084835290529081205491935090915081111561148557600160a060020a038085166000818152600360209081526040808320948d168352938152838220868352905291822091909155151561138657600160a060020a03881681156108fc0282604051600060405180830381858888f19350505050151561138157600080fd5b611409565b83600160a060020a031663a9059cbb898360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156113e357600080fd5b6102c65a03f115156113f457600080fd5b50505060405180519050151561140957600080fd5b600160a060020a038481166000818152600360209081526040808320948d1680845294825280832087845290915290819020547febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9185919087905180848152602001838152602001828152602001935050505060405180910390a35b6001909201916112bb565b600190940193611295565b5050505050505050565b60016020526000908152604090205460ff1681565b60005433600160a060020a039081169116146114d557600080fd5b600160a060020a03821615156114ea57600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b600e54610100900460ff1681565b60408051908101604052600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015281565b600e54610100900460ff16151561157057600080fd5b600160a060020a038316151561158557600080fd5b600160a060020a038085166000908152600360209081526040808320339094168352928152828220848352905220548211156115c057600080fd5b600160a060020a038085166000908152600360209081526040808320339094168352928152828220848352905220546115f990836136f4565b600160a060020a0380861660009081526003602090815260408083203385168452808352818420878552835281842095909555928716825292835281812084825290925290205461164a9083613706565b600160a060020a0380861660008181526003602090815260408083208986168085528184528285208986528452828520979097553390951680845294825280832087845290915290819020547f6e878aff7e74cbd83d8c07e128ce4635ed1f7d59d65d1f42d465bee84eb3460e9187919087905180848152602001838152602001828152602001935050505060405180910390a450505050565b600460209081526000928352604080842090915290825290205481565b600e5462010000900460ff1681565b600160a060020a03808416600090815260076020908152604080832033909416835292815282822084835290529081205461174b9084613706565b600160a060020a038086166000818152600360209081526040808320339095168084529482528083208884528252808320549383526006825280832094835293815283822087835290529190912054919250906117a9908390613706565b11156117b457600080fd5b600160a060020a0380851660008181526007602090815260408083203390951680845294825280832087845282528083208690558383526008825280832085845282528083208784529091529081902042908190557f062f8db33ce66010d5d335b9de2c68f7a59521142597b70f81220b3e97f4c9939187919087905180848152602001838152602001828152602001935050505060405180910390a350505050565b600e5460ff16151561186857600080fd5b600160a060020a038416158015906118885750600160a060020a03831615155b80156118945750600082115b151561189f57600080fd5b600160a060020a0380851660009081526003602090815260408083209387168352928152828220848352905220546118d79083613706565b600160a060020a0380861660008181526003602090815260408083209489168352938152838220868352905282812093909355916323b872dd9133913091879190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561196c57600080fd5b6102c65a03f1151561197d57600080fd5b50505060405180519050151561199257600080fd5b600160a060020a03848116600081815260036020908152604080832085891680855290835281842087855290925291829020549093331692917fb8549480a740327017d760034cf7d1b112890eb0948c99dbd7da38738096f75991879187905180848152602001838152602001828152602001935050505060405180910390a450505050565b600160a060020a03331660009081526001602052604090205460ff161515611a3f57600080fd5b600160a060020a0380841660008181526006602090815260408083209487168084529482528083208684528252808320549383526007825280832094835293815283822085835290529190912054611a979190613706565b600160a060020a038085166000818152600660209081526040808320948816808452948252808320878452825280832095909555828252600781528482208483528152848220868352815284822082905582825260088152848220848352815284822086835290528381205590917f1c6434ded5c8badcab3e8bb92e5cc66d78f4d88ff5e81846bd329f2f81d0d2749084905190815260200160405180910390a3505050565b600160a060020a033316600090815260016020526040812054819060ff161515611b6657600080fd5b8351855114611b7457600080fd5b5060009050805b8451811015611c545760096000868381518110611b9457fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020600084815260200190815260200160002054848281518110611bdc57fe5b906020019060200201511015611bf157600080fd5b838181518110611bfd57fe5b9060200190602002015160096000878481518110611c1757fe5b90602001906020020151600160a060020a031681526020808201929092526040908101600090812087825290925290205560019182019101611b7b565b7feeea1444156f4442f9b8876353b17a5efc18632b2d1e773930c1a3303d5cba9e828460405191825260208201526040908101905180910390a15050505050565b600e5460009060ff161515611ca957600080fd5b82518451148015611cbc575060c8845111155b1515611cc757600080fd5b5060005b8351811015610ff357611d1f858281518110611ce357fe5b90602001906020020151858381518110611cf957fe5b90602001906020020151858481518110611d0f57fe5b9060200190602002015185611857565b600101611ccb565b60005433600160a060020a03908116911614611d4257600080fd5b600c805461ff001916610100179055565b600054600160a060020a031681565b60005433600160a060020a03908116911614611d7d57600080fd5b600c805460ff1916911515919091179055565b60005433600160a060020a03908116911614611dab57600080fd5b62093a80811115611dbb57600080fd5b600a55565b600b5481565b600160a060020a0383161515611ddb57600080fd5b600160a060020a03808416600090815260036020908152604080832033909416835292815282822084835290522054611e149083613706565b600160a060020a03808516600081815260036020908152604080832033958616845282528083208784529091528082209490945590926323b872dd92913091879190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611eaa57600080fd5b6102c65a03f11515611ebb57600080fd5b505050604051805190501515611ed057600080fd5b600160a060020a0383811660008181526003602090815260408083203390951680845294825280832086845290915290819020547f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69186919086905180848152602001838152602001828152602001935050505060405180910390a3505050565b60005433600160a060020a03908116911614611f6c57600080fd5b600160a060020a0382161515611f8157600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b60005433600160a060020a03908116911614611fc757600080fd5b600e805460ff1916911515919091179055565b600e5462010000900460ff161515611ff157600080fd5b600160a060020a0380851660009081526003602090815260408083203390941683529281528282208583529052205483111561202c57600080fd5b600160a060020a0380851660009081526003602090815260408083203390941683529281528282208583529052205461206590846136f4565b600160a060020a0385811660009081526003602090815260408083203390941683529281528282208683529052818120929092558282529020546120a99084613706565b600160a060020a03808616600081815260036020908152604080832033909516808452948252808320878452909152908190209390935590917fbb69f2324604d3dc028e651782c9bc2152cb34213ecb64bb5c2312ab3dabf696908690869086905180848152602001838152602001828152602001935050505060405180910390a350505050565b6121396144dc565b6121416144dc565b600160a060020a03331660009081526001602052604081205460ff16151561216857600080fd5b610140880151600160a060020a03811660009081526002602052604090205460ff16151561219557600080fd5b600c54610100900460ff16156121aa57600080fd5b6101c0604051908101604052808a51600160a060020a0316815260200160408b0151600160a060020a031681526020018951815260200160408a0151815260200160808b0151600160a060020a0316815260200160808a0151815260200160c08a015181526020016101008a015181526000602082015260400160c08b0151600160a060020a031681526020016101008b0151600160a060020a031681526020016101608b0151600160a060020a031681526020016101608a015181526020016101a08a0151905293506101c06040519081016040528060208b0151600160a060020a0316815260200160608b0151600160a060020a031681526020018960016020020151815260200160608a0151815260200160a08b0151600160a060020a0316815260200160a08a0151815260200160e08a015181526020016101208a015181526000602082015260400160e08b0151600160a060020a031681526020016101208b0151600160a060020a031681526020016101808b0151600160a060020a031681526020016101808a015181526020016101c08a0151905292506101408801519150438460c00151101580156123675750438360c0015110155b151561237257600080fd5b600960008560800151600160a060020a0316600160a060020a031681526020019081526020016000206000856101a001518152602001908152602001600020548460e00151101580156124085750600960008460800151600160a060020a0316600160a060020a031681526020019081526020016000206000846101a001518152602001908152602001600020548360e0015110155b151561241357600080fd5b826101200151600160a060020a0316846101200151600160a060020a031614801561245457508260200151600160a060020a03168451600160a060020a0316145b801561247657508251600160a060020a03168460200151600160a060020a0316145b151561248157600080fd5b8251600160a060020a0316836101200151600160a060020a031614806124c157508260200151600160a060020a0316836101200151600160a060020a0316145b15156124cc57600080fd5b61250784518560400151866020015187606001518861012001518960c001518a60e001518b61014001518c61016001518d6101a00151610ed0565b61010085015261254883518460400151856020015186606001518761012001518860c001518960e001518a61014001518b61016001518c6101a00151610ed0565b6101008401526080840151600160a060020a031660018561010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c016040519081900390208951895189516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561260357600080fd5b505060206040510351600160a060020a03161461261f57600080fd5b8260800151600160a060020a031660018461010001516040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405190819003902060208a015160208a015160208a01516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156126dd57600080fd5b505060206040510351600160a060020a0316146126f957600080fd5b61270a84846101408c01518561371c565b8260800151600160a060020a03168460800151600160a060020a03167f01f5d7c359dba416997ea6c723ea4663e9ad524f956ed8bb3b5234e6475a7285848760a001518760a001518960e001518960e00151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a3505050505050505050565b600160a060020a03331660009081526001602052604081205460ff1615156127bf57600080fd5b5060005b855181101561284a576128428682815181106127db57fe5b906020019060200201518683815181106127f157fe5b9060200190602002015186848151811061280757fe5b9060200190602002015186858151811061281d57fe5b9060200190602002015186868151811061283357fe5b90602001906020020151612131565b6001016127c3565b505050505050565b60005433600160a060020a0390811691161461286d57600080fd5b600a81101561287b57600080fd5b600b55565b600960209081526000928352604080842090915290825290205481565b60005433600160a060020a039081169116146128b857600080fd5b600e8054911515620100000262ff000019909216919091179055565b600160a060020a0380841660009081526003602090815260408083203390941683529281528282208483529052205482111561290f57600080fd5b600160a060020a03808416600090815260066020908152604080832033909416835292815282822084835290522054821115612a7257600160a060020a03808416600090815260086020908152604080832033909416835292815282822084835290522054158015906129bc5750600a54600160a060020a038085166000908152600860209081526040808320339094168352928152828220858352905220546129ba9042906136f4565b115b15156129c757600080fd5b600160a060020a038084166000818152600660209081526040808320339095168084529482528083208684528252808320549383526007825280832094835293815283822085835290529190912054612a209190613706565b600160a060020a03808516600081815260066020908152604080832033909516808452948252808320878452825280832095909555918152600782528381209281529181528282208483529052908120555b600160a060020a03808416600090815260066020908152604080832033909416835292815282822084835290522054821115612aad57600080fd5b600160a060020a03808416600090815260066020908152604080832033909416835292815282822084835290522054612ae690836136f4565b600160a060020a038085166000818152600660209081526040808320339095168084529482528083208784528252808320959095559181526003825283812092815291815282822084835290522054612b3f90836136f4565b600160a060020a038085166000818152600360209081526040808320339095168084529482528083208784528252808320959095558282526008815284822093825292835283812085825290925291812055151561111c57600160a060020a03331682156108fc0283604051600060405180830381858888f19350505050151561111757600080fd5b33600160a060020a0316600090815260008051602061459d83398151915260209081526040808320848452909152902054612c039034613706565b600160a060020a033316600081815260008051602061459d83398151915260209081526040808320868452909152808220849055919290917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f691349186905180848152602001838152602001828152602001935050505060405180910390a350565b600e54600090610100900460ff161515612c9e57600080fd5b82518451148015612cb1575060c8845111155b1515612cbc57600080fd5b5060005b8351811015610ff357612d14858281518110612cd857fe5b90602001906020020151858381518110612cee57fe5b90602001906020020151858481518110612d0457fe5b906020019060200201518561155a565b600101612cc0565b600860209081526000938452604080852082529284528284209052825290205481565b60026020526000908152604090205460ff1681565b600660209081526000938452604080852082529284528284209052825290205481565b600160a060020a0392831660009081526003602090815260408083209490951682529283528381209181529152205490565b60005433600160a060020a03908116911614612dc457600080fd5b600e80549115156101000261ff0019909216919091179055565b600a5481565b60005433600160a060020a03908116911614612dff57600080fd5b600160a060020a0381161515612e1457600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b612e87614550565b600160a060020a03331660009081526001602052604081205460ff161515612eae57600080fd5b6040870151600160a060020a03811660009081526002602052604090205460ff161515612eda57600080fd5b610120604051908101604052808951600160a060020a031681526020018960016020020151600160a060020a0316815260200160408a0151600160a060020a0316815260200160608a0151600160a060020a0316815260200188518152602001886001602002015181526020016040890151815260200160608901518152602001608089015190529250600360006020850151600160a060020a0316600160a060020a0316815260200190815260200160002060008460000151600160a060020a0316600160a060020a03168152602001908152602001600020600084610100015181526020019081526020016000205483608001511115612fdb57600080fd5b612fed83608001518460c00151613f15565b60c084015261300460808401518460e00151613f15565b60e0840152308351846020015185608001518660a0015187606001518861010001516040516c01000000000000000000000000600160a060020a03988916810282529688168702601482015294871686026028860152603c850193909352605c840191909152909316909102607c820152609081019190915260b00160405190819003902060008181526005602052604090205490925060ff16156130a857600080fd5b6000828152600560205260409020805460ff191660011790558251600160a060020a03166001836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208888886040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561316a57600080fd5b505060206040510351600160a060020a03161461318657600080fd5b6131fa600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560000151600160a060020a0316600160a060020a03168152602001908152602001600020600085610100015181526020019081526020016000205484608001516136f4565b600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560000151600160a060020a0316600160a060020a0316815260200190815260200160002060008561010001518152602001908152602001600020819055506132d5600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560400151600160a060020a0316600160a060020a031681526020019081526020016000206000600d548152602001908152602001600020548460c00151613706565b600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560400151600160a060020a0316600160a060020a031681526020019081526020016000206000600d548152602001908152602001600020819055506133b0600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560600151600160a060020a0316600160a060020a0316815260200190815260200160002060008561010001518152602001908152602001600020548460e00151613706565b600360008560200151600160a060020a0316600160a060020a0316815260200190815260200160002060008560600151600160a060020a0316600160a060020a031681526020019081526020016000206000856101000151815260208101919091526040016000205561342b60808401518460c001516136f4565b6080840190815261344190518460e001516136f4565b60808401526020830151600160a060020a03161515613497578251600160a060020a03166108fc84608001519081150290604051600060405180830381858888f19350505050151561349257600080fd5b613523565b8260200151600160a060020a031663a9059cbb8451856080015160006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156134fd57600080fd5b6102c65a03f1151561350e57600080fd5b50505060405180519050151561352357600080fd5b8251600160a060020a03168360200151600160a060020a03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8560800151600360008860200151600160a060020a0316600160a060020a0316815260200190815260200160002060008860000151600160a060020a0316600160a060020a03168152602001908152602001600020600088610100015181526020019081526020016000205487610100015160405180848152602001838152602001828152602001935050505060405180910390a35050505050505050565b600e5460ff16151561360d57600080fd5b600160a060020a038216158015906136255750600034115b151561363057600080fd5b600160a060020a038216600090815260008051602061459d8339815191526020908152604080832084845290915290205461366b9034613706565b600160a060020a03838116600081815260008051602061459d833981519152602090815260408083208784529091528082208590559193339093169290917fb8549480a740327017d760034cf7d1b112890eb0948c99dbd7da38738096f75991349187905180848152602001838152602001828152602001935050505060405180910390a45050565b60008183101561370057fe5b50900390565b60008282018381101561371557fe5b9392505050565b60008060008061373488604001518860400151613f44565b61374689606001518960600151613f44565b101561375157600080fd5b600093508392508651600160a060020a0316876101200151600160a060020a03161415613987576137c78860400151600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020546136f4565b91506138188760600151600460008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a610100015181526020810191909152604001600020546136f4565b905060008511801561382a5750818511155b80156138365750808511155b151561384157600080fd5b8492508760400151613857896060015185613f44565b81151561386057fe5b0493506138ae600460008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101000151815260208101919091526040016000205484613706565b600460008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101000151815260208101919091526040016000908120919091556139409060049060808b0151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101000151815260208101919091526040016000205484613706565b600460008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a61010001518152602081019190915260400160002055613b92565b6139d68760400151600460008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a610100015181526020810191909152604001600020546136f4565b9050613a278860600151600460008b60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008b610100015181526020810191909152604001600020546136f4565b9150600085118015613a395750818511155b8015613a455750808511155b1515613a5057600080fd5b8493508760600151613a66896040015186613f44565b811515613a6f57fe5b049250613abd600460008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101000151815260208101919091526040016000205485613706565b600460008960800151600160a060020a0316600160a060020a03168152602001908152602001600020600089610100015181526020810191909152604001600090812091909155613b4f9060049060808b0151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101000151815260208101919091526040016000205485613706565b600460008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a610100015181526020810191909152604001600020555b613c02600360008960200151600160a060020a0316600160a060020a0316815260200190815260200160002060008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101a00151815260200190815260200160002054846136f4565b600360008960200151600160a060020a0316600160a060020a0316815260200190815260200160002060008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101a00151815260200190815260200160002081905550613cdc600360008960000151600160a060020a0316600160a060020a0316815260200190815260200160002060008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101a0015181526020019081526020016000205485613706565b600360008951600160a060020a0316600160a060020a0316815260200190815260200160002060008960800151600160a060020a0316600160a060020a031681526020019081526020016000206000896101a00151815260200190815260200160002081905550613db3600360008a60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101a00151815260200190815260200160002054856136f4565b600360008a60200151600160a060020a0316600160a060020a0316815260200190815260200160002060008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101a00151815260200190815260200160002081905550613e8d600360008a60000151600160a060020a0316600160a060020a0316815260200190815260200160002060008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101a0015181526020019081526020016000205484613706565b600360008a51600160a060020a0316600160a060020a0316815260200190815260200160002060008a60800151600160a060020a0316600160a060020a0316815260200190815260200160002060008a6101a001518152602081019190915260400160002055613efe888785613f68565b50613f0a878786613f68565b505050505050505050565b60008082905083613f2884600b54613f44565b111561371557600b5484811515613f3b57fe5b04949350505050565b6000828202831580613f605750828482811515613f5d57fe5b04145b151561371557fe5b600080610140850151600160a060020a03161561425d57613f928560a00151866101800151613706565b905060036000866101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008660800151600160a060020a0316600160a060020a031681526020019081526020016000206000866101a00151815260200190815260200160002054811115151561400a57600080fd5b61405760036000876101400151600160a060020a039081168252602080830193909352604091820160009081209189168152908352818120600d54825290925290205460a0870151613706565b60036000876101400151600160a060020a039081168252602080830193909352604091820160009081209189168152908352818120600d54825290925281209190915561411190600390610140880151600160a060020a0316600160a060020a031681526020019081526020016000206000876101600151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a00151815260200190815260200160002054866101800151613706565b60036000876101400151600160a060020a0316600160a060020a031681526020019081526020016000206000876101600151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a001518152602001908152602001600020819055506141ee60036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a00151815260200190815260200160002054826136f4565b60036000876101400151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a0015181526020810191909152604001600020556144d4565b61426b838660a00151613f15565b60a086015261427f83610180870151613f15565b61018086015261429860a0860151866101800151613706565b90506142e3600360008751600160a060020a039081168252602080830193909352604091820160009081209189168152908352818120600d54825290925290205460a0870151613706565b600360008751600160a060020a039081168252602080830193909352604091820160009081209189168152908352818120600d548252909252812091909155614395906003908751600160a060020a0316600160a060020a031681526020019081526020016000206000876101600151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a00151815260200190815260200160002054866101800151613706565b600360008751600160a060020a0316600160a060020a031681526020019081526020016000206000876101600151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a0015181526020019081526020016000208190555061446d600360008760000151600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a00151815260200190815260200160002054826136f4565b600360008751600160a060020a0316600160a060020a0316815260200190815260200160002060008760800151600160a060020a0316600160a060020a031681526020019081526020016000206000876101a0015181526020810191909152604001600020555b509392505050565b6101c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082015290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201529056003617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92effa165627a7a723058200d1225673238323992ca55afee13200a0daef9e7ac34865282ae9922677b1c6c0029

Swarm Source

bzzr://0d1225673238323992ca55afee13200a0daef9e7ac34865282ae9922677b1c6c
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.