Contract Overview
Balance: 56.095795060159168881 Ether
Ether Value: $6,698.96 (@ $119.42/ETH)
Transactions: 30693 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x8a1ff1f8a84c78d89cbc3d2fd4e6442e68af4a9bat txn 0x9fc7d3e77c02fb00c537640114369ec5f1fbf748ac69a819c2d6dddbf08279b1
Token Balance:
 Latest 25 transactions from a total of 30693 transactions

TxHash Age From To Value [TxFee]
0x74502910cc4827e571232e41c6174e9b0482d9ed156975d4ada1ccbd212691116 hrs 24 mins ago0x09688bcace74aa3a3594d1c188c9de591979c166  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000248616
0x0157c61e4db5692328c97873f0b967f18ff6ca3a52091fa4d5dba34ed12908a16 hrs 27 mins ago0x09688bcace74aa3a3594d1c188c9de591979c166  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0.002 Ether0.000133128
0xebb6e467cfa624f4cc06089b2a5cc8a8a3bd9854fbaa7888b49c884ac64377061 day 17 hrs ago0xece733232b5ab4db65c80538dc82ef7c66e92360  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406935002
0x65603c8fabb97a1da9af0dac5612dc619427df43ace0ce2e5cd4593ea17930d21 day 17 hrs ago0xece733232b5ab4db65c80538dc82ef7c66e92360  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000451551003
0x74f9cda1b84233de72578684fdb727bab6bf9bd4a1c4720fc406899abde065a21 day 22 hrs ago0x942c4fd45a6268514f3270a540047b009a2adc09  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000409454622
0x2e5f153ee15150e377bbec367c699f342fe3bbcd5e7333c95dc1314eb2ecb7b51 day 22 hrs ago0x145ef3af142c4cb439a51f986ed78ad3f8889e41  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406743002
0x9c165a6de8803318382cc1d3de8df3fda52a5b691f5e33690b629053fe38f39d1 day 22 hrs ago0x942c4fd45a6268514f3270a540047b009a2adc09  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406935002
0x3a3f9f2c0a7c51c948db73de9d6ce5c9e13a196956e24a1828a86299108fbf671 day 23 hrs ago0x15eeb959942ec0688331a3d10a6bba63f432d023  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406743002
0xe419feddb013a4a6786baf68370b3aac83c26c9f0bc3e6a2566530a3b824939a1 day 23 hrs ago0x3279d1a86c5c0ea7348a9f6b59c6b352e693e042  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406743002
0x88f557518c0bec432d19970b11f0a550a2d1f81901aae4383e108d1360a4609e4 days 57 mins ago0xa806904033acc4d3523ae3c6059253a9d7c56ae9  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000141324
0xd492c15654f71ae0138ec02f5560c391bd927e223780ce40287c7ac25c8cbeb94 days 2 hrs ago0xa806904033acc4d3523ae3c6059253a9d7c56ae9  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000074484
0x14502ec189300f92e6efe53f4b9fa0bb8c49fe5e27862532c99f21ec44e5515d6 days 3 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000143424
0xb22aee665931e9b5bcb2ef9bfe06706ee21aa4adbc26c50e5f05755ac79fba576 days 3 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406959002
0x0a334093a4e5c6507b60e01b3aaead5f39cd5cb3454cc181054470b3b8dd98336 days 3 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000271290002
0x37bf753634c587ccbe1274320be8d96a92667df89af831be451666e2d4e1fa406 days 3 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000270906002
0x6befcf4d187419035604e1ecc6766f115c9ea6b14b432c2c378e6bfb54b82ec06 days 3 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0.7 Ether0.000117504
0xe057e3c34b3d37712a4e25c61f3710d911cd8561ee4f07ec6b92d023dd2e07256 days 4 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000095616
0x4dfbd44636ff57b0bbb6b720302eb14834ae0f7a3a6aa1e798895c846ef6bc8c6 days 4 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000609862502
0x3e048a9b194b56330d0a0b197f9007e158e555e2d52832506b3de29a2c5eb3de6 days 4 hrs ago0xb28a0023c2ce02f66e068026a2d81bdcbce402a5  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0.05 Ether0.000088752
0xeac9bbcde5afcce771ff4ec736bcb480039fe82b6dc1cfbfd5f1730f5a19cef96 days 11 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.00022553
0x1503a14f92d7d797003f836c16b4b6bc814009bc8c2a96605a34afea85bd1f576 days 11 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.001354090002
0x7eea255420d03fbc632b5153ea3bfeb553e5e40b8227febd70dcd6b015ac9a0c6 days 11 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.00034025
0x2a25bcf6604924b95af7bac0f7e7ce38eda2dc4a6766f1c0bb46d68cfe5dbf586 days 14 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000067659
0x70b161d63f0e73fcd344b61dae05e8dcdfd4464a6ee81dc35fbfae8a41b3b6906 days 14 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000406611002
0x0dcf94aa58b5c17f0ab5b41349bb4564918dbd4b123d52039b481d1de56de6d06 days 14 hrs ago0xa9800911bb546304cffe23e49e05153191c87324  IN   0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0 Ether0.000204342
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xeac9bbcde5afcce771ff4ec736bcb480039fe82b6dc1cfbfd5f1730f5a19cef970760896 days 11 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xa9800911bb546304cffe23e49e05153191c873240.0109725 Ether
0x2a25bcf6604924b95af7bac0f7e7ce38eda2dc4a6766f1c0bb46d68cfe5dbf5870755176 days 14 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xa9800911bb546304cffe23e49e05153191c873240.017955 Ether
0x7761e442a412c5506e48805d2c25cc3e0a9a28efd18a9790e14edbd00690b5e770742616 days 19 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x4840f760edbb5774f2e719810e3a5092c39001550.009975 Ether
0x3a995531d8c1826cc428bfc4d643b2b826b9711a6478b86c200e322eb56994a2703615013 days 15 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x8a1ff1f8a84c78d89cbc3d2fd4e6442e68af4a9b0.400957899012498173 Ether
0x20a74f2c4a3d94f43501da991c83e40a3b68305ea02071c2c87e8c642464d35d699769720 days 11 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x8fa517b2803e21d4137c52fdd5914b7304cd23f00.103 Ether
0x9fb884b819b3312f4b8af60261e19419e5a6c01484a1d093fd3857d2f06aa224699767120 days 12 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x8fa517b2803e21d4137c52fdd5914b7304cd23f00.101730401 Ether
0x6e49b70d6eeab37277cd729edb43cd00bbc1b9e1811596293733df8af7fdc3c1697764623 days 21 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x307826837e60f3b62fc6242d6286aa8c45ce6ceb1 wei
0xd325cb7dbcb523f1aa9bb52652be17e0aba89e335dd331085a7ed897e6fbd39b697561824 days 5 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x8e6875b9b7f28b15230f3f1a4bba89cdc3fe41ec27.730673316708229426 Ether
0x45ed411870d7371ac8a5aca9b3777b1654f61741c595a6996b2a4dd2caa9cb07696485226 days 1 hr ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x48850f503412d8a6e3d63541f0e225f04b13a5440.02995 Ether
0xf8fdb5c6087438b8820d573bb471d68980b86fbdc1adf29ed61c0cc411ba4f83693839330 days 12 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x382917ba8bc263343c00264268817b6b85bb3d2e0.498753117135 Ether
0x4e22834fd26aa30354d4ab915e3d5e70792fd4488520fb4c07919a03c0516f25693691630 days 18 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x48850f503412d8a6e3d63541f0e225f04b13a5440.020972643 Ether
0x0deb1932d5575bdf9b5b026991e77deb01beb4a048fe2c1a5b3e34545ffd7c52693262431 days 11 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x3591d261da9ca19d83de5028d4caa02f22aaf9ee0.324 Ether
0x2c20310be087b352c5b2d90ea3ad23fae40098f14d29a11c43e38a14a2c5eb66692990431 days 22 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x16cdde3017a442f61fc949541cb71fec1965d3410.3 Ether
0x5915d8251dede0e0edfb5fc5957239fa67b7b425a53c9a0aae144f6ed40037f7692990131 days 22 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x16cdde3017a442f61fc949541cb71fec1965d3410.3 Ether
0x99c553b74b229c1b96559a63521ba4773d35c48978ff87835c6728dc854995c4692820032 days 5 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xed8f2bcb23abebacf483bdf2eddd6e882bd9c59f0.005 Ether
0xe3bf391e2e492cdcadb066ded6d98f097894b000137a83e780ee423eff31a294692658132 days 12 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x79188f3a061bae1d6e42b886d11a528de8c7cf7c0.025 Ether
0x1b99fac7e8637d47008ba40c07e669faf64eece92cd7b018ccecaafab3593141687435441 days 6 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xce576d2b78db2e0d809617c48b8faa14d839651e0.125 Ether
0x5a29cd17a076ca8d558fee022c871bed5c23be296a8316fedb9bd91649c0a211687433241 days 6 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xce576d2b78db2e0d809617c48b8faa14d839651e0.125 Ether
0x6d25f0502ad98d4a19a18cfe08c90c01df6170b98854bd0bcf3ca459d7da787e687286441 days 12 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xce576d2b78db2e0d809617c48b8faa14d839651e0.05 Ether
0xaa217b57f2801b02ee3ce564ec4d07fe6c5d0938b23dc0a5b3d3e9977b6571fb686919942 days 3 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xce576d2b78db2e0d809617c48b8faa14d839651e0.06459 Ether
0xca3658cbf2faeaf34a39ea0fe81760d7b70731abb2e0239e1fdc7fdffd082441686160543 days 9 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x5a8ffd8df25c8371ec4202a3f910e0d01dd72b070.2244375 Ether
0x2ebfb90d1a6e49012a64f6b9e6f444da50c2704e7a13eec73225c6adb9303f81685302144 days 18 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x5a8ffd8df25c8371ec4202a3f910e0d01dd72b070.0448875 Ether
0x7495e46aa5d622ea737b82c262301aed4ea51885f179a358eb1ee6fba64b5d06682718749 days 1 hr ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x48850f503412d8a6e3d63541f0e225f04b13a5440.100454 Ether
0x89d7c85508e15a43989beb4d5e40558fd29d7a5ed74b53f2e196961d00d739db682548049 days 8 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0xed8f2bcb23abebacf483bdf2eddd6e882bd9c59f0.048 Ether
0x8dccb5f87f91af5efec06fa6c04219ce054b81b6d5fb3f1aa46371ab1c179ea5680102153 days 9 hrs ago0xf4c27b8b002389864ac214cb13bfeef4cc5c4e8d0x48850f503412d8a6e3d63541f0e225f04b13a5440.057981475 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Ethen
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

