ETH Price: $3,297.27 (+0.36%)
 

Overview

ETH Balance

0.3873628654092976 ETH

Eth Value

$1,277.24 (@ $3,297.27/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token71740032019-02-04 15:41:062181 days ago1549294866IN
0x7e21C13c...91AFe4a48
0 ETH0.000133794
Deposit Token71739912019-02-04 15:38:232181 days ago1549294703IN
0x7e21C13c...91AFe4a48
0 ETH0.00023563
Migrate Funds71739532019-02-04 15:27:112181 days ago1549294031IN
0x7e21C13c...91AFe4a48
0 ETH0.000269654
Deposit Token71739452019-02-04 15:25:262181 days ago1549293926IN
0x7e21C13c...91AFe4a48
0 ETH0.000314144
Migrate Funds71739402019-02-04 15:24:312181 days ago1549293871IN
0x7e21C13c...91AFe4a48
0 ETH0.000337075
Deposit Token71739032019-02-04 15:15:222181 days ago1549293322IN
0x7e21C13c...91AFe4a48
0 ETH0.000252864
Deposit Token71738442019-02-04 14:53:412181 days ago1549292021IN
0x7e21C13c...91AFe4a48
0 ETH0.000314144
Set Successor71579622019-02-01 9:00:462184 days ago1549011646IN
0x7e21C13c...91AFe4a48
0 ETH0.000114664
Migrate Funds71477722019-01-30 7:18:282186 days ago1548832708IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
Migrate Funds71476112019-01-30 6:32:452186 days ago1548829965IN
0x7e21C13c...91AFe4a48
0 ETH0.001253093
Migrate Funds71075752019-01-22 6:31:012194 days ago1548138661IN
0x7e21C13c...91AFe4a48
0 ETH0.000510965
Migrate Funds71069542019-01-22 3:37:192194 days ago1548128239IN
0x7e21C13c...91AFe4a48
0 ETH0.000182044
Migrate Funds71043582019-01-21 15:35:402195 days ago1548084940IN
0x7e21C13c...91AFe4a48
0 ETH0.000136533
Migrate Funds71043392019-01-21 15:29:202195 days ago1548084560IN
0x7e21C13c...91AFe4a48
0 ETH0.000182044
Migrate Funds71011742019-01-21 0:25:572196 days ago1548030357IN
0x7e21C13c...91AFe4a48
0 ETH0.000164822
Migrate Funds70991442019-01-20 15:43:402196 days ago1547999020IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
Migrate Funds70985542019-01-20 13:10:132196 days ago1547989813IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
Migrate Funds70948102019-01-19 21:05:142197 days ago1547931914IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
Migrate Funds70938112019-01-19 16:45:392197 days ago1547916339IN
0x7e21C13c...91AFe4a48
0 ETH0.000163252
Migrate Funds70936302019-01-19 15:57:512197 days ago1547913471IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
Migrate Funds70929612019-01-19 13:14:292197 days ago1547903669IN
0x7e21C13c...91AFe4a48
0 ETH0.000204382
Migrate Funds70914962019-01-19 7:10:502197 days ago1547881850IN
0x7e21C13c...91AFe4a48
0 ETH0.000204382
Migrate Funds70905252019-01-19 3:06:402197 days ago1547867200IN
0x7e21C13c...91AFe4a48
0 ETH0.000408774
Migrate Funds70897292019-01-18 23:36:112198 days ago1547854571IN
0x7e21C13c...91AFe4a48
0 ETH0.000510965
Migrate Funds70897152019-01-18 23:31:572198 days ago1547854317IN
0x7e21C13c...91AFe4a48
0 ETH0.000306573
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
71477722019-01-30 7:18:282186 days ago1548832708
0x7e21C13c...91AFe4a48
0.04303 ETH
71476112019-01-30 6:32:452186 days ago1548829965
0x7e21C13c...91AFe4a48
1.24126153 ETH
71075752019-01-22 6:31:012194 days ago1548138661
0x7e21C13c...91AFe4a48
0.05297 ETH
71069542019-01-22 3:37:192194 days ago1548128239
0x7e21C13c...91AFe4a48
0.3 ETH
71043582019-01-21 15:35:402195 days ago1548084940
0x7e21C13c...91AFe4a48
0.01 ETH
71043392019-01-21 15:29:202195 days ago1548084560
0x7e21C13c...91AFe4a48
0.01476899 ETH
70991442019-01-20 15:43:402196 days ago1547999020
0x7e21C13c...91AFe4a48
0.39891647 ETH
70985542019-01-20 13:10:132196 days ago1547989813
0x7e21C13c...91AFe4a48
0.37751492 ETH
70948102019-01-19 21:05:142197 days ago1547931914
0x7e21C13c...91AFe4a48
0.38138894 ETH
70936302019-01-19 15:57:512197 days ago1547913471
0x7e21C13c...91AFe4a48
0.4 ETH
70929612019-01-19 13:14:292197 days ago1547903669
0x7e21C13c...91AFe4a48
0.000336 ETH
70914962019-01-19 7:10:502197 days ago1547881850
0x7e21C13c...91AFe4a48
0.03780441 ETH
70905252019-01-19 3:06:402197 days ago1547867200
0x7e21C13c...91AFe4a48
0.38829473 ETH
70897292019-01-18 23:36:112198 days ago1547854571
0x7e21C13c...91AFe4a48
0.39940489 ETH
70897152019-01-18 23:31:572198 days ago1547854317
0x7e21C13c...91AFe4a48
0.027319 ETH
70895312019-01-18 22:41:472198 days ago1547851307
0x7e21C13c...91AFe4a48
0.00187739 ETH
70892012019-01-18 21:19:502198 days ago1547846390
0x7e21C13c...91AFe4a48
0.0106584 ETH
70891932019-01-18 21:17:142198 days ago1547846234
0x7e21C13c...91AFe4a48
0.00208149 ETH
70891502019-01-18 21:06:012198 days ago1547845561
0x7e21C13c...91AFe4a48
0.39304636 ETH
70891482019-01-18 21:04:552198 days ago1547845495
0x7e21C13c...91AFe4a48
32 wei
70891032019-01-18 20:52:442198 days ago1547844764
0x7e21C13c...91AFe4a48
0.03644149 ETH
70890402019-01-18 20:39:162198 days ago1547843956
0x7e21C13c...91AFe4a48
0.18319658 ETH
70889632019-01-18 20:21:252198 days ago1547842885
0x7e21C13c...91AFe4a48
0.05436347 ETH
70889632019-01-18 20:21:252198 days ago1547842885
0x7e21C13c...91AFe4a48
0.00446807 ETH
70889582019-01-18 20:20:252198 days ago1547842825
0x7e21C13c...91AFe4a48
0.00008417 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SeedDex

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-12-08
*/

pragma solidity ^0.4.24;

// File: node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);

  function approve(address spender, uint256 value)
    external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol

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

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts 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 Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

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

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

// File: contracts\SeedDex.sol

/**
 * @title SeedDex
 * @dev This is the main contract for the SeedDex exchange.
 */
contract SeedDex {
  
  using SafeMath for uint;

  /// Variables

  address public admin; // the admin address
  address constant public FicAddress = 0x0DD83B5013b2ad7094b1A7783d96ae0168f82621;  // Florafic token address
  address public manager; // the manager address
  address public feeAccount; // the account that will receive fees
  uint public feeTakeMaker; // For Maker fee x% *10^18
  uint public feeTakeSender; // For Sender fee x% *10^18
  uint public feeTakeMakerFic;
  uint public feeTakeSenderFic;
  bool private depositingTokenFlag; // True when Token.transferFrom is being called from depositToken
  mapping (address => mapping (address => uint)) public tokens; // mapping of token addresses to mapping of account balances (token=0 means Ether)
  mapping (address => mapping (bytes32 => bool)) public orders; // mapping of user accounts to mapping of order hashes to booleans (true = submitted by user, equivalent to offchain signature)
  mapping (address => mapping (bytes32 => uint)) public orderFills; // mapping of user accounts to mapping of order hashes to uints (amount of order that has been filled)
  address public predecessor; // Address of the previous version of this contract. If address(0), this is the first version
  address public successor; // Address of the next version of this contract. If address(0), this is the most up to date version.
  uint16 public version; // This is the version # of the contract

  /// Logging Events
  event Order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address indexed user,bytes32 hash,uint amount);
  event Cancel(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address indexed user, uint8 v, bytes32 r, bytes32 s);
  event Trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, address get, address give, uint256 timestamp);
  event Deposit(address token, address indexed user, uint amount, uint balance);
  event Withdraw(address token, address indexed user, uint amount, uint balance);
  event FundsMigrated(address indexed user, address newContract);
  event LogEvent(string msg,bytes32 data);

  /// This is a modifier for functions to check if the sending user address is the same as the admin user address.
  modifier isAdmin() {
      require(msg.sender == admin);
      _;
  }

  /// this is manager can only change feeTakeMaker feeTakeMaker and change manager address (accept only Ethereum address)
  modifier isManager() {
     require(msg.sender == manager || msg.sender == admin );
      _;
  }
    
  /// Constructor function. This is only called on contract creation.
  function SeedDex(address admin_, address manager_, address feeAccount_, uint feeTakeMaker_, uint feeTakeSender_,  uint feeTakeMakerFic_, uint feeTakeSenderFic_,  address predecessor_) public {
    admin = admin_;
    manager = manager_;
    feeAccount = feeAccount_;
    feeTakeMaker = feeTakeMaker_;
    feeTakeSender = feeTakeSender_;
    feeTakeMakerFic = feeTakeMakerFic_;
    feeTakeSenderFic = feeTakeSenderFic_;
    depositingTokenFlag = false;
    predecessor = predecessor_;
    
    if (predecessor != address(0)) {
      version = SeedDex(predecessor).version() + 1;
    } else {
      version = 1;
    }
  }

  /// The fallback function. Ether transfered into the contract is not accepted.
  function() public {
    revert();
  }

  /// Changes the official admin user address. Accepts Ethereum address.
  function changeAdmin(address admin_) public isAdmin {
    require(admin_ != address(0));
    admin = admin_;
  }

 /// Changes the manager user address. Accepts Ethereum address.
  function changeManager(address manager_) public isManager {
    require(manager_ != address(0));
    manager = manager_;
  }

  /// Changes the account address that receives trading fees. Accepts Ethereum address.
  function changeFeeAccount(address feeAccount_) public isAdmin {
    feeAccount = feeAccount_;
  }

