Contract 0x04f062809b244e37e7fdc21d9409469c989c2342

Dex  

 

Contract Overview

Joyso
Balance:
1,298.991318159501083608 Ether

EtherValue:
$177,182.42 (@ $136.40/ETH)

Token:
TxHash Block Age From To Value [TxFee]
0x29eb2feb120cc4db703ecd989ebcd6b975c3675d6f163a04036423131a153d9d741726524 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008746329
0x29f042010a11a939ccc55fdbe3ef0a8d1629775b2d0b4d3a2b179839a15e96ec741712055 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000745811
0x1e3db4db954bf999bdcd5eb46240a59911fb1bc171e7fd97553ae17d8a9add9774169921 hr 27 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0015549765
0xec6831fa473a766977452211685ea7f6a8cd64be4e95585b8662785efd1288ae74167412 hrs 23 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.00071631648
0xca0e4d1a808eb9dc542575ac62b82c8921ecb0c3999c497ffdc4d5847ad2253674166592 hrs 42 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0007162584
0x558e10ab0be266bbd9493aa0521740e9c705c1be7388ad2980d938d38d13fbf474165713 hrs 4 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008945508
0xce129459cac29c369a1d3c52e130154cf1b95bbd9ada70c2a2ef1d2e1a088e3774165233 hrs 14 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008953956
0xbbf5124073a9056b4930b14809e71cc4101426ae657d0c526f0240534474fe8374164123 hrs 37 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008948346
0xbdccad7608f9544a59f909a47aa3aa99503bb8fc1c8d2b770c22495a5d72214374163763 hrs 44 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008944848
0xd395bb6c1be8933c02314de9474b1db2ff210beca79e7f65e78537d0a50d175d74163063 hrs 58 mins ago0x60f4c86457c1954c0ca963dc03534c3311967beb IN  Joyso0 Ether0.0003491598
0x5bdeb2ff98b2336af945d8d65fb053f6f714d053bc2c37f869e82a6811adc10e74162364 hrs 12 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0008939898
0x532efd99fb205d5085f18d313645d001b273faa3785c250544f732ee60ec5f9074161424 hrs 34 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.00075958839
0x5fcc1f28ecbe3418ba21bb64788562f7a17664380c2af4ff334b9476c543aba574160544 hrs 52 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0010435579
0x0c333a0fdda9e87b908ca991f1ea3d7f8d2fee4f2fd9d45a6786d38c8ba3782174156636 hrs 23 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000746515
0x275b32d374ad7c499cb3475ce12afb2776856434435ed42e86e56763a7d4e9d974155666 hrs 43 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000441122
0x086e6651bccb1f8342f2b99250f5c235e090956625dd6a060491a5ddf2f459e174155596 hrs 47 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000746515
0x87ead06c1d979a65cf491b5fc4766b846d6696d80e02372bfe4ba052e29e2ff774154417 hrs 15 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000746163
0x40687d84b637d567f8166a967be9acd37985babca5f17fa1031f1c31f8c702c974154307 hrs 18 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000441881
0x13b65275c7530c6708deb8451aaa18455b934408e3ede3ac9bcf721ba92a15da74153577 hrs 35 mins ago0x2bd6cba3c1bfae2d170976905bf2cdf55333ad80 IN  Joyso2.5 Ether0.00032305
0xf698e69613b35a8d5d3212f3e7c6a0e26fb185127ee115cf3dce27380aec4ffc74153517 hrs 37 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0007453985
0x95ba725ed82e09f32086ed6dc1f263b66527db0109f9ca8b5f73e3b5f1e60996741452510 hrs 44 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.0005955224
0x2fb29fdef3cd6ea50e6a615d76c507505ecfa175d7b54b90a5984c437165af11741401912 hrs 34 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.00049127342
0xc275ad9d4a4bdefe24b75e12c36e2712f234b50c26c35ff05510ae01cb5e3dfb741396212 hrs 48 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.00055220539
0x9c2bdf026c7699de1ef6e9629a312cb76d7f3456febeb131cf7143dbec7f0a4a741373913 hrs 37 mins ago0xa88f1a0f47c54e2a3d83090b717592a3564eab05 IN  Joyso0.48 Ether0.0002769
0x6409370ee4242748b38028608dc3a6defc882c2e450f043e059937a82f316337741363613 hrs 59 mins ago0x828d15b44c5416161ed7c6753ecaffd4abf90d08 IN  Joyso0 Ether0.000745756
[ 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
0x275b32d374ad7c499cb3475ce12afb2776856434435ed42e86e56763a7d4e9d974155666 hrs 43 mins ago0x04f062809b244e37e7fdc21d9409469c989c23420xd207278731fbf49ed67750d12068c97d8fe0d84310 Ether
0x40687d84b637d567f8166a967be9acd37985babca5f17fa1031f1c31f8c702c974154307 hrs 18 mins ago0x04f062809b244e37e7fdc21d9409469c989c23420xd207278731fbf49ed67750d12068c97d8fe0d84311 Ether
0xe96638a989abb080358ea726d5a5ff630fcc69b584b3d9a24bbf5e14b75c47b373990292 days 20 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x3e108e5bb6b0070c43567dbfe768b6ec73dc03c20.30074344076 Ether
0xaee8244eef7e8a569109ce51f1fa516239b68b1f411e7b434c6318070d94b6eb73937163 days 16 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x9329e12978bae52ee08d668f8c78df831972bfed1.50901 Ether
0x1456acc3789ba6f89d81e395cf6ee63d1f2f02f0c97edf9c00876e5b11bd0bc473928493 days 19 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x259f46d5dd1838357b2420426cce3ed2331a8b620.0028 Ether
0xb73227c3529e2287c2944d78dc4014f51f0ca55ee53eb3047ce5573b75df360e73784436 days 1 hr ago0x04f062809b244e37e7fdc21d9409469c989c23420x3aab6d941156cdf476722aa8b38b20034cdf20480.01945 Ether
0x8a8f6400db8f10c45b4026682085c0ad4d45674add683b32a25db1e91341a1f273781066 days 2 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x229e515f3c2829f01e7795cbfe1f4ce2c3d49fd58.689318 Ether
0x0a6c93bc3c0a174f7e6d10b27b16c0416272128714dff6f6b0722883cc3fc34473734616 days 20 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xc094580e326f7d3af3fa1f279b2c28b2b352f6284.8 Ether
0x17acab80da4153a7d074a47637a1169977a2d04ff9f16fd96dab76a8e56d13a973681777 days 15 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xd207278731fbf49ed67750d12068c97d8fe0d8431 Ether
0x9cb957d7cedfd9ae93e7e29e6f88e4797a2042a1c6efbb2c92a9b30fbae17f5e73593699 days 39 mins ago0x04f062809b244e37e7fdc21d9409469c989c23420x98d9bd210ecb14a85ab13eee0cd8768835cc79962.3 Ether
0x2f6cbea89d8a04e099dbdebb6bc8fa455c1919292e9f35b5bf70a6798bd507cf735005010 days 11 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xd207278731fbf49ed67750d12068c97d8fe0d8431 Ether
0x2b26d1635053ffd9842d3cb77c579d285193557933f120fc1ccfbc3cfae70667734871210 days 16 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x0e497a83542749c07573448383678c25c00feba64.646882 Ether
0x6446b87c5c624821a1b61e629a1e3060a87664104b549d595984d297edd5085d733095713 days 10 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x8884d164969f90b134cae97785184c0b1511bd295.43730642856 Ether
0x5afae0ab88cf26f43892e65f32c0020ac22bdd2a090d7db97513004cba9c6007732912613 days 17 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xe5358ba9a04fb9ffbb359526972677ade9918c6a1.31137 Ether
0x5ad008cfda57766daf8bc9a6e6b98a6fcec49599fbbb3dd1fb8123a2412ae8f7730115718 days 2 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x1ebfa3fac213480bc6f12ecaddf3afa24b7d3e3d0.007941584856305 Ether
0xbe457dad932ffa0fb7376c6aea0fc55277bbee5a1b557cf297b9b6f48865002c729750718 days 16 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x7bcb1b893582915c14979f28c0ed9d3575fd238e0.0009 Ether
0xacebf2e263c104323e6ed48fdde016769360c4dbbda3ac94fe708ba5d494bb44729008219 days 20 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x1ebfa3fac213480bc6f12ecaddf3afa24b7d3e3d0.792727638336134742 Ether
0x04523f7869bb677e2f5481bbdf7f85c7045c7ba15a56717ab9a5cba6fca18788728808020 days 3 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x1ebfa3fac213480bc6f12ecaddf3afa24b7d3e3d0.29934 Ether
0xdfc1bdf38fc3f7decfc2a1902aaee7a55f83616562b60a1605d6e69b834526b8727433622 days 20 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x84bdbbdf6798c9d9ce736776651d872df1ecc8be18.9989 Ether
0x3bcdc56e5db05b85f2b106c16dbf7c0e5a5dc50cb1419d27ae0dd2a99a559d8f727105723 days 14 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xd6e0cc77b2c0ef88fc9e5fbd0fd09ce316f8f03c0.04772 Ether
0xc0f4936efa7d982785372a2fc0e55fc813476eaf0ac9415fb690b8f42f19a384726952223 days 23 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x1ebfa3fac213480bc6f12ecaddf3afa24b7d3e3d0.11913186398184 Ether
0x40d71df34fb816b7f1d7b9d838b78441cd38be620e0cbdc3b2fc96f93e6e483f726526524 days 23 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x702fa5273cc8ee3661fd4adc5ae6b6307c9931891.40033264943422 Ether
0x1681557d45d04b5b278a93efbbf8d56b76f34e2368bf7ed9dc5a21b7d0c3e1fa726259225 days 14 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x702fa5273cc8ee3661fd4adc5ae6b6307c9931890.004685769140915 Ether
0xd21cffbfa1489a05aa4c566e53452251714e1f6556c484580d716c63fddec74e726111825 days 22 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420x702fa5273cc8ee3661fd4adc5ae6b6307c9931890.691988741788573349 Ether
0x4ad1c5e54eaceb62936423756105125a92c7a506e3d368d4e8c764f63f7fe70b725969426 days 6 hrs ago0x04f062809b244e37e7fdc21d9409469c989c23420xb94b9795d446937b2ae6cca9530df2c72cfc7e4e2.0988 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
Joyso

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity 0.4.19;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
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;
  }

}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b);
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }
}

