More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,291 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Token | 7174003 | 2181 days ago | IN | 0 ETH | 0.00013379 | ||||
Deposit Token | 7173991 | 2181 days ago | IN | 0 ETH | 0.0002356 | ||||
Migrate Funds | 7173953 | 2181 days ago | IN | 0 ETH | 0.00026965 | ||||
Deposit Token | 7173945 | 2181 days ago | IN | 0 ETH | 0.00031414 | ||||
Migrate Funds | 7173940 | 2181 days ago | IN | 0 ETH | 0.00033707 | ||||
Deposit Token | 7173903 | 2181 days ago | IN | 0 ETH | 0.00025286 | ||||
Deposit Token | 7173844 | 2181 days ago | IN | 0 ETH | 0.00031414 | ||||
Set Successor | 7157962 | 2184 days ago | IN | 0 ETH | 0.00011466 | ||||
Migrate Funds | 7147772 | 2186 days ago | IN | 0 ETH | 0.00030657 | ||||
Migrate Funds | 7147611 | 2186 days ago | IN | 0 ETH | 0.00125309 | ||||
Migrate Funds | 7107575 | 2194 days ago | IN | 0 ETH | 0.00051096 | ||||
Migrate Funds | 7106954 | 2194 days ago | IN | 0 ETH | 0.00018204 | ||||
Migrate Funds | 7104358 | 2195 days ago | IN | 0 ETH | 0.00013653 | ||||
Migrate Funds | 7104339 | 2195 days ago | IN | 0 ETH | 0.00018204 | ||||
Migrate Funds | 7101174 | 2196 days ago | IN | 0 ETH | 0.00016482 | ||||
Migrate Funds | 7099144 | 2196 days ago | IN | 0 ETH | 0.00030657 | ||||
Migrate Funds | 7098554 | 2196 days ago | IN | 0 ETH | 0.00030657 | ||||
Migrate Funds | 7094810 | 2197 days ago | IN | 0 ETH | 0.00030657 | ||||
Migrate Funds | 7093811 | 2197 days ago | IN | 0 ETH | 0.00016325 | ||||
Migrate Funds | 7093630 | 2197 days ago | IN | 0 ETH | 0.00030657 | ||||
Migrate Funds | 7092961 | 2197 days ago | IN | 0 ETH | 0.00020438 | ||||
Migrate Funds | 7091496 | 2197 days ago | IN | 0 ETH | 0.00020438 | ||||
Migrate Funds | 7090525 | 2197 days ago | IN | 0 ETH | 0.00040877 | ||||
Migrate Funds | 7089729 | 2198 days ago | IN | 0 ETH | 0.00051096 | ||||
Migrate Funds | 7089715 | 2198 days ago | IN | 0 ETH | 0.00030657 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7147772 | 2186 days ago | 0.04303 ETH | ||||
7147611 | 2186 days ago | 1.24126153 ETH | ||||
7107575 | 2194 days ago | 0.05297 ETH | ||||
7106954 | 2194 days ago | 0.3 ETH | ||||
7104358 | 2195 days ago | 0.01 ETH | ||||
7104339 | 2195 days ago | 0.01476899 ETH | ||||
7099144 | 2196 days ago | 0.39891647 ETH | ||||
7098554 | 2196 days ago | 0.37751492 ETH | ||||
7094810 | 2197 days ago | 0.38138894 ETH | ||||
7093630 | 2197 days ago | 0.4 ETH | ||||
7092961 | 2197 days ago | 0.000336 ETH | ||||
7091496 | 2197 days ago | 0.03780441 ETH | ||||
7090525 | 2197 days ago | 0.38829473 ETH | ||||
7089729 | 2198 days ago | 0.39940489 ETH | ||||
7089715 | 2198 days ago | 0.027319 ETH | ||||
7089531 | 2198 days ago | 0.00187739 ETH | ||||
7089201 | 2198 days ago | 0.0106584 ETH | ||||
7089193 | 2198 days ago | 0.00208149 ETH | ||||
7089150 | 2198 days ago | 0.39304636 ETH | ||||
7089148 | 2198 days ago | 32 wei | ||||
7089103 | 2198 days ago | 0.03644149 ETH | ||||
7089040 | 2198 days ago | 0.18319658 ETH | ||||
7088963 | 2198 days ago | 0.05436347 ETH | ||||
7088963 | 2198 days ago | 0.00446807 ETH | ||||
7088958 | 2198 days ago | 0.00008417 ETH |
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,297.33 | 0.3874 | $1,277.26 |
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.