contract Ownable {
    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() onlyOwner whenNotPaused public {
        paused = true;
        Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() onlyOwner whenPaused public {
        paused = false;
        Unpause();
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

contract ERC20 {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

    string public constant name = "";
    string public constant symbol = "";
    uint8 public constant decimals = 0;
}

// Ethen Decentralized Exchange Contract
// https://ethen.io/
contract Ethen is Pausable {
    // Trade & order types
    uint public constant BUY = 1; // order type BID
    uint public constant SELL = 0; // order type ASK

    // Percent multiplier in makeFee & takeFee
    uint public FEE_MUL = 1000000;

    // x1000000, 0.5%
    uint public constant MAX_FEE = 5000;

    // Time after expiration, until order will still be valid to trade.
    //
    // All trades are signed by server so it should not be possible to trade
    // expired orders. Let's say, signing happens at the last second.
    // Some time needed for transaction to be mined. If we going to require
    // here in contract that expiration time should always be less than
    // a block.timestamp than such trades will not be successful.
    // Instead we add some reasonable time, after which order still be valid
    // to trade in contract.
    uint public expireDelay = 300;

    uint public constant MAX_EXPIRE_DELAY = 600;

    // Value of keccak256(
    //     "address Contract", "string Order", "address Token", "uint Nonce",
    //     "uint Price", "uint Amount", "uint Expire"
    // )
    // See https://github.com/ethereum/EIPs/pull/712
    bytes32 public constant ETH_SIGN_TYPED_DATA_ARGHASH =
        0x3da4a05d8449a7bc291302cce8a490cf367b98ec37200076c3f13f1f2308fd74;

    // All prices are per 1e18 tokens
    uint public constant PRICE_MUL = 1e18;

    //
    // Public State Vars
    //

    // That address gets all the fees
    address public feeCollector;

    // x1000000
    uint public makeFee = 0;

    // x1000000, 2500 == 0.25%
    uint public takeFee = 2500;

    // user address to ether balances
    mapping (address => uint) public balances;

    // user address to token address to token balance
    mapping (address => mapping (address => uint)) public tokens;

    // user => order nonce => amount filled
    mapping (address => mapping (uint => uint)) public filled;

    // user => nonce => true
    mapping (address => mapping (uint => bool)) public trades;

    // Every trade should be signed by that address
    address public signer;

    // Keep track of custom fee coefficients per user
    // 0 means user will pay no fees, 50 - only 50% of fees
    struct Coeff {
        uint8   coeff; // 0-99
        uint128 expire;
    }
    mapping (address => Coeff) public coeffs;

    // Users can pay to reduce fees
    // (duration << 8) + coeff => price
    mapping(uint => uint) public packs;

    //
    // Events
    //

    event NewMakeFee(uint makeFee);
    event NewTakeFee(uint takeFee);

    event NewFeeCoeff(address user, uint8 coeff, uint128 expire, uint price);

    event DepositEther(address user, uint amount, uint total);
    event WithdrawEther(address user, uint amount, uint total);
    event DepositToken(address user, address token, uint amount, uint total);
    event WithdrawToken(address user, address token, uint amount, uint total);

    event Cancel(
        uint8 order,
        address owner,
        uint nonce,
        address token,
        uint price,
        uint amount
    );

    event Order(
        address orderOwner,
        uint orderNonce,
        uint orderPrice,
        uint tradeTokens,
        uint orderFilled,
        uint orderOwnerFinalTokens,
        uint orderOwnerFinalEther,
        uint fees
    );

    event Trade(
        address trader,
        uint nonce,
        uint trade,
        address token,
        uint traderFinalTokens,
        uint traderFinalEther
    );

    event NotEnoughTokens(
        address owner, address token, uint shouldHaveAmount, uint actualAmount
    );
    event NotEnoughEther(
        address owner, uint shouldHaveAmount, uint actualAmount
    );

    //
    // Constructor
    //

    function Ethen(address _signer) public {
        feeCollector = msg.sender;
        signer       = _signer;
    }

    //
    // Admin Methods
    //

    function setFeeCollector(address _addr) external onlyOwner {
        feeCollector = _addr;
    }

    function setSigner(address _addr) external onlyOwner {
        signer = _addr;
    }

    function setMakeFee(uint _makeFee) external onlyOwner {
        require(_makeFee <= MAX_FEE);
        makeFee = _makeFee;
        NewMakeFee(makeFee);
    }

    function setTakeFee(uint _takeFee) external onlyOwner {
        require(_takeFee <= MAX_FEE);
        takeFee = _takeFee;
        NewTakeFee(takeFee);
    }

    function addPack(
        uint8 _coeff, uint128 _duration, uint _price
    ) external onlyOwner {
        require(_coeff < 100);
        require(_duration > 0);
        require(_price > 0);

        uint key = packKey(_coeff, _duration);
        packs[key] = _price;
    }

    function delPack(uint8 _coeff, uint128 _duration) external onlyOwner {
        uint key = packKey(_coeff, _duration);
        delete packs[key];
    }

    function setExpireDelay(uint _expireDelay) external onlyOwner {
        require(_expireDelay <= MAX_EXPIRE_DELAY);
        expireDelay = _expireDelay;
    }

    //
    // User Custom Fees
    //

    function getPack(
        uint8 _coeff, uint128 _duration
    ) public view returns (uint) {
        uint key = packKey(_coeff, _duration);
        return packs[key];
    }

    // Buys new fee coefficient for given duration of time
    function buyPack(
        uint8 _coeff, uint128 _duration
    ) external payable {
        require(now >= coeffs[msg.sender].expire);

        uint key = packKey(_coeff, _duration);
        uint price = packs[key];

        require(price > 0);
        require(msg.value == price);

        updateCoeff(msg.sender, _coeff, uint128(now) + _duration, price);

        balances[feeCollector] = SafeMath.add(
            balances[feeCollector], msg.value
        );
    }

    // Sets new fee coefficient for user
    function setCoeff(
        uint8 _coeff, uint128 _expire, uint8 _v, bytes32 _r, bytes32 _s
    ) external {
        bytes32 hash = keccak256(this, msg.sender, _coeff, _expire);
        require(ecrecover(hash, _v, _r, _s) == signer);

        require(_coeff < 100);
        require(uint(_expire) > now);
        require(uint(_expire) <= now + 35 days);

        updateCoeff(msg.sender, _coeff, _expire, 0);
    }

    //
    // User Balance Related Methods
    //

    function () external payable {
        balances[msg.sender] = SafeMath.add(balances[msg.sender], msg.value);
        DepositEther(msg.sender, msg.value, balances[msg.sender]);
    }

    function depositEther() external payable {
        balances[msg.sender] = SafeMath.add(balances[msg.sender], msg.value);
        DepositEther(msg.sender, msg.value, balances[msg.sender]);
    }

    function withdrawEther(uint _amount) external {
        balances[msg.sender] = SafeMath.sub(balances[msg.sender], _amount);
        msg.sender.transfer(_amount);
        WithdrawEther(msg.sender, _amount, balances[msg.sender]);
    }

    function depositToken(address _token, uint _amount) external {
        require(ERC20(_token).transferFrom(msg.sender, this, _amount));
        tokens[msg.sender][_token] = SafeMath.add(
            tokens[msg.sender][_token], _amount
        );
        DepositToken(msg.sender, _token, _amount, tokens[msg.sender][_token]);
    }

    function withdrawToken(address _token, uint _amount) external {
        tokens[msg.sender][_token] = SafeMath.sub(
            tokens[msg.sender][_token], _amount
        );
        require(ERC20(_token).transfer(msg.sender, _amount));
        WithdrawToken(msg.sender, _token, _amount, tokens[msg.sender][_token]);
    }

    //
    // User Trade Methods
    //

    // Fills order so it cant be executed later
    function cancel(
        uint8   _order, // BUY for bid orders or SELL for ask orders
        address _token,
        uint    _nonce,
        uint    _price, // Price per 1e18 (PRICE_MUL) tokens
        uint    _amount,
        uint    _expire,
        uint    _v,
        bytes32 _r,
        bytes32 _s
    ) external {
        require(_order == BUY || _order == SELL);

        if (now > _expire + expireDelay) {
            // already expired
            return;
        }

        getVerifiedHash(
            msg.sender,
            _order, _token, _nonce, _price, _amount, _expire,
            _v, _r, _s
        );

        filled[msg.sender][_nonce] = _amount;

        Cancel(_order, msg.sender, _nonce, _token, _price, _amount);
    }

    // Does trade, places order
    // Argument hell because of "Stack to deep" errors.
    function trade(
        // _nums[0] 1=BUY, 0=SELL
        // _nums[1] trade.nonce
        // _nums[2] trade.v
        // _nums[3] trade.expire
        // _nums[4] order[0].nonce              First order should have
        // _nums[5] order[0].price              best available price
        // _nums[6] order[0].amount
        // _nums[7] order[0].expire
        // _nums[8] order[0].v
        // _nums[9] order[0].tradeAmount
        // ...
        // _nums[6N-2] order[N-1].nonce         N -> 6N+4
        // _nums[6N-1] order[N-1].price         N -> 6N+5
        // _nums[6N]   order[N-1].amount        N -> 6N+6
        // _nums[6N+1] order[N-1].expire        N -> 6N+7
        // _nums[6N+2] order[N-1].v             N -> 6N+8
        // _nums[6N+3] order[N-1].tradeAmount   N -> 6N+9
        uint[] _nums,
        // _addrs[0] token
        // _addrs[1] order[0].owner
        // ...
        // _addrs[N] order[N-1].owner           N -> N+1
        address[] _addrs,
        // _rss[0] trade.r
        // _rss[1] trade.s
        // _rss[2] order[0].r
        // _rss[3] order[0].s
        // ...
        // _rss[2N]   order[N-1].r              N -> 2N+2
        // _rss[2N+1] order[N-1].s              N -> 2N+3
        bytes32[] _rss
    ) public whenNotPaused {
        // number of orders
        uint N = _addrs.length - 1;

        require(_nums.length == 6*N+4);
        require(_rss.length == 2*N+2);

        // Type of trade
        // _nums[0] BUY or SELL
        require(_nums[0] == BUY || _nums[0] == SELL);

        // _nums[2] placeOrder.nonce
        saveNonce(_nums[1]);

        // _nums[3] trade.expire
        require(now <= _nums[3]);

        // Start building hash signed by server
        // _nums[0] BUY or SELL
        // _addrs[0] token
        // _nums[1] nonce
        // _nums[3] trade.expire
        bytes32 tradeHash = keccak256(
            this, msg.sender, uint8(_nums[0]), _addrs[0], _nums[1], _nums[3]
        );

        // Hash of an order signed by its owner
        bytes32 orderHash;

        for (uint i = 0; i < N; i++) {
            checkExpiration(i, _nums);

            orderHash = verifyOrder(i, _nums, _addrs, _rss);

            // _nums[6N+3] order[N-1].tradeAmount   N -> 6N+9
            tradeHash = keccak256(tradeHash, orderHash, _nums[6*i+9]);

            tradeOrder(i, _nums, _addrs);
        }

        checkTradeSignature(tradeHash, _nums, _rss);

        sendTradeEvent(_nums, _addrs);
    }

    //
    // Private
    //

    function saveNonce(uint _nonce) private {
        require(trades[msg.sender][_nonce] == false);
        trades[msg.sender][_nonce] = true;
    }

    // Throws error if order is expired
    function checkExpiration(
        uint _i, // order number
        uint[] _nums
    ) private view {
        // _nums[6N+1] order[N-1].expire        N -> 6N+7
        require(now <= _nums[6*_i+7] + expireDelay);
    }

    // Returns hash of order `_i`, signed by its owner
    function verifyOrder(
        uint _i, // order number
        uint[] _nums,
        address[] _addrs,
        bytes32[] _rss
    ) private view returns (bytes32 _orderHash) {
        // _nums[0] BUY or SELL
        // User is buying orders, that are selling, and vice versa
        uint8 order = _nums[0] == BUY ? uint8(SELL) : uint8(BUY);

        // _addrs[N] order[N-1].owner       N -> N+1
        // _addrs[0] token
        address owner = _addrs[_i+1];
        address token = _addrs[0];

        // _nums[6N-2] order[N-1].nonce         N -> 6N+4
        // _nums[6N-1] order[N-1].price         N -> 6N+5
        // _nums[6N]   order[N-1].amount        N -> 6N+6
        // _nums[6N+1] order[N-1].expire        N -> 6N+7
        uint nonce = _nums[6*_i+4];
        uint price = _nums[6*_i+5];
        uint amount = _nums[6*_i+6];
        uint expire = _nums[6*_i+7];

        // _nums[6N+2] order[N-1].v             N -> 6N+8
        // _rss[2N]   order[N-1].r              N -> 2N+2
        // _rss[2N+1] order[N-1].s              N -> 2N+3
        uint v = _nums[6*_i+8];
        bytes32 r = _rss[2*_i+2];
        bytes32 s = _rss[2*_i+3];

        _orderHash = getVerifiedHash(
            owner,
            order, token, nonce, price, amount,
            expire, v, r, s
        );
    }

    // Returns number of traded tokens
    function tradeOrder(
        uint _i, // order number
        uint[] _nums,
        address[] _addrs
    ) private {
        // _nums[0] BUY or SELL
        // _addrs[0] token
        // _addrs[N] order[N-1].owner           N -> N+1
        // _nums[6N-2] order[N-1].nonce         N -> 6N+4
        // _nums[6N-1] order[N-1].price         N -> 6N+5
        // _nums[6N]   order[N-1].amount        N -> 6N+6
        // _nums[6N+3] order[N-1].tradeAmount   N -> 6N+9
        executeOrder(
            _nums[0],
            _addrs[0],
            _addrs[_i+1],
            _nums[6*_i+4],
            _nums[6*_i+5],
            _nums[6*_i+6],
            _nums[6*_i+9]
        );
    }

    function checkTradeSignature(
        bytes32 _tradeHash,
        uint[] _nums,
        bytes32[] _rss
    ) private view {
        // _nums[2] trade.v
        // _rss[0] trade.r
        // _rss[1] trade.s
        require(ecrecover(
            _tradeHash, uint8(_nums[2]), _rss[0], _rss[1]
        ) == signer);
    }

    function sendTradeEvent(
        uint[] _nums, address[] _addrs
    ) private {
        // _nums[1] nonce
        // _nums[0] BUY or SELL
        // _addrs[0] token
        Trade(
            msg.sender, _nums[1], _nums[0], _addrs[0],
            tokens[msg.sender][_addrs[0]], balances[msg.sender]
        );
    }

    // Executes no more than _tradeAmount tokens from order
    function executeOrder(
        uint    _trade,
        address _token,
        address _orderOwner,
        uint    _orderNonce,
        uint    _orderPrice,
        uint    _orderAmount,
        uint    _tradeAmount
    ) private {
        var (tradeTokens, tradeEther) = getTradeParameters(
            _trade, _token, _orderOwner, _orderNonce, _orderPrice,
            _orderAmount, _tradeAmount
        );

        filled[_orderOwner][_orderNonce] = SafeMath.add(
            filled[_orderOwner][_orderNonce],
            tradeTokens
        );

        // Sanity check: orders should never overfill
        require(filled[_orderOwner][_orderNonce] <= _orderAmount);

        uint makeFees = getFees(tradeEther, makeFee, _orderOwner);
        uint takeFees = getFees(tradeEther, takeFee, msg.sender);

        swap(
            _trade, _token, _orderOwner, tradeTokens, tradeEther,
            makeFees, takeFees
        );

        balances[feeCollector] = SafeMath.add(
            balances[feeCollector],
            SafeMath.add(takeFees, makeFees)
        );

        sendOrderEvent(
            _orderOwner, _orderNonce, _orderPrice, tradeTokens,
            _token, SafeMath.add(takeFees, makeFees)
        );
    }

    function swap(
        uint _trade,
        address _token,
        address _orderOwner,
        uint _tradeTokens,
        uint _tradeEther,
        uint _makeFees,
        uint _takeFees
    ) private {
        if (_trade == BUY) {
            tokens[msg.sender][_token] = SafeMath.add(
                tokens[msg.sender][_token], _tradeTokens
            );
            tokens[_orderOwner][_token] = SafeMath.sub(
                tokens[_orderOwner][_token], _tradeTokens
            );
            balances[msg.sender] = SafeMath.sub(
                balances[msg.sender], SafeMath.add(_tradeEther, _takeFees)
            );
            balances[_orderOwner] = SafeMath.add(
                balances[_orderOwner], SafeMath.sub(_tradeEther, _makeFees)
            );
        } else {
            tokens[msg.sender][_token] = SafeMath.sub(
                tokens[msg.sender][_token], _tradeTokens
            );
            tokens[_orderOwner][_token] = SafeMath.add(
                tokens[_orderOwner][_token], _tradeTokens
            );
            balances[msg.sender] = SafeMath.add(
                balances[msg.sender], SafeMath.sub(_tradeEther, _takeFees)
            );
            balances[_orderOwner] = SafeMath.sub(
                balances[_orderOwner], SafeMath.add(_tradeEther, _makeFees)
            );
        }
    }

    function sendOrderEvent(
        address _orderOwner,
        uint _orderNonce,
        uint _orderPrice,
        uint _tradeTokens,
        address _token,
        uint _fees
    ) private {
        Order(
            _orderOwner,
            _orderNonce,
            _orderPrice,
            _tradeTokens,
            filled[_orderOwner][_orderNonce],
            tokens[_orderOwner][_token],
            balances[_orderOwner],
            _fees
        );
    }

    // Returns number of tokens that could be traded and its total price
    function getTradeParameters(
        uint _trade, address _token, address _orderOwner,
        uint _orderNonce, uint _orderPrice, uint _orderAmount, uint _tradeAmount
    ) private returns (uint _tokens, uint _totalPrice) {
        // remains on order
        _tokens = SafeMath.sub(
            _orderAmount, filled[_orderOwner][_orderNonce]
        );

        // trade no more than needed
        if (_tokens > _tradeAmount) {
            _tokens = _tradeAmount;
        }

        if (_trade == BUY) {
            // ask owner has less tokens than it is on ask
            if (_tokens > tokens[_orderOwner][_token]) {
                NotEnoughTokens(
                    _orderOwner, _token, _tokens, tokens[_orderOwner][_token]
                );
                _tokens = tokens[_orderOwner][_token];
            }
        } else {
            // not possible to sell more tokens than sender has
            if (_tokens > tokens[msg.sender][_token]) {
                NotEnoughTokens(
                    msg.sender, _token, _tokens, tokens[msg.sender][_token]
                );
                _tokens = tokens[msg.sender][_token];
            }
        }

        uint shouldHave = getPrice(_tokens, _orderPrice);

        uint spendable;
        if (_trade == BUY) {
            // max ether sender can spent
            spendable = reversePercent(
                balances[msg.sender],
                applyCoeff(takeFee, msg.sender)
            );
        } else {
            // max ether bid owner can spent
            spendable = reversePercent(
                balances[_orderOwner],
                applyCoeff(makeFee, _orderOwner)
            );
        }

        if (shouldHave <= spendable) {
            // everyone have needed amount of tokens & ether
            _totalPrice = shouldHave;
            return;
        }

        // less price -> less tokens
        _tokens = SafeMath.div(
            SafeMath.mul(spendable, PRICE_MUL), _orderPrice
        );
        _totalPrice = getPrice(_tokens, _orderPrice);

        if (_trade == BUY) {
            NotEnoughEther(
                msg.sender,
                addFees(shouldHave, applyCoeff(takeFee, msg.sender)),
                _totalPrice
            );
        } else {
            NotEnoughEther(
                _orderOwner,
                addFees(shouldHave, applyCoeff(makeFee, _orderOwner)),
                _totalPrice
            );
        }
    }

    // Returns price of _tokens
    // _orderPrice is price per 1e18 tokens
    function getPrice(
        uint _tokens, uint _orderPrice
    ) private pure returns (uint) {
        return SafeMath.div(
            SafeMath.mul(_tokens, _orderPrice), PRICE_MUL
        );
    }

    function getFees(
        uint _eth, uint _fee, address _payer
    ) private view returns (uint) {
        // _eth * (_fee / FEE_MUL)
        return SafeMath.div(
            SafeMath.mul(_eth, applyCoeff(_fee, _payer)),
            FEE_MUL
        );
    }

    function applyCoeff(uint _fees, address _user) private view returns (uint) {
        if (now >= coeffs[_user].expire) {
            return _fees;
        }
        return SafeMath.div(
            SafeMath.mul(_fees, coeffs[_user].coeff), 100
        );
    }

    function addFees(uint _eth, uint _fee) private view returns (uint) {
        // _eth * (1 + _fee / FEE_MUL)
        return SafeMath.div(
            SafeMath.mul(_eth, SafeMath.add(FEE_MUL, _fee)),
            FEE_MUL
        );
    }

    function subFees(uint _eth, uint _fee) private view returns (uint) {
        // _eth * (1 - _fee / FEE_MUL)
        return SafeMath.div(
            SafeMath.mul(_eth, SafeMath.sub(FEE_MUL, _fee)),
            FEE_MUL
        );
    }

    // Returns maximum ether that can be spent if percent _fee will be added
    function reversePercent(
        uint _balance, uint _fee
    ) private view returns (uint) {
        // _trade + _fees = _balance
        // _trade * (1 + _fee / FEE_MUL) = _balance
        // _trade = _balance * FEE_MUL / (FEE_MUL + _fee)
        return SafeMath.div(
            SafeMath.mul(_balance, FEE_MUL),
            SafeMath.add(FEE_MUL, _fee)
        );
    }

    // Gets hash of an order, like it is done in `eth_signTypedData`
    // See https://github.com/ethereum/EIPs/pull/712
    function hashOrderTyped(
        uint8 _order, address _token, uint _nonce, uint _price, uint _amount,
        uint _expire
    ) private view returns (bytes32) {
        require(_order == BUY || _order == SELL);
        return keccak256(
            ETH_SIGN_TYPED_DATA_ARGHASH,
            keccak256(
                this,
                _order == BUY ? "BUY" : "SELL",
                _token,
                _nonce,
                _price,
                _amount,
                _expire
            )
        );
    }

    // Gets hash of an order for `eth_sign`
    function hashOrder(
        uint8 _order, address _token, uint _nonce, uint _price, uint _amount,
        uint _expire
    ) private view returns (bytes32) {
        return keccak256(
            "\x19Ethereum Signed Message:\n32",
            keccak256(this, _order, _token, _nonce, _price, _amount, _expire)
        );
    }

    // Returns hash of an order
    // Reverts if signature is incorrect
    function getVerifiedHash(
        address _signer,
        uint8 _order, address _token,
        uint _nonce, uint _price, uint _amount, uint _expire,
        uint _v, bytes32 _r, bytes32 _s
    ) private view returns (bytes32 _hash) {
        if (_v < 1000) {
            _hash = hashOrderTyped(
                _order, _token, _nonce, _price, _amount, _expire
            );
            require(ecrecover(_hash, uint8(_v), _r, _s) == _signer);
        } else {
            _hash = hashOrder(
                _order, _token, _nonce, _price, _amount, _expire
            );
            require(ecrecover(_hash, uint8(_v - 1000), _r, _s) == _signer);
        }
    }

    function packKey(
        uint8 _coeff, uint128 _duration
    ) private pure returns (uint) {
        return (uint(_duration) << 8) + uint(_coeff);
    }

    function updateCoeff(
        address _user, uint8 _coeff, uint128 _expire, uint price
    ) private {
        coeffs[_user] = Coeff(_coeff, _expire);
        NewFeeCoeff(_user, _coeff, _expire, price);
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_makeFee","type":"uint256"}],"name":"setMakeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BUY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"trades","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coeff","type":"uint8"},{"name":"_duration","type":"uint128"}],"name":"buyPack","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"takeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_takeFee","type":"uint256"}],"name":"setTakeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SELL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"makeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"signer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coeff","type":"uint8"},{"name":"_duration","type":"uint128"}],"name":"delPack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nums","type":"uint256[]"},{"name":"_addrs","type":"address[]"},{"name":"_rss","type":"bytes32[]"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE_MUL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_order","type":"uint8"},{"name":"_token","type":"address"},{"name":"_nonce","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_amount","type":"uint256"},{"name":"_expire","type":"uint256"},{"name":"_v","type":"uint256"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_expireDelay","type":"uint256"}],"name":"setExpireDelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_coeff","type":"uint8"},{"name":"_duration","type":"uint128"}],"name":"getPack","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"filled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"expireDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setFeeCollector","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"packs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"coeffs","outputs":[{"name":"coeff","type":"uint8"},{"name":"expire","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeCollector","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coeff","type":"uint8"},{"name":"_expire","type":"uint128"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"setCoeff","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_coeff","type":"uint8"},{"name":"_duration","type":"uint128"},{"name":"_price","type":"uint256"}],"name":"addPack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_EXPIRE_DELAY","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":true,"inputs":[],"name":"PRICE_MUL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_SIGN_TYPED_DATA_ARGHASH","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_signer","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"makeFee","type":"uint256"}],"name":"NewMakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"takeFee","type":"uint256"}],"name":"NewTakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"coeff","type":"uint8"},{"indexed":false,"name":"expire","type":"uint128"},{"indexed":false,"name":"price","type":"uint256"}],"name":"NewFeeCoeff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"DepositEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"WithdrawEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"}],"name":"WithdrawToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"order","type":"uint8"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"orderOwner","type":"address"},{"indexed":false,"name":"orderNonce","type":"uint256"},{"indexed":false,"name":"orderPrice","type":"uint256"},{"indexed":false,"name":"tradeTokens","type":"uint256"},{"indexed":false,"name":"orderFilled","type":"uint256"},{"indexed":false,"name":"orderOwnerFinalTokens","type":"uint256"},{"indexed":false,"name":"orderOwnerFinalEther","type":"uint256"},{"indexed":false,"name":"fees","type":"uint256"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"trader","type":"address"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"trade","type":"uint256"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"traderFinalTokens","type":"uint256"},{"indexed":false,"name":"traderFinalEther","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"shouldHaveAmount","type":"uint256"},{"indexed":false,"name":"actualAmount","type":"uint256"}],"name":"NotEnoughTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"shouldHaveAmount","type":"uint256"},{"indexed":false,"name":"actualAmount","type":"uint256"}],"name":"NotEnoughEther","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a60ff0219168155620f424060015561012c6002556004556109c4600555341561003557600080fd5b6040516020806128e48339810160405280805160008054600160a060020a03338116600160a060020a03199283168117909355600380548316909317909255600a80549290931691161790555050612852806100926000396000f3006060604052600436106101c85763ffffffff60e060020a600035041662991d8e811461026257806301ab98061461027a57806313d8f3e41461029f578063154d6e12146102d5578063181aa1fd146102ef5780631f4848ef14610302578063205730fd1461031857806320c8651b1461032b578063238ac9331461033e57806326aebfac1461036d57806327e235e31461039257806328619814146103b15780632a77b4af14610480578063338b5dea146104935780633bed33ce146104b55780633f4ba83a146104cb57806344263f66146104de5780634edefd3114610519578063508493bc1461052f5780635c975abb146105545780635e885c63146105675780636c19e7831461058c57806379cad619146105ab5780638456cb59146105cd578063895678a2146105e05780638da5cb5b146105f357806398ea5fca146106065780639e281a981461060e578063a42dce8014610630578063b84c13921461064f578063bc063e1a14610665578063c3f186d314610678578063c415b95c146106bc578063d3d77f98146106cf578063e259523514610701578063eacf7d8a14610729578063f2fde38b1461073c578063f68e63e31461075b578063f797f7b61461076e575b600160a060020a0333166000908152600660205260409020546101eb9034610781565b33600160a060020a038116600090815260066020526040908190208390557f20d6bac8359f33d79581bfd2b0457cb189fda6d90fed287ddc9f2ba3eb124b67923491518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1005b341561026d57600080fd5b61027860043561079b565b005b341561028557600080fd5b61028d610800565b60405190815260200160405180910390f35b34156102aa57600080fd5b6102c1600160a060020a0360043516602435610805565b604051901515815260200160405180910390f35b61027860ff600435166001608060020a0360243516610825565b34156102fa57600080fd5b61028d6108e4565b341561030d57600080fd5b6102786004356108ea565b341561032357600080fd5b61028d61094f565b341561033657600080fd5b61028d610954565b341561034957600080fd5b61035161095a565b604051600160a060020a03909116815260200160405180910390f35b341561037857600080fd5b61027860ff600435166001608060020a0360243516610969565b341561039d57600080fd5b61028d600160a060020a03600435166109a3565b34156103bc57600080fd5b610278600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506109b595505050505050565b341561048b57600080fd5b61028d610be1565b341561049e57600080fd5b610278600160a060020a0360043516602435610be7565b34156104c057600080fd5b610278600435610d2f565b34156104d657600080fd5b610278610e19565b34156104e957600080fd5b61027860ff60043516600160a060020a036024351660443560643560843560a43560c43560e43561010435610e98565b341561052457600080fd5b610278600435610f81565b341561053a57600080fd5b61028d600160a060020a0360043581169060243516610fb0565b341561055f57600080fd5b6102c1610fcd565b341561057257600080fd5b61028d60ff600435166001608060020a0360243516610fdd565b341561059757600080fd5b610278600160a060020a0360043516611001565b34156105b657600080fd5b61028d600160a060020a036004351660243561104b565b34156105d857600080fd5b610278611068565b34156105eb57600080fd5b61028d6110ec565b34156105fe57600080fd5b6103516110f2565b610278611101565b341561061957600080fd5b610278600160a060020a036004351660243561119b565b341561063b57600080fd5b610278600160a060020a03600435166112f6565b341561065a57600080fd5b61028d600435611340565b341561067057600080fd5b61028d611352565b341561068357600080fd5b610697600160a060020a0360043516611358565b60405160ff90921682526001608060020a031660208201526040908101905180910390f35b34156106c757600080fd5b61035161137d565b34156106da57600080fd5b61027860ff6004358116906001608060020a0360243516906044351660643560843561138c565b341561070c57600080fd5b61027860ff600435166001608060020a03602435166044356114df565b341561073457600080fd5b61028d61154f565b341561074757600080fd5b610278600160a060020a0360043516611555565b341561076657600080fd5b61028d6115ab565b341561077957600080fd5b61028d6115b7565b60008282018381101561079057fe5b8091505b5092915050565b60005433600160a060020a039081169116146107b657600080fd5b6113888111156107c557600080fd5b60048190557fc51714effcf5a6965cea410eabdd683d0c063bfa70f8addbfe16a7230359e4198160405190815260200160405180910390a150565b600181565b600960209081526000928352604080842090915290825290205460ff1681565b33600160a060020a03166000908152600b6020526040812054819061010090046001608060020a031642101561085a57600080fd5b61086484846115db565b6000818152600c6020526040812054919350909150811161088457600080fd5b34811461089057600080fd5b61089e3385854201846115f5565b600354600160a060020a03166000908152600660205260409020546108c39034610781565b600354600160a060020a031660009081526006602052604090205550505050565b60055481565b60005433600160a060020a0390811691161461090557600080fd5b61138881111561091457600080fd5b60058190557fade97beaa63b5665cd19e65b7f8442edacb3e0f0d4159c8377ed8c87793381548160405190815260200160405180910390a150565b600081565b60045481565b600a54600160a060020a031681565b6000805433600160a060020a0390811691161461098557600080fd5b61098f83836115db565b6000908152600c6020526040812055505050565b60066020526000908152604090205481565b6000805481908190819060a060020a900460ff16156109d357600080fd5b60018651039350836006026004018751146109ed57600080fd5b83600202600201855114610a0057600080fd5b600187600081518110610a0f57fe5b906020019060200201511480610a3b5750600087600081518110610a2f57fe5b90602001906020020151145b1515610a4657600080fd5b610a6587600181518110610a5657fe5b906020019060200201516116dc565b86600381518110610a7257fe5b90602001906020020151421115610a8857600080fd5b303388600081518110610a9757fe5b9060200190602002015188600081518110610aae57fe5b906020019060200201518a600181518110610ac557fe5b906020019060200201518b600381518110610adc57fe5b90602001906020020151604051600160a060020a039687166c0100000000000000000000000090810282529587168602601482015260ff9490941660f860020a026028850152919094169092026029820152603d810192909252605d820152607d0160405180910390209250600090505b83811015610bc357610b5f818861173c565b610b6b8188888861176c565b91508282888360060260090181518110610b8157fe5b9060200190602002015160405192835260208301919091526040808301919091526060909101905180910390209250610bbb8188886118d2565b600101610b4d565b610bce838887611996565b610bd88787611a65565b50505050505050565b60015481565b81600160a060020a03166323b872dd33308460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c5157600080fd5b6102c65a03f11515610c6257600080fd5b505050604051805190501515610c7757600080fd5b600160a060020a03338116600090815260076020908152604080832093861683529290522054610ca79082610781565b33600160a060020a03818116600090815260076020908152604080832093881683529290528190208390557fbb01c612a93e37305a5f1f7b8ed63ea61211be444f722915b9dc827c0bdbffcc92859185919051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050565b600160a060020a033316600090815260066020526040902054610d529082611b8a565b600160a060020a03331660008181526006602052604090819020929092559082156108fc0290839051600060405180830381858888f193505050501515610d9857600080fd5b7ffd68f27313402be52d2f46b6d391b7b8657000a3062853a4be930f1281072a0133826006600033600160a060020a0316600160a060020a03168152602001908152602001600020546040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60005433600160a060020a03908116911614610e3457600080fd5b60005460a060020a900460ff161515610e4c57600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60018960ff161480610eab575060ff8916155b1515610eb657600080fd5b6002548401421115610ec757610f76565b610ed9338a8a8a8a8a8a8a8a8a611b9c565b5033600160a060020a03811660009081526008602090815260408083208b8452909152908190208790557f2f21c988da7a0be25ef59d2d641cfe9fa04686d1e87d5133500ce90bc31c5b0a918b918a908c908b908b905160ff9096168652600160a060020a039485166020870152604080870194909452919093166060850152608084019290925260a083019190915260c0909101905180910390a15b505050505050505050565b60005433600160a060020a03908116911614610f9c57600080fd5b610258811115610fab57600080fd5b600255565b600760209081526000928352604080842090915290825290205481565b60005460a060020a900460ff1681565b600080610fea84846115db565b6000908152600c6020526040902054949350505050565b60005433600160a060020a0390811691161461101c57600080fd5b600a805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600860209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161461108357600080fd5b60005460a060020a900460ff161561109a57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b60025481565b600054600160a060020a031681565b600160a060020a0333166000908152600660205260409020546111249034610781565b33600160a060020a038116600090815260066020526040908190208390557f20d6bac8359f33d79581bfd2b0457cb189fda6d90fed287ddc9f2ba3eb124b67923491518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1565b600160a060020a033381166000908152600760209081526040808320938616835292905220546111cb9082611b8a565b600160a060020a033381811660009081526007602090815260408083209488168084529490915280822094909455919263a9059cbb928591516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561124b57600080fd5b6102c65a03f1151561125c57600080fd5b50505060405180519050151561127157600080fd5b600160a060020a033381811660009081526007602090815260408083209487168352939052829020547fa69fc39b702a6e8195370ae2252cc11b4445837cc4abe15ac39123f2f2d8770d928591859151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050565b60005433600160a060020a0390811691161461131157600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600c6020526000908152604090205481565b61138881565b600b6020526000908152604090205460ff81169061010090046001608060020a031682565b600354600160a060020a031681565b600030338787604051600160a060020a039485166c01000000000000000000000000908102825293909416909202601484015260ff1660f860020a0260288301526001608060020a0316700100000000000000000000000000000000026029820152603901604051908190039020600a54909150600160a060020a03166001828686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561146e57600080fd5b505060206040510351600160a060020a03161461148a57600080fd5b606460ff87161061149a57600080fd5b426001608060020a038616116114af57600080fd5b622e248042016001608060020a03861611156114ca57600080fd5b6114d733878760006115f5565b505050505050565b6000805433600160a060020a039081169116146114fb57600080fd5b606460ff85161061150b57600080fd5b60006001608060020a0384161161152157600080fd5b6000821161152e57600080fd5b61153884846115db565b6000908152600c6020526040902091909155505050565b61025881565b60005433600160a060020a0390811691161461157057600080fd5b600160a060020a038116156115a8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b50565b670de0b6b3a764000081565b7f3da4a05d8449a7bc291302cce8a490cf367b98ec37200076c3f13f1f2308fd7481565b6101006001608060020a0382160260ff8316015b92915050565b60408051908101604090815260ff851682526001608060020a038416602080840191909152600160a060020a0387166000908152600b909152208151815460ff191660ff91909116178155602082015181546001608060020a03919091166101000270ffffffffffffffffffffffffffffffff0019909116179055507f0b9ed8798ce889acd8779436736d269415d869d25c5de987a3e7d9f66f71cac184848484604051600160a060020a03909416845260ff90921660208401526001608060020a031660408084019190915260608301919091526080909101905180910390a150505050565b600160a060020a033316600090815260096020908152604080832084845290915290205460ff161561170d57600080fd5b600160a060020a033316600090815260096020908152604080832093835292905220805460ff19166001179055565b60025481836006026007018151811061175157fe5b906020019060200201510142111561176857600080fd5b5050565b600080600080600080600080600080600060018e60008151811061178c57fe5b90602001906020020151146117a25760016117a5565b60005b99508c8f600101815181106117b657fe5b9060200190602002015198508c6000815181106117cf57fe5b9060200190602002015197508d8f600602600401815181106117ed57fe5b9060200190602002015196508d8f6006026005018151811061180b57fe5b9060200190602002015195508d8f6006026006018151811061182957fe5b9060200190602002015194508d8f6006026007018151811061184757fe5b9060200190602002015193508d8f6006026008018151811061186557fe5b9060200190602002015192508b8f6002026002018151811061188357fe5b9060200190602002015191508b8f600202600301815181106118a157fe5b9060200190602002015190506118bf898b8a8a8a8a8a8a8a8a611b9c565b9f9e505050505050505050505050505050565b611991826000815181106118e257fe5b90602001906020020151826000815181106118f957fe5b9060200190602002015183866001018151811061191257fe5b9060200190602002015185876006026004018151811061192e57fe5b9060200190602002015186886006026005018151811061194a57fe5b9060200190602002015187896006026006018151811061196657fe5b90602001906020020151888a6006026009018151811061198257fe5b90602001906020020151611cf5565b505050565b600a54600160a060020a0316600184846002815181106119b257fe5b90602001906020020151846000815181106119c957fe5b90602001906020020151856001815181106119e057fe5b906020019060200201516040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515611a4957600080fd5b505060206040510351600160a060020a03161461199157600080fd5b7fee7e85974085b8a74acdea8330a9e8c09680dccea6f6df360491edf22a27cc3b3383600181518110611a9457fe5b9060200190602002015184600081518110611aab57fe5b9060200190602002015184600081518110611ac257fe5b90602001906020020151600160a060020a033316600090815260076020526040812090878181518110611af157fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020546006600033600160a060020a0316600160a060020a0316815260200190815260200160002054604051600160a060020a0396871681526020810195909552604080860194909452919094166060840152608083019390935260a082019290925260c001905180910390a15050565b600082821115611b9657fe5b50900390565b60006103e8841015611c4857611bb68a8a8a8a8a8a611e0a565b90508a600160a060020a03166001828686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515611c2757600080fd5b505060206040510351600160a060020a031614611c4357600080fd5b611ce7565b611c568a8a8a8a8a8a611fa2565b90508a600160a060020a03166001826103e8870386866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515611ccb57600080fd5b505060206040510351600160a060020a031614611ce757600080fd5b9a9950505050505050505050565b600080600080611d0a8b8b8b8b8b8b8b612056565b600160a060020a038b1660009081526008602090815260408083208d84529091529020549195509350611d3d9085610781565b600160a060020a038a1660009081526008602090815260408083208c8452909152902081905586901115611d7057600080fd5b611d7d836004548b6123fb565b9150611d8c83600554336123fb565b9050611d9d8b8b8b87878787612423565b600354600160a060020a0316600090815260066020526040902054611dcb90611dc68385610781565b610781565b600354600160a060020a0316600090815260066020526040902055611dfd898989878e611df88789610781565b612657565b5050505050505050505050565b600060018760ff161480611e1f575060ff8716155b1515611e2a57600080fd5b7f3da4a05d8449a7bc291302cce8a490cf367b98ec37200076c3f13f1f2308fd743060ff8916600114611e905760408051908101604052600481527f53454c4c000000000000000000000000000000000000000000000000000000006020820152611ec5565b60408051908101604052600381527f425559000000000000000000000000000000000000000000000000000000000060208201525b88888888886040516c01000000000000000000000000600160a060020a0389160281526014810187805190602001908083835b60208310611f175780518252601f199092019160209182019101611ef8565b6001836020036101000a0380198251168184511617909252505050600160a060020a03989098166c01000000000000000000000000029190970190815260148101959095525060348401929092526054830152607482015260940192506040915050518091039020604051918252602082015260409081019051809103902090509695505050505050565b600030878787878787604051600160a060020a039788166c01000000000000000000000000908102825260ff9790971660f860020a026014820152949096169094026015840152602983019190915260498201526069810191909152608981019190915260a90160405180910390206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c01604051809103902090509695505050505050565b600160a060020a038516600090815260086020908152604080832087845290915281205481908190819061208b908790611b8a565b935084841115612099578493505b60018b141561218057600160a060020a03808a166000908152600760209081526040808320938e168352929052205484111561217b57600160a060020a03808a166000908152600760209081526040808320938e168352929052819020547fb6062bc730d991f3ca3c29f9901ce89c12b5689a273411b114f16c01ca816807918b918d9188919051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a1600160a060020a03808a166000908152600760209081526040808320938e168352929052205493505b612257565b600160a060020a033381166000908152600760209081526040808320938e168352929052205484111561225757600160a060020a03338181166000908152600760209081526040808320948f168352939052829020547fb6062bc730d991f3ca3c29f9901ce89c12b5689a273411b114f16c01ca816807928d91889151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a1600160a060020a033381166000908152600760209081526040808320938e168352929052205493505b6122618488612723565b915060018b14156122a35733600160a060020a03811660009081526006602052604090205460055461229c926122979190612747565b6127ad565b90506122d1565b600160a060020a0389166000908152600660205260409020546004546122ce9190612297908c612747565b90505b8082116122e0578192506123ed565b6122fb6122f582670de0b6b3a76400006127cf565b886127fa565b93506123078488612723565b925060018b1415612384577f76702d836838aed23a1498f8752f1f24753aeea589d155407c29c7634f12cec8336123498461234460055433612747565b612811565b856040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a16123ed565b7f76702d836838aed23a1498f8752f1f24753aeea589d155407c29c7634f12cec8896123b6846123446004548e612747565b856040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15b505097509795505050505050565b600061241b6124138561240e8686612747565b6127cf565b6001546127fa565b949350505050565b600187141561254257600160a060020a033381166000908152600760209081526040808320938a168352929052205461245c9085610781565b600160a060020a0333811660009081526007602081815260408084208c861680865290835281852096909655938a168352908152828220938252929092529020546124a79085611b8a565b600160a060020a0380871660009081526007602090815260408083208b85168452825280832094909455339092168152600690915220546124f1906124ec8584610781565b611b8a565b600160a060020a03338116600090815260066020526040808220939093559087168152205461252490611dc68585611b8a565b600160a060020a038616600090815260066020526040902055610bd8565b600160a060020a033381166000908152600760209081526040808320938a16835292905220546125729085611b8a565b600160a060020a0333811660009081526007602081815260408084208c861680865290835281852096909655938a168352908152828220938252929092529020546125bd9085610781565b600160a060020a0380871660009081526007602090815260408083208b851684528252808320949094553390921681526006909152205461260290611dc68584611b8a565b600160a060020a033381166000908152600660205260408082209390935590871681522054612635906124ec8585610781565b600160a060020a03861660009081526006602052604090205550505050505050565b600160a060020a0380871660008181526008602090815260408083208a845282528083205484845260078352818420958816845294825280832054938352600690915290819020547f165223f17116d321e4ef371cbdb122aa350ce59db46ff8f575874758c14a3ef0938a938a938a938a939291899051600160a060020a03909816885260208801969096526040808801959095526060870193909352608086019190915260a085015260c084015260e0830191909152610100909101905180910390a1505050505050565b600061274061273284846127cf565b670de0b6b3a76400006127fa565b9392505050565b600160a060020a0381166000908152600b602052604081205461010090046001608060020a0316421061277b5750816115ef565b600160a060020a0382166000908152600b6020526040902054612740906127a690859060ff166127cf565b60646127fa565b60006127406127be846001546127cf565b6127ca60015485610781565b6127fa565b6000808315156127e25760009150610794565b508282028284828115156127f257fe5b041461079057fe5b600080828481151561280857fe5b04949350505050565b60006127406124138461240e600154866107815600a165627a7a72305820679290352a07b8b2a8be66968734ca34dc3445d91f2f38fb81dc649992decd530029000000000000000000000000f2c24291897fbe28fed3c65cf6cf5a1c1b4e484e

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f2c24291897fbe28fed3c65cf6cf5a1c1b4e484e


   Swarm Source:
bzzr://679290352a07b8b2a8be66968734ca34dc3445d91f2f38fb81dc649992decd53

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.