/// Changes the fee on takes. Can only be changed to a value less than it is currently set at.
  function changeFeeTakeMaker(uint feeTakeMaker_) public isManager {
    feeTakeMaker = feeTakeMaker_;
  }
  
  function changeFeeTakeSender(uint feeTakeSender_) public isManager {
    feeTakeSender = feeTakeSender_;
  }

  function changeFeeTakeMakerFic(uint feeTakeMakerFic_) public isManager {
    feeTakeMakerFic = feeTakeMakerFic_;
  }
  
  function changeFeeTakeSenderFic(uint feeTakeSenderFic_) public isManager {
    feeTakeSenderFic = feeTakeSenderFic_;
  }
  
  /// Changes the successor. Used in updating the contract.
  function setSuccessor(address successor_) public isAdmin {
    require(successor_ != address(0));
    successor = successor_;
  }
  
  ////////////////////////////////////////////////////////////////////////////////
  // Deposits, Withdrawals, Balances
  ////////////////////////////////////////////////////////////////////////////////

  /**
  * This function handles deposits of Ether into the contract.
  * Emits a Deposit event.
  * Note: With the payable modifier, this function accepts Ether.
  */
  function deposit() public payable {
    tokens[0][msg.sender] = tokens[0][msg.sender].add(msg.value);
    Deposit(0, msg.sender, msg.value, tokens[0][msg.sender]);
  }

  /**
  * This function handles withdrawals of Ether from the contract.
  * Verifies that the user has enough funds to cover the withdrawal.
  * Emits a Withdraw event.
  * @param amount uint of the amount of Ether the user wishes to withdraw
  */
  function withdraw(uint amount) public {
    require(tokens[0][msg.sender] >= amount);
    tokens[0][msg.sender] = tokens[0][msg.sender].sub(amount);
    msg.sender.transfer(amount);
    Withdraw(0, msg.sender, amount, tokens[0][msg.sender]);
  }

  /**
  * This function handles deposits of Ethereum based tokens to the contract.
  * Does not allow Ether.
  * If token transfer fails, transaction is reverted and remaining gas is refunded.
  * Emits a Deposit event.
  * Note: Remember to call Token(address).approve(this, amount) or this contract will not be able to do the transfer on your behalf.
  * @param token Ethereum contract address of the token or 0 for Ether
  * @param amount uint of the amount of the token the user wishes to deposit
  */
  function depositToken(address token, uint amount) public {
    require(token != 0);
    depositingTokenFlag = true;
    require(IERC20(token).transferFrom(msg.sender, this, amount));
    depositingTokenFlag = false;
    tokens[token][msg.sender] = tokens[token][msg.sender].add(amount);
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
 }

  /**
  * This function provides a fallback solution as outlined in ERC223.
  * If tokens are deposited through depositToken(), the transaction will continue.
  * If tokens are sent directly to this contract, the transaction is reverted.
  * @param sender Ethereum address of the sender of the token
  * @param amount amount of the incoming tokens
  * @param data attached data similar to msg.data of Ether transactions
  */
  function tokenFallback( address sender, uint amount, bytes data) public returns (bool ok) {
      if (depositingTokenFlag) {
        // Transfer was initiated from depositToken(). User token balance will be updated there.
        return true;
      } else {
        // Direct ECR223 Token.transfer into this contract not allowed, to keep it consistent
        // with direct transfers of ECR20 and ETH.
        revert();
      }
  }
  
  /**
  * This function handles withdrawals of Ethereum based tokens from the contract.
  * Does not allow Ether.
  * If token transfer fails, transaction is reverted and remaining gas is refunded.
  * Emits a Withdraw event.
  * @param token Ethereum contract address of the token or 0 for Ether
  * @param amount uint of the amount of the token the user wishes to withdraw
  */
  function withdrawToken(address token, uint amount) public {
    require(token != 0);
    require(tokens[token][msg.sender] >= amount);
    tokens[token][msg.sender] = tokens[token][msg.sender].sub(amount);
    require(IERC20(token).transfer(msg.sender, amount));
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }

  /**
  * Retrieves the balance of a token based on a user address and token address.
  * @param token Ethereum contract address of the token or 0 for Ether
  * @param user Ethereum address of the user
  * @return the amount of tokens on the exchange for a given user address
  */
  function balanceOf(address token, address user) public constant returns (uint) {
    return tokens[token][user];
  }

  ////////////////////////////////////////////////////////////////////////////////
  // Trading
  ////////////////////////////////////////////////////////////////////////////////

  /**
  * Stores the active order inside of the contract.
  * Emits an Order event.
  * 
  * 
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  */
  function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce) public {
    bytes32 hash = keccak256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
    uint amount;
    orders[msg.sender][hash] = true;
    Order(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, msg.sender, hash, amount);
  }

  /**
  * Facilitates a trade from one user to another.
  * Requires that the transaction is signed properly, the trade isn't past its expiration, and all funds are present to fill the trade.
  * Calls tradeBalances().
  * Updates orderFills with the amount traded.
  * Emits a Trade event.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * Note: amount is in amountGet / tokenGet terms.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  * @param user Ethereum address of the user who placed the order
  * @param v part of signature for the order hash as signed by user
  * @param r part of signature for the order hash as signed by user
  * @param s part of signature for the order hash as signed by user
  * @param amount uint amount in terms of tokenGet that will be "buy" in the trade
  */
  function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount) public {
    bytes32 hash = keccak256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
    require((
      (orders[user][hash] || ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == user) &&
      block.number <= expires &&
      orderFills[user][hash].add(amount) <= amountGet
    ));
    tradeBalances(tokenGet, amountGet, tokenGive, amountGive, user, amount);
    orderFills[user][hash] = orderFills[user][hash].add(amount);
    Trade(tokenGet, amount, tokenGive, amountGive.mul(amount) / amountGet, user, msg.sender,now);
  }
  
  /**
  * This is a private function and is only being called from trade().
  * Handles the movement of funds when a trade occurs.
  * Takes fees.
  * Updates token balances for both buyer and seller.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * Note: amount is in amountGet / tokenGet terms.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param user Ethereum address of the user who placed the order
  * @param amount uint amount in terms of tokenGet that will be "buy" in the trade
  */
  function tradeBalances(address tokenGet, uint amountGet, address tokenGive, uint amountGive, address user, uint amount) private {
    
    uint feeTakeXferM = 0;
    uint feeTakeXferS = 0;
    uint feeTakeXferFicM = 0;
    uint feeTakeXferFicS = 0;
    
    feeTakeXferM = amount.mul(feeTakeMaker).div(1 ether);
    feeTakeXferS = amount.mul(feeTakeSender).div(1 ether);
    feeTakeXferFicM = amount.mul(feeTakeMakerFic).div(1 ether);
    feeTakeXferFicS = amount.mul(feeTakeSenderFic).div(1 ether);
    
    
    
    if (tokenGet == FicAddress || tokenGive == FicAddress) {
    tokens[tokenGet][msg.sender] = tokens[tokenGet][msg.sender].sub(amount.add(feeTakeXferFicS));
    tokens[tokenGet][user] = tokens[tokenGet][user].add(amount.sub(feeTakeXferFicM));
    tokens[tokenGet][feeAccount] = tokens[tokenGet][feeAccount].add(feeTakeXferFicM);
    tokens[tokenGet][feeAccount] = tokens[tokenGet][feeAccount].add(feeTakeXferFicS);
    }
  
    else {
    tokens[tokenGet][msg.sender] = tokens[tokenGet][msg.sender].sub(amount.add(feeTakeXferS));
    tokens[tokenGet][user] = tokens[tokenGet][user].add(amount.sub(feeTakeXferM));
    tokens[tokenGet][feeAccount] = tokens[tokenGet][feeAccount].add(feeTakeXferM);
    tokens[tokenGet][feeAccount] = tokens[tokenGet][feeAccount].add(feeTakeXferS);
    }
    
    tokens[tokenGive][user] = tokens[tokenGive][user].sub(amountGive.mul(amount).div(amountGet));
    tokens[tokenGive][msg.sender] = tokens[tokenGive][msg.sender].add(amountGive.mul(amount).div(amountGet));
  
  }

  /**
  * This function is to test if a trade would go through.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * Note: amount is in amountGet / tokenGet terms.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  * @param user Ethereum address of the user who placed the order
  * @param v part of signature for the order hash as signed by user
  * @param r part of signature for the order hash as signed by user
  * @param s part of signature for the order hash as signed by user
  * @param amount uint amount in terms of tokenGet that will be "buy" in the trade
  * @param sender Ethereum address of the user taking the order
  * @return bool: true if the trade would be successful, false otherwise
  */
  function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) public constant returns(bool) {
    if (!(
      tokens[tokenGet][sender] >= amount &&
      availableVolume(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, user, v, r, s) >= amount
      )) { 
      return false;
    } else {
      return true;
    }
  }

  /**
  * This function checks the available volume for a given order.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  * @param user Ethereum address of the user who placed the order
  * @param v part of signature for the order hash as signed by user
  * @param r part of signature for the order hash as signed by user
  * @param s part of signature for the order hash as signed by user
  * @return uint: amount of volume available for the given order in terms of amountGet / tokenGet
  */
  function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) public constant returns(uint) {
    bytes32 hash = keccak256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
    if (!(
      (orders[user][hash] || ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == user) &&
      block.number <= expires
      )) {
      return 0;
    }
    uint[2] memory available;
    available[0] = amountGet.sub(orderFills[user][hash]);
    available[1] = tokens[tokenGive][user].mul(amountGet) / amountGive;
    if (available[0] < available[1]) {
      return available[0];
    } else {
      return available[1];
    }
  }

  /**
  * This function checks the amount of an order that has already been filled.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  * @param user Ethereum address of the user who placed the order
  * @param v part of signature for the order hash as signed by user
  * @param r part of signature for the order hash as signed by user
  * @param s part of signature for the order hash as signed by user
  * @return uint: amount of the given order that has already been filled in terms of amountGet / tokenGet
  */
  function amountFilled(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) public constant returns(uint) {
    bytes32 hash = keccak256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
    return orderFills[user][hash];
  }

  /**
  * This function cancels a given order by editing its fill data to the full amount.
  * Requires that the transaction is signed properly.
  * Updates orderFills to the full amountGet
  * Emits a Cancel event.
  * Note: tokenGet & tokenGive can be the Ethereum contract address.
  * @param tokenGet Ethereum contract address of the token to receive
  * @param amountGet uint amount of tokens being received
  * @param tokenGive Ethereum contract address of the token to give
  * @param amountGive uint amount of tokens being given
  * @param expires uint of block number when this order should expire
  * @param nonce arbitrary random number
  * @param v part of signature for the order hash as signed by user
  * @param r part of signature for the order hash as signed by user
  * @param s part of signature for the order hash as signed by user
  * @return uint: amount of the given order that has already been filled in terms of amountGet / tokenGet
  */
  function cancelOrder(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, uint8 v, bytes32 r, bytes32 s) public {
    bytes32 hash = keccak256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce);
    require ((orders[msg.sender][hash] || ecrecover(keccak256("\x19Ethereum Signed Message:\n32", hash), v, r, s) == msg.sender));
    orderFills[msg.sender][hash] = amountGet;
    Cancel(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, msg.sender, v, r, s);
  }


  
  ////////////////////////////////////////////////////////////////////////////////
  // Contract Versioning / Migration
  ////////////////////////////////////////////////////////////////////////////////
  
  /**
  * User triggered function to migrate funds into a new contract to ease updates.
  * Emits a FundsMigrated event.
  * @param newContract Contract address of the new contract we are migrating funds to
  * @param tokens_ Array of token addresses that we will be migrating to the new contract
  */
  function migrateFunds(address newContract, address[] tokens_) public {
  
    require(newContract != address(0));
    
    SeedDex newExchange = SeedDex(newContract);

    // Move Ether into new exchange.
    uint etherAmount = tokens[0][msg.sender];
    if (etherAmount > 0) {
      tokens[0][msg.sender] = 0;
      newExchange.depositForUser.value(etherAmount)(msg.sender);
    }

    // Move Tokens into new exchange.
    for (uint16 n = 0; n < tokens_.length; n++) {
      address token = tokens_[n];
      require(token != address(0)); // Ether is handled above.
      uint tokenAmount = tokens[token][msg.sender];
      
      if (tokenAmount != 0) {      
        require(IERC20(token).approve(newExchange, tokenAmount));
        tokens[token][msg.sender] = 0;
        newExchange.depositTokenForUser(token, tokenAmount, msg.sender);
      }
    }

    FundsMigrated(msg.sender, newContract);
  }
  
  /**
  * This function handles deposits of Ether into the contract, but allows specification of a user.
  * Note: This is generally used in migration of funds.
  * Note: With the payable modifier, this function accepts Ether.
  */
  function depositForUser(address user) public payable {
    require(user != address(0));
    require(msg.value > 0);
    tokens[0][user] = tokens[0][user].add(msg.value);
  }
  
  /**
  * This function handles deposits of Ethereum based tokens into the contract, but allows specification of a user.
  * Does not allow Ether.
  * If token transfer fails, transaction is reverted and remaining gas is refunded.
  * Note: This is generally used in migration of funds.
  * Note: Remember to call Token(address).approve(this, amount) or this contract will not be able to do the transfer on your behalf.
  * @param token Ethereum contract address of the token
  * @param amount uint of the amount of the token the user wishes to deposit
  */
  function depositTokenForUser(address token, uint amount, address user) public {
    require(token != address(0));
    require(user != address(0));
    require(amount > 0);
    depositingTokenFlag = true;
    require(IERC20(token).transferFrom(msg.sender, this, amount));
    depositingTokenFlag = false;
    tokens[token][user] = tokens[token][user].add(amount);
  }
  function checkshash (address tokenGet) public{
      bytes32 hash = keccak256(tokenGet);
      LogEvent('hash',hash);
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"feeTakeSender","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"user","type":"address"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"amount","type":"uint256"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"}],"name":"order","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"successor_","type":"address"}],"name":"setSuccessor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"feeTakeMaker_","type":"uint256"}],"name":"changeFeeTakeMaker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeTakeMaker","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"user","type":"address"}],"name":"depositTokenForUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"user","type":"address"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"amountFilled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newContract","type":"address"},{"name":"tokens_","type":"address[]"}],"name":"migrateFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"depositForUser","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"user","type":"address"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"amount","type":"uint256"},{"name":"sender","type":"address"}],"name":"testTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"successor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"feeAccount_","type":"address"}],"name":"changeFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"feeTakeSenderFic_","type":"uint256"}],"name":"changeFeeTakeSenderFic","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTakeSenderFic","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"admin_","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTakeMakerFic","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"manager_","type":"address"}],"name":"changeManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"feeTakeMakerFic_","type":"uint256"}],"name":"changeFeeTakeMakerFic","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"feeTakeSender_","type":"uint256"}],"name":"changeFeeTakeSender","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"predecessor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"orders","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"tokenFallback","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenGet","type":"address"}],"name":"checkshash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"FicAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"expires","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"user","type":"address"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"availableVolume","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"admin_","type":"address"},{"name":"manager_","type":"address"},{"name":"feeAccount_","type":"address"},{"name":"feeTakeMaker_","type":"uint256"},{"name":"feeTakeSender_","type":"uint256"},{"name":"feeTakeMakerFic_","type":"uint256"},{"name":"feeTakeSenderFic_","type":"uint256"},{"name":"predecessor_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"expires","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"hash","type":"bytes32"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"expires","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"v","type":"uint8"},{"indexed":false,"name":"r","type":"bytes32"},{"indexed":false,"name":"s","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"get","type":"address"},{"indexed":false,"name":"give","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":true,"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":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newContract","type":"address"}],"name":"FundsMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"data","type":"bytes32"}],"name":"LogEvent","type":"event"}]

