More Info
Private Name Tags
ContractCreator
TokenTracker
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DodoV1Adapter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.0; import "../interfaces/IDodoV1.sol"; import "../interfaces/IERC20.sol"; import "../libraries/SafeERC20.sol"; import "../libraries/SafeMath.sol"; import "../AdapterModel.sol"; contract DodoV1Adapter is AdapterModel { using SafeERC20 for IERC20; using SafeMath for uint; address public immutable HELPER; mapping(address => mapping(address => address)) tknsToPool; // base > quote > pool constructor( string memory _name, address[] memory _pools, address _helper, uint256 _gasEstimate ) AdapterModel(_name, _gasEstimate) { _setPools(_pools, true); HELPER = _helper; } function setPools(address[] memory _pools, bool overwrite) external onlyOwner { _setPools(_pools, overwrite); } function _rmPools(address[] memory _pools) external onlyOwner { for (uint256 i; i < _pools.length; ++i) { (address baseTkn, address quoteTkn) = _getTknsForPool(_pools[i]); tknsToPool[baseTkn][quoteTkn] = address(0); } } function _setPools(address[] memory _pools, bool overwrite) internal { for (uint256 i; i < _pools.length; ++i) _setPool(_pools[i], overwrite); } function _setPool(address _pool, bool overwrite) internal { (address baseTkn, address quoteTkn) = _getTknsForPool(_pool); if (!overwrite) _overwriteCheck(baseTkn, quoteTkn, _pool); _approveTknsForPool(baseTkn, quoteTkn, _pool); tknsToPool[baseTkn][quoteTkn] = _pool; } function _getTknsForPool(address _pool) internal view returns (address baseToken, address quoteToken) { baseToken = IDodoV1(_pool)._BASE_TOKEN_(); quoteToken = IDodoV1(_pool)._QUOTE_TOKEN_(); } function _overwriteCheck( address baseTkn, address quoteTkn, address pool ) internal view { address existingPool = tknsToPool[baseTkn][quoteTkn]; require(existingPool == address(0) || existingPool == pool, "Not allowed to overwrite"); } function _approveTknsForPool( address _baseTkn, address _quoteTkn, address _pool ) internal { IERC20(_baseTkn).safeApprove(_pool, UINT_MAX); IERC20(_quoteTkn).safeApprove(_pool, UINT_MAX); } function _query( uint256 _amountIn, address _tokenIn, address _tokenOut ) internal view override returns (uint256 amountOut) { if (_amountIn == 0) return 0; address pool = tknsToPool[_tokenIn][_tokenOut]; if (pool != address(0)) amountOut = IDodoV1(pool).querySellBaseToken(_amountIn); pool = tknsToPool[_tokenOut][_tokenIn]; if (pool != address(0)) amountOut = IDodoHelper(HELPER).querySellQuoteToken(pool, _amountIn); } function _swap( uint256 _amountIn, address _tokenIn, address _tokenOut, address _to ) internal override { uint256 minMaxQuote = _query(_amountIn, _tokenIn, _tokenOut); uint256 beforeBalance = IERC20(_tokenOut).balanceOf(address(this)); address pool = tknsToPool[_tokenIn][_tokenOut]; if (pool != address(0)) IDodoV1(pool).sellBaseToken(_amountIn, minMaxQuote, ""); pool = tknsToPool[_tokenOut][_tokenIn]; if (pool != address(0)) IDodoV1(pool).buyBaseToken(minMaxQuote, _amountIn, ""); uint256 amountOut = IERC20(_tokenOut).balanceOf(address(this)).sub(beforeBalance); _returnTo(_tokenOut, amountOut, _to); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.0; import "./interfaces/IERC20.sol"; import "./interfaces/IWETH.sol"; import "./libraries/SafeERC20.sol"; import "./libraries/Ownable.sol"; abstract contract AdapterModel is Ownable { using SafeERC20 for IERC20; event BrewlabsSwap(address indexed _tokenFrom, address indexed _tokenTo, uint256 _amountIn, uint256 _amountOut); event UpdatedGasEstimate(address indexed _adapter, uint256 _newEstimate); event Recovered(address indexed _asset, uint256 amount); uint256 internal constant UINT_MAX = type(uint256).max; uint256 public swapGasEstimate; string public name; constructor(string memory _name, uint256 _gasEstimate) { setName(_name); setSwapGasEstimate(_gasEstimate); } function setName(string memory _name) internal { require(bytes(_name).length != 0, "Invalid adapter name"); name = _name; } function setSwapGasEstimate(uint256 _estimate) public onlyOwner { require(_estimate != 0, "Invalid gas-estimate"); swapGasEstimate = _estimate; emit UpdatedGasEstimate(address(this), _estimate); } function revokeAllowance(address _token, address _spender) external onlyOwner { IERC20(_token).safeApprove(_spender, 0); } function recoverERC20(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { require(_tokenAmount > 0, "BrewlabsAdapter: Nothing to recover"); IERC20(_tokenAddress).safeTransfer(msg.sender, _tokenAmount); emit Recovered(_tokenAddress, _tokenAmount); } function recoverETH(uint256 _amount) external onlyOwner { require(_amount > 0, "BrewlabsAdapter: Nothing to recover"); payable(msg.sender).transfer(_amount); emit Recovered(address(0), _amount); } function query( uint256 _amountIn, address _tokenIn, address _tokenOut ) external view returns (uint256) { return _query(_amountIn, _tokenIn, _tokenOut); } function swap( uint256 _amountIn, address _fromToken, address _toToken, address _to ) external returns (uint256 _amountOut) { uint256 toBal0 = IERC20(_toToken).balanceOf(_to); _swap(_amountIn, _fromToken, _toToken, _to); _amountOut = IERC20(_toToken).balanceOf(_to) - toBal0; require(_amountOut > 0, 'AdapterModel: Insufficient amount out'); emit BrewlabsSwap(_fromToken, _toToken, _amountIn, _amountOut); } function _returnTo( address _token, uint256 _amount, address _to ) internal { if (address(this) != _to) IERC20(_token).safeTransfer(_to, _amount); } function _swap( uint256 _amountIn, address _fromToken, address _toToken, address _to ) internal virtual; function _query( uint256 _amountIn, address _tokenIn, address _tokenOut ) internal view virtual returns (uint256); receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IDodoHelper { function querySellQuoteToken(address dodo, uint256 amount) external view returns (uint256); } interface IDodoV1 { function _QUOTE_TOKEN_() external view returns (address); function _BASE_TOKEN_() external view returns (address); function querySellBaseToken(uint256 amount) external view returns (uint256); function queryBuyBaseToken(uint256 amount) external view returns (uint256); function sellBaseToken( uint256 amount, uint256 minReceiveQuote, bytes calldata data ) external returns (uint256); function buyBaseToken( uint256 amount, uint256 maxPayQuote, bytes calldata data ) external returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC20 { event Approval(address, address, uint256); event Transfer(address, address, uint256); function name() external view returns (string memory); function decimals() external view returns (uint8); function transferFrom( address, address, uint256 ) external returns (bool); function allowance(address, address) external view returns (uint256); function approve(address, uint256) external returns (bool); function transfer(address, uint256) external returns (bool); function balanceOf(address) external view returns (uint256); function nonces(address) external view returns (uint256); // Only tokens that support permit function permit( address, address, uint256, uint256, uint8, bytes32, bytes32 ) external; // Only tokens that support permit function swap(address, uint256) external; // Only Avalanche bridge tokens function swapSupply(address) external view returns (uint256); // Only Avalanche bridge tokens }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; interface IWETH is IERC20 { function withdraw(uint256 amount) external; function deposit() external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: Caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: New owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// This is a simplified version of OpenZepplin's SafeERC20 library // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; import "../interfaces/IERC20.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"address","name":"_helper","type":"address"},{"internalType":"uint256","name":"_gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tokenFrom","type":"address"},{"indexed":true,"internalType":"address","name":"_tokenTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amountOut","type":"uint256"}],"name":"BrewlabsSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_adapter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_newEstimate","type":"uint256"}],"name":"UpdatedGasEstimate","type":"event"},{"inputs":[],"name":"HELPER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"}],"name":"_rmPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"query","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"revokeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_estimate","type":"uint256"}],"name":"setSwapGasEstimate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_fromToken","type":"address"},{"internalType":"address","name":"_toToken","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"swap","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapGasEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620022e1380380620022e1833981016040819052620000349162000826565b600080546001600160a01b03191633908117825560405186928492918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200008482620000b5565b6200008f816200011e565b506200009f905083600162000209565b506001600160a01b03166080525062000b1f9050565b80516000036200010c5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642061646170746572206e616d6500000000000000000000000060448201526064015b60405180910390fd5b60026200011a828262000994565b5050565b6000546001600160a01b031633146200017a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604482015260640162000103565b80600003620001cc5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206761732d657374696d617465000000000000000000000000604482015260640162000103565b600181905560405181815230907ff43f23b7a28e6f8ce6843a21bd7b48bce778aa913b8c8cf459edf7d770e8d38a9060200160405180910390a250565b60005b82518110156200025757620002448382815181106200022f576200022f62000a60565b6020026020010151836200025c60201b60201c565b6200024f8162000a76565b90506200020c565b505050565b6000806200026a84620002cc565b9150915082620002815762000281828286620003a2565b6200028e8282866200043d565b6001600160a01b0391821660009081526003602090815260408083209385168352929052208054919093166001600160a01b03199091161790915550565b600080826001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000334919062000a9e565b9150826001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000a9e565b9050915091565b6001600160a01b038084166000908152600360209081526040808320868516845290915290205416801580620003e95750816001600160a01b0316816001600160a01b0316145b620004375760405162461bcd60e51b815260206004820152601860248201527f4e6f7420616c6c6f77656420746f206f76657277726974650000000000000000604482015260640162000103565b50505050565b6200046481600019856001600160a01b03166200048b60201b620009b1179092919060201c565b6200025781600019846001600160a01b03166200048b60201b620009b1179092919060201c565b801580620005095750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000ac3565b155b6200057d5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000103565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915262000257918591620005d516565b600080836001600160a01b031683604051620005f2919062000add565b6000604051808303816000865af19150503d806000811462000631576040519150601f19603f3d011682016040523d82523d6000602084013e62000636565b606091505b5091509150816200068a5760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640162000103565b805115620004375780806020019051810190620006a8919062000afb565b620004375760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000103565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200074a576200074a62000709565b604052919050565b60005b838110156200076f57818101518382015260200162000755565b50506000910152565b80516001600160a01b03811681146200079057600080fd5b919050565b600082601f830112620007a757600080fd5b815160206001600160401b03821115620007c557620007c562000709565b8160051b620007d68282016200071f565b9283528481018201928281019087851115620007f157600080fd5b83870192505b848310156200081b576200080b8362000778565b82529183019190830190620007f7565b979650505050505050565b600080600080608085870312156200083d57600080fd5b84516001600160401b03808211156200085557600080fd5b818701915087601f8301126200086a57600080fd5b8151818111156200087f576200087f62000709565b62000894601f8201601f19166020016200071f565b818152896020838601011115620008aa57600080fd5b620008bd82602083016020870162000752565b602089015190975092505080821115620008d657600080fd5b50620008e58782880162000795565b935050620008f66040860162000778565b6060959095015193969295505050565b600181811c908216806200091b57607f821691505b6020821081036200093c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025757600081815260208120601f850160051c810160208610156200096b5750805b601f850160051c820191505b818110156200098c5782815560010162000977565b505050505050565b81516001600160401b03811115620009b057620009b062000709565b620009c881620009c1845462000906565b8462000942565b602080601f83116001811462000a005760008415620009e75750858301515b600019600386901b1c1916600185901b1785556200098c565b600085815260208120601f198616915b8281101562000a315788860151825594840194600190910190840162000a10565b508582101562000a505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60006001820162000a9757634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121562000ab157600080fd5b62000abc8262000778565b9392505050565b60006020828403121562000ad657600080fd5b5051919050565b6000825162000af181846020870162000752565b9190910192915050565b60006020828403121562000b0e57600080fd5b8151801515811462000abc57600080fd5b60805161179f62000b42600039600081816102b70152610fab015261179f6000f3fe6080604052600436106100e15760003560e01c80638980f11f1161007f578063d333555311610059578063d333555314610245578063ef99893a14610265578063f2fde38b14610285578063f551bf20146102a557600080fd5b80638980f11f146101d35780638da5cb5b146101f3578063a746e4b21461022557600080fd5b8063715018a6116100bb578063715018a61461015e5780637ae267731461017357806384a33e631461019357806388156e65146101b357600080fd5b806306fdde03146100ed57806349e38f321461011857806369cff80d1461013a57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101026102d9565b60405161010f919061131b565b60405180910390f35b34801561012457600080fd5b5061013861013336600461143c565b610367565b005b34801561014657600080fd5b5061015060015481565b60405190815260200161010f565b34801561016a57600080fd5b506101386103a8565b34801561017f57600080fd5b5061013861018e36600461148e565b61041c565b34801561019f57600080fd5b506101386101ae3660046114bc565b61045b565b3480156101bf57600080fd5b506101506101ce3660046114d5565b61050a565b3480156101df57600080fd5b506101386101ee366004611528565b6106bd565b3480156101ff57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b34801561023157600080fd5b50610138610240366004611554565b610762565b34801561025157600080fd5b506101386102603660046114bc565b610805565b34801561027157600080fd5b50610150610280366004611591565b6108b0565b34801561029157600080fd5b506101386102a03660046115d3565b6108c7565b3480156102b157600080fd5b5061020d7f000000000000000000000000000000000000000000000000000000000000000081565b600280546102e6906115f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610312906115f0565b801561035f5780601f106103345761010080835404028352916020019161035f565b820191906000526020600020905b81548152906001019060200180831161034257829003601f168201915b505050505081565b6000546001600160a01b0316331461039a5760405162461bcd60e51b81526004016103919061162a565b60405180910390fd5b6103a48282610afe565b5050565b6000546001600160a01b031633146103d25760405162461bcd60e51b81526004016103919061162a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146104465760405162461bcd60e51b81526004016103919061162a565b6103a46001600160a01b0383168260006109b1565b6000546001600160a01b031633146104855760405162461bcd60e51b81526004016103919061162a565b806000036104cc5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206761732d657374696d61746560601b6044820152606401610391565b600181905560405181815230907ff43f23b7a28e6f8ce6843a21bd7b48bce778aa913b8c8cf459edf7d770e8d38a906020015b60405180910390a250565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610579919061165f565b905061058786868686610b3d565b6040516370a0823160e01b81526001600160a01b0384811660048301528291908616906370a0823190602401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061165f565b6105fe919061168e565b91506000821161065e5760405162461bcd60e51b815260206004820152602560248201527f416461707465724d6f64656c3a20496e73756666696369656e7420616d6f756e6044820152641d081bdd5d60da1b6064820152608401610391565b836001600160a01b0316856001600160a01b03167fb98befcfbea41b0c12f350995de56a06e4088a13a25161a67a6a8328874e997588856040516106ac929190918252602082015260400190565b60405180910390a350949350505050565b6000546001600160a01b031633146106e75760405162461bcd60e51b81526004016103919061162a565b600081116107075760405162461bcd60e51b8152600401610391906116a1565b61071b6001600160a01b0383163383610daa565b816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288260405161075691815260200190565b60405180910390a25050565b6000546001600160a01b0316331461078c5760405162461bcd60e51b81526004016103919061162a565b60005b81518110156103a4576000806107bd8484815181106107b0576107b06116e4565b6020026020010151610dda565b6001600160a01b039182166000908152600360209081526040808320939094168252919091522080546001600160a01b0319169055506107fe9050816116fa565b905061078f565b6000546001600160a01b0316331461082f5760405162461bcd60e51b81526004016103919061162a565b6000811161084f5760405162461bcd60e51b8152600401610391906116a1565b604051339082156108fc029083906000818181858888f1935050505015801561087c573d6000803e3d6000fd5b506040518181526000907f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28906020016104ff565b60006108bd848484610eaa565b90505b9392505050565b6000546001600160a01b031633146108f15760405162461bcd60e51b81526004016103919061162a565b6001600160a01b0381166109565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a204e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610391565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b801580610a2b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a29919061165f565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610391565b6040516001600160a01b038316602482015260448101829052610af990849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611021565b505050565b60005b8251811015610af957610b2d838281518110610b1f57610b1f6116e4565b602002602001015183611150565b610b36816116fa565b9050610b01565b6000610b4a858585610eaa565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb8919061165f565b6001600160a01b0380871660009081526003602090815260408083208985168452909152902054919250168015610c6b57604051638dae733360e01b8152600481018890526024810184905260606044820152600060648201526001600160a01b03821690638dae7333906084016020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061165f565b505b506001600160a01b0380851660009081526003602090815260408083208985168452909152902054168015610d1c5760405163733e738360e11b8152600481018490526024810188905260606044820152600060648201526001600160a01b0382169063e67ce706906084016020604051808303816000875af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a919061165f565b505b6040516370a0823160e01b8152306004820152600090610d939084906001600160a01b038916906370a0823190602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061165f565b906111b9565b9050610da0868287611215565b5050505050505050565b6040516001600160a01b038316602482015260448101829052610af990849063a9059cbb60e01b90606401610ac2565b600080826001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3f9190611713565b9150826001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea39190611713565b9050915091565b600083600003610ebc575060006108c0565b6001600160a01b0380841660009081526003602090815260408083208685168452909152902054168015610f56576040516351400f0b60e11b8152600481018690526001600160a01b0382169063a2801e1690602401602060405180830381865afa158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f53919061165f565b91505b506001600160a01b03808316600090815260036020908152604080832087851684529091529020541680156110195760405163ca19ebd960e01b81526001600160a01b038281166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063ca19ebd990604401602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611016919061165f565b91505b509392505050565b600080836001600160a01b03168360405161103c9190611730565b6000604051808303816000865af19150503d8060008114611079576040519150601f19603f3d011682016040523d82523d6000602084013e61107e565b606091505b5091509150816110d05760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646044820152606401610391565b80511561114a57808060200190518101906110eb919061174c565b61114a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610391565b50505050565b60008061115c84610dda565b915091508261117057611170828286611239565b61117b8282866112cb565b6001600160a01b0391821660009081526003602090815260408083209385168352929052208054919093166001600160a01b03199091161790915550565b6000826111c6838261168e565b915081111561120f5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610391565b92915050565b306001600160a01b03821614610af957610af96001600160a01b0384168284610daa565b6001600160a01b03808416600090815260036020908152604080832086851684529091529020541680158061127f5750816001600160a01b0316816001600160a01b0316145b61114a5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420616c6c6f77656420746f206f766572777269746500000000000000006044820152606401610391565b6112e16001600160a01b038416826000196109b1565b610af96001600160a01b038316826000196109b1565b60005b838110156113125781810151838201526020016112fa565b50506000910152565b602081526000825180602084015261133a8160408501602087016112f7565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461137957600080fd5b50565b803561138781611364565b919050565b600082601f83011261139d57600080fd5b8135602067ffffffffffffffff808311156113ba576113ba61134e565b8260051b604051601f19603f830116810181811084821117156113df576113df61134e565b6040529384528581018301938381019250878511156113fd57600080fd5b83870191505b84821015611423576114148261137c565b83529183019190830190611403565b979650505050505050565b801515811461137957600080fd5b6000806040838503121561144f57600080fd5b823567ffffffffffffffff81111561146657600080fd5b6114728582860161138c565b92505060208301356114838161142e565b809150509250929050565b600080604083850312156114a157600080fd5b82356114ac81611364565b9150602083013561148381611364565b6000602082840312156114ce57600080fd5b5035919050565b600080600080608085870312156114eb57600080fd5b8435935060208501356114fd81611364565b9250604085013561150d81611364565b9150606085013561151d81611364565b939692955090935050565b6000806040838503121561153b57600080fd5b823561154681611364565b946020939093013593505050565b60006020828403121561156657600080fd5b813567ffffffffffffffff81111561157d57600080fd5b6115898482850161138c565b949350505050565b6000806000606084860312156115a657600080fd5b8335925060208401356115b881611364565b915060408401356115c881611364565b809150509250925092565b6000602082840312156115e557600080fd5b81356108c081611364565b600181811c9082168061160457607f821691505b60208210810361162457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561167157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561120f5761120f611678565b60208082526023908201527f427265776c616273416461707465723a204e6f7468696e6720746f207265636f6040820152623b32b960e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161170c5761170c611678565b5060010190565b60006020828403121561172557600080fd5b81516108c081611364565b600082516117428184602087016112f7565b9190910192915050565b60006020828403121561175e57600080fd5b81516108c08161142e56fea26469706673582212206eb92c20fde13a5dc19b00ac980b68445d4d72f4388e0ba3b1dca66270332de064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb0000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000000000000d446f646f563141646170746572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c9f93163c99695c6526b799ebca2207fdf7d61ad0000000000000000000000008876819535b48b551c9e97ebc07332c7482b4b2d00000000000000000000000075c23271661d9d143dcb617222bc4bec783eff340000000000000000000000002109f78b46a789125598f5ad2b7f243751c2934d
Deployed Bytecode
0x6080604052600436106100e15760003560e01c80638980f11f1161007f578063d333555311610059578063d333555314610245578063ef99893a14610265578063f2fde38b14610285578063f551bf20146102a557600080fd5b80638980f11f146101d35780638da5cb5b146101f3578063a746e4b21461022557600080fd5b8063715018a6116100bb578063715018a61461015e5780637ae267731461017357806384a33e631461019357806388156e65146101b357600080fd5b806306fdde03146100ed57806349e38f321461011857806369cff80d1461013a57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b506101026102d9565b60405161010f919061131b565b60405180910390f35b34801561012457600080fd5b5061013861013336600461143c565b610367565b005b34801561014657600080fd5b5061015060015481565b60405190815260200161010f565b34801561016a57600080fd5b506101386103a8565b34801561017f57600080fd5b5061013861018e36600461148e565b61041c565b34801561019f57600080fd5b506101386101ae3660046114bc565b61045b565b3480156101bf57600080fd5b506101506101ce3660046114d5565b61050a565b3480156101df57600080fd5b506101386101ee366004611528565b6106bd565b3480156101ff57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161010f565b34801561023157600080fd5b50610138610240366004611554565b610762565b34801561025157600080fd5b506101386102603660046114bc565b610805565b34801561027157600080fd5b50610150610280366004611591565b6108b0565b34801561029157600080fd5b506101386102a03660046115d3565b6108c7565b3480156102b157600080fd5b5061020d7f000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb81565b600280546102e6906115f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610312906115f0565b801561035f5780601f106103345761010080835404028352916020019161035f565b820191906000526020600020905b81548152906001019060200180831161034257829003601f168201915b505050505081565b6000546001600160a01b0316331461039a5760405162461bcd60e51b81526004016103919061162a565b60405180910390fd5b6103a48282610afe565b5050565b6000546001600160a01b031633146103d25760405162461bcd60e51b81526004016103919061162a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146104465760405162461bcd60e51b81526004016103919061162a565b6103a46001600160a01b0383168260006109b1565b6000546001600160a01b031633146104855760405162461bcd60e51b81526004016103919061162a565b806000036104cc5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206761732d657374696d61746560601b6044820152606401610391565b600181905560405181815230907ff43f23b7a28e6f8ce6843a21bd7b48bce778aa913b8c8cf459edf7d770e8d38a906020015b60405180910390a250565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610555573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610579919061165f565b905061058786868686610b3d565b6040516370a0823160e01b81526001600160a01b0384811660048301528291908616906370a0823190602401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f4919061165f565b6105fe919061168e565b91506000821161065e5760405162461bcd60e51b815260206004820152602560248201527f416461707465724d6f64656c3a20496e73756666696369656e7420616d6f756e6044820152641d081bdd5d60da1b6064820152608401610391565b836001600160a01b0316856001600160a01b03167fb98befcfbea41b0c12f350995de56a06e4088a13a25161a67a6a8328874e997588856040516106ac929190918252602082015260400190565b60405180910390a350949350505050565b6000546001600160a01b031633146106e75760405162461bcd60e51b81526004016103919061162a565b600081116107075760405162461bcd60e51b8152600401610391906116a1565b61071b6001600160a01b0383163383610daa565b816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288260405161075691815260200190565b60405180910390a25050565b6000546001600160a01b0316331461078c5760405162461bcd60e51b81526004016103919061162a565b60005b81518110156103a4576000806107bd8484815181106107b0576107b06116e4565b6020026020010151610dda565b6001600160a01b039182166000908152600360209081526040808320939094168252919091522080546001600160a01b0319169055506107fe9050816116fa565b905061078f565b6000546001600160a01b0316331461082f5760405162461bcd60e51b81526004016103919061162a565b6000811161084f5760405162461bcd60e51b8152600401610391906116a1565b604051339082156108fc029083906000818181858888f1935050505015801561087c573d6000803e3d6000fd5b506040518181526000907f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28906020016104ff565b60006108bd848484610eaa565b90505b9392505050565b6000546001600160a01b031633146108f15760405162461bcd60e51b81526004016103919061162a565b6001600160a01b0381166109565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a204e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610391565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b801580610a2b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a29919061165f565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610391565b6040516001600160a01b038316602482015260448101829052610af990849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611021565b505050565b60005b8251811015610af957610b2d838281518110610b1f57610b1f6116e4565b602002602001015183611150565b610b36816116fa565b9050610b01565b6000610b4a858585610eaa565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb8919061165f565b6001600160a01b0380871660009081526003602090815260408083208985168452909152902054919250168015610c6b57604051638dae733360e01b8152600481018890526024810184905260606044820152600060648201526001600160a01b03821690638dae7333906084016020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061165f565b505b506001600160a01b0380851660009081526003602090815260408083208985168452909152902054168015610d1c5760405163733e738360e11b8152600481018490526024810188905260606044820152600060648201526001600160a01b0382169063e67ce706906084016020604051808303816000875af1158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a919061165f565b505b6040516370a0823160e01b8152306004820152600090610d939084906001600160a01b038916906370a0823190602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061165f565b906111b9565b9050610da0868287611215565b5050505050505050565b6040516001600160a01b038316602482015260448101829052610af990849063a9059cbb60e01b90606401610ac2565b600080826001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3f9190611713565b9150826001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea39190611713565b9050915091565b600083600003610ebc575060006108c0565b6001600160a01b0380841660009081526003602090815260408083208685168452909152902054168015610f56576040516351400f0b60e11b8152600481018690526001600160a01b0382169063a2801e1690602401602060405180830381865afa158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f53919061165f565b91505b506001600160a01b03808316600090815260036020908152604080832087851684529091529020541680156110195760405163ca19ebd960e01b81526001600160a01b038281166004830152602482018790527f000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb169063ca19ebd990604401602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611016919061165f565b91505b509392505050565b600080836001600160a01b03168360405161103c9190611730565b6000604051808303816000865af19150503d8060008114611079576040519150601f19603f3d011682016040523d82523d6000602084013e61107e565b606091505b5091509150816110d05760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646044820152606401610391565b80511561114a57808060200190518101906110eb919061174c565b61114a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610391565b50505050565b60008061115c84610dda565b915091508261117057611170828286611239565b61117b8282866112cb565b6001600160a01b0391821660009081526003602090815260408083209385168352929052208054919093166001600160a01b03199091161790915550565b6000826111c6838261168e565b915081111561120f5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610391565b92915050565b306001600160a01b03821614610af957610af96001600160a01b0384168284610daa565b6001600160a01b03808416600090815260036020908152604080832086851684529091529020541680158061127f5750816001600160a01b0316816001600160a01b0316145b61114a5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420616c6c6f77656420746f206f766572777269746500000000000000006044820152606401610391565b6112e16001600160a01b038416826000196109b1565b610af96001600160a01b038316826000196109b1565b60005b838110156113125781810151838201526020016112fa565b50506000910152565b602081526000825180602084015261133a8160408501602087016112f7565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461137957600080fd5b50565b803561138781611364565b919050565b600082601f83011261139d57600080fd5b8135602067ffffffffffffffff808311156113ba576113ba61134e565b8260051b604051601f19603f830116810181811084821117156113df576113df61134e565b6040529384528581018301938381019250878511156113fd57600080fd5b83870191505b84821015611423576114148261137c565b83529183019190830190611403565b979650505050505050565b801515811461137957600080fd5b6000806040838503121561144f57600080fd5b823567ffffffffffffffff81111561146657600080fd5b6114728582860161138c565b92505060208301356114838161142e565b809150509250929050565b600080604083850312156114a157600080fd5b82356114ac81611364565b9150602083013561148381611364565b6000602082840312156114ce57600080fd5b5035919050565b600080600080608085870312156114eb57600080fd5b8435935060208501356114fd81611364565b9250604085013561150d81611364565b9150606085013561151d81611364565b939692955090935050565b6000806040838503121561153b57600080fd5b823561154681611364565b946020939093013593505050565b60006020828403121561156657600080fd5b813567ffffffffffffffff81111561157d57600080fd5b6115898482850161138c565b949350505050565b6000806000606084860312156115a657600080fd5b8335925060208401356115b881611364565b915060408401356115c881611364565b809150509250925092565b6000602082840312156115e557600080fd5b81356108c081611364565b600181811c9082168061160457607f821691505b60208210810361162457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561167157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561120f5761120f611678565b60208082526023908201527f427265776c616273416461707465723a204e6f7468696e6720746f207265636f6040820152623b32b960e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161170c5761170c611678565b5060010190565b60006020828403121561172557600080fd5b81516108c081611364565b600082516117428184602087016112f7565b9190910192915050565b60006020828403121561175e57600080fd5b81516108c08161142e56fea26469706673582212206eb92c20fde13a5dc19b00ac980b68445d4d72f4388e0ba3b1dca66270332de064736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb0000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000000000000d446f646f563141646170746572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c9f93163c99695c6526b799ebca2207fdf7d61ad0000000000000000000000008876819535b48b551c9e97ebc07332c7482b4b2d00000000000000000000000075c23271661d9d143dcb617222bc4bec783eff340000000000000000000000002109f78b46a789125598f5ad2b7f243751c2934d
-----Decoded View---------------
Arg [0] : _name (string): DodoV1Adapter
Arg [1] : _pools (address[]): 0xC9f93163c99695c6526b799EbcA2207Fdf7D61aD,0x8876819535b48b551C9e97EBc07332C7482b4b2d,0x75c23271661d9d143DCb617222BC4BEc783eff34,0x2109F78b46a789125598f5ad2b7f243751c2934d
Arg [2] : _helper (address): 0x533dA777aeDCE766CEAe696bf90f8541A4bA80Eb
Arg [3] : _gasEstimate (uint256): 12000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002ee0
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 446f646f56314164617074657200000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 000000000000000000000000c9f93163c99695c6526b799ebca2207fdf7d61ad
Arg [8] : 0000000000000000000000008876819535b48b551c9e97ebc07332c7482b4b2d
Arg [9] : 00000000000000000000000075c23271661d9d143dcb617222bc4bec783eff34
Arg [10] : 0000000000000000000000002109f78b46a789125598f5ad2b7f243751c2934d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.998065 | 1 | $0.998 |
Loading...
Loading
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.