/**
 * @title Migratable
 * @dev an interface for joyso to migrate to the new version
 */
contract Migratable {
    function migrate(address user, uint256 amount, address tokenAddr) external payable returns (bool);
}

/**
 * @title JoysoDataDecoder
 * @author Will, Emn178
 * @notice decode the joyso compressed data
 */
contract JoysoDataDecoder {
    function decodeOrderUserId(uint256 data) internal pure returns (uint256) {
        return data & 0x00000000000000000000000000000000000000000000000000000000ffffffff;
    }

    function retrieveV(uint256 data) internal pure returns (uint256) {
        // [24..24] v 0:27 1:28
        return data & 0x000000000000000000000000f000000000000000000000000000000000000000 == 0 ? 27 : 28;
    }
}


/**
 * @title Joyso
 * @notice joyso main contract
 * @author Will, Emn178
 */
contract Joyso is Ownable, JoysoDataDecoder {
    using SafeMath for uint256;

    uint256 private constant USER_MASK = 0x00000000000000000000000000000000000000000000000000000000ffffffff;
    uint256 private constant PAYMENT_METHOD_MASK = 0x00000000000000000000000f0000000000000000000000000000000000000000;
    uint256 private constant WITHDRAW_TOKEN_MASK = 0x0000000000000000000000000000000000000000000000000000ffff00000000;
    uint256 private constant V_MASK = 0x000000000000000000000000f000000000000000000000000000000000000000;
    uint256 private constant TOKEN_SELL_MASK = 0x000000000000000000000000000000000000000000000000ffff000000000000;
    uint256 private constant TOKEN_BUY_MASK = 0x0000000000000000000000000000000000000000000000000000ffff00000000;
    uint256 private constant SIGN_MASK = 0xffffffffffffffffffffffff0000000000000000000000000000000000000000;
    uint256 private constant MATCH_SIGN_MASK = 0xfffffffffffffffffffffff00000000000000000000000000000000000000000;
    uint256 private constant TOKEN_JOY_PRICE_MASK = 0x0000000000000000000000000fffffffffffffffffffffff0000000000000000;
    uint256 private constant JOY_PRICE_MASK = 0x0000000000000000fffffff00000000000000000000000000000000000000000;
    uint256 private constant IS_BUY_MASK = 0x00000000000000000000000f0000000000000000000000000000000000000000;
    uint256 private constant TAKER_FEE_MASK = 0x00000000ffff0000000000000000000000000000000000000000000000000000;
    uint256 private constant MAKER_FEE_MASK = 0x000000000000ffff000000000000000000000000000000000000000000000000;

    uint256 private constant PAY_BY_TOKEN = 0x0000000000000000000000020000000000000000000000000000000000000000;
    uint256 private constant PAY_BY_JOY = 0x0000000000000000000000010000000000000000000000000000000000000000;
    uint256 private constant ORDER_ISBUY = 0x0000000000000000000000010000000000000000000000000000000000000000;

    mapping (address => mapping (address => uint256)) private balances;
    mapping (address => uint256) public userLock;
    mapping (address => uint256) public userNonce;
    mapping (bytes32 => uint256) public orderFills;
    mapping (bytes32 => bool) public usedHash;
    mapping (address => bool) public isAdmin;
    mapping (uint256 => address) public tokenId2Address;
    mapping (uint256 => address) public userId2Address;
    mapping (address => uint256) public userAddress2Id;
    mapping (address => uint256) public tokenAddress2Id;

    address public joysoWallet;
    address public joyToken;
    uint256 public lockPeriod = 30 days;
    uint256 public userCount;
    bool public tradeEventEnabled = true;

    modifier onlyAdmin {
        require(msg.sender == owner || isAdmin[msg.sender]);
        _;
    }

    //events
    event Deposit(address token, address user, uint256 amount, uint256 balance);
    event Withdraw(address token, address user, uint256 amount, uint256 balance);
    event NewUser(address user, uint256 id);
    event Lock(address user, uint256 timeLock);

    // for debug
    event TradeSuccess(address user, uint256 baseAmount, uint256 tokenAmount, bool isBuy, uint256 fee);

    function Joyso(address _joysoWallet, address _joyToken) public {
        joysoWallet = _joysoWallet;
        addUser(_joysoWallet);
        joyToken = _joyToken;
        tokenAddress2Id[joyToken] = 1;
        tokenAddress2Id[0] = 0; // ether address is Id 0
        tokenId2Address[0] = 0;
        tokenId2Address[1] = joyToken;
    }

    /**
     * @notice deposit token into the contract
     * @notice Be sure to Approve the contract to move your erc20 token
     * @param token The address of deposited token
     * @param amount The amount of token to deposit
     */
    function depositToken(address token, uint256 amount) external {
        require(amount > 0);
        require(tokenAddress2Id[token] != 0);
        addUser(msg.sender);
        require(ERC20(token).transferFrom(msg.sender, this, amount));
        balances[token][msg.sender] = balances[token][msg.sender].add(amount);
        Deposit(
            token,
            msg.sender,
            amount,
            balances[token][msg.sender]
        );
    }

    /**
     * @notice deposit Ether into the contract
     */
    function depositEther() external payable {
        require(msg.value > 0);
        addUser(msg.sender);
        balances[0][msg.sender] = balances[0][msg.sender].add(msg.value);
        Deposit(
            0,
            msg.sender,
            msg.value,
            balances[0][msg.sender]
        );
    }

    /**
     * @notice withdraw funds directly from contract
     * @notice must claim by lockme first, after a period of time it would be valid
     * @param token The address of withdrawed token, using address(0) to withdraw Ether
     * @param amount The amount of token to withdraw
     */
    function withdraw(address token, uint256 amount) external {
        require(amount > 0);
        require(getTime() > userLock[msg.sender] && userLock[msg.sender] != 0);
        balances[token][msg.sender] = balances[token][msg.sender].sub(amount);
        if (token == 0) {
            msg.sender.transfer(amount);
        } else {
            require(ERC20(token).transfer(msg.sender, amount));
        }
        Withdraw(
            token,
            msg.sender,
            amount,
            balances[token][msg.sender]
        );
    }

    /**
     * @notice This function is used to claim to withdraw the funds
     * @notice The matching server will automaticlly remove all un-touched orders
     * @notice After a period of time, the claimed user can withdraw funds directly from contract without admins involved.
     */
    function lockMe() external {
        require(userAddress2Id[msg.sender] != 0);
        userLock[msg.sender] = getTime() + lockPeriod;
        Lock(msg.sender, userLock[msg.sender]);
    }

    /**
     * @notice This function is used to revoke the claim of lockMe
     */
    function unlockMe() external {
        require(userAddress2Id[msg.sender] != 0);
        userLock[msg.sender] = 0;
        Lock(msg.sender, 0);
    }

    /**
     * @notice set tradeEventEnabled, only owner
     * @param enabled Set tradeEventEnabled if enabled
     */
    function setTradeEventEnabled(bool enabled) external onlyOwner {
        tradeEventEnabled = enabled;
    }

    /**
     * @notice add/remove a address to admin list, only owner
     * @param admin The address of the admin
     * @param isAdd Set the address's status in admin list
     */
    function addToAdmin(address admin, bool isAdd) external onlyOwner {
        isAdmin[admin] = isAdd;
    }

    /**
     * @notice collect the fee to owner's address, only owner
     */
    function collectFee(address token) external onlyOwner {
        uint256 amount = balances[token][joysoWallet];
        require(amount > 0);
        balances[token][joysoWallet] = 0;
        if (token == 0) {
            msg.sender.transfer(amount);
        } else {
            require(ERC20(token).transfer(msg.sender, amount));
        }
        Withdraw(
            token,
            joysoWallet,
            amount,
            0
        );
    }

    /**
     * @notice change lock period, only owner
     * @dev can change from 1 days to 30 days, initial is 30 days
     */
    function changeLockPeriod(uint256 periodInDays) external onlyOwner {
        require(periodInDays <= 30 && periodInDays >= 1);
        lockPeriod = periodInDays * 1 days;
    }

    /**
     * @notice add a new token into the token list, only admins
     * @dev index 0 & 1 are saved for Ether and JOY
     * @dev both index & token can not be redundant, and no removed mathod
     * @param tokenAddress token's address
     * @param index chosen index of the token
     */
    function registerToken(address tokenAddress, uint256 index) external onlyAdmin {
        require(index > 1);
        require(tokenAddress2Id[tokenAddress] == 0);
        require(tokenId2Address[index] == 0);
        tokenAddress2Id[tokenAddress] = index;
        tokenId2Address[index] = tokenAddress;
    }

    /**
     * @notice withdraw with admins involved, only admin
     * @param inputs array of inputs, must have 5 elements
     * @dev inputs encoding please reference github wiki
     */
    function withdrawByAdmin_Unau(uint256[] inputs) external onlyAdmin {
        uint256 amount = inputs[0];
        uint256 gasFee = inputs[1];
        uint256 data = inputs[2];
        uint256 paymentMethod = data & PAYMENT_METHOD_MASK;
        address token = tokenId2Address[(data & WITHDRAW_TOKEN_MASK) >> 32];
        address user = userId2Address[data & USER_MASK];
        bytes32 hash = keccak256(
            this,
            amount,
            gasFee,
            data & SIGN_MASK | uint256(token)
        );
        require(!usedHash[hash]);
        require(
            verify(
                hash,
                user,
                uint8(data & V_MASK == 0 ? 27 : 28),
                bytes32(inputs[3]),
                bytes32(inputs[4])
            )
        );

        address gasToken = 0;
        if (paymentMethod == PAY_BY_JOY) { // pay fee by JOY
            gasToken = joyToken;
        } else if (paymentMethod == PAY_BY_TOKEN) { // pay fee by tx token
            gasToken = token;
        }

        if (gasToken == token) { // pay by ether or token
            balances[token][user] = balances[token][user].sub(amount.add(gasFee));
        } else {
            balances[token][user] = balances[token][user].sub(amount);
            balances[gasToken][user] = balances[gasToken][user].sub(gasFee);
        }
        balances[gasToken][joysoWallet] = balances[gasToken][joysoWallet].add(gasFee);

        usedHash[hash] = true;

        if (token == 0) {
            user.transfer(amount);
        } else {
            require(ERC20(token).transfer(user, amount));
        }
    }

    /**
     * @notice match orders with admins involved, only admin
     * @param inputs Array of input orders, each order have 6 elements. Inputs must conatin at least 2 orders.
     * @dev inputs encoding please reference github wiki
     */
    function matchByAdmin_TwH36(uint256[] inputs) external onlyAdmin {
        uint256 data = inputs[3];
        address user = userId2Address[data & USER_MASK];
        // check taker order nonce
        require(data >> 224 > userNonce[user]);
        address token;
        bool isBuy;
        (token, isBuy) = decodeOrderTokenAndIsBuy(data);
        bytes32 orderHash = keccak256(
            this,
            inputs[0],
            inputs[1],
            inputs[2],
            data & MATCH_SIGN_MASK | (isBuy ? ORDER_ISBUY : 0) | uint256(token)
        );
        require(
            verify(
                orderHash,
                user,
                uint8(data & V_MASK == 0 ? 27 : 28),
                bytes32(inputs[4]),
                bytes32(inputs[5])
            )
        );

        uint256 tokenExecute = isBuy ? inputs[1] : inputs[0]; // taker order token execute
        tokenExecute = tokenExecute.sub(orderFills[orderHash]);
        require(tokenExecute != 0); // the taker order should remain something to trade
        uint256 etherExecute = 0;  // taker order ether execute

        isBuy = !isBuy;
        for (uint256 i = 6; i < inputs.length; i += 6) {
            //check price, maker price should lower than taker price
            require(tokenExecute > 0 && inputs[1].mul(inputs[i + 1]) <= inputs[0].mul(inputs[i]));

            data = inputs[i + 3];
            user = userId2Address[data & USER_MASK];
            // check maker order nonce
            require(data >> 224 > userNonce[user]);
            bytes32 makerOrderHash = keccak256(
                this,
                inputs[i],
                inputs[i + 1],
                inputs[i + 2],
                data & MATCH_SIGN_MASK | (isBuy ? ORDER_ISBUY : 0) | uint256(token)
            );
            require(
                verify(
                    makerOrderHash,
                    user,
                    uint8(data & V_MASK == 0 ? 27 : 28),
                    bytes32(inputs[i + 4]),
                    bytes32(inputs[i + 5])
                )
            );
            (tokenExecute, etherExecute) = internalTrade(
                inputs[i],
                inputs[i + 1],
                inputs[i + 2],
                data,
                tokenExecute,
                etherExecute,
                isBuy,
                token,
                0,
                makerOrderHash
            );
        }

        isBuy = !isBuy;
        tokenExecute = isBuy ? inputs[1].sub(tokenExecute) : inputs[0].sub(tokenExecute);
        tokenExecute = tokenExecute.sub(orderFills[orderHash]);
        processTakerOrder(inputs[2], inputs[3], tokenExecute, etherExecute, isBuy, token, 0, orderHash);
    }

    /**
     * @notice match token orders with admins involved, only admin
     * @param inputs Array of input orders, each order have 6 elements. Inputs must conatin at least 2 orders.
     * @dev inputs encoding please reference github wiki
     */
    function matchTokenOrderByAdmin_k44j(uint256[] inputs) external onlyAdmin {
        address user = userId2Address[decodeOrderUserId(inputs[3])];
        // check taker order nonce
        require(inputs[3] >> 224 > userNonce[user]);
        address token;
        address base;
        bool isBuy;
        (token, base, isBuy) = decodeTokenOrderTokenAndIsBuy(inputs[3]);
        bytes32 orderHash = getTokenOrderDataHash(inputs, 0, inputs[3], token, base);
        require(
            verify(
                orderHash,
                user,
                uint8(retrieveV(inputs[3])),
                bytes32(inputs[4]),
                bytes32(inputs[5])
            )
        );
        uint256 tokenExecute = isBuy ? inputs[1] : inputs[0]; // taker order token execute
        tokenExecute = tokenExecute.sub(orderFills[orderHash]);
        require(tokenExecute != 0); // the taker order should remain something to trade
        uint256 baseExecute = 0;  // taker order ether execute

        isBuy = !isBuy;
        for (uint256 i = 6; i < inputs.length; i += 6) {
            //check price, taker price should better than maker price
            require(tokenExecute > 0 && inputs[1].mul(inputs[i + 1]) <= inputs[0].mul(inputs[i]));

            user = userId2Address[decodeOrderUserId(inputs[i + 3])];
            // check maker order nonce
            require(inputs[i + 3] >> 224 > userNonce[user]);
            bytes32 makerOrderHash = getTokenOrderDataHash(inputs, i, inputs[i + 3], token, base);
            require(
                verify(
                    makerOrderHash,
                    user,
                    uint8(retrieveV(inputs[i + 3])),
                    bytes32(inputs[i + 4]),
                    bytes32(inputs[i + 5])
                )
            );
            (tokenExecute, baseExecute) = internalTrade(
                inputs[i],
                inputs[i + 1],
                inputs[i + 2],
                inputs[i + 3],
                tokenExecute,
                baseExecute,
                isBuy,
                token,
                base,
                makerOrderHash
            );
        }

        isBuy = !isBuy;
        tokenExecute = isBuy ? inputs[1].sub(tokenExecute) : inputs[0].sub(tokenExecute);
        tokenExecute = tokenExecute.sub(orderFills[orderHash]);
        processTakerOrder(inputs[2], inputs[3], tokenExecute, baseExecute, isBuy, token, base, orderHash);
    }

    /**
     * @notice update user on-chain nonce with admins involved, only admin
     * @param inputs Array of input data, must have 4 elements.
     * @dev inputs encoding please reference github wiki
     */
    function cancelByAdmin(uint256[] inputs) external onlyAdmin {
        uint256 data = inputs[1];
        uint256 nonce = data >> 224;
        address user = userId2Address[data & USER_MASK];
        require(nonce > userNonce[user]);
        uint256 gasFee = inputs[0];
        require(
            verify(
                keccak256(this, gasFee, data & SIGN_MASK),
                user,
                uint8(retrieveV(data)),
                bytes32(inputs[2]),
                bytes32(inputs[3])
            )
        );

        // update balance
        address gasToken = 0;
        if (data & PAYMENT_METHOD_MASK == PAY_BY_JOY) {
            gasToken = joyToken;
        }
        require(balances[gasToken][user] >= gasFee);
        balances[gasToken][user] = balances[gasToken][user].sub(gasFee);
        balances[gasToken][joysoWallet] = balances[gasToken][joysoWallet].add(gasFee);

        // update user nonce
        userNonce[user] = nonce;
    }

    /**
     * @notice batch send the current balance to the new version contract
     * @param inputs Array of input data
     * @dev inputs encoding please reference github wiki
     */
    function migrateByAdmin_DQV(uint256[] inputs) external onlyAdmin {
        uint256 data = inputs[2];
        address token = tokenId2Address[(data & WITHDRAW_TOKEN_MASK) >> 32];
        address newContract = address(inputs[0]);
        for (uint256 i = 1; i < inputs.length; i += 4) {
            uint256 gasFee = inputs[i];
            data = inputs[i + 1];
            address user = userId2Address[data & USER_MASK];
            bytes32 hash = keccak256(
                this,
                gasFee,
                data & SIGN_MASK | uint256(token),
                newContract
            );
            require(
                verify(
                    hash,
                    user,
                    uint8(data & V_MASK == 0 ? 27 : 28),
                    bytes32(inputs[i + 2]),
                    bytes32(inputs[i + 3])
                )
            );
            if (gasFee > 0) {
                uint256 paymentMethod = data & PAYMENT_METHOD_MASK;
                if (paymentMethod == PAY_BY_JOY) {
                    balances[joyToken][user] = balances[joyToken][user].sub(gasFee);
                    balances[joyToken][joysoWallet] = balances[joyToken][joysoWallet].add(gasFee);
                } else if (paymentMethod == PAY_BY_TOKEN) {
                    balances[token][user] = balances[token][user].sub(gasFee);
                    balances[token][joysoWallet] = balances[token][joysoWallet].add(gasFee);
                } else {
                    balances[0][user] = balances[0][user].sub(gasFee);
                    balances[0][joysoWallet] = balances[0][joysoWallet].add(gasFee);
                }
            }
            uint256 amount = balances[token][user];
            balances[token][user] = 0;
            if (token == 0) {
                Migratable(newContract).migrate.value(amount)(user, amount, token);
            } else {
                ERC20(token).approve(newContract, amount);
                Migratable(newContract).migrate(user, amount, token);
            }
        }
    }

    /**
     * @notice transfer token from admin to users
     * @param token address of token
     * @param account receiver's address
     * @param amount amount to transfer
     */
    function transferForAdmin(address token, address account, uint256 amount) onlyAdmin external {
        require(tokenAddress2Id[token] != 0);
        require(userAddress2Id[msg.sender] != 0);
        addUser(account);
        balances[token][msg.sender] = balances[token][msg.sender].sub(amount);
        balances[token][account] = balances[token][account].add(amount);
    }

    /**
     * @notice get balance information
     * @param token address of token
     * @param account address of user
     */
    function getBalance(address token, address account) external view returns (uint256) {
        return balances[token][account];
    }

    /**
     * @dev get tokenId and check the order is a buy order or not, internal
     *      tokenId take 4 bytes
     *      isBuy is true means this order is buying token
     */
    function decodeOrderTokenAndIsBuy(uint256 data) internal view returns (address token, bool isBuy) {
        uint256 tokenId = (data & TOKEN_SELL_MASK) >> 48;
        if (tokenId == 0) {
            token = tokenId2Address[(data & TOKEN_BUY_MASK) >> 32];
            isBuy = true;
        } else {
            token = tokenId2Address[tokenId];
        }
    }

    /**
     * @dev decode token oreder data, internal
     */
    function decodeTokenOrderTokenAndIsBuy(uint256 data) internal view returns (address token, address base, bool isBuy) {
        isBuy = data & IS_BUY_MASK == ORDER_ISBUY;
        if (isBuy) {
            token = tokenId2Address[(data & TOKEN_BUY_MASK) >> 32];
            base = tokenId2Address[(data & TOKEN_SELL_MASK) >> 48];
        } else {
            token = tokenId2Address[(data & TOKEN_SELL_MASK) >> 48];
            base = tokenId2Address[(data & TOKEN_BUY_MASK) >> 32];
        }
    }

    function getTime() internal view returns (uint256) {
        return now;
    }

    /**
     * @dev get token order's hash for user to sign, internal
     * @param inputs forword tokenOrderMatch's input to this function
     * @param offset offset of the order in inputs
     */
    function getTokenOrderDataHash(uint256[] inputs, uint256 offset, uint256 data, address token, address base) internal view returns (bytes32) {
        return keccak256(
            this,
            inputs[offset],
            inputs[offset + 1],
            inputs[offset + 2],
            data & SIGN_MASK | uint256(token),
            base,
            (data & TOKEN_JOY_PRICE_MASK) >> 64
        );
    }

    /**
     * @dev check if the provided signature is valid, internal
     * @param hash signed information
     * @param sender signer address
     * @param v sig_v
     * @param r sig_r
     * @param s sig_s
     */
    function verify(bytes32 hash, address sender, uint8 v, bytes32 r, bytes32 s) internal pure returns (bool) {
        return ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == sender;
    }

    /**
     * @dev give a new user an id, intrnal
     */
    function addUser(address _address) internal {
        if (userAddress2Id[_address] != 0) {
            return;
        }
        userCount += 1;
        userAddress2Id[_address] = userCount;
        userId2Address[userCount] = _address;
        NewUser(_address, userCount);
    }

    function processTakerOrder(
        uint256 gasFee,
        uint256 data,
        uint256 tokenExecute,
        uint256 baseExecute,
        bool isBuy,
        address token,
        address base,
        bytes32 orderHash
    )
        internal
    {
        uint256 fee = calculateFee(gasFee, data, baseExecute, orderHash, true, base == 0);
        updateUserBalance(data, isBuy, baseExecute, tokenExecute, fee, token, base);
        orderFills[orderHash] = orderFills[orderHash].add(tokenExecute);
        if (tradeEventEnabled) {
            TradeSuccess(userId2Address[data & USER_MASK], baseExecute, tokenExecute, isBuy, fee);
        }
    }

    function internalTrade(
        uint256 amountSell,
        uint256 amountBuy,
        uint256 gasFee,
        uint256 data,
        uint256 _remainingToken,
        uint256 _baseExecute,
        bool isBuy,
        address token,
        address base,
        bytes32 orderHash
    )
        internal returns (uint256 remainingToken, uint256 baseExecute)
    {
        uint256 tokenGet = calculateTokenGet(amountSell, amountBuy, _remainingToken, isBuy, orderHash);
        uint256 baseGet = calculateBaseGet(amountSell, amountBuy, isBuy, tokenGet);
        uint256 fee = calculateFee(gasFee, data, baseGet, orderHash, false, base == 0);
        updateUserBalance(data, isBuy, baseGet, tokenGet, fee, token, base);
        orderFills[orderHash] = orderFills[orderHash].add(tokenGet);
        remainingToken = _remainingToken.sub(tokenGet);
        baseExecute = _baseExecute.add(baseGet);
        if (tradeEventEnabled) {
            TradeSuccess(
                userId2Address[data & USER_MASK],
                baseGet,
                tokenGet,
                isBuy,
                fee
            );
        }
    }

    function updateUserBalance(
        uint256 data,
        bool isBuy,
        uint256 baseGet,
        uint256 tokenGet,
        uint256 fee,
        address token,
        address base
    )
        internal
    {
        address user = userId2Address[data & USER_MASK];
        uint256 baseFee = fee;
        uint256 joyFee = 0;
        if ((base == 0 ? (data & JOY_PRICE_MASK) >> 164 : (data & TOKEN_JOY_PRICE_MASK) >> 64) != 0) {
            joyFee = fee;
            baseFee = 0;
        }

        if (isBuy) { // buy token, sell ether
            balances[base][user] = balances[base][user].sub(baseGet).sub(baseFee);
            balances[token][user] = balances[token][user].add(tokenGet);
        } else {
            balances[base][user] = balances[base][user].add(baseGet).sub(baseFee);
            balances[token][user] = balances[token][user].sub(tokenGet);
        }

        if (joyFee != 0) {
            balances[joyToken][user] = balances[joyToken][user].sub(joyFee);
            balances[joyToken][joysoWallet] = balances[joyToken][joysoWallet].add(joyFee);
        } else {
            balances[base][joysoWallet] = balances[base][joysoWallet].add(baseFee);
        }
    }

    function calculateFee(
        uint256 gasFee,
        uint256 data,
        uint256 baseGet,
        bytes32 orderHash,
        bool isTaker,
        bool isEthOrder
    )
        internal view returns (uint256)
    {
        uint256 fee = orderFills[orderHash] == 0 ? gasFee : 0;
        uint256 txFee = baseGet.mul(isTaker ? (data & TAKER_FEE_MASK) >> 208 : (data & MAKER_FEE_MASK) >> 192) / 10000;
        uint256 joyPrice = isEthOrder ? (data & JOY_PRICE_MASK) >> 164 : (data & TOKEN_JOY_PRICE_MASK) >> 64;
        if (joyPrice != 0) {
            txFee = isEthOrder ? txFee / (10 ** 5) / joyPrice : txFee * (10 ** 12) / joyPrice;
        }
        return fee.add(txFee);
    }

    function calculateBaseGet(
        uint256 amountSell,
        uint256 amountBuy,
        bool isBuy,
        uint256 tokenGet
    )
        internal pure returns (uint256)
    {
        return isBuy ? tokenGet.mul(amountSell) / amountBuy : tokenGet.mul(amountBuy) / amountSell;
    }

    function calculateTokenGet(
        uint256 amountSell,
        uint256 amountBuy,
        uint256 remainingToken,
        bool isBuy,
        bytes32 orderHash
    )
        internal view returns (uint256)
    {
        uint256 makerRemainingToken = isBuy ? amountBuy : amountSell;
        makerRemainingToken = makerRemainingToken.sub(orderFills[orderHash]);
        require(makerRemainingToken > 0); // the maker order should remain something to trade
        return makerRemainingToken >= remainingToken ? remainingToken : makerRemainingToken;
    }
}