608060405234801561001057600080fd5b5060405161010080620024ee83398101604090815281516020830151918301516060840151608085015160a086015160c087015160e09097015160008054600160a060020a0319908116600160a060020a03808a1691909117909255600180548216838b1617905560028054821683891617905560038690556004859055600584905560068a90556007805460ff19169055600b805490911682841617908190559698959694959394929392161561019757600b60009054906101000a9004600160a060020a0316600160a060020a03166354fd4d506040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561012e57600080fd5b505af1158015610142573d6000803e3d6000fd5b505050506040513d602081101561015857600080fd5b5051600c805460a060020a61ffff02191674010000000000000000000000000000000000000000600190930161ffff16929092029190911790556101c0565b600c805460a060020a61ffff021916740100000000000000000000000000000000000000001790555b505050505050505061231680620001d86000396000f3006080604052600436106101d65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626be1f881146101e85780630a19b14a1461020f5780630b9276661461026057806310e5bff814610294578063187dc587146102b557806319774d43146102cd578063272396cb146102f1578063278b8c0e146103065780632e1a7d4d14610347578063338b5dea1461035f5780633c2e2a751461038357806346be96c3146103ae578063481c6a75146103f9578063508493bc1461042a578063515fdde31461045157806354fd4d50146104b457806365e17c9d146104e05780636a523c5e146104f55780636c86888b146105095780636ff968c31461057757806371ffcb161461058c578063776e2525146105ad5780638146dbb7146105c55780638f283970146105da57806393ab48ed146105fb5780639e281a9814610610578063a3fbbaae14610634578063b2207ec314610655578063b2ab553a1461066d578063b719d03214610685578063bb5f46291461069a578063c0ee0b8a146106be578063c7a0c3cb14610727578063d0e30db014610748578063e432610814610750578063f7888aec14610765578063f851a4401461078c578063fb6e155f146107a1575b3480156101e257600080fd5b50600080fd5b3480156101f457600080fd5b506101fd6107ec565b60408051918252519081900360200190f35b34801561021b57600080fd5b5061025e600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435610144356107f2565b005b34801561026c57600080fd5b5061025e600160a060020a03600435811690602435906044351660643560843560a435610a6f565b3480156102a057600080fd5b5061025e600160a060020a0360043516610b5b565b3480156102c157600080fd5b5061025e600435610bb6565b3480156102d957600080fd5b506101fd600160a060020a0360043516602435610be9565b3480156102fd57600080fd5b506101fd610c06565b34801561031257600080fd5b5061025e600160a060020a03600435811690602435906044351660643560843560a43560ff60c4351660e43561010435610c0c565b34801561035357600080fd5b5061025e600435610dd7565b34801561036b57600080fd5b5061025e600160a060020a0360043516602435610ed9565b34801561038f57600080fd5b5061025e600160a060020a036004358116906024359060443516611049565b3480156103ba57600080fd5b506101fd600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e4351661010435610124356111a2565b34801561040557600080fd5b5061040e611220565b60408051600160a060020a039092168252519081900360200190f35b34801561043657600080fd5b506101fd600160a060020a036004358116906024351661122f565b34801561045d57600080fd5b5060408051602060046024803582810135848102808701860190975280865261025e968435600160a060020a03169636966044959194909101929182918501908490808284375094975061124c9650505050505050565b3480156104c057600080fd5b506104c9611541565b6040805161ffff9092168252519081900360200190f35b3480156104ec57600080fd5b5061040e611563565b61025e600160a060020a0360043516611572565b34801561051557600080fd5b50610563600160a060020a0360043581169060243590604435811690606435906084359060a4359060c43581169060ff60e435169061010435906101243590610144359061016435166115f4565b604080519115158252519081900360200190f35b34801561058357600080fd5b5061040e61165e565b34801561059857600080fd5b5061025e600160a060020a036004351661166d565b3480156105b957600080fd5b5061025e6004356116b3565b3480156105d157600080fd5b506101fd6116e6565b3480156105e657600080fd5b5061025e600160a060020a03600435166116ec565b34801561060757600080fd5b506101fd611747565b34801561061c57600080fd5b5061025e600160a060020a036004351660243561174d565b34801561064057600080fd5b5061025e600160a060020a03600435166118ec565b34801561066157600080fd5b5061025e60043561195e565b34801561067957600080fd5b5061025e600435611991565b34801561069157600080fd5b5061040e6119c4565b3480156106a657600080fd5b50610563600160a060020a03600435166024356119d3565b3480156106ca57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610563948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506119f39650505050505050565b34801561073357600080fd5b5061025e600160a060020a0360043516611a15565b61025e611aa5565b34801561075c57600080fd5b5061040e611b3c565b34801561077157600080fd5b506101fd600160a060020a0360043581169060243516611b54565b34801561079857600080fd5b5061040e611b7f565b3480156107ad57600080fd5b506101fd600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435611b8e565b60045481565b604080516c010000000000000000000000003081028252600160a060020a03808f1682026014840152602883018e9052808d169091026048830152605c82018b9052607c82018a9052609c820189905282519182900360bc019091209087166000908152600960209081528382208383529052919091205460ff16806109215750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101839052815190819003603c018120600080835260208381018086529290925260ff89168385015260608301889052608083018790529251600160a060020a038a169360019360a08082019493601f198101939281900390910191865af115801561090c573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b801561092d5750874311155b801561096d5750600160a060020a0386166000908152600a602090815260408083208484529091529020548b9061096a908463ffffffff611e0916565b11155b151561097857600080fd5b6109868c8c8c8c8a87611e26565b600160a060020a0386166000908152600a602090815260408083208484529091529020546109ba908363ffffffff611e0916565b600160a060020a0387166000908152600a602090815260408083208584529091529020557f3314c351c2a2a45771640a1442b843167a4da29bd543612311c031bbfb4ffa988c838c8e610a138e8463ffffffff61224716565b811515610a1c57fe5b60408051600160a060020a03968716815260208101959095529285168484015204606083015291891660808201523360a08201524260c082015290519081900360e00190a1505050505050505050505050565b604080516c010000000000000000000000003081028252600160a060020a03808a168083026014850152602884018a90529088169182026048840152605c8301879052607c8301869052609c830185905283519283900360bc018320336000818152600960209081528782208483528152878220805460ff191660011790559386529285018b905284860193909352606084018890526080840187905260a0840186905260c0840181905260e08401829052935190927fa93976f6b21519d0fbaa09d82403b467d7ebe18bca79db6e9bd0f72b72b7788d91908190036101000190a25050505050505050565b600054600160a060020a03163314610b7257600080fd5b600160a060020a0381161515610b8757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316331480610bd95750600054600160a060020a031633145b1515610be457600080fd5b600355565b600a60209081526000928352604080842090915290825290205481565b60035481565b604080516c010000000000000000000000003081028252600160a060020a03808d1682026014840152602883018c90528a16026048820152605c8101889052607c8101879052609c810186905281519081900360bc019020336000908152600960209081528382208383529052919091205460ff1680610d2c5750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101839052815190819003603c018120600080835260208381018086529290925260ff88168385015260608301879052608083018690529251339360019360a08082019493601f198101939281900390910191865af1158015610d17573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b1515610d3757600080fd5b336000818152600a602090815260408083208584528252918290208c90558151600160a060020a038e811682529181018d9052908b1681830152606081018a90526080810189905260a0810188905260ff871660c082015260e08101869052610100810185905290517f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0918190036101200190a250505050505050505050565b3360009081526000805160206122cb8339815191526020526040902054811115610e0057600080fd5b3360009081526000805160206122cb8339815191526020526040902054610e2d908263ffffffff61227516565b3360008181526000805160206122cb8339815191526020526040808220939093559151909183156108fc02918491818181858888f19350505050158015610e78573d6000803e3d6000fd5b503360008181526000805160206122cb8339815191526020908152604080832054815193845291830185905282810191909152517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360600190a250565b600160a060020a0382161515610eee57600080fd5b6007805460ff19166001179055604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610fa057600080fd5b6007805460ff19169055600160a060020a0382166000908152600860209081526040808320338452909152902054610fde908263ffffffff611e0916565b600160a060020a0383166000818152600860209081526040808320338085529083529281902085905580519384529083018590528281019390935291517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360600190a25050565b600160a060020a038316151561105e57600080fd5b600160a060020a038116151561107357600080fd5b6000821161108057600080fd5b6007805460ff19166001179055604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490529051600160a060020a038516916323b872dd9160648083019260209291908290030181600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b5051151561113257600080fd5b6007805460ff19169055600160a060020a03808416600090815260086020908152604080832093851683529290522054611172908363ffffffff611e0916565b600160a060020a039384166000908152600860209081526040808320949096168252929092529290209190915550565b5050604080516c010000000000000000000000003081028252600160a060020a039a8b16810260148301526028820199909952968916909702604887015250605c850193909352607c840191909152609c83015282519182900360bc0190912092166000908152600a60209081528282209382529290925290205490565b600154600160a060020a031681565b600860209081526000928352604080842090915290825290205481565b600080808080600160a060020a038716151561126757600080fd5b3360009081526000805160206122cb83398151915260205260408120548896509450841115611326573360008181526000805160206122cb833981519152602052604080822082905580517f6a523c5e000000000000000000000000000000000000000000000000000000008152600481019390935251600160a060020a03881692636a523c5e92889260248084019382900301818588803b15801561130c57600080fd5b505af1158015611320573d6000803e3d6000fd5b50505050505b600092505b85518361ffff1610156114f957858361ffff1681518110151561134a57fe5b602090810290910101519150600160a060020a038216151561136b57600080fd5b50600160a060020a038116600090815260086020908152604080832033845290915290205480156114ee5781600160a060020a031663095ea7b386836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561141257600080fd5b505af1158015611426573d6000803e3d6000fd5b505050506040513d602081101561143c57600080fd5b5051151561144957600080fd5b600160a060020a03808316600081815260086020908152604080832033808552925280832083905580517f3c2e2a7500000000000000000000000000000000000000000000000000000000815260048101949094526024840186905260448401919091525192881692633c2e2a7592606480820193929182900301818387803b1580156114d557600080fd5b505af11580156114e9573d6000803e3d6000fd5b505050505b60019092019161132b565b60408051600160a060020a0389168152905133917f0cd41587e1fdc62ecf8d0627f78a2e52dfb0ac9116b3c84027ce99ba7c2a198a919081900360200190a250505050505050565b600c5474010000000000000000000000000000000000000000900461ffff1681565b600254600160a060020a031681565b600160a060020a038116151561158757600080fd5b6000341161159457600080fd5b600160a060020a03811660009081526000805160206122cb83398151915260205260409020546115ca903463ffffffff611e0916565b600160a060020a039190911660009081526000805160206122cb8339815191526020526040902055565b600160a060020a03808d166000908152600860209081526040808320938516835292905290812054831180159061163c5750826116398e8e8e8e8e8e8e8e8e8e611b8e565b10155b151561164a5750600061164e565b5060015b9c9b505050505050505050505050565b600c54600160a060020a031681565b600054600160a060020a0316331461168457600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314806116d65750600054600160a060020a031633145b15156116e157600080fd5b600655565b60065481565b600054600160a060020a0316331461170357600080fd5b600160a060020a038116151561171857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055481565b600160a060020a038216151561176257600080fd5b600160a060020a038216600090815260086020908152604080832033845290915290205481111561179257600080fd5b600160a060020a03821660009081526008602090815260408083203384529091529020546117c6908263ffffffff61227516565b600160a060020a0383166000818152600860209081526040808320338085529083528184209590955580517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101959095526024850186905251929363a9059cbb9360448083019491928390030190829087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b505050506040513d602081101561187457600080fd5b5051151561188157600080fd5b600160a060020a03821660008181526008602090815260408083203380855290835292819020548151948552918401859052838101919091525190917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567919081900360600190a25050565b600154600160a060020a031633148061190f5750600054600160a060020a031633145b151561191a57600080fd5b600160a060020a038116151561192f57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314806119815750600054600160a060020a031633145b151561198c57600080fd5b600555565b600154600160a060020a03163314806119b45750600054600160a060020a031633145b15156119bf57600080fd5b600455565b600b54600160a060020a031681565b600960209081526000928352604080842090915290825290205460ff1681565b60075460009060ff1615611a0957506001611a0e565b600080fd5b9392505050565b604080516c01000000000000000000000000600160a060020a0384160281528151908190036014018120602082018190528282526004828401527f6861736800000000000000000000000000000000000000000000000000000000606083015291517f4c572a08562747a9aa206b40978bdb7e8309c5425c7bf6e0ddba9e5e9af2a5499181900360800190a15050565b3360009081526000805160206122cb8339815191526020526040902054611ad2903463ffffffff611e0916565b3360008181526000805160206122cb833981519152602081815260408084208690558484529181528151928352349083015281810193909352915190917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7919081900360600190a2565b730dd83b5013b2ad7094b1a7783d96ae0168f8262181565b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b600054600160a060020a031681565b600080611b996122af565b308d8d8d8d8d8d6040518088600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140187600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186815260200185600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401848152602001838152602001828152602001975050505050505050604051809103902091506009600088600160a060020a0316600160a060020a031681526020019081526020016000206000836000191660001916815260200190815260200160002060009054906101000a900460ff1680611d445750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101849052815190819003603c018120600080835260208381018086529290925260ff8a168385015260608301899052608083018890529251600160a060020a038b169360019360a08082019493601f198101939281900390910191865af1158015611d2f573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b8015611d505750884311155b1515611d5f5760009250611df9565b600160a060020a0387166000908152600a60209081526040808320858452909152902054611d94908d9063ffffffff61227516565b8152600160a060020a038b81166000908152600860209081526040808320938b16835292905220548a90611dc8908e612247565b811515611dd157fe5b046020820181905281511015611df1578060005b60200201519250611df9565b806001611de5565b50509a9950505050505050505050565b600082820183811015611e1b57600080fd5b8091505b5092915050565b600354600090819081908190611e5d90670de0b6b3a764000090611e5190889063ffffffff61224716565b9063ffffffff61228c16565b9350611e80670de0b6b3a7640000611e516004548861224790919063ffffffff16565b9250611ea3670de0b6b3a7640000611e516005548861224790919063ffffffff16565b9150611ec6670de0b6b3a7640000611e516006548861224790919063ffffffff16565b9050600160a060020a038a16730dd83b5013b2ad7094b1a7783d96ae0168f826211480611f0f5750600160a060020a038816730dd83b5013b2ad7094b1a7783d96ae0168f82621145b1561206c57611f57611f27868363ffffffff611e0916565b600160a060020a038c1660009081526008602090815260408083203384529091529020549063ffffffff61227516565b600160a060020a038b166000908152600860209081526040808320338452909152902055611fc0611f8e868463ffffffff61227516565b600160a060020a03808d166000908152600860209081526040808320938c16835292905220549063ffffffff611e0916565b600160a060020a038b811660009081526008602090815260408083208b851684529091528082209390935560025490911681522054611fff9083611e09565b600160a060020a038b811660009081526008602090815260408083206002805486168552925280832094909455549091168152205461203e9082611e09565b600160a060020a03808c1660009081526008602090815260408083206002549094168352929052205561215e565b61207f611f27868563ffffffff611e0916565b600160a060020a038b1660009081526008602090815260408083203384529091529020556120b6611f8e868663ffffffff61227516565b600160a060020a038b811660009081526008602090815260408083208b8516845290915280822093909355600254909116815220546120f59085611e09565b600160a060020a038b81166000908152600860209081526040808320600280548616855292528083209490945554909116815220546121349084611e09565b600160a060020a03808c166000908152600860209081526040808320600254909416835292905220555b6121a76121758a611e518a8963ffffffff61224716565b600160a060020a03808b166000908152600860209081526040808320938c16835292905220549063ffffffff61227516565b600160a060020a03808a166000908152600860209081526040808320938b16835292905220556122146121e48a611e518a8963ffffffff61224716565b600160a060020a038a1660009081526008602090815260408083203384529091529020549063ffffffff611e0916565b600160a060020a039098166000908152600860209081526040808320338452909152902097909755505050505050505050565b60008083151561225a5760009150611e1f565b5082820282848281151561226a57fe5b0414611e1b57600080fd5b6000808383111561228557600080fd5b5050900390565b60008080831161229b57600080fd5b82848115156122a657fe5b04949350505050565b6040805180820182529060029082908038833950919291505056005eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7a165627a7a72305820d04e30b3fd2b1003f17d66bbd6f3f78f1009b209fb704ab68e70e897129787e000290000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec6000000000000000000000000a1129df7cbecb9ef71fc29aff2995d6af004d5510000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec600000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000005543df729c0000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101d65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626be1f881146101e85780630a19b14a1461020f5780630b9276661461026057806310e5bff814610294578063187dc587146102b557806319774d43146102cd578063272396cb146102f1578063278b8c0e146103065780632e1a7d4d14610347578063338b5dea1461035f5780633c2e2a751461038357806346be96c3146103ae578063481c6a75146103f9578063508493bc1461042a578063515fdde31461045157806354fd4d50146104b457806365e17c9d146104e05780636a523c5e146104f55780636c86888b146105095780636ff968c31461057757806371ffcb161461058c578063776e2525146105ad5780638146dbb7146105c55780638f283970146105da57806393ab48ed146105fb5780639e281a9814610610578063a3fbbaae14610634578063b2207ec314610655578063b2ab553a1461066d578063b719d03214610685578063bb5f46291461069a578063c0ee0b8a146106be578063c7a0c3cb14610727578063d0e30db014610748578063e432610814610750578063f7888aec14610765578063f851a4401461078c578063fb6e155f146107a1575b3480156101e257600080fd5b50600080fd5b3480156101f457600080fd5b506101fd6107ec565b60408051918252519081900360200190f35b34801561021b57600080fd5b5061025e600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435610144356107f2565b005b34801561026c57600080fd5b5061025e600160a060020a03600435811690602435906044351660643560843560a435610a6f565b3480156102a057600080fd5b5061025e600160a060020a0360043516610b5b565b3480156102c157600080fd5b5061025e600435610bb6565b3480156102d957600080fd5b506101fd600160a060020a0360043516602435610be9565b3480156102fd57600080fd5b506101fd610c06565b34801561031257600080fd5b5061025e600160a060020a03600435811690602435906044351660643560843560a43560ff60c4351660e43561010435610c0c565b34801561035357600080fd5b5061025e600435610dd7565b34801561036b57600080fd5b5061025e600160a060020a0360043516602435610ed9565b34801561038f57600080fd5b5061025e600160a060020a036004358116906024359060443516611049565b3480156103ba57600080fd5b506101fd600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e4351661010435610124356111a2565b34801561040557600080fd5b5061040e611220565b60408051600160a060020a039092168252519081900360200190f35b34801561043657600080fd5b506101fd600160a060020a036004358116906024351661122f565b34801561045d57600080fd5b5060408051602060046024803582810135848102808701860190975280865261025e968435600160a060020a03169636966044959194909101929182918501908490808284375094975061124c9650505050505050565b3480156104c057600080fd5b506104c9611541565b6040805161ffff9092168252519081900360200190f35b3480156104ec57600080fd5b5061040e611563565b61025e600160a060020a0360043516611572565b34801561051557600080fd5b50610563600160a060020a0360043581169060243590604435811690606435906084359060a4359060c43581169060ff60e435169061010435906101243590610144359061016435166115f4565b604080519115158252519081900360200190f35b34801561058357600080fd5b5061040e61165e565b34801561059857600080fd5b5061025e600160a060020a036004351661166d565b3480156105b957600080fd5b5061025e6004356116b3565b3480156105d157600080fd5b506101fd6116e6565b3480156105e657600080fd5b5061025e600160a060020a03600435166116ec565b34801561060757600080fd5b506101fd611747565b34801561061c57600080fd5b5061025e600160a060020a036004351660243561174d565b34801561064057600080fd5b5061025e600160a060020a03600435166118ec565b34801561066157600080fd5b5061025e60043561195e565b34801561067957600080fd5b5061025e600435611991565b34801561069157600080fd5b5061040e6119c4565b3480156106a657600080fd5b50610563600160a060020a03600435166024356119d3565b3480156106ca57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610563948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506119f39650505050505050565b34801561073357600080fd5b5061025e600160a060020a0360043516611a15565b61025e611aa5565b34801561075c57600080fd5b5061040e611b3c565b34801561077157600080fd5b506101fd600160a060020a0360043581169060243516611b54565b34801561079857600080fd5b5061040e611b7f565b3480156107ad57600080fd5b506101fd600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435611b8e565b60045481565b604080516c010000000000000000000000003081028252600160a060020a03808f1682026014840152602883018e9052808d169091026048830152605c82018b9052607c82018a9052609c820189905282519182900360bc019091209087166000908152600960209081528382208383529052919091205460ff16806109215750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101839052815190819003603c018120600080835260208381018086529290925260ff89168385015260608301889052608083018790529251600160a060020a038a169360019360a08082019493601f198101939281900390910191865af115801561090c573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b801561092d5750874311155b801561096d5750600160a060020a0386166000908152600a602090815260408083208484529091529020548b9061096a908463ffffffff611e0916565b11155b151561097857600080fd5b6109868c8c8c8c8a87611e26565b600160a060020a0386166000908152600a602090815260408083208484529091529020546109ba908363ffffffff611e0916565b600160a060020a0387166000908152600a602090815260408083208584529091529020557f3314c351c2a2a45771640a1442b843167a4da29bd543612311c031bbfb4ffa988c838c8e610a138e8463ffffffff61224716565b811515610a1c57fe5b60408051600160a060020a03968716815260208101959095529285168484015204606083015291891660808201523360a08201524260c082015290519081900360e00190a1505050505050505050505050565b604080516c010000000000000000000000003081028252600160a060020a03808a168083026014850152602884018a90529088169182026048840152605c8301879052607c8301869052609c830185905283519283900360bc018320336000818152600960209081528782208483528152878220805460ff191660011790559386529285018b905284860193909352606084018890526080840187905260a0840186905260c0840181905260e08401829052935190927fa93976f6b21519d0fbaa09d82403b467d7ebe18bca79db6e9bd0f72b72b7788d91908190036101000190a25050505050505050565b600054600160a060020a03163314610b7257600080fd5b600160a060020a0381161515610b8757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316331480610bd95750600054600160a060020a031633145b1515610be457600080fd5b600355565b600a60209081526000928352604080842090915290825290205481565b60035481565b604080516c010000000000000000000000003081028252600160a060020a03808d1682026014840152602883018c90528a16026048820152605c8101889052607c8101879052609c810186905281519081900360bc019020336000908152600960209081528382208383529052919091205460ff1680610d2c5750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101839052815190819003603c018120600080835260208381018086529290925260ff88168385015260608301879052608083018690529251339360019360a08082019493601f198101939281900390910191865af1158015610d17573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b1515610d3757600080fd5b336000818152600a602090815260408083208584528252918290208c90558151600160a060020a038e811682529181018d9052908b1681830152606081018a90526080810189905260a0810188905260ff871660c082015260e08101869052610100810185905290517f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0918190036101200190a250505050505050505050565b3360009081526000805160206122cb8339815191526020526040902054811115610e0057600080fd5b3360009081526000805160206122cb8339815191526020526040902054610e2d908263ffffffff61227516565b3360008181526000805160206122cb8339815191526020526040808220939093559151909183156108fc02918491818181858888f19350505050158015610e78573d6000803e3d6000fd5b503360008181526000805160206122cb8339815191526020908152604080832054815193845291830185905282810191909152517ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679181900360600190a250565b600160a060020a0382161515610eee57600080fd5b6007805460ff19166001179055604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390529051600160a060020a038416916323b872dd9160648083019260209291908290030181600087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50511515610fa057600080fd5b6007805460ff19169055600160a060020a0382166000908152600860209081526040808320338452909152902054610fde908263ffffffff611e0916565b600160a060020a0383166000818152600860209081526040808320338085529083529281902085905580519384529083018590528281019390935291517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181900360600190a25050565b600160a060020a038316151561105e57600080fd5b600160a060020a038116151561107357600080fd5b6000821161108057600080fd5b6007805460ff19166001179055604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490529051600160a060020a038516916323b872dd9160648083019260209291908290030181600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b5051151561113257600080fd5b6007805460ff19169055600160a060020a03808416600090815260086020908152604080832093851683529290522054611172908363ffffffff611e0916565b600160a060020a039384166000908152600860209081526040808320949096168252929092529290209190915550565b5050604080516c010000000000000000000000003081028252600160a060020a039a8b16810260148301526028820199909952968916909702604887015250605c850193909352607c840191909152609c83015282519182900360bc0190912092166000908152600a60209081528282209382529290925290205490565b600154600160a060020a031681565b600860209081526000928352604080842090915290825290205481565b600080808080600160a060020a038716151561126757600080fd5b3360009081526000805160206122cb83398151915260205260408120548896509450841115611326573360008181526000805160206122cb833981519152602052604080822082905580517f6a523c5e000000000000000000000000000000000000000000000000000000008152600481019390935251600160a060020a03881692636a523c5e92889260248084019382900301818588803b15801561130c57600080fd5b505af1158015611320573d6000803e3d6000fd5b50505050505b600092505b85518361ffff1610156114f957858361ffff1681518110151561134a57fe5b602090810290910101519150600160a060020a038216151561136b57600080fd5b50600160a060020a038116600090815260086020908152604080832033845290915290205480156114ee5781600160a060020a031663095ea7b386836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561141257600080fd5b505af1158015611426573d6000803e3d6000fd5b505050506040513d602081101561143c57600080fd5b5051151561144957600080fd5b600160a060020a03808316600081815260086020908152604080832033808552925280832083905580517f3c2e2a7500000000000000000000000000000000000000000000000000000000815260048101949094526024840186905260448401919091525192881692633c2e2a7592606480820193929182900301818387803b1580156114d557600080fd5b505af11580156114e9573d6000803e3d6000fd5b505050505b60019092019161132b565b60408051600160a060020a0389168152905133917f0cd41587e1fdc62ecf8d0627f78a2e52dfb0ac9116b3c84027ce99ba7c2a198a919081900360200190a250505050505050565b600c5474010000000000000000000000000000000000000000900461ffff1681565b600254600160a060020a031681565b600160a060020a038116151561158757600080fd5b6000341161159457600080fd5b600160a060020a03811660009081526000805160206122cb83398151915260205260409020546115ca903463ffffffff611e0916565b600160a060020a039190911660009081526000805160206122cb8339815191526020526040902055565b600160a060020a03808d166000908152600860209081526040808320938516835292905290812054831180159061163c5750826116398e8e8e8e8e8e8e8e8e8e611b8e565b10155b151561164a5750600061164e565b5060015b9c9b505050505050505050505050565b600c54600160a060020a031681565b600054600160a060020a0316331461168457600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314806116d65750600054600160a060020a031633145b15156116e157600080fd5b600655565b60065481565b600054600160a060020a0316331461170357600080fd5b600160a060020a038116151561171857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055481565b600160a060020a038216151561176257600080fd5b600160a060020a038216600090815260086020908152604080832033845290915290205481111561179257600080fd5b600160a060020a03821660009081526008602090815260408083203384529091529020546117c6908263ffffffff61227516565b600160a060020a0383166000818152600860209081526040808320338085529083528184209590955580517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101959095526024850186905251929363a9059cbb9360448083019491928390030190829087803b15801561184a57600080fd5b505af115801561185e573d6000803e3d6000fd5b505050506040513d602081101561187457600080fd5b5051151561188157600080fd5b600160a060020a03821660008181526008602090815260408083203380855290835292819020548151948552918401859052838101919091525190917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567919081900360600190a25050565b600154600160a060020a031633148061190f5750600054600160a060020a031633145b151561191a57600080fd5b600160a060020a038116151561192f57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a03163314806119815750600054600160a060020a031633145b151561198c57600080fd5b600555565b600154600160a060020a03163314806119b45750600054600160a060020a031633145b15156119bf57600080fd5b600455565b600b54600160a060020a031681565b600960209081526000928352604080842090915290825290205460ff1681565b60075460009060ff1615611a0957506001611a0e565b600080fd5b9392505050565b604080516c01000000000000000000000000600160a060020a0384160281528151908190036014018120602082018190528282526004828401527f6861736800000000000000000000000000000000000000000000000000000000606083015291517f4c572a08562747a9aa206b40978bdb7e8309c5425c7bf6e0ddba9e5e9af2a5499181900360800190a15050565b3360009081526000805160206122cb8339815191526020526040902054611ad2903463ffffffff611e0916565b3360008181526000805160206122cb833981519152602081815260408084208690558484529181528151928352349083015281810193909352915190917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7919081900360600190a2565b730dd83b5013b2ad7094b1a7783d96ae0168f8262181565b600160a060020a03918216600090815260086020908152604080832093909416825291909152205490565b600054600160a060020a031681565b600080611b996122af565b308d8d8d8d8d8d6040518088600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140187600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140186815260200185600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401848152602001838152602001828152602001975050505050505050604051809103902091506009600088600160a060020a0316600160a060020a031681526020019081526020016000206000836000191660001916815260200190815260200160002060009054906101000a900460ff1680611d445750604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101849052815190819003603c018120600080835260208381018086529290925260ff8a168385015260608301899052608083018890529251600160a060020a038b169360019360a08082019493601f198101939281900390910191865af1158015611d2f573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b8015611d505750884311155b1515611d5f5760009250611df9565b600160a060020a0387166000908152600a60209081526040808320858452909152902054611d94908d9063ffffffff61227516565b8152600160a060020a038b81166000908152600860209081526040808320938b16835292905220548a90611dc8908e612247565b811515611dd157fe5b046020820181905281511015611df1578060005b60200201519250611df9565b806001611de5565b50509a9950505050505050505050565b600082820183811015611e1b57600080fd5b8091505b5092915050565b600354600090819081908190611e5d90670de0b6b3a764000090611e5190889063ffffffff61224716565b9063ffffffff61228c16565b9350611e80670de0b6b3a7640000611e516004548861224790919063ffffffff16565b9250611ea3670de0b6b3a7640000611e516005548861224790919063ffffffff16565b9150611ec6670de0b6b3a7640000611e516006548861224790919063ffffffff16565b9050600160a060020a038a16730dd83b5013b2ad7094b1a7783d96ae0168f826211480611f0f5750600160a060020a038816730dd83b5013b2ad7094b1a7783d96ae0168f82621145b1561206c57611f57611f27868363ffffffff611e0916565b600160a060020a038c1660009081526008602090815260408083203384529091529020549063ffffffff61227516565b600160a060020a038b166000908152600860209081526040808320338452909152902055611fc0611f8e868463ffffffff61227516565b600160a060020a03808d166000908152600860209081526040808320938c16835292905220549063ffffffff611e0916565b600160a060020a038b811660009081526008602090815260408083208b851684529091528082209390935560025490911681522054611fff9083611e09565b600160a060020a038b811660009081526008602090815260408083206002805486168552925280832094909455549091168152205461203e9082611e09565b600160a060020a03808c1660009081526008602090815260408083206002549094168352929052205561215e565b61207f611f27868563ffffffff611e0916565b600160a060020a038b1660009081526008602090815260408083203384529091529020556120b6611f8e868663ffffffff61227516565b600160a060020a038b811660009081526008602090815260408083208b8516845290915280822093909355600254909116815220546120f59085611e09565b600160a060020a038b81166000908152600860209081526040808320600280548616855292528083209490945554909116815220546121349084611e09565b600160a060020a03808c166000908152600860209081526040808320600254909416835292905220555b6121a76121758a611e518a8963ffffffff61224716565b600160a060020a03808b166000908152600860209081526040808320938c16835292905220549063ffffffff61227516565b600160a060020a03808a166000908152600860209081526040808320938b16835292905220556122146121e48a611e518a8963ffffffff61224716565b600160a060020a038a1660009081526008602090815260408083203384529091529020549063ffffffff611e0916565b600160a060020a039098166000908152600860209081526040808320338452909152902097909755505050505050505050565b60008083151561225a5760009150611e1f565b5082820282848281151561226a57fe5b0414611e1b57600080fd5b6000808383111561228557600080fd5b5050900390565b60008080831161229b57600080fd5b82848115156122a657fe5b04949350505050565b6040805180820182529060029082908038833950919291505056005eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7a165627a7a72305820d04e30b3fd2b1003f17d66bbd6f3f78f1009b209fb704ab68e70e897129787e00029

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

