Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 5535509 | 2321 days ago | IN | 0 ETH | 0.00048925 | ||||
Deauthorize Addr... | 5535342 | 2321 days ago | IN | 0 ETH | 0.00034134 | ||||
Authorize Addres... | 5535338 | 2321 days ago | IN | 0 ETH | 0.00068458 | ||||
Authorize Addres... | 5535220 | 2321 days ago | IN | 0 ETH | 0.00079007 | ||||
0x60606040 | 5535174 | 2321 days ago | IN | 0 ETH | 0.01784044 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7670940 | 1957 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7662903 | 1958 days ago | 0 ETH | |||||
7628674 | 1963 days ago | 0 ETH | |||||
7628674 | 1963 days ago | 0 ETH | |||||
7628674 | 1963 days ago | 0 ETH |
Loading...
Loading
Contract Name:
TokenTransferDelegateImpl
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-01 */ /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ pragma solidity 0.4.21; /// @title Utility Functions for uint /// @author Daniel Wang - <[email protected]> library MathUint { function mul( uint a, uint b ) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function sub( uint a, uint b ) internal pure returns (uint) { require(b <= a); return a - b; } function add( uint a, uint b ) internal pure returns (uint c) { c = a + b; require(c >= a); } function tolerantSub( uint a, uint b ) internal pure returns (uint c) { return (a >= b) ? a - b : 0; } /// @dev calculate the square of Coefficient of Variation (CV) /// https://en.wikipedia.org/wiki/Coefficient_of_variation function cvsquare( uint[] arr, uint scale ) internal pure returns (uint) { uint len = arr.length; require(len > 1); require(scale > 0); uint avg = 0; for (uint i = 0; i < len; i++) { avg = add(avg, arr[i]); } avg = avg / len; if (avg == 0) { return 0; } uint cvs = 0; uint s; uint item; for (i = 0; i < len; i++) { item = arr[i]; s = item > avg ? item - avg : avg - item; cvs = add(cvs, mul(s, s)); } return ((mul(mul(cvs, scale), scale) / avg) / avg) / (len - 1); } } /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /// @title Ownable /// @dev The Ownable contract has an owner address, and provides basic /// authorization control functions, this simplifies the implementation of /// "user permissions". contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @dev The Ownable constructor sets the original `owner` of the contract /// to the sender. function Ownable() public { owner = msg.sender; } /// @dev Throws if called by any account other than the owner. modifier onlyOwner() { require(msg.sender == owner); _; } /// @dev Allows the current owner to transfer control of the contract to a /// newOwner. /// @param newOwner The address to transfer ownership to. function transferOwnership( address newOwner ) onlyOwner public { require(newOwner != 0x0); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /// @title Claimable /// @dev Extension for the Ownable contract, where the ownership needs /// to be claimed. This allows the new owner to accept the transfer. contract Claimable is Ownable { address public pendingOwner; /// @dev Modifier throws if called by any account other than the pendingOwner. modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /// @dev Allows the current owner to set the pendingOwner address. /// @param newOwner The address to transfer ownership to. function transferOwnership( address newOwner ) onlyOwner public { require(newOwner != 0x0 && newOwner != owner); pendingOwner = newOwner; } /// @dev Allows the pendingOwner address to finalize the transfer. function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = 0x0; } } /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /// @title ERC20 Token Interface /// @dev see https://github.com/ethereum/EIPs/issues/20 /// @author Daniel Wang - <[email protected]> contract ERC20 { function balanceOf( address who ) view public returns (uint256); function allowance( address owner, address spender ) view public returns (uint256); function transfer( address to, uint256 value ) public returns (bool); function transferFrom( address from, address to, uint256 value ) public returns (bool); function approve( address spender, uint256 value ) public returns (bool); } /* Copyright 2017 Loopring Project Ltd (Loopring Foundation). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /// @title TokenTransferDelegate /// @dev Acts as a middle man to transfer ERC20 tokens on behalf of different /// versions of Loopring protocol to avoid ERC20 re-authorization. /// @author Daniel Wang - <[email protected]>. contract TokenTransferDelegate { event AddressAuthorized( address indexed addr, uint32 number ); event AddressDeauthorized( address indexed addr, uint32 number ); // The following map is used to keep trace of order fill and cancellation // history. mapping (bytes32 => uint) public cancelledOrFilled; // This map is used to keep trace of order's cancellation history. mapping (bytes32 => uint) public cancelled; // A map from address to its cutoff timestamp. mapping (address => uint) public cutoffs; // A map from address to its trading-pair cutoff timestamp. mapping (address => mapping (bytes20 => uint)) public tradingPairCutoffs; /// @dev Add a Loopring protocol address. /// @param addr A loopring protocol address. function authorizeAddress( address addr ) external; /// @dev Remove a Loopring protocol address. /// @param addr A loopring protocol address. function deauthorizeAddress( address addr ) external; function getLatestAuthorizedAddresses( uint max ) external view returns (address[] addresses); /// @dev Invoke ERC20 transferFrom method. /// @param token Address of token to transfer. /// @param from Address to transfer token from. /// @param to Address to transfer token to. /// @param value Amount of token to transfer. function transferToken( address token, address from, address to, uint value ) external; function batchTransferToken( address lrcTokenAddress, address miner, address minerFeeRecipient, uint8 walletSplitPercentage, bytes32[] batch ) external; function isAddressAuthorized( address addr ) public view returns (bool); function addCancelled(bytes32 orderHash, uint cancelAmount) external; function addCancelledOrFilled(bytes32 orderHash, uint cancelOrFillAmount) public; function batchAddCancelledOrFilled(bytes32[] batch) public; function setCutoffs(uint t) external; function setTradingPairCutoffs(bytes20 tokenPair, uint t) external; function checkCutoffsBatch(address[] owners, bytes20[] tradingPairs, uint[] validSince) external view; function suspend() external; function resume() external; function kill() external; } /// @title An Implementation of TokenTransferDelegate. /// @author Daniel Wang - <[email protected]>. /// @author Kongliang Zhong - <[email protected]>. contract TokenTransferDelegateImpl is TokenTransferDelegate, Claimable { using MathUint for uint; bool public suspended = false; struct AddressInfo { address previous; uint32 index; bool authorized; } mapping(address => AddressInfo) public addressInfos; address private latestAddress; modifier onlyAuthorized() { require(addressInfos[msg.sender].authorized); _; } modifier notSuspended() { require(!suspended); _; } modifier isSuspended() { require(suspended); _; } /// @dev Disable default function. function () payable public { revert(); } function authorizeAddress( address addr ) onlyOwner external { AddressInfo storage addrInfo = addressInfos[addr]; if (addrInfo.index != 0) { // existing if (addrInfo.authorized == false) { // re-authorize addrInfo.authorized = true; emit AddressAuthorized(addr, addrInfo.index); } } else { address prev = latestAddress; if (prev == 0x0) { addrInfo.index = 1; } else { addrInfo.previous = prev; addrInfo.index = addressInfos[prev].index + 1; } addrInfo.authorized = true; latestAddress = addr; emit AddressAuthorized(addr, addrInfo.index); } } function deauthorizeAddress( address addr ) onlyOwner external { uint32 index = addressInfos[addr].index; if (index != 0) { addressInfos[addr].authorized = false; emit AddressDeauthorized(addr, index); } } function getLatestAuthorizedAddresses( uint max ) external view returns (address[] addresses) { addresses = new address[](max); address addr = latestAddress; AddressInfo memory addrInfo; uint count = 0; while (addr != 0x0 && count < max) { addrInfo = addressInfos[addr]; if (addrInfo.index == 0) { break; } if (addrInfo.authorized) { addresses[count++] = addr; } addr = addrInfo.previous; } } function transferToken( address token, address from, address to, uint value ) onlyAuthorized notSuspended external { if (value > 0 && from != to && to != 0x0) { require( ERC20(token).transferFrom(from, to, value) ); } } function batchTransferToken( address lrcTokenAddress, address miner, address feeRecipient, uint8 walletSplitPercentage, bytes32[] batch ) onlyAuthorized notSuspended external { uint len = batch.length; require(len % 7 == 0); require(walletSplitPercentage > 0 && walletSplitPercentage < 100); ERC20 lrc = ERC20(lrcTokenAddress); address prevOwner = address(batch[len - 7]); for (uint i = 0; i < len; i += 7) { address owner = address(batch[i]); // Pay token to previous order, or to miner as previous order's // margin split or/and this order's margin split. ERC20 token = ERC20(address(batch[i + 1])); // Here batch[i + 2] has been checked not to be 0. if (batch[i + 2] != 0x0 && owner != prevOwner) { require( token.transferFrom( owner, prevOwner, uint(batch[i + 2]) ) ); } // Miner pays LRx fee to order owner uint lrcReward = uint(batch[i + 4]); if (lrcReward != 0 && miner != owner) { require( lrc.transferFrom( miner, owner, lrcReward ) ); } // Split margin-split income between miner and wallet splitPayFee( token, uint(batch[i + 3]), owner, feeRecipient, address(batch[i + 6]), walletSplitPercentage ); // Split LRx fee income between miner and wallet splitPayFee( lrc, uint(batch[i + 5]), owner, feeRecipient, address(batch[i + 6]), walletSplitPercentage ); prevOwner = owner; } } function isAddressAuthorized( address addr ) public view returns (bool) { return addressInfos[addr].authorized; } function splitPayFee( ERC20 token, uint fee, address owner, address feeRecipient, address walletFeeRecipient, uint walletSplitPercentage ) internal { if (fee == 0) { return; } uint walletFee = (walletFeeRecipient == 0x0) ? 0 : fee.mul(walletSplitPercentage) / 100; uint minerFee = fee.sub(walletFee); if (walletFee > 0 && walletFeeRecipient != owner) { require( token.transferFrom( owner, walletFeeRecipient, walletFee ) ); } if (minerFee > 0 && feeRecipient != 0x0 && feeRecipient != owner) { require( token.transferFrom( owner, feeRecipient, minerFee ) ); } } function addCancelled(bytes32 orderHash, uint cancelAmount) onlyAuthorized notSuspended external { cancelled[orderHash] = cancelled[orderHash].add(cancelAmount); } function addCancelledOrFilled(bytes32 orderHash, uint cancelOrFillAmount) onlyAuthorized notSuspended public { cancelledOrFilled[orderHash] = cancelledOrFilled[orderHash].add(cancelOrFillAmount); } function batchAddCancelledOrFilled(bytes32[] batch) onlyAuthorized notSuspended public { require(batch.length % 2 == 0); for (uint i = 0; i < batch.length / 2; i++) { cancelledOrFilled[batch[i * 2]] = cancelledOrFilled[batch[i * 2]] .add(uint(batch[i * 2 + 1])); } } function setCutoffs(uint t) onlyAuthorized notSuspended external { cutoffs[tx.origin] = t; } function setTradingPairCutoffs(bytes20 tokenPair, uint t) onlyAuthorized notSuspended external { tradingPairCutoffs[tx.origin][tokenPair] = t; } function checkCutoffsBatch(address[] owners, bytes20[] tradingPairs, uint[] validSince) external view { uint len = owners.length; require(len == tradingPairs.length); require(len == validSince.length); for(uint i = 0; i < len; i++) { require(validSince[i] > tradingPairCutoffs[owners[i]][tradingPairs[i]]); // order trading pair is cut off require(validSince[i] > cutoffs[owners[i]]); // order is cut off } } function suspend() onlyOwner notSuspended external { suspended = true; } function resume() onlyOwner isSuspended external { suspended = false; } /// owner must suspend delegate first before invoke kill method. function kill() onlyOwner isSuspended external { emit OwnershipTransferred(owner, 0x0); owner = 0x0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"owners","type":"address[]"},{"name":"tradingPairs","type":"bytes20[]"},{"name":"validSince","type":"uint256[]"}],"name":"checkCutoffsBatch","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resume","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"max","type":"uint256"}],"name":"getLatestAuthorizedAddresses","outputs":[{"name":"addresses","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"orderHash","type":"bytes32"},{"name":"cancelOrFillAmount","type":"uint256"}],"name":"addCancelledOrFilled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"cancelled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"lrcTokenAddress","type":"address"},{"name":"miner","type":"address"},{"name":"feeRecipient","type":"address"},{"name":"walletSplitPercentage","type":"uint8"},{"name":"batch","type":"bytes32[]"}],"name":"batchTransferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"authorizeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenPair","type":"bytes20"},{"name":"t","type":"uint256"}],"name":"setTradingPairCutoffs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"cancelledOrFilled","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"suspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"batch","type":"bytes32[]"}],"name":"batchAddCancelledOrFilled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes20"}],"name":"tradingPairCutoffs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"orderHash","type":"bytes32"},{"name":"cancelAmount","type":"uint256"}],"name":"addCancelled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressInfos","outputs":[{"name":"previous","type":"address"},{"name":"index","type":"uint32"},{"name":"authorized","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isAddressAuthorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"cutoffs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"suspend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"deauthorizeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"t","type":"uint256"}],"name":"setCutoffs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"number","type":"uint32"}],"name":"AddressAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"number","type":"uint32"}],"name":"AddressDeauthorized","type":"event"}]
Contract Creation Code
60606040526005805460a060020a60ff021916905560048054600160a060020a03191633600160a060020a03161790556116b18061003e6000396000f30060606040526004361061012e5763ffffffff60e060020a600035041662a16cab8114610133578063046f7da21461016b5780632097dd041461017e57806326fed988146101e75780632ac12622146102005780632c54de4f1461022857806341c0e1b5146102565780634390a4f8146102695780634a5db3b5146102a85780634b99f0c5146102c75780634e71e0c8146102ef5780635511f31914610302578063702efdf314610318578063739647871461033f5780638da5cb5b1461038e578063b8d641a3146103bd578063c955b514146103ee578063ca7a75d114610407578063ced3fb9c1461045b578063de794c1e1461047a578063e30c397814610499578063e6400bbe146104ac578063f2fde38b146104bf578063f73857cc146104de578063fd902d1e146104fd575b600080fd5b341561013e57600080fd5b6101696024600480358281019290820135918135808301929082013591604435918201910135610513565b005b341561017657600080fd5b610169610646565b341561018957600080fd5b610194600435610699565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101d35780820151838201526020016101bb565b505050509050019250505060405180910390f35b34156101f257600080fd5b6101696004356024356107b5565b341561020b57600080fd5b61021660043561082f565b60405190815260200160405180910390f35b341561023357600080fd5b610169600160a060020a0360043581169060243581169060443516606435610841565b341561026157600080fd5b61016961094a565b341561027457600080fd5b61016960048035600160a060020a039081169160248035831692604435169160643560ff16916084359081019101356109d7565b34156102b357600080fd5b610169600160a060020a0360043516610cc9565b34156102d257600080fd5b6101696bffffffffffffffffffffffff1960043516602435610efa565b34156102fa57600080fd5b610169610f77565b341561030d57600080fd5b610216600435611005565b341561032357600080fd5b61032b611017565b604051901515815260200160405180910390f35b341561034a57600080fd5b610169600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061102795505050505050565b341561039957600080fd5b6103a161112e565b604051600160a060020a03909116815260200160405180910390f35b34156103c857600080fd5b610216600160a060020a03600435166bffffffffffffffffffffffff196024351661113d565b34156103f957600080fd5b61016960043560243561115a565b341561041257600080fd5b610426600160a060020a03600435166111d4565b604051600160a060020a03909316835263ffffffff909116602083015215156040808301919091526060909101905180910390f35b341561046657600080fd5b61032b600160a060020a0360043516611209565b341561048557600080fd5b610216600160a060020a036004351661122e565b34156104a457600080fd5b6103a1611240565b34156104b757600080fd5b61016961124f565b34156104ca57600080fd5b610169600160a060020a03600435166112a7565b34156104e957600080fd5b610169600160a060020a0360043516611322565b341561050857600080fd5b6101696004356113e5565b84600084821461052257600080fd5b81831461052e57600080fd5b5060005b8181101561063c576003600089898481811061054a57fe5b90506020020135600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000206000878784818110151561058a57fe5b602090810292909201356bffffffffffffffffffffffff1916835250810191909152604001600020548484838181106105bf57fe5b905060200201351115156105d257600080fd5b600260008989848181106105e257fe5b90506020020135600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002054848483818110151561062157fe5b9050602002013511151561063457600080fd5b600101610532565b5050505050505050565b60045433600160a060020a0390811691161461066157600080fd5b60055460a060020a900460ff16151561067957600080fd5b6005805474ff000000000000000000000000000000000000000019169055565b6106a1611653565b60006106ab611665565b6000846040518059106106bb5750595b9080825280602002602001820160405250600754909450600160a060020a03169250600090505b600160a060020a038316158015906106f957508481105b156107ad57600160a060020a03831660009081526006602052604090819020906060905190810160409081529154600160a060020a038116825260a060020a810463ffffffff166020830190815260c060020a90910460ff1615159282019290925292505163ffffffff16151561076f576107ad565b8160400151156107a4578284828060010193508151811061078c57fe5b600160a060020a039092166020928302909101909101525b815192506106e2565b505050919050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff1615156107e357600080fd5b60055460a060020a900460ff16156107fa57600080fd5b600082815260208190526040902054610819908263ffffffff61144516565b6000928352602083905260409092209190915550565b60016020526000908152604090205481565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561086f57600080fd5b60055460a060020a900460ff161561088657600080fd5b6000811180156108a8575081600160a060020a031683600160a060020a031614155b80156108bc5750600160a060020a03821615155b156109445783600160a060020a03166323b872dd84848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561092257600080fd5b5af1151561092f57600080fd5b50505060405180519050151561094457600080fd5b50505050565b60045433600160a060020a0390811691161461096557600080fd5b60055460a060020a900460ff16151561097d57600080fd5b600454600090600160a060020a03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36004805473ffffffffffffffffffffffffffffffffffffffff19169055565b33600160a060020a031660009081526006602052604081205481908190819081908190819060c060020a900460ff161515610a1157600080fd5b60055460a060020a900460ff1615610a2857600080fd5b8796506007870615610a3957600080fd5b60008a60ff16118015610a4f575060648a60ff16105b1515610a5a57600080fd5b8c955088886006198901818110610a6d57fe5b6020029190910135955060009450505b86841015610cba57888885818110610a9157fe5b602002919091013593508990508860018601818110610aac57fe5b602002919091013592508990508860028601818110610ac757fe5b60200291909101351580159150610af0575084600160a060020a031683600160a060020a031614155b15610b9057600160a060020a0382166323b872dd84878c8c60028a01818110610b1557fe5b6020029190910135905060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b6e57600080fd5b5af11515610b7b57600080fd5b505050604051805190501515610b9057600080fd5b888860048601818110610b9f57fe5b60200291909101359150508015801590610bcb575082600160a060020a03168c600160a060020a031614155b15610c535785600160a060020a03166323b872dd8d858460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c3157600080fd5b5af11515610c3e57600080fd5b505050604051805190501515610c5357600080fd5b610c99828a8a60038801818110610c6657fe5b60200291909101359050858e8d8d60068b01818110610c8157fe5b9050602002013560001916600190048f60ff1661145b565b610cac868a8a60058801818110610c6657fe5b829450600784019350610a7d565b50505050505050505050505050565b600454600090819033600160a060020a03908116911614610ce957600080fd5b600160a060020a0383166000908152600660205260409020805490925060a060020a900463ffffffff1615610daa57815460c060020a900460ff161515610da557815478ff000000000000000000000000000000000000000000000000191660c060020a17808355600160a060020a038416907f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b610ef5565b50600754600160a060020a0316801515610de857815477ffffffff0000000000000000000000000000000000000000191660a060020a178255610e58565b8154600160a060020a03821673ffffffffffffffffffffffffffffffffffffffff1990911681178084556000918252600660205260409091205463ffffffff60a060020a918290048116600101160277ffffffff0000000000000000000000000000000000000000199091161782555b815478ff000000000000000000000000000000000000000000000000191660c060020a17825560078054600160a060020a03851673ffffffffffffffffffffffffffffffffffffffff19909116811790915582547f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b505050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff161515610f2857600080fd5b60055460a060020a900460ff1615610f3f57600080fd5b600160a060020a03321660009081526003602090815260408083206bffffffffffffffffffffffff1990951683529390529190912055565b60055433600160a060020a03908116911614610f9257600080fd5b600554600454600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600580546004805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60006020819052908152604090205481565b60055460a060020a900460ff1681565b33600160a060020a031660009081526006602052604081205460c060020a900460ff16151561105557600080fd5b60055460a060020a900460ff161561106c57600080fd5b6002825181151561107957fe5b061561108457600080fd5b5060005b6002825181151561109557fe5b0481101561112a576110f58282600202600101815181106110b257fe5b906020019060200201516000808560028602815181106110ce57fe5b9060200190602002015181526020810191909152604001600020549063ffffffff61144516565b60008084846002028151811061110757fe5b906020019060200201518152602081019190915260400160002055600101611088565b5050565b600454600160a060020a031681565b600360209081526000928352604080842090915290825290205481565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561118857600080fd5b60055460a060020a900460ff161561119f57600080fd5b6000828152600160205260409020546111be908263ffffffff61144516565b6000928352600160205260409092209190915550565b600660205260009081526040902054600160a060020a0381169060a060020a810463ffffffff169060c060020a900460ff1683565b600160a060020a031660009081526006602052604090205460c060020a900460ff1690565b60026020526000908152604090205481565b600554600160a060020a031681565b60045433600160a060020a0390811691161461126a57600080fd5b60055460a060020a900460ff161561128157600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055565b60045433600160a060020a039081169116146112c257600080fd5b600160a060020a038116158015906112e85750600454600160a060020a03828116911614155b15156112f357600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460009033600160a060020a0390811691161461134057600080fd5b50600160a060020a03811660009081526006602052604090205460a060020a900463ffffffff16801561112a57600160a060020a03821660008181526006602052604090819020805478ff000000000000000000000000000000000000000000000000191690557fa407c1ccf2240ac410f40f8008c27443bf0d10c03f6fb4565e5796d3bf86a5be9083905163ffffffff909116815260200160405180910390a25050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561141357600080fd5b60055460a060020a900460ff161561142a57600080fd5b600160a060020a033216600090815260026020526040902055565b8181018281101561145557600080fd5b92915050565b60008086151561146a5761063c565b600160a060020a0384161561149a57606461148b888563ffffffff61161916565b81151561149457fe5b0461149d565b60005b91506114af878363ffffffff61163e16565b90506000821180156114d3575085600160a060020a031684600160a060020a031614155b1561155b5787600160a060020a03166323b872dd87868560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561153957600080fd5b5af1151561154657600080fd5b50505060405180519050151561155b57600080fd5b6000811180156115735750600160a060020a03851615155b8015611591575085600160a060020a031685600160a060020a031614155b1561063c5787600160a060020a03166323b872dd87878460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156115f757600080fd5b5af1151561160457600080fd5b50505060405180519050151561063c57600080fd5b818102821580611633575081838281151561163057fe5b04145b151561145557600080fd5b60008282111561164d57600080fd5b50900390565b60206040519081016040526000815290565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a7230582053442032d682377739894576cfd1e7a5ebc442236c71de7b5d6845364904d2aa0029
Deployed Bytecode
0x60606040526004361061012e5763ffffffff60e060020a600035041662a16cab8114610133578063046f7da21461016b5780632097dd041461017e57806326fed988146101e75780632ac12622146102005780632c54de4f1461022857806341c0e1b5146102565780634390a4f8146102695780634a5db3b5146102a85780634b99f0c5146102c75780634e71e0c8146102ef5780635511f31914610302578063702efdf314610318578063739647871461033f5780638da5cb5b1461038e578063b8d641a3146103bd578063c955b514146103ee578063ca7a75d114610407578063ced3fb9c1461045b578063de794c1e1461047a578063e30c397814610499578063e6400bbe146104ac578063f2fde38b146104bf578063f73857cc146104de578063fd902d1e146104fd575b600080fd5b341561013e57600080fd5b6101696024600480358281019290820135918135808301929082013591604435918201910135610513565b005b341561017657600080fd5b610169610646565b341561018957600080fd5b610194600435610699565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101d35780820151838201526020016101bb565b505050509050019250505060405180910390f35b34156101f257600080fd5b6101696004356024356107b5565b341561020b57600080fd5b61021660043561082f565b60405190815260200160405180910390f35b341561023357600080fd5b610169600160a060020a0360043581169060243581169060443516606435610841565b341561026157600080fd5b61016961094a565b341561027457600080fd5b61016960048035600160a060020a039081169160248035831692604435169160643560ff16916084359081019101356109d7565b34156102b357600080fd5b610169600160a060020a0360043516610cc9565b34156102d257600080fd5b6101696bffffffffffffffffffffffff1960043516602435610efa565b34156102fa57600080fd5b610169610f77565b341561030d57600080fd5b610216600435611005565b341561032357600080fd5b61032b611017565b604051901515815260200160405180910390f35b341561034a57600080fd5b610169600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061102795505050505050565b341561039957600080fd5b6103a161112e565b604051600160a060020a03909116815260200160405180910390f35b34156103c857600080fd5b610216600160a060020a03600435166bffffffffffffffffffffffff196024351661113d565b34156103f957600080fd5b61016960043560243561115a565b341561041257600080fd5b610426600160a060020a03600435166111d4565b604051600160a060020a03909316835263ffffffff909116602083015215156040808301919091526060909101905180910390f35b341561046657600080fd5b61032b600160a060020a0360043516611209565b341561048557600080fd5b610216600160a060020a036004351661122e565b34156104a457600080fd5b6103a1611240565b34156104b757600080fd5b61016961124f565b34156104ca57600080fd5b610169600160a060020a03600435166112a7565b34156104e957600080fd5b610169600160a060020a0360043516611322565b341561050857600080fd5b6101696004356113e5565b84600084821461052257600080fd5b81831461052e57600080fd5b5060005b8181101561063c576003600089898481811061054a57fe5b90506020020135600160a060020a0316600160a060020a0316600160a060020a031681526020019081526020016000206000878784818110151561058a57fe5b602090810292909201356bffffffffffffffffffffffff1916835250810191909152604001600020548484838181106105bf57fe5b905060200201351115156105d257600080fd5b600260008989848181106105e257fe5b90506020020135600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002054848483818110151561062157fe5b9050602002013511151561063457600080fd5b600101610532565b5050505050505050565b60045433600160a060020a0390811691161461066157600080fd5b60055460a060020a900460ff16151561067957600080fd5b6005805474ff000000000000000000000000000000000000000019169055565b6106a1611653565b60006106ab611665565b6000846040518059106106bb5750595b9080825280602002602001820160405250600754909450600160a060020a03169250600090505b600160a060020a038316158015906106f957508481105b156107ad57600160a060020a03831660009081526006602052604090819020906060905190810160409081529154600160a060020a038116825260a060020a810463ffffffff166020830190815260c060020a90910460ff1615159282019290925292505163ffffffff16151561076f576107ad565b8160400151156107a4578284828060010193508151811061078c57fe5b600160a060020a039092166020928302909101909101525b815192506106e2565b505050919050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff1615156107e357600080fd5b60055460a060020a900460ff16156107fa57600080fd5b600082815260208190526040902054610819908263ffffffff61144516565b6000928352602083905260409092209190915550565b60016020526000908152604090205481565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561086f57600080fd5b60055460a060020a900460ff161561088657600080fd5b6000811180156108a8575081600160a060020a031683600160a060020a031614155b80156108bc5750600160a060020a03821615155b156109445783600160a060020a03166323b872dd84848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561092257600080fd5b5af1151561092f57600080fd5b50505060405180519050151561094457600080fd5b50505050565b60045433600160a060020a0390811691161461096557600080fd5b60055460a060020a900460ff16151561097d57600080fd5b600454600090600160a060020a03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36004805473ffffffffffffffffffffffffffffffffffffffff19169055565b33600160a060020a031660009081526006602052604081205481908190819081908190819060c060020a900460ff161515610a1157600080fd5b60055460a060020a900460ff1615610a2857600080fd5b8796506007870615610a3957600080fd5b60008a60ff16118015610a4f575060648a60ff16105b1515610a5a57600080fd5b8c955088886006198901818110610a6d57fe5b6020029190910135955060009450505b86841015610cba57888885818110610a9157fe5b602002919091013593508990508860018601818110610aac57fe5b602002919091013592508990508860028601818110610ac757fe5b60200291909101351580159150610af0575084600160a060020a031683600160a060020a031614155b15610b9057600160a060020a0382166323b872dd84878c8c60028a01818110610b1557fe5b6020029190910135905060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b6e57600080fd5b5af11515610b7b57600080fd5b505050604051805190501515610b9057600080fd5b888860048601818110610b9f57fe5b60200291909101359150508015801590610bcb575082600160a060020a03168c600160a060020a031614155b15610c535785600160a060020a03166323b872dd8d858460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c3157600080fd5b5af11515610c3e57600080fd5b505050604051805190501515610c5357600080fd5b610c99828a8a60038801818110610c6657fe5b60200291909101359050858e8d8d60068b01818110610c8157fe5b9050602002013560001916600190048f60ff1661145b565b610cac868a8a60058801818110610c6657fe5b829450600784019350610a7d565b50505050505050505050505050565b600454600090819033600160a060020a03908116911614610ce957600080fd5b600160a060020a0383166000908152600660205260409020805490925060a060020a900463ffffffff1615610daa57815460c060020a900460ff161515610da557815478ff000000000000000000000000000000000000000000000000191660c060020a17808355600160a060020a038416907f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b610ef5565b50600754600160a060020a0316801515610de857815477ffffffff0000000000000000000000000000000000000000191660a060020a178255610e58565b8154600160a060020a03821673ffffffffffffffffffffffffffffffffffffffff1990911681178084556000918252600660205260409091205463ffffffff60a060020a918290048116600101160277ffffffff0000000000000000000000000000000000000000199091161782555b815478ff000000000000000000000000000000000000000000000000191660c060020a17825560078054600160a060020a03851673ffffffffffffffffffffffffffffffffffffffff19909116811790915582547f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b505050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff161515610f2857600080fd5b60055460a060020a900460ff1615610f3f57600080fd5b600160a060020a03321660009081526003602090815260408083206bffffffffffffffffffffffff1990951683529390529190912055565b60055433600160a060020a03908116911614610f9257600080fd5b600554600454600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600580546004805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60006020819052908152604090205481565b60055460a060020a900460ff1681565b33600160a060020a031660009081526006602052604081205460c060020a900460ff16151561105557600080fd5b60055460a060020a900460ff161561106c57600080fd5b6002825181151561107957fe5b061561108457600080fd5b5060005b6002825181151561109557fe5b0481101561112a576110f58282600202600101815181106110b257fe5b906020019060200201516000808560028602815181106110ce57fe5b9060200190602002015181526020810191909152604001600020549063ffffffff61144516565b60008084846002028151811061110757fe5b906020019060200201518152602081019190915260400160002055600101611088565b5050565b600454600160a060020a031681565b600360209081526000928352604080842090915290825290205481565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561118857600080fd5b60055460a060020a900460ff161561119f57600080fd5b6000828152600160205260409020546111be908263ffffffff61144516565b6000928352600160205260409092209190915550565b600660205260009081526040902054600160a060020a0381169060a060020a810463ffffffff169060c060020a900460ff1683565b600160a060020a031660009081526006602052604090205460c060020a900460ff1690565b60026020526000908152604090205481565b600554600160a060020a031681565b60045433600160a060020a0390811691161461126a57600080fd5b60055460a060020a900460ff161561128157600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055565b60045433600160a060020a039081169116146112c257600080fd5b600160a060020a038116158015906112e85750600454600160a060020a03828116911614155b15156112f357600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460009033600160a060020a0390811691161461134057600080fd5b50600160a060020a03811660009081526006602052604090205460a060020a900463ffffffff16801561112a57600160a060020a03821660008181526006602052604090819020805478ff000000000000000000000000000000000000000000000000191690557fa407c1ccf2240ac410f40f8008c27443bf0d10c03f6fb4565e5796d3bf86a5be9083905163ffffffff909116815260200160405180910390a25050565b33600160a060020a031660009081526006602052604090205460c060020a900460ff16151561141357600080fd5b60055460a060020a900460ff161561142a57600080fd5b600160a060020a033216600090815260026020526040902055565b8181018281101561145557600080fd5b92915050565b60008086151561146a5761063c565b600160a060020a0384161561149a57606461148b888563ffffffff61161916565b81151561149457fe5b0461149d565b60005b91506114af878363ffffffff61163e16565b90506000821180156114d3575085600160a060020a031684600160a060020a031614155b1561155b5787600160a060020a03166323b872dd87868560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561153957600080fd5b5af1151561154657600080fd5b50505060405180519050151561155b57600080fd5b6000811180156115735750600160a060020a03851615155b8015611591575085600160a060020a031685600160a060020a031614155b1561063c5787600160a060020a03166323b872dd87878460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156115f757600080fd5b5af1151561160457600080fd5b50505060405180519050151561063c57600080fd5b818102821580611633575081838281151561163057fe5b04145b151561145557600080fd5b60008282111561164d57600080fd5b50900390565b60206040519081016040526000815290565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a7230582053442032d682377739894576cfd1e7a5ebc442236c71de7b5d6845364904d2aa0029
Swarm Source
bzzr://53442032d682377739894576cfd1e7a5ebc442236c71de7b5d6845364904d2aa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.