Contract ABI

[{"constant":false,"inputs":[{"name":"inputs","type":"uint256[]"}],"name":"matchTokenOrderByAdmin_k44j","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"inputs","type":"uint256[]"}],"name":"matchByAdmin_TwH36","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"inputs","type":"uint256[]"}],"name":"withdrawByAdmin_Unau","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"inputs","type":"uint256[]"}],"name":"migrateByAdmin_DQV","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"index","type":"uint256"}],"name":"registerToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"userCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferForAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"},{"name":"isAdd","type":"bool"}],"name":"addToAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"joysoWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userNonce","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":true,"inputs":[],"name":"lockPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"usedHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userLock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"collectFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlockMe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"userId2Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"enabled","type":"bool"}],"name":"setTradeEventEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"joyToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"periodInDays","type":"uint256"}],"name":"changeLockPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenAddress2Id","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"account","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEventEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"inputs","type":"uint256[]"}],"name":"cancelByAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"lockMe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenId2Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userAddress2Id","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_joysoWallet","type":"address"},{"name":"_joyToken","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"}],"name":"NewUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"timeLock","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"baseAmount","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"isBuy","type":"bool"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"TradeSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

606060405262278d00600d55600f805460ff1916600117905534156200002457600080fd5b6040516040806200359e833981016040528080519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600b80549287169290911691909117905591506200008c90508264010000000062002d2c6200014b82021704565b600c8054600160a060020a0319908116600160a060020a039384161780835583166000908152600a6020908152604082206001908190557f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e383905560079091527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80548416905592549290527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828805492909316911617905550620001fd565b600160a060020a038116600090815260096020526040902054156200017057620001fa565b600e8054600101808255600160a060020a0383166000818152600960209081526040808320859055938252600890528290208054600160a060020a031916909117905590547fd75b88a9203b17f9356ca063241beac16a25d5a46f485b378c2c229e864bdd4d9183919051600160a060020a03909216825260208201526040908101905180910390a15b50565b613391806200020d6000396000f30060606040526004361061017c5763ffffffff60e060020a600035041660338114610181578060b6146101a1578060c7146101bf578061aeb3146101dd57806302ca5994146101fb57806307973ccf1461021d57806307c4d580146102425780630f7c90851461026a578063135a24741461028e57806324d7806c146102bd5780632e04b8e7146102f0578063338b5dea1461030f5780633fd8b02f14610331578063560ebbd1146103445780635617a6e81461035a57806369b59e7514610379578063774bafdf146103985780638da5cb5b146103ab578063934e1666146103be57806398a36ebf146103d457806398ea5fca146103ec578063a64968ac146103f4578063c25cf1d014610407578063c8799b371461041d578063d4fac45d1461043c578063d5893bb214610461578063d86bc1b014610474578063f2fde38b14610492578063f3fef3a3146104b1578063f7213db6146104d3578063f912ed00146104e9578063fa769257146104fc578063ffc69ab114610512575b600080fd5b341561018c57600080fd5b61019f6004803560248101910135610531565b005b34156101ac57600080fd5b61019f6004803560248101910135610a01565b34156101ca57600080fd5b61019f6004803560248101910135610ed6565b34156101e857600080fd5b61019f600480356024810191013561136c565b341561020657600080fd5b61019f600160a060020a036004351660243561196b565b341561022857600080fd5b610230611a3a565b60405190815260200160405180910390f35b341561024d57600080fd5b61019f600160a060020a0360043581169060243516604435611a40565b341561027557600080fd5b61019f600160a060020a03600435166024351515611b75565b341561029957600080fd5b6102a1611bbb565b604051600160a060020a03909116815260200160405180910390f35b34156102c857600080fd5b6102dc600160a060020a0360043516611bca565b604051901515815260200160405180910390f35b34156102fb57600080fd5b610230600160a060020a0360043516611bdf565b341561031a57600080fd5b61019f600160a060020a0360043516602435611bf1565b341561033c57600080fd5b610230611d7c565b341561034f57600080fd5b6102dc600435611d82565b341561036557600080fd5b610230600160a060020a0360043516611d97565b341561038457600080fd5b61019f600160a060020a0360043516611da9565b34156103a357600080fd5b61019f611f55565b34156103b657600080fd5b6102a1611fdb565b34156103c957600080fd5b6102a1600435611fea565b34156103df57600080fd5b61019f6004351515612005565b61019f612033565b34156103ff57600080fd5b6102a1612104565b341561041257600080fd5b61019f600435612113565b341561042857600080fd5b610230600160a060020a0360043516612155565b341561044757600080fd5b610230600160a060020a0360043581169060243516612167565b341561046c57600080fd5b6102dc612192565b341561047f57600080fd5b61019f600480356024810191013561219b565b341561049d57600080fd5b61019f600160a060020a03600435166123f8565b34156104bc57600080fd5b61019f600160a060020a0360043516602435612486565b34156104de57600080fd5b61023060043561268e565b34156104f457600080fd5b61019f6126a0565b341561050757600080fd5b6102a1600435612738565b341561051d57600080fd5b610230600160a060020a0360043516612753565b60008060008060008060008060008060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a0316148061058b5750600160a060020a03331660009081526006602052604090205460ff165b151561059657600080fd5b600860006105b68d8d60038181106105aa57fe5b90506020020135612765565b81526020808201929092526040908101600090812054600160a060020a031680825260039384905291902054909a509060e0908d908d908181106105f657fe5b905060200201359060020a900411151561060f57600080fd5b61062b8b8b600381811061061f57fe5b9050602002013561276e565b919950975095506106838b8b80602080820201604051908101604052809392919081815260200183836020028082843782019150505050505060008d8d6003818110151561067557fe5b905060200201358b8b612834565b94506106d9858a6106a68e8e600381811061069a57fe5b90506020020135612921565b8e8e60048181106106b357fe5b602002919091013590508f8f60058181106106ca57fe5b90506020020135600102612952565b15156106e457600080fd5b85610702578a8a60008181106106f657fe5b90506020020135610717565b8a8a600181811061070f57fe5b905060200201355b60008681526004602052604090205490945061073a90859063ffffffff612a1916565b935083151561074857600080fd5b94159460009250600691505b89821015610953576000841180156107cc57506107a18b8b8481811061077657fe5b905060200201358c8c6000818110151561078c57fe5b90506020020135612a2e90919063ffffffff16565b6107c98c8c600186018181106107b357fe5b905060200201358d8d6001818110151561078c57fe5b11155b15156107d757600080fd5b600860006107ed8d8d600387018181106105aa57fe5b81526020808201929092526040908101600090812054600160a060020a031680825260039384905291902054909a509060e0908d908d90860181811061082f57fe5b905060200201359060020a900411151561084857600080fd5b61088d8b8b80806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050838d8d86600301818110151561067557fe5b90506108ce818a6108a68e8e6003880181811061069a57fe5b8e8e600488018181106108b557fe5b602002919091013590508f8f600589018181106106ca57fe5b15156108d957600080fd5b6109428b8b848181106108e857fe5b905060200201358c8c85600101818110151561090057fe5b905060200201358d8d86600201818110151561091857fe5b905060200201358e8e87600301818110151561093057fe5b9050602002013588888c8f8f8a612a67565b909450925060069190910190610754565b9415948561098657610981848c8c600081811061096c57fe5b90506020020135612a1990919063ffffffff16565b610997565b610997848c8c600181811061096c57fe5b6000868152600460205260409020549094506109ba90859063ffffffff612a1916565b93506109f48b8b60028181106109cc57fe5b905060200201358c8c600381811015156109e257fe5b9050602002013586868a8d8d8c612baf565b5050505050505050505050565b60008060008060008060008060008060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161480610a5b5750600160a060020a03331660009081526006602052604090205460ff165b1515610a6657600080fd5b8a8a6003818110610a7357fe5b63ffffffff60209182029390930135928316600090815260088252604080822054600160a060020a03168083526003909352902054929b5099505060e060020a8a0411610abf57600080fd5b610ac889612ca8565b9097509550308b8b6000818110610adb57fe5b905060200201358c8c60018181101515610af157fe5b905060200201358d8d60028181101515610b0757fe5b905060200201358a600160a060020a03168a610b24576000610b2a565b60a060020a5b740fffffffffffffffffffffffffffffffffffffffff198f161717604051600160a060020a03959095166c01000000000000000000000000028552601485019390935260348401919091526054830152607482015260940160405180910390209450610bc5858973f0000000000000000000000000000000000000008c16600014610bb657601c6106a6565b601b8e8e60048181106106b357fe5b1515610bd057600080fd5b85610bee578a8a6000818110610be257fe5b90506020020135610c03565b8a8a6001818110610bfb57fe5b905060200201355b600086815260046020526040902054909450610c2690859063ffffffff612a1916565b9350831515610c3457600080fd5b94159460009250600691505b89821015610e4957600084118015610c775750610c628b8b8481811061077657fe5b610c748c8c600186018181106107b357fe5b11155b1515610c8257600080fd5b8a8a60038401818110610c9157fe5b63ffffffff60209182029390930135928316600090815260088252604080822054600160a060020a03168083526003909352902054929b5099505060e060020a8a0411610cdd57600080fd5b308b8b84818110610cea57fe5b905060200201358c8c856001018181101515610d0257fe5b905060200201358d8d866002018181101515610d1a57fe5b905060200201358a600160a060020a03168a610d37576000610d3d565b60a060020a5b740fffffffffffffffffffffffffffffffffffffffff198f161717604051600160a060020a03959095166c01000000000000000000000000028552601485019390935260348401919091526054830152607482015260940160405180910390209050610dda818973f0000000000000000000000000000000000000008c16600014610dc957601c6108a6565b601b8e8e600488018181106108b557fe5b1515610de557600080fd5b610e388b8b84818110610df457fe5b905060200201358c8c856001018181101515610e0c57fe5b905060200201358d8d866002018181101515610e2457fe5b905060200201358c88888c8e60008a612a67565b909450925060069190910190610c40565b94159485610e6757610e62848c8c600081811061096c57fe5b610e78565b610e78848c8c600181811061096c57fe5b600086815260046020526040902054909450610e9b90859063ffffffff612a1916565b93506109f48b8b6002818110610ead57fe5b905060200201358c8c60038181101515610ec357fe5b9050602002013586868a8c60008c612baf565b6000806000806000806000806000809054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161480610f2e5750600160a060020a03331660009081526006602052604090205460ff165b1515610f3957600080fd5b89896000818110610f4657fe5b905060200201359750898960018181101515610f5e57fe5b905060200201359650898960028181101515610f7657fe5b64010000000065ffff00000000602092830294909401359384160460009081526007825260408082205463ffffffff8616835260089093529081902054939950740f00000000000000000000000000000000000000008a169850600160a060020a0391821697509216945030918a91508990600160a060020a03198a1688179051600160a060020a03949094166c0100000000000000000000000002845260148401929092526034830152605482015260740160405190819003902060008181526005602052604090205490925060ff161561105157600080fd5b6110a0828473f00000000000000000000000000000000000000089161561107957601c61107c565b601b5b8d8d600381811061108957fe5b602002919091013590508e8e60048181106106ca57fe5b15156110ab57600080fd5b50600060a060020a8514156110cc5750600c54600160a060020a03166110ec565b740200000000000000000000000000000000000000008514156110ec5750825b83600160a060020a031681600160a060020a031614156111765761114b611119898963ffffffff612d1a16565b600160a060020a038087166000908152600160209081526040808320938916835292905220549063ffffffff612a1916565b600160a060020a03808616600090815260016020908152604080832093881683529290522055611224565b600160a060020a038085166000908152600160209081526040808320938716835292905220546111ac908963ffffffff612a1916565b600160a060020a038086166000908152600160208181526040808420898616808652908352818520969096559386168352908152828220938252929092529020546111fd908863ffffffff612a1916565b600160a060020a038083166000908152600160209081526040808320938816835292905220555b600160a060020a038082166000908152600160209081526040808320600b549094168352929052205461125d908863ffffffff612d1a16565b600160a060020a038083166000908152600160208181526040808420600b548616855282528084209590955586835260059052929020805460ff1916909217909155841615156112dd57600160a060020a03831688156108fc0289604051600060405180830381858888f1935050505015156112d857600080fd5b611360565b83600160a060020a031663a9059cbb848a60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561133a57600080fd5b6102c65a03f1151561134b57600080fd5b50505060405180519050151561136057600080fd5b50505050505050505050565b60008060008060008060008060008060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a031614806113c65750600160a060020a03331660009081526006602052604090205460ff165b15156113d157600080fd5b8a8a60028181106113de57fe5b64010000000065ffff000000006020928302949094013593841604600090815260079091526040812054929b50600160a060020a0390921699508c918c915081811061142657fe5b905060200201359650600195505b898610156109f4578a8a8781811061144857fe5b9050602002013594508a8a87600101818110151561146257fe5b9050602002013598506008600063ffffffff8b16815260200190815260200160002060009054906101000a9004600160a060020a03169350308589600160a060020a0316600160a060020a03198c1617896040516c01000000000000000000000000600160a060020a0395861681028252601482019490945260348101929092529092160260548201526068016040518091039020925061154e838573f0000000000000000000000000000000000000008c1660001461152357601c611526565b601b5b8e8e60028c0181811061153557fe5b602002919091013590508f8f60038d018181106106ca57fe5b151561155957600080fd5b60008511156117a557740f00000000000000000000000000000000000000008916915060a060020a82141561164757600c54600160a060020a039081166000908152600160209081526040808320938816835292905220546115c1908663ffffffff612a1916565b600c8054600160a060020a0390811660009081526001602081815260408084208b861685528252808420969096559354831682528352838120600b54909216815291522054611616908663ffffffff612d1a16565b600c54600160a060020a039081166000908152600160209081526040808320600b54909416835292905220556117a5565b7402000000000000000000000000000000000000000082141561170757600160a060020a0380891660009081526001602090815260408083209388168352929052205461169a908663ffffffff612a1916565b600160a060020a038981166000908152600160209081526040808320898516845290915280822093909355600b54909116815220546116d99086612d1a565b600160a060020a03808a166000908152600160209081526040808320600b54909416835292905220556117a5565b600160a060020a0384166000908152600080516020613346833981519152602052604090205461173d908663ffffffff612a1916565b600160a060020a038581166000908152600080516020613346833981519152602052604080822093909355600b549091168152205461177c9086612d1a565b600b54600160a060020a0316600090815260008051602061334683398151915260205260409020555b50600160a060020a0387811660008181526001602090815260408083209488168352939052918220805492905515156118635786600160a060020a0316633b9ca2d08286848c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039384166004820152602481019290925290911660448201526064016020604051808303818588803b151561184157600080fd5b6125ee5a03f1151561185257600080fd5b505050506040518051905050611960565b87600160a060020a031663095ea7b3888360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156118c057600080fd5b6102c65a03f115156118d157600080fd5b50505060405180515050600160a060020a038716633b9ca2d085838b60006040516020015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561194457600080fd5b6102c65a03f1151561195557600080fd5b505050604051805150505b600486019550611434565b60005433600160a060020a03908116911614806119a05750600160a060020a03331660009081526006602052604090205460ff165b15156119ab57600080fd5b600181116119b857600080fd5b600160a060020a0382166000908152600a6020526040902054156119db57600080fd5b600081815260076020526040902054600160a060020a0316156119fd57600080fd5b600160a060020a039091166000818152600a6020908152604080832085905593825260079052919091208054600160a060020a0319169091179055565b600e5481565b60005433600160a060020a0390811691161480611a755750600160a060020a03331660009081526006602052604090205460ff165b1515611a8057600080fd5b600160a060020a0383166000908152600a60205260409020541515611aa457600080fd5b600160a060020a0333166000908152600960205260409020541515611ac857600080fd5b611ad182612d2c565b600160a060020a0380841660009081526001602090815260408083203390941683529290522054611b08908263ffffffff612a1916565b600160a060020a03848116600090815260016020908152604080832033851684529091528082209390935590841681522054611b449082612d1a565b600160a060020a03938416600090815260016020908152604080832095909616825293909352929091209190915550565b60005433600160a060020a03908116911614611b9057600080fd5b600160a060020a03919091166000908152600660205260409020805460ff1916911515919091179055565b600b54600160a060020a031681565b60066020526000908152604090205460ff1681565b60036020526000908152604090205481565b60008111611bfe57600080fd5b600160a060020a0382166000908152600a60205260409020541515611c2257600080fd5b611c2b33612d2c565b81600160a060020a03166323b872dd33308460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611c9557600080fd5b6102c65a03f11515611ca657600080fd5b505050604051805190501515611cbb57600080fd5b600160a060020a0380831660009081526001602090815260408083203390941683529290522054611cf2908263ffffffff612d1a16565b600160a060020a038381166000908152600160209081526040808320339485168452909152908190208390557fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79285929185919051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050565b600d5481565b60056020526000908152604090205460ff1681565b60026020526000908152604090205481565b6000805433600160a060020a03908116911614611dc557600080fd5b50600160a060020a038082166000908152600160209081526040808320600b54909416835292905290812054908111611dfd57600080fd5b600160a060020a038083166000818152600160209081526040808320600b549095168352939052918220919091551515611e6757600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515611e6257600080fd5b611eea565b81600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ec457600080fd5b6102c65a03f11515611ed557600080fd5b505050604051805190501515611eea57600080fd5b600b547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567908390600160a060020a0316836000604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050565b600160a060020a0333166000908152600960205260409020541515611f7957600080fd5b33600160a060020a0381166000908152600260205260408082208290557f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d42792919051600160a060020a03909216825260208201526040908101905180910390a1565b600054600160a060020a031681565b600860205260009081526040902054600160a060020a031681565b60005433600160a060020a0390811691161461202057600080fd5b600f805460ff1916911515919091179055565b6000341161204057600080fd5b61204933612d2c565b33600160a060020a03166000908152600080516020613346833981519152602052604090205461207f903463ffffffff612d1a16565b33600160a060020a038116600090815260008051602061334683398151915260205260408082208490557fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d793919291349151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a1565b600c54600160a060020a031681565b60005433600160a060020a0390811691161461212e57600080fd5b601e8111158015612140575060018110155b151561214b57600080fd5b6201518002600d55565b600a6020526000908152604090205481565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600f5460ff1681565b60008054819081908190819033600160a060020a03908116911614806121d95750600160a060020a03331660009081526006602052604090205460ff165b15156121e457600080fd5b868660018181106121f157fe5b63ffffffff60209182029390930135928316600090815260088252604080822054600160a060020a0316808352600390935290205492975060e060020a88049650945050841161224057600080fd5b8686600081811061224d57fe5b9050602002013591506122cc3083600160a060020a03198816604051600160a060020a03939093166c01000000000000000000000000028352601483019190915260348201526054016040518091039020846122a888612921565b8a8a60028181106122b557fe5b602002919091013590508b8b60038181106106ca57fe5b15156122d757600080fd5b506000740f0000000000000000000000000000000000000000851660a060020a141561230b5750600c54600160a060020a03165b600160a060020a038082166000908152600160209081526040808320938716835292905220548290101561233e57600080fd5b600160a060020a03808216600090815260016020908152604080832093871683529290522054612374908363ffffffff612a1916565b600160a060020a038281166000908152600160209081526040808320888516845290915280822093909355600b54909116815220546123b39083612d1a565b600160a060020a039182166000908152600160209081526040808320600b54861684528252808320939093559490921682526003909352919091209190915550505050565b60005433600160a060020a0390811691161461241357600080fd5b600160a060020a038116151561242857600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b6000811161249357600080fd5b600160a060020a0333166000908152600260205260409020546124b4612ddc565b1180156124d85750600160a060020a03331660009081526002602052604090205415155b15156124e357600080fd5b600160a060020a038083166000908152600160209081526040808320339094168352929052205461251a908263ffffffff612a1916565b600160a060020a0380841660008181526001602090815260408083203390951683529390529190912091909155151561258357600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561257e57600080fd5b612606565b81600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156125e057600080fd5b6102c65a03f115156125f157600080fd5b50505060405180519050151561260657600080fd5b600160a060020a03808316600090815260016020908152604080832033948516845290915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679285929091859151600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050565b60046020526000908152604090205481565b600160a060020a03331660009081526009602052604090205415156126c457600080fd5b600d546126cf612ddc565b600160a060020a03339081166000908152600260205260409081902093909201928390557f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d42792909151600160a060020a03909216825260208201526040908101905180910390a1565b600760205260009081526040902054600160a060020a031681565b60096020526000908152604090205481565b63ffffffff1690565b600080740f0000000000000000000000000000000000000000831660a060020a1480156127e35764010000000065ffff0000000085160460009081526007602052604080822054660100000000000067ffff0000000000008816048352912054600160a060020a03918216945016915061282d565b660100000000000067ffff0000000000008516046000908152600760205260408082205464010000000065ffff000000008816048352912054600160a060020a0391821694501691505b9193909250565b60003086868151811061284357fe5b9060200190602002015187876001018151811061285c57fe5b9060200190602002015188886002018151811061287557fe5b90602001906020020151600160a060020a03198816600160a060020a038816178668010000000000000000730fffffffffffffffffffffff00000000000000008b16046040516c01000000000000000000000000600160a060020a03988916810282526014820197909752603481019590955260548501939093526074840191909152909316909102609482015260a881019190915260c8016040518091039020905095945050505050565b600073f00000000000000000000000000000000000000082161561294657601c612949565b601b5b60ff1692915050565b600084600160a060020a03166001876040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156129fc57600080fd5b505060206040510351600160a060020a0316149695505050505050565b600082821115612a2857600080fd5b50900390565b600080831515612a415760009150612a60565b50828202828482811515612a5157fe5b0414612a5c57600080fd5b8091505b5092915050565b6000806000806000612a7c8f8f8d8c8a612de0565b9250612a8a8f8f8b86612e3d565b9150612aa58d8d84896000600160a060020a038d1615612e89565b9050612ab68c8a8486858d8d613003565b600086815260046020526040902054612ad5908463ffffffff612d1a16565b600087815260046020526040902055612af48b8463ffffffff612a1916565b9450612b068a8363ffffffff612d1a16565b600f5490945060ff1615612b9d5763ffffffff8c1660009081526008602052604090819020547febc02b9bc38392983309c4cfa8311051a25eec9726da341932daa0de06e1508c91600160a060020a0390911690849086908d90869051600160a060020a039095168552602085019390935260408085019290925215156060840152608083019190915260a0909101905180910390a15b5050509a509a98505050505050505050565b6000612bca898988856001600160a060020a03891615612e89565b9050612bdb8886888a858989613003565b600082815260046020526040902054612bfa908863ffffffff612d1a16565b600083815260046020526040902055600f5460ff1615612c9d5763ffffffff881660009081526008602052604090819020547febc02b9bc38392983309c4cfa8311051a25eec9726da341932daa0de06e1508c91600160a060020a039091169088908a908990869051600160a060020a039095168552602085019390935260408085019290925215156060840152608083019190915260a0909101905180910390a15b505050505050505050565b600080660100000000000067ffff000000000000841604801515612cf95764010000000065ffff00000000851604600090815260076020526040902054600160a060020a0316925060019150612d14565b600081815260076020526040902054600160a060020a031692505b50915091565b600082820183811015612a5c57600080fd5b600160a060020a03811660009081526009602052604090205415612d4f57612dd9565b600e8054600101808255600160a060020a0383166000818152600960209081526040808320859055938252600890528290208054600160a060020a031916909117905590547fd75b88a9203b17f9356ca063241beac16a25d5a46f485b378c2c229e864bdd4d9183919051600160a060020a03909216825260208201526040908101905180910390a15b50565b4290565b60008083612dee5786612df0565b855b600084815260046020526040902054909150612e1390829063ffffffff612a1916565b905060008111612e2257600080fd5b84811015612e305780612e32565b845b979650505050505050565b600082612e645784612e55838663ffffffff612a2e16565b811515612e5e57fe5b04612e80565b83612e75838763ffffffff612a2e16565b811515612e7e57fe5b045b95945050505050565b60008381526004602052604081205481908190819015612eaa576000612eac565b895b9250612710612f4087612ef657780100000000000000000000000000000000000000000000000079ffff0000000000000000000000000000000000000000000000008c1604612f33565b7a0100000000000000000000000000000000000000000000000000007bffff00000000000000000000000000000000000000000000000000008c16045b8a9063ffffffff612a2e16565b811515612f4957fe5b04915084612f785768010000000000000000730fffffffffffffffffffffff00000000000000008a1604612fab565b7410000000000000000000000000000000000000000077fffffff000000000000000000000000000000000000000008a16045b90508015612fe55784612fd057808264e8d4a5100002811515612fca57fe5b04612fe2565b80620186a08304811515612fe057fe5b045b91505b612ff5838363ffffffff612d1a16565b9a9950505050505050505050565b63ffffffff8716600090815260086020526040812054600160a060020a039081169185918416156130555768010000000000000000730fffffffffffffffffffffff00000000000000008b1604613088565b7410000000000000000000000000000000000000000077fffffff000000000000000000000000000000000000000008b16045b15613094575060009050845b881561315e57600160a060020a038085166000908152600160209081526040808320938716835292905220546130e29083906130d6908b63ffffffff612a1916565b9063ffffffff612a1916565b600160a060020a03808616600090815260016020818152604080842089861680865290835281852096909655938a16835290815282822093825292909252902054613133908863ffffffff612d1a16565b600160a060020a03808716600090815260016020908152604080832093881683529290522055613212565b600160a060020a0380851660009081526001602090815260408083209387168352929052205461319a9083906130d6908b63ffffffff612d1a16565b600160a060020a03808616600090815260016020818152604080842089861680865290835281852096909655938a168352908152828220938252929092529020546131eb908863ffffffff612a1916565b600160a060020a038087166000908152600160209081526040808320938816835292905220555b80156132d757600c54600160a060020a03908116600090815260016020908152604080832093871683529290522054613251908263ffffffff612a1916565b600c8054600160a060020a0390811660009081526001602081815260408084208a861685528252808420969096559354831682528352838120600b549092168152915220546132a6908263ffffffff612d1a16565b600c54600160a060020a039081166000908152600160209081526040808320600b5490941683529290522055611360565b600160a060020a038085166000908152600160209081526040808320600b5490941683529290522054613310908363ffffffff612d1a16565b600160a060020a038086166000908152600160209081526040808320600b5490941683529290522055505050505050505050505600a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49a165627a7a72305820f67563a032c9aaab5411af776dbcc7191cdc32a8b278f4bc888d81efca9b7e5400290000000000000000000000003a6386e7701bf9c0d5b983d5e0bcec78331749d9000000000000000000000000dde12a12a6f67156e0da672be05c374e1b0a3e57

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

0000000000000000000000003a6386e7701bf9c0d5b983d5e0bcec78331749d9000000000000000000000000dde12a12a6f67156e0da672be05c374e1b0a3e57

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003a6386e7701bf9c0d5b983d5e0bcec78331749d9
Arg [1] : 000000000000000000000000dde12a12a6f67156e0da672be05c374e1b0a3e57

Swarm Source

bzzr://f67563a032c9aaab5411af776dbcc7191cdc32a8b278f4bc888d81efca9b7e54
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.