0000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec6000000000000000000000000a1129df7cbecb9ef71fc29aff2995d6af004d5510000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec600000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000005543df729c0000000000000000000000000000000000000000000000000000001c6bf5263400000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : admin_ (address): 0x9Dbf9B49104F428Bfa2D13985F3beEc49aC2EEC6
Arg [1] : manager_ (address): 0xA1129dF7CBEcB9eF71FC29afF2995d6Af004D551
Arg [2] : feeAccount_ (address): 0x9Dbf9B49104F428Bfa2D13985F3beEc49aC2EEC6
Arg [3] : feeTakeMaker_ (uint256): 1000000000000000
Arg [4] : feeTakeSender_ (uint256): 1500000000000000
Arg [5] : feeTakeMakerFic_ (uint256): 500000000000000
Arg [6] : feeTakeSenderFic_ (uint256): 1000000000000000
Arg [7] : predecessor_ (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec6
Arg [1] : 000000000000000000000000a1129df7cbecb9ef71fc29aff2995d6af004d551
Arg [2] : 0000000000000000000000009dbf9b49104f428bfa2d13985f3beec49ac2eec6
Arg [3] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [4] : 0000000000000000000000000000000000000000000000000005543df729c000
Arg [5] : 0000000000000000000000000000000000000000000000000001c6bf52634000
Arg [6] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://d04e30b3fd2b1003f17d66bbd6f3f78f1009b209fb704ab68e70e897129787e0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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