Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 19 from a total of 19 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Convert | 8157735 | 1841 days ago | IN | 0.0001 ETH | 0.00119661 | ||||
Convert | 7817719 | 1894 days ago | IN | 0.0000041 ETH | 0.00055769 | ||||
Add Converter | 7817543 | 1894 days ago | IN | 0 ETH | 0.00007759 | ||||
Convert | 7816182 | 1894 days ago | IN | 0.00001 ETH | 0.00054416 | ||||
Convert | 7439982 | 1953 days ago | IN | 1.2 ETH | 0.00037795 | ||||
Convert | 7379975 | 1962 days ago | IN | 0 ETH | 0.00054781 | ||||
Convert | 7379923 | 1962 days ago | IN | 0 ETH | 0.00056287 | ||||
Convert | 7178690 | 2001 days ago | IN | 5.01017453 ETH | 0.00036433 | ||||
Convert | 7174459 | 2002 days ago | IN | 2 ETH | 0.00109131 | ||||
Convert | 7174350 | 2002 days ago | IN | 2 ETH | 0.00103414 | ||||
Convert | 6957179 | 2042 days ago | IN | 0 ETH | 0.0029397 | ||||
Convert | 6613274 | 2099 days ago | IN | 0 ETH | 0.0025269 | ||||
Convert | 6613212 | 2099 days ago | IN | 0 ETH | 0.00189504 | ||||
Set Available Pr... | 6612965 | 2099 days ago | IN | 0 ETH | 0.00028056 | ||||
Set Available Pr... | 6612961 | 2099 days ago | IN | 0 ETH | 0.00028056 | ||||
Add Converter | 6612956 | 2099 days ago | IN | 0 ETH | 0.00042321 | ||||
Add Converter | 6612952 | 2099 days ago | IN | 0 ETH | 0.00042321 | ||||
Set Extra Limit | 6612935 | 2099 days ago | IN | 0 ETH | 0.00021575 | ||||
0x60806040 | 6612911 | 2099 days ago | IN | 0 ETH | 0.00720962 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
8157735 | 1841 days ago | 0.0001 ETH | ||||
7821573 | 1893 days ago | 0.91972867 ETH | ||||
7821573 | 1893 days ago | 0.91972867 ETH | ||||
7821573 | 1893 days ago | 1 ETH | ||||
7821573 | 1893 days ago | 1 ETH | ||||
7817719 | 1894 days ago | 0.0000041 ETH | ||||
7816182 | 1894 days ago | 0.00001 ETH | ||||
7709014 | 1911 days ago | 0.03877712 ETH | ||||
7709014 | 1911 days ago | 0.03877712 ETH | ||||
7709014 | 1911 days ago | 1.08339004 ETH | ||||
7709014 | 1911 days ago | 1.08339004 ETH | ||||
7668919 | 1917 days ago | 0.02624002 ETH | ||||
7668919 | 1917 days ago | 0.02624002 ETH | ||||
7668919 | 1917 days ago | 0.67404276 ETH | ||||
7668919 | 1917 days ago | 0.67404276 ETH | ||||
7489647 | 1945 days ago | 0.03348258 ETH | ||||
7489647 | 1945 days ago | 0.03348258 ETH | ||||
7489647 | 1945 days ago | 0.86216203 ETH | ||||
7489647 | 1945 days ago | 0.86216203 ETH | ||||
7439982 | 1953 days ago | 1.2 ETH | ||||
7379975 | 1962 days ago | 2.4145527 ETH | ||||
7379975 | 1962 days ago | 2.4145527 ETH | ||||
7379923 | 1962 days ago | 2.60935166 ETH | ||||
7379923 | 1962 days ago | 2.60935166 ETH | ||||
7368962 | 1964 days ago | 0.00846523 ETH |
Loading...
Loading
Contract Name:
TokenConverterRouter
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-10-30 */ pragma solidity ^0.4.24; // File: contracts/interfaces/Token.sol contract Token { function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); function approve(address _spender, uint256 _value) public returns (bool success); function increaseApproval (address _spender, uint _addedValue) public returns (bool success); function balanceOf(address _owner) public view returns (uint256 balance); } // File: contracts/interfaces/TokenConverter.sol contract TokenConverter { address public constant ETH_ADDRESS = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; function getReturn(Token _fromToken, Token _toToken, uint256 _fromAmount) external view returns (uint256 amount); function convert(Token _fromToken, Token _toToken, uint256 _fromAmount, uint256 _minReturn) external payable returns (uint256 amount); } // File: contracts/interfaces/AvailableProvider.sol interface AvailableProvider { function isAvailable(Token _from, Token _to, uint256 _amount) external view returns (bool); } // File: contracts/utils/Ownable.sol contract Ownable { address public owner; event SetOwner(address _owner); modifier onlyOwner() { require(msg.sender == owner, "msg.sender is not the owner"); _; } constructor() public { owner = msg.sender; emit SetOwner(msg.sender); } /** @dev Transfers the ownership of the contract. @param _to Address of the new owner */ function transferTo(address _to) public onlyOwner returns (bool) { require(_to != address(0), "Can't transfer to address 0x0"); emit SetOwner(_to); owner = _to; return true; } } // File: contracts/TokenConverterRouter.sol contract TokenConverterRouter is TokenConverter, Ownable { address public constant ETH_ADDRESS = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; TokenConverter[] public converters; mapping(address => uint256) private converterToIndex; mapping (address => AvailableProvider) public availability; uint256 extraLimit; event AddedConverter(address _converter); event Converted(address _converter, address _from, address _to, uint256 _amount, uint256 _return); event SetAvailableProvider(address _converter, address _provider); event SetExtraLimit(uint256 _extraLimit); event RemovedConverter(address _converter); event ConverterEvaluated(address _converter, address _from, address _to, uint256 _srcQty, uint256 _destQty); event ConverterNotAvailable(address _converter, address _provider, address _from, address _to, uint256 _srcQty); event ConverterError(address _converter, address _from, address _to, uint256 _srcQty); event ConverterAvailableError(address _converter, address _provider, address _from, address _to, uint256 _srcQty); event WithdrawTokens(address _token, address _to, uint256 _amount); event WithdrawEth(address _to, uint256 _amount); /* * @notice External function isWorker. * @dev Takes _worker, checks if the worker is valid. * @param _worker Worker address. * @return bool True if worker is valid, false otherwise. */ function _issetConverter(address _converter) internal view returns (bool) { return converterToIndex[_converter] != 0; } /* * @notice External function allConverters. * @dev Return all convertes. * @return array with all address the converters. */ function getConverters() external view returns (address[] memory result) { result = new address[](converters.length - 1); for (uint256 i = 1; i < converters.length; i++) { result[i - 1] = converters[i]; } } /* * @notice External function addConverter. * @dev Takes _converter. * Add converter. * @param _converter Converter address. * @return bool True if converter is added, false otherwise. */ function addConverter(TokenConverter _converter) external onlyOwner returns (bool) { require(!_issetConverter(_converter), "The converter it already exist"); uint256 index = converters.push(_converter) - 1; converterToIndex[_converter] = index; emit AddedConverter(_converter); return true; } /* * @notice External function removeConverter. * @dev Takes _converter and removes the converter. * @param _worker Converter address. * @return bool true if existed, false otherwise. */ function removeConverter(address _converter) external onlyOwner returns (bool) { require(_issetConverter(_converter), "The converter is not exist."); uint256 index = converterToIndex[_converter]; TokenConverter lastConverter = converters[converters.length - 1]; converterToIndex[lastConverter] = index; converters[index] = lastConverter; converters.length--; delete converterToIndex[_converter]; emit RemovedConverter(_converter); return true; } function setAvailableProvider( TokenConverter _converter, AvailableProvider _provider ) external onlyOwner { emit SetAvailableProvider(_converter, _provider); availability[_converter] = _provider; } function setExtraLimit(uint256 _extraLimit) external onlyOwner { emit SetExtraLimit(_extraLimit); extraLimit = _extraLimit; } function convert(Token _from, Token _to, uint256 _amount, uint256 _minReturn) external payable returns (uint256 result) { TokenConverter converter = _getBestConverter(_from, _to, _amount); require(converter != address(0), "No converter candidates"); if (_from == ETH_ADDRESS) { require(msg.value == _amount, "ETH not enought"); } else { require(msg.value == 0, "ETH not required"); require(_from.transferFrom(msg.sender, this, _amount), "Error pulling Token amount"); require(_from.approve(converter, _amount), "Error approving token transfer"); } result = converter.convert.value(msg.value)(_from, _to, _amount, _minReturn); require(result >= _minReturn, "Funds received below min return"); emit Converted({ _converter: converter, _from: _from, _to: _to, _amount: _amount, _return: result }); if (_from != ETH_ADDRESS) { require(_from.approve(converter, 0), "Error removing approve"); } if (_to == ETH_ADDRESS) { msg.sender.transfer(result); } else { require(_to.transfer(msg.sender, result), "Error sending tokens"); } if (_isSimulation()) { // this is a simulation, we need a pessimistic simulation we add // the extraLimit. reasons: this algorithm is not deterministic // different gas depending on the best route (Kyber, Bancor, etc) _addExtraGasLimit(); } } function getReturn(Token _from, Token _to, uint256 _amount) external view returns (uint256) { return _getBestConverterView(_from, _to, _amount).getReturn(_from, _to, _amount); } function _isSimulation() internal view returns (bool) { return gasleft() > block.gaslimit; } function _addExtraGasLimit() internal view { uint256 startGas = gasleft(); while (startGas - gasleft() < extraLimit) { assembly { let x := mload(0x0) } } } function _getBestConverterView(Token _from, Token _to, uint256 _amount) internal view returns (TokenConverter best) { uint256 length = converters.length; bytes32 bestReturn; for (uint256 i = 0; i < length; i++) { TokenConverter converter = converters[i]; if (_isAvailableView(converter, _from, _to, _amount)) { (uint256 success, bytes32 newReturn) = _safeStaticCall( converter, abi.encodeWithSelector( converter.getReturn.selector, _from, _to, _amount ) ); if (success == 1 && newReturn > bestReturn) { bestReturn = newReturn; best = converter; } } } } function _getBestConverter(Token _from, Token _to, uint256 _amount) internal returns (TokenConverter best) { uint256 length = converters.length; bytes32 bestReturn; for (uint256 i = 0; i < length; i++) { TokenConverter converter = converters[i]; if (_isAvailable(converter, _from, _to, _amount)) { (uint256 success, bytes32 newReturn) = _safeCall( converter, abi.encodeWithSelector( converter.getReturn.selector, _from, _to, _amount ) ); if (success == 1) { emit ConverterEvaluated(converter, _from, _to, _amount, uint256(newReturn)); if (newReturn > bestReturn) { bestReturn = newReturn; best = converter; } } else { emit ConverterError(converter, _from, _to, _amount); } } } } function _isAvailable(address converter, Token _from, Token _to, uint256 _amount) internal returns (bool) { AvailableProvider provider = availability[converter]; if (provider == address(0)) return true; (uint256 success,bytes32 available) = _safeCall( provider, abi.encodeWithSelector( provider.isAvailable.selector, _from, _to, _amount ) ); if (success != 1) { emit ConverterAvailableError(converter, provider, _from, _to, _amount); return false; } if (available != bytes32(1)) { emit ConverterNotAvailable(converter, provider, _from, _to, _amount); return false; } return true; } function _isAvailableView(address converter, Token _from, Token _to, uint256 _amount) internal view returns (bool) { AvailableProvider provider = availability[converter]; if (provider == address(0)) return true; (uint256 success,bytes32 available) = _safeStaticCall( provider, abi.encodeWithSelector( provider.isAvailable.selector, _from, _to, _amount ) ); return success == 1 && available == bytes32(1); } function withdrawEther( address _to, uint256 _amount ) external onlyOwner { emit WithdrawEth(_to, _amount); _to.transfer(_amount); } function withdrawTokens( Token _token, address _to, uint256 _amount ) external onlyOwner returns (bool) { emit WithdrawTokens(_token, _to, _amount); return _token.transfer(_to, _amount); } function _safeStaticCall( address _contract, bytes _data ) internal view returns (uint256 success, bytes32 result) { assembly { let x := mload(0x40) success := staticcall( gas, // Send almost all gas _contract, // To addr add(0x20, _data), // Input is data past the first 32 bytes mload(_data), // Input size is the lenght of data x, // Store the ouput on x 0x20 // Output is a single bytes32, has 32 bytes ) result := mload(x) } } function _safeCall( address _contract, bytes _data ) internal returns (uint256 success, bytes32 result) { assembly { let x := mload(0x40) success := call( gas, // Send almost all gas _contract, // To addr 0, // Send ETH add(0x20, _data), // Input is data past the first 32 bytes mload(_data), // Input size is the lenght of data x, // Store the ouput on x 0x20 // Output is a single bytes32, has 32 bytes ) result := mload(x) } } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_extraLimit","type":"uint256"}],"name":"setExtraLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"getReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getConverters","outputs":[{"name":"result","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"converters","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"}],"name":"addConverter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"}],"name":"convert","outputs":[{"name":"result","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"}],"name":"removeConverter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferTo","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"availability","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"},{"name":"_provider","type":"address"}],"name":"setAvailableProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"}],"name":"AddedConverter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_return","type":"uint256"}],"name":"Converted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"}],"name":"SetAvailableProvider","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_extraLimit","type":"uint256"}],"name":"SetExtraLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"}],"name":"RemovedConverter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"},{"indexed":false,"name":"_destQty","type":"uint256"}],"name":"ConverterEvaluated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterNotAvailable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterAvailableError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_token","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"WithdrawTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"WithdrawEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_owner","type":"address"}],"name":"SetOwner","type":"event"}]
Contract Creation Code
6080604081905260008054600160a060020a0319163390811790915581527f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb590602090a16118da806100526000396000f3006080604052600436106100b65763ffffffff60e060020a600035041663052f655781146100b85780631e1401f8146100d0578063522f68151461010c57806356f09125146101305780635e35359e1461019557806360a6e23a146101d35780636ce1c4dc1461020757806375892cf1146102285780638da5cb5b146102485780639e76a0071461025d578063a03fa7e31461027e578063a734f06e1461029f578063ab3a7425146102b4578063d2ec5002146102d5575b005b3480156100c457600080fd5b506100b66004356102fc565b3480156100dc57600080fd5b506100fa600160a060020a0360043581169060243516604435610384565b60408051918252519081900360200190f35b34801561011857600080fd5b506100b6600160a060020a036004351660243561043a565b34801561013c57600080fd5b50610145610509565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610181578181015183820152602001610169565b505050509050019250505060405180910390f35b3480156101a157600080fd5b506101bf600160a060020a03600435811690602435166044356105ab565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101eb6004356106a9565b60408051600160a060020a039092168252519081900360200190f35b34801561021357600080fd5b506101bf600160a060020a03600435166106d1565b6100fa600160a060020a0360043581169060243516604435606435610828565b34801561025457600080fd5b506101eb610f09565b34801561026957600080fd5b506101bf600160a060020a0360043516610f18565b34801561028a57600080fd5b506101bf600160a060020a03600435166110d9565b3480156102ab57600080fd5b506101eb6111f8565b3480156102c057600080fd5b506101eb600160a060020a0360043516611210565b3480156102e157600080fd5b506100b6600160a060020a036004358116906024351661122b565b600054600160a060020a0316331461034c576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b6040805182815290517f245bf781f1ea6a14663c9157d44f013150256fd27e57729588e6bfdb10842fc69181900360200190a1600455565b60006103918484846112fb565b604080517f1e1401f8000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015286811660248301526044820186905291519290911691631e1401f8916064808201926020929091908290030181600087803b15801561040657600080fd5b505af115801561041a573d6000803e3d6000fd5b505050506040513d602081101561043057600080fd5b5051949350505050565b600054600160a060020a0316331461048a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a03841681526020810183905281517fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa929181900390910190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610504573d6000803e3d6000fd5b505050565b60606000600180805490500360405190808252806020026020018201604052801561053e578160200160208202803883390190505b509150600190505b6001548110156105a757600180548290811061055e57fe5b6000918252602090912001548251600160a060020a03909116908390600019840190811061058857fe5b600160a060020a03909216602092830290910190910152600101610546565b5090565b60008054600160a060020a031633146105fc576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380871682528516602082015280820184905290517f70082d08c003c5341f2401bec1c2ae1dbcdc29ae17e9cc5633fa617caa8acd4c9181900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561040657600080fd5b60018054829081106106b757fe5b600091825260209091200154600160a060020a0316905081565b600080548190600160a060020a03163314610724576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b61072d836113ef565b15610782576040805160e560020a62461bcd02815260206004820152601e60248201527f54686520636f6e76657274657220697420616c72656164792065786973740000604482015290519081900360640190fd5b50600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600081815260026020908152604091829020849055815192835290517fbd6367a8986bde60fcd4d34d7a1c20d844c887a95377d1abefaa0e46f779eb359281900390910190a150600192915050565b60008061083686868661140c565b9050600160a060020a0381161515610898576040805160e560020a62461bcd02815260206004820152601760248201527f4e6f20636f6e7665727465722063616e64696461746573000000000000000000604482015290519081900360640190fd5b600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561091957348414610914576040805160e560020a62461bcd02815260206004820152600f60248201527f455448206e6f7420656e6f756768740000000000000000000000000000000000604482015290519081900360640190fd5b610b44565b341561096f576040805160e560020a62461bcd02815260206004820152601060248201527f455448206e6f7420726571756972656400000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038816916323b872dd9160648083019260209291908290030181600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506040513d6020811015610a0757600080fd5b50511515610a5f576040805160e560020a62461bcd02815260206004820152601a60248201527f4572726f722070756c6c696e6720546f6b656e20616d6f756e74000000000000604482015290519081900360640190fd5b85600160a060020a031663095ea7b382866040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d6020811015610aec57600080fd5b50511515610b44576040805160e560020a62461bcd02815260206004820152601e60248201527f4572726f7220617070726f76696e6720746f6b656e207472616e736665720000604482015290519081900360640190fd5b604080517f75892cf1000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152878116602483015260448201879052606482018690529151918316916375892cf1913491608480830192602092919082900301818588803b158015610bbf57600080fd5b505af1158015610bd3573d6000803e3d6000fd5b50505050506040513d6020811015610bea57600080fd5b5051915082821015610c46576040805160e560020a62461bcd02815260206004820152601f60248201527f46756e64732072656365697665642062656c6f77206d696e2072657475726e00604482015290519081900360640190fd5b60408051600160a060020a0380841682528089166020830152871681830152606081018690526080810184905290517ffc68be12f5a400a9ccc7eb00b8f5e86c91f483f4fd1611ced2d7710b615ab1789181900360a00190a1600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610da95785600160a060020a031663095ea7b38260006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50511515610da9576040805160e560020a62461bcd02815260206004820152601660248201527f4572726f722072656d6f76696e6720617070726f766500000000000000000000604482015290519081900360640190fd5b600160a060020a03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610e0157604051339083156108fc029084906000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b50610eeb565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0387169163a9059cbb9160448083019260209291908290030181600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d6020811015610e9357600080fd5b50511515610eeb576040805160e560020a62461bcd02815260206004820152601460248201527f4572726f722073656e64696e6720746f6b656e73000000000000000000000000604482015290519081900360640190fd5b610ef36115a1565b15610f0057610f006115ac565b50949350505050565b600054600160a060020a031681565b6000805481908190600160a060020a03163314610f6d576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b610f76846113ef565b1515610fcc576040805160e560020a62461bcd02815260206004820152601b60248201527f54686520636f6e766572746572206973206e6f742065786973742e0000000000604482015290519081900360640190fd5b600160a060020a03841660009081526002602052604090205460018054919350906000198101908110610ffb57fe5b6000918252602080832090910154600160a060020a0316808352600290915260409091208390556001805491925082918490811061103557fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600180549061107e906000198301611855565b50600160a060020a038416600081815260026020908152604080832092909255815192835290517fa8f946cedc9f28056e1a47ca520a11758cc6d3b76946332a60a42c483e9de69e9281900390910190a15060019392505050565b60008054600160a060020a0316331461112a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b600160a060020a038216151561118a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e2774207472616e7366657220746f206164647265737320307830000000604482015290519081900360640190fd5b60408051600160a060020a038416815290517f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb59181900360200190a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600360205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461127b576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380851682528316602082015281517fe4c027f2ff9e17e761abb4a05925909565e17101696494a74a6c5a84ac715a4a929181900390910190a1600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60015460009081808080805b858410156113e257600180548590811061131d57fe5b600091825260209091200154600160a060020a03169250611340838b8b8b6115c6565b156113d75760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526113b890849061168a565b915091508160011480156113cb57508481115b156113d7578094508296505b600190930192611307565b5050505050509392505050565b600160a060020a0316600090815260026020526040902054151590565b60015460009081808080805b858410156113e257600180548590811061142e57fe5b600091825260209091200154600160a060020a03169250611451838b8b8b6116a9565b156115965760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526114c9908490611834565b9150915081600114156115435760408051600160a060020a038086168252808d1660208301528b1681830152606081018a90526080810183905290517f06b64db7df7bd31e2c01990c1009d840d3b1cbc2702febac81bb6aa26e8f58a89181900360a00190a18481111561153e578094508296505b611596565b60408051600160a060020a038086168252808d1660208301528b1681830152606081018a905290517fc0dff80ded7511c10ef062ee5a67a5f8e101e7e1098cf486182f40d4bffd45949181900360800190a15b600190930192611418565b6000455a1190505b90565b60005a90505b6004545a820310156115c3576115b2565b50565b600160a060020a0380851660009081526003602052604081205490911681808215156115f5576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261166890849061168a565b9150915081600114801561167c5750600181145b93505b505050949350505050565b600080604051602081855186602001885afa9051909590945092505050565b600160a060020a0380851660009081526003602052604081205490911681808215156116d8576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261174b908490611834565b9092509050600182146117bb5760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f5616edbe8a17573bcaf89ab664f56a707055de522a4bf9cd8b28d05bf7ec894e9181900360a00190a16000935061167f565b600181146118265760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f0eb24d3febe3abfeafcde65e72b72093e641e57935316ee9afdfcbb22fd205f79181900360a00190a16000935061167f565b506001979650505050505050565b6000806040516020818551866020016000895af19051909590945092505050565b815481835581811115610504576000838152602090206105049181019083016115a991905b808211156105a7576000815560010161187a56006d73672e73656e646572206973206e6f7420746865206f776e65720000000000a165627a7a72305820361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b6980029
Deployed Bytecode
0x6080604052600436106100b65763ffffffff60e060020a600035041663052f655781146100b85780631e1401f8146100d0578063522f68151461010c57806356f09125146101305780635e35359e1461019557806360a6e23a146101d35780636ce1c4dc1461020757806375892cf1146102285780638da5cb5b146102485780639e76a0071461025d578063a03fa7e31461027e578063a734f06e1461029f578063ab3a7425146102b4578063d2ec5002146102d5575b005b3480156100c457600080fd5b506100b66004356102fc565b3480156100dc57600080fd5b506100fa600160a060020a0360043581169060243516604435610384565b60408051918252519081900360200190f35b34801561011857600080fd5b506100b6600160a060020a036004351660243561043a565b34801561013c57600080fd5b50610145610509565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610181578181015183820152602001610169565b505050509050019250505060405180910390f35b3480156101a157600080fd5b506101bf600160a060020a03600435811690602435166044356105ab565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101eb6004356106a9565b60408051600160a060020a039092168252519081900360200190f35b34801561021357600080fd5b506101bf600160a060020a03600435166106d1565b6100fa600160a060020a0360043581169060243516604435606435610828565b34801561025457600080fd5b506101eb610f09565b34801561026957600080fd5b506101bf600160a060020a0360043516610f18565b34801561028a57600080fd5b506101bf600160a060020a03600435166110d9565b3480156102ab57600080fd5b506101eb6111f8565b3480156102c057600080fd5b506101eb600160a060020a0360043516611210565b3480156102e157600080fd5b506100b6600160a060020a036004358116906024351661122b565b600054600160a060020a0316331461034c576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b6040805182815290517f245bf781f1ea6a14663c9157d44f013150256fd27e57729588e6bfdb10842fc69181900360200190a1600455565b60006103918484846112fb565b604080517f1e1401f8000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015286811660248301526044820186905291519290911691631e1401f8916064808201926020929091908290030181600087803b15801561040657600080fd5b505af115801561041a573d6000803e3d6000fd5b505050506040513d602081101561043057600080fd5b5051949350505050565b600054600160a060020a0316331461048a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a03841681526020810183905281517fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa929181900390910190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610504573d6000803e3d6000fd5b505050565b60606000600180805490500360405190808252806020026020018201604052801561053e578160200160208202803883390190505b509150600190505b6001548110156105a757600180548290811061055e57fe5b6000918252602090912001548251600160a060020a03909116908390600019840190811061058857fe5b600160a060020a03909216602092830290910190910152600101610546565b5090565b60008054600160a060020a031633146105fc576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380871682528516602082015280820184905290517f70082d08c003c5341f2401bec1c2ae1dbcdc29ae17e9cc5633fa617caa8acd4c9181900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561040657600080fd5b60018054829081106106b757fe5b600091825260209091200154600160a060020a0316905081565b600080548190600160a060020a03163314610724576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b61072d836113ef565b15610782576040805160e560020a62461bcd02815260206004820152601e60248201527f54686520636f6e76657274657220697420616c72656164792065786973740000604482015290519081900360640190fd5b50600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600081815260026020908152604091829020849055815192835290517fbd6367a8986bde60fcd4d34d7a1c20d844c887a95377d1abefaa0e46f779eb359281900390910190a150600192915050565b60008061083686868661140c565b9050600160a060020a0381161515610898576040805160e560020a62461bcd02815260206004820152601760248201527f4e6f20636f6e7665727465722063616e64696461746573000000000000000000604482015290519081900360640190fd5b600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561091957348414610914576040805160e560020a62461bcd02815260206004820152600f60248201527f455448206e6f7420656e6f756768740000000000000000000000000000000000604482015290519081900360640190fd5b610b44565b341561096f576040805160e560020a62461bcd02815260206004820152601060248201527f455448206e6f7420726571756972656400000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038816916323b872dd9160648083019260209291908290030181600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506040513d6020811015610a0757600080fd5b50511515610a5f576040805160e560020a62461bcd02815260206004820152601a60248201527f4572726f722070756c6c696e6720546f6b656e20616d6f756e74000000000000604482015290519081900360640190fd5b85600160a060020a031663095ea7b382866040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d6020811015610aec57600080fd5b50511515610b44576040805160e560020a62461bcd02815260206004820152601e60248201527f4572726f7220617070726f76696e6720746f6b656e207472616e736665720000604482015290519081900360640190fd5b604080517f75892cf1000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152878116602483015260448201879052606482018690529151918316916375892cf1913491608480830192602092919082900301818588803b158015610bbf57600080fd5b505af1158015610bd3573d6000803e3d6000fd5b50505050506040513d6020811015610bea57600080fd5b5051915082821015610c46576040805160e560020a62461bcd02815260206004820152601f60248201527f46756e64732072656365697665642062656c6f77206d696e2072657475726e00604482015290519081900360640190fd5b60408051600160a060020a0380841682528089166020830152871681830152606081018690526080810184905290517ffc68be12f5a400a9ccc7eb00b8f5e86c91f483f4fd1611ced2d7710b615ab1789181900360a00190a1600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610da95785600160a060020a031663095ea7b38260006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50511515610da9576040805160e560020a62461bcd02815260206004820152601660248201527f4572726f722072656d6f76696e6720617070726f766500000000000000000000604482015290519081900360640190fd5b600160a060020a03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610e0157604051339083156108fc029084906000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b50610eeb565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0387169163a9059cbb9160448083019260209291908290030181600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d6020811015610e9357600080fd5b50511515610eeb576040805160e560020a62461bcd02815260206004820152601460248201527f4572726f722073656e64696e6720746f6b656e73000000000000000000000000604482015290519081900360640190fd5b610ef36115a1565b15610f0057610f006115ac565b50949350505050565b600054600160a060020a031681565b6000805481908190600160a060020a03163314610f6d576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b610f76846113ef565b1515610fcc576040805160e560020a62461bcd02815260206004820152601b60248201527f54686520636f6e766572746572206973206e6f742065786973742e0000000000604482015290519081900360640190fd5b600160a060020a03841660009081526002602052604090205460018054919350906000198101908110610ffb57fe5b6000918252602080832090910154600160a060020a0316808352600290915260409091208390556001805491925082918490811061103557fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600180549061107e906000198301611855565b50600160a060020a038416600081815260026020908152604080832092909255815192835290517fa8f946cedc9f28056e1a47ca520a11758cc6d3b76946332a60a42c483e9de69e9281900390910190a15060019392505050565b60008054600160a060020a0316331461112a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b600160a060020a038216151561118a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e2774207472616e7366657220746f206164647265737320307830000000604482015290519081900360640190fd5b60408051600160a060020a038416815290517f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb59181900360200190a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600360205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461127b576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380851682528316602082015281517fe4c027f2ff9e17e761abb4a05925909565e17101696494a74a6c5a84ac715a4a929181900390910190a1600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60015460009081808080805b858410156113e257600180548590811061131d57fe5b600091825260209091200154600160a060020a03169250611340838b8b8b6115c6565b156113d75760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526113b890849061168a565b915091508160011480156113cb57508481115b156113d7578094508296505b600190930192611307565b5050505050509392505050565b600160a060020a0316600090815260026020526040902054151590565b60015460009081808080805b858410156113e257600180548590811061142e57fe5b600091825260209091200154600160a060020a03169250611451838b8b8b6116a9565b156115965760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526114c9908490611834565b9150915081600114156115435760408051600160a060020a038086168252808d1660208301528b1681830152606081018a90526080810183905290517f06b64db7df7bd31e2c01990c1009d840d3b1cbc2702febac81bb6aa26e8f58a89181900360a00190a18481111561153e578094508296505b611596565b60408051600160a060020a038086168252808d1660208301528b1681830152606081018a905290517fc0dff80ded7511c10ef062ee5a67a5f8e101e7e1098cf486182f40d4bffd45949181900360800190a15b600190930192611418565b6000455a1190505b90565b60005a90505b6004545a820310156115c3576115b2565b50565b600160a060020a0380851660009081526003602052604081205490911681808215156115f5576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261166890849061168a565b9150915081600114801561167c5750600181145b93505b505050949350505050565b600080604051602081855186602001885afa9051909590945092505050565b600160a060020a0380851660009081526003602052604081205490911681808215156116d8576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261174b908490611834565b9092509050600182146117bb5760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f5616edbe8a17573bcaf89ab664f56a707055de522a4bf9cd8b28d05bf7ec894e9181900360a00190a16000935061167f565b600181146118265760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f0eb24d3febe3abfeafcde65e72b72093e641e57935316ee9afdfcbb22fd205f79181900360a00190a16000935061167f565b506001979650505050505050565b6000806040516020818551866020016000895af19051909590945092505050565b815481835581811115610504576000838152602090206105049181019083016115a991905b808211156105a7576000815560010161187a56006d73672e73656e646572206973206e6f7420746865206f776e65720000000000a165627a7a72305820361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b6980029
Swarm Source
bzzr://361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b698
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.