Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13788406 | 972 days ago | IN | 0 ETH | 0.00122223 | ||||
Set Price Feed | 11628082 | 1307 days ago | IN | 0 ETH | 0.00236499 | ||||
Set Price Feed | 11497851 | 1327 days ago | IN | 0 ETH | 0.00228562 | ||||
Set Price Feed | 11471521 | 1331 days ago | IN | 0 ETH | 0.00315518 | ||||
Set Price Feed | 11342608 | 1351 days ago | IN | 0 ETH | 0.00147296 | ||||
Set Decimals | 11342604 | 1351 days ago | IN | 0 ETH | 0.0020225 | ||||
Set Price Feed | 11329143 | 1353 days ago | IN | 0 ETH | 0.01750463 | ||||
Set Decimals | 11329140 | 1353 days ago | IN | 0 ETH | 0.01906493 | ||||
0x60806040 | 11329108 | 1353 days ago | IN | 0 ETH | 0.04242672 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PriceFeeds
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-25 */ /** * Copyright 2017-2020, bZeroX, LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0. */ pragma solidity 0.5.17; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "unauthorized"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b != 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Integer division of two numbers, rounding up and truncating the quotient */ function divCeil(uint256 a, uint256 b) internal pure returns (uint256) { return divCeil(a, b, "SafeMath: division by zero"); } /** * @dev Integer division of two numbers, rounding up and truncating the quotient */ function divCeil(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b != 0, errorMessage); if (a == 0) { return 0; } uint256 c = ((a - 1) / b) + 1; return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min256(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a < _b ? _a : _b; } } interface IWeth { function deposit() external payable; function withdraw(uint256 wad) external; } contract IERC20 { string public name; uint8 public decimals; string public symbol; function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function allowance(address _owner, address _spender) public view returns (uint256); function approve(address _spender, uint256 _value) public returns (bool); function transfer(address _to, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract IWethERC20 is IWeth, IERC20 {} contract Constants { uint256 internal constant WEI_PRECISION = 10**18; uint256 internal constant WEI_PERCENT_PRECISION = 10**20; uint256 internal constant DAYS_IN_A_YEAR = 365; uint256 internal constant ONE_MONTH = 2628000; // approx. seconds in a month string internal constant UserRewardsID = "UserRewards"; string internal constant LoanDepositValueID = "LoanDepositValue"; IWethERC20 public constant wethToken = IWethERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address public constant bzrxTokenAddress = 0x56d811088235F11C8920698a204A5010a788f4b3; address public constant vbzrxTokenAddress = 0xB72B31907C1C95F3650b64b2469e08EdACeE5e8F; } interface IPriceFeedsExt { function latestAnswer() external view returns (int256); } contract PriceFeeds is Constants, Ownable { using SafeMath for uint256; // address(1) is used as a stand-in for the non-existent token representing the fast-gas price on Chainlink address internal constant FASTGAS_PRICEFEED_ADDRESS = address(1); event GlobalPricingPaused( address indexed sender, bool isPaused ); mapping (address => IPriceFeedsExt) public pricesFeeds; // token => pricefeed mapping (address => uint256) public decimals; // decimals of supported tokens bool public globalPricingPaused = false; constructor() public { // set decimals for ether decimals[address(wethToken)] = 18; } function queryRate( address sourceToken, address destToken) public view returns (uint256 rate, uint256 precision) { require(!globalPricingPaused, "pricing is paused"); return _queryRate( sourceToken, destToken ); } function queryPrecision( address sourceToken, address destToken) public view returns (uint256) { return sourceToken != destToken ? _getDecimalPrecision(sourceToken, destToken) : WEI_PRECISION; } //// NOTE: This function returns 0 during a pause, rather than a revert. Ensure calling contracts handle correctly. /// function queryReturn( address sourceToken, address destToken, uint256 sourceAmount) public view returns (uint256 destAmount) { if (globalPricingPaused) { return 0; } (uint256 rate, uint256 precision) = _queryRate( sourceToken, destToken ); destAmount = sourceAmount .mul(rate) .div(precision); } function checkPriceDisagreement( address sourceToken, address destToken, uint256 sourceAmount, uint256 destAmount, uint256 maxSlippage) public view returns (uint256 sourceToDestSwapRate) { require(!globalPricingPaused, "pricing is paused"); (uint256 rate, uint256 precision) = _queryRate( sourceToken, destToken ); rate = rate .mul(WEI_PRECISION) .div(precision); sourceToDestSwapRate = destAmount .mul(WEI_PRECISION) .div(sourceAmount); uint256 spreadValue = sourceToDestSwapRate > rate ? sourceToDestSwapRate - rate : rate - sourceToDestSwapRate; if (spreadValue != 0) { spreadValue = spreadValue .mul(WEI_PERCENT_PRECISION) .div(sourceToDestSwapRate); require( spreadValue <= maxSlippage, "price disagreement" ); } } function amountInEth( address tokenAddress, uint256 amount) public view returns (uint256 ethAmount) { if (tokenAddress == address(wethToken)) { ethAmount = amount; } else { (uint toEthRate, uint256 toEthPrecision) = queryRate( tokenAddress, address(wethToken) ); ethAmount = amount .mul(toEthRate) .div(toEthPrecision); } } function getMaxDrawdown( address loanToken, address collateralToken, uint256 loanAmount, uint256 collateralAmount, uint256 margin) public view returns (uint256 maxDrawdown) { uint256 loanToCollateralAmount; if (collateralToken == loanToken) { loanToCollateralAmount = loanAmount; } else { (uint256 rate, uint256 precision) = queryRate( loanToken, collateralToken ); loanToCollateralAmount = loanAmount .mul(rate) .div(precision); } uint256 combined = loanToCollateralAmount .add( loanToCollateralAmount .mul(margin) .div(WEI_PERCENT_PRECISION) ); maxDrawdown = collateralAmount > combined ? collateralAmount - combined : 0; } function getCurrentMarginAndCollateralSize( address loanToken, address collateralToken, uint256 loanAmount, uint256 collateralAmount) public view returns (uint256 currentMargin, uint256 collateralInEthAmount) { (currentMargin,) = getCurrentMargin( loanToken, collateralToken, loanAmount, collateralAmount ); collateralInEthAmount = amountInEth( collateralToken, collateralAmount ); } function getCurrentMargin( address loanToken, address collateralToken, uint256 loanAmount, uint256 collateralAmount) public view returns (uint256 currentMargin, uint256 collateralToLoanRate) { uint256 collateralToLoanAmount; if (collateralToken == loanToken) { collateralToLoanAmount = collateralAmount; collateralToLoanRate = WEI_PRECISION; } else { uint256 collateralToLoanPrecision; (collateralToLoanRate, collateralToLoanPrecision) = queryRate( collateralToken, loanToken ); collateralToLoanRate = collateralToLoanRate .mul(WEI_PRECISION) .div(collateralToLoanPrecision); collateralToLoanAmount = collateralAmount .mul(collateralToLoanRate) .div(WEI_PRECISION); } if (loanAmount != 0 && collateralToLoanAmount >= loanAmount) { currentMargin = collateralToLoanAmount .sub(loanAmount) .mul(WEI_PERCENT_PRECISION) .div(loanAmount); } } function shouldLiquidate( address loanToken, address collateralToken, uint256 loanAmount, uint256 collateralAmount, uint256 maintenanceMargin) public view returns (bool) { (uint256 currentMargin,) = getCurrentMargin( loanToken, collateralToken, loanAmount, collateralAmount ); return currentMargin <= maintenanceMargin; } // returns per unit gas cost denominated in payToken * 1e36 function getFastGasPrice( address payToken) external view returns (uint256) { uint256 gasPrice = _getFastGasPrice() .mul(WEI_PRECISION * WEI_PRECISION); if (payToken != address(wethToken) && payToken != address(0)) { require(!globalPricingPaused, "pricing is paused"); (uint256 rate, uint256 precision) = _queryRate( address(wethToken), payToken ); gasPrice = gasPrice .mul(rate) .div(precision); } return gasPrice; } /* * Owner functions */ function setPriceFeed( address[] calldata tokens, IPriceFeedsExt[] calldata feeds) external onlyOwner { require(tokens.length == feeds.length, "count mismatch"); for (uint256 i = 0; i < tokens.length; i++) { pricesFeeds[tokens[i]] = feeds[i]; } } function setDecimals( IERC20[] calldata tokens) external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { decimals[address(tokens[i])] = tokens[i].decimals(); } } function setGlobalPricingPaused( bool isPaused) external onlyOwner { globalPricingPaused = isPaused; emit GlobalPricingPaused( msg.sender, isPaused ); } /* * Internal functions */ function _queryRate( address sourceToken, address destToken) internal view returns (uint256 rate, uint256 precision) { if (sourceToken != destToken) { uint256 sourceRate = _queryRateCall(sourceToken); uint256 destRate = _queryRateCall(destToken); rate = sourceRate .mul(WEI_PRECISION) .div(destRate); precision = _getDecimalPrecision(sourceToken, destToken); } else { rate = WEI_PRECISION; precision = WEI_PRECISION; } } function _queryRateCall( address token) internal view returns (uint256 rate) { if (token != address(wethToken)) { IPriceFeedsExt _Feed = pricesFeeds[token]; require(address(_Feed) != address(0), "unsupported price feed"); rate = uint256(_Feed.latestAnswer()); require(rate != 0 && (rate >> 128) == 0, "price error"); } else { rate = WEI_PRECISION; } } function _getDecimalPrecision( address sourceToken, address destToken) internal view returns(uint256) { if (sourceToken == destToken) { return WEI_PRECISION; } else { uint256 sourceTokenDecimals = decimals[sourceToken]; if (sourceTokenDecimals == 0) sourceTokenDecimals = IERC20(sourceToken).decimals(); uint256 destTokenDecimals = decimals[destToken]; if (destTokenDecimals == 0) destTokenDecimals = IERC20(destToken).decimals(); if (destTokenDecimals >= sourceTokenDecimals) return 10**(SafeMath.sub(18, destTokenDecimals-sourceTokenDecimals)); else return 10**(SafeMath.add(18, sourceTokenDecimals-destTokenDecimals)); } } function _getFastGasPrice() internal view returns (uint256 gasPrice) { gasPrice = uint256(pricesFeeds[FASTGAS_PRICEFEED_ADDRESS].latestAnswer()); require(gasPrice != 0 && (gasPrice >> 128) == 0, "gas price error"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"GlobalPricingPaused","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"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"amountInEth","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bzrxTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"sourceToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"},{"internalType":"uint256","name":"sourceAmount","type":"uint256"},{"internalType":"uint256","name":"destAmount","type":"uint256"},{"internalType":"uint256","name":"maxSlippage","type":"uint256"}],"name":"checkPriceDisagreement","outputs":[{"internalType":"uint256","name":"sourceToDestSwapRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"loanToken","type":"address"},{"internalType":"address","name":"collateralToken","type":"address"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"}],"name":"getCurrentMargin","outputs":[{"internalType":"uint256","name":"currentMargin","type":"uint256"},{"internalType":"uint256","name":"collateralToLoanRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"loanToken","type":"address"},{"internalType":"address","name":"collateralToken","type":"address"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"}],"name":"getCurrentMarginAndCollateralSize","outputs":[{"internalType":"uint256","name":"currentMargin","type":"uint256"},{"internalType":"uint256","name":"collateralInEthAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"payToken","type":"address"}],"name":"getFastGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"loanToken","type":"address"},{"internalType":"address","name":"collateralToken","type":"address"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"margin","type":"uint256"}],"name":"getMaxDrawdown","outputs":[{"internalType":"uint256","name":"maxDrawdown","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"globalPricingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pricesFeeds","outputs":[{"internalType":"contract IPriceFeedsExt","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"sourceToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"}],"name":"queryPrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"sourceToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"}],"name":"queryRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"precision","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"sourceToken","type":"address"},{"internalType":"address","name":"destToken","type":"address"},{"internalType":"uint256","name":"sourceAmount","type":"uint256"}],"name":"queryReturn","outputs":[{"internalType":"uint256","name":"destAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"setDecimals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"name":"setGlobalPricingPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"contract IPriceFeedsExt[]","name":"feeds","type":"address[]"}],"name":"setPriceFeed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"loanToken","type":"address"},{"internalType":"address","name":"collateralToken","type":"address"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"maintenanceMargin","type":"uint256"}],"name":"shouldLiquidate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vbzrxTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wethToken","outputs":[{"internalType":"contract IWethERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526003805460ff1916905534801561001a57600080fd5b50600061002e6001600160e01b036100be16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600052600260205260127fde032e96a833a2191f55c5766e34554d9b07734477ea9cb69c40158c1078e793556100c2565b3390565b61162e806100d16000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638f32d59b116100b8578063d138f9a11161007c578063d138f9a1146104b1578063d449a832146104e7578063d601e3ff1461050d578063ecc5382d14610515578063f2fde38b14610551578063f80b25fb1461057757610142565b80638f32d59b146103df57806390d1f66f146103e7578063aa2ec7101461040d578063ab2c9d751461047d578063b2cf54ea1461048557610142565b806339cd381e1161010a57806339cd381e146102b65780634b57b0be146102be5780635034709c146102c6578063524efd4b1461038a5780637c2badb7146103b85780638da5cb5b146103d757610142565b80631e2c62d31461014757806329d5277c1461019b5780632a887702146101e25780632d485c5c146102385780632ff0d0121461027a575b600080fd5b610189600480360360a081101561015d57600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356105b9565b60408051918252519081900360200190f35b6101c9600480360360408110156101b157600080fd5b506001600160a01b03813581169160200135166106f4565b6040805192835260208301919091528051918290030190f35b610224600480360360a08110156101f857600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561075b565b604080519115158252519081900360200190f35b61025e6004803603602081101561024e57600080fd5b50356001600160a01b0316610779565b604080516001600160a01b039092168252519081900360200190f35b6101c96004803603608081101561029057600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610794565b61025e610862565b61025e61087a565b610388600480360360408110156102dc57600080fd5b8101906020810181356401000000008111156102f757600080fd5b82018360208201111561030957600080fd5b8035906020019184602083028401116401000000008311171561032b57600080fd5b91939092909160208101903564010000000081111561034957600080fd5b82018360208201111561035b57600080fd5b8035906020019184602083028401116401000000008311171561037d57600080fd5b509092509050610892565b005b610189600480360360408110156103a057600080fd5b506001600160a01b03813581169160200135166109a3565b610388600480360360208110156103ce57600080fd5b503515156109e0565b61025e610a72565b610224610a82565b610189600480360360208110156103fd57600080fd5b50356001600160a01b0316610aa6565b6103886004803603602081101561042357600080fd5b81019060208101813564010000000081111561043e57600080fd5b82018360208201111561045057600080fd5b8035906020019184602083028401116401000000008311171561047257600080fd5b509092509050610b93565b61025e610ca9565b6101896004803603604081101561049b57600080fd5b506001600160a01b038135169060200135610cc1565b610189600480360360608110156104c757600080fd5b506001600160a01b03813581169160208101359091169060400135610d32565b610189600480360360208110156104fd57600080fd5b50356001600160a01b0316610d7a565b610224610d8c565b6101c96004803603608081101561052b57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610d95565b6103886004803603602081101561056757600080fd5b50356001600160a01b0316610dbc565b610189600480360360a081101561058d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e10565b60035460009060ff1615610608576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b6000806106158888610eae565b90925090506106428161063684670de0b6b3a764000063ffffffff610f2816565b9063ffffffff610f8116565b91506106608661063687670de0b6b3a764000063ffffffff610f2816565b9250600082841161067357838303610677565b8284035b905080156106e85761069c846106368368056bc75e2d6310000063ffffffff610f2816565b9050848111156106e8576040805162461bcd60e51b81526020600482015260126024820152711c1c9a58d948191a5cd859dc99595b595b9d60721b604482015290519081900360640190fd5b50505095945050505050565b600354600090819060ff1615610745576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b61074f8484610eae565b915091505b9250929050565b60008061076a87878787610794565b50909210159695505050505050565b6001602052600090815260409020546001600160a01b031681565b6000806000866001600160a01b0316866001600160a01b031614156107c55750670de0b6b3a7640000905082610814565b60006107d187896106f4565b90935090506107f28161063685670de0b6b3a764000063ffffffff610f2816565b9250610810670de0b6b3a7640000610636878663ffffffff610f2816565b9150505b84158015906108235750848110155b15610858576108558561063668056bc75e2d63100000610849858463ffffffff610fc316565b9063ffffffff610f2816565b92505b5094509492505050565b73b72b31907c1c95f3650b64b2469e08edacee5e8f81565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61089a610a82565b6108da576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b82811461091f576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b8381101561099c5782828281811061093657fe5b905060200201356001600160a01b03166001600087878581811061095657fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000208054939091166001600160a01b03199093169290921790915550600101610922565b5050505050565b6000816001600160a01b0316836001600160a01b031614156109cd57670de0b6b3a76400006109d7565b6109d78383611005565b90505b92915050565b6109e8610a82565b610a28576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6003805482151560ff199091168117909155604080519182525133917fd72570f3e3995824c4448eca84a22aed922dab8c58e23e9c5e60e74d0714f7f1919081900360200190a250565b6000546001600160a01b03165b90565b600080546001600160a01b0316610a9761116f565b6001600160a01b031614905090565b600080610ac46ec097ce7bc90715b34b9f1000000000610849611173565b90506001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214801590610afb57506001600160a01b03831615155b15610b8b5760035460ff1615610b4c576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b600080610b6d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286610eae565b9092509050610b8681610636858563ffffffff610f2816565b925050505b90505b919050565b610b9b610a82565b610bdb576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60005b81811015610ca457828282818110610bf257fe5b905060200201356001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b505160ff1660026000858585818110610c7957fe5b602090810292909201356001600160a01b031683525081019190915260400160002055600101610bde565b505050565b7356d811088235f11c8920698a204a5010a788f4b381565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415610cef5750806109da565b600080610d108573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26106f4565b9092509050610d2981610636868563ffffffff610f2816565b95945050505050565b60035460009060ff1615610d4857506000610d73565b600080610d558686610eae565b9092509050610d6e81610636868563ffffffff610f2816565b925050505b9392505050565b60026020526000908152604090205481565b60035460ff1681565b600080610da486868686610794565b509150610db18584610cc1565b905094509492505050565b610dc4610a82565b610e04576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610e0d81611264565b50565b600080866001600160a01b0316866001600160a01b03161415610e34575083610e5f565b600080610e4189896106f4565b9092509050610e5a81610636898563ffffffff610f2816565b925050505b6000610e8e610e8168056bc75e2d63100000610636858863ffffffff610f2816565b839063ffffffff61130416565b9050808511610e9e576000610ea2565b8085035b98975050505050505050565b600080826001600160a01b0316846001600160a01b031614610f15576000610ed58561135e565b90506000610ee28561135e565b9050610f008161063684670de0b6b3a764000063ffffffff610f2816565b9350610f0c8686611005565b92505050610754565b50670de0b6b3a764000093849350915050565b600082610f37575060006109da565b82820282848281610f4457fe5b04146109d75760405162461bcd60e51b81526004018080602001828103825260218152602001806115d96021913960400191505060405180910390fd5b60006109d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114b6565b60006109d783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611558565b6000816001600160a01b0316836001600160a01b031614156110305750670de0b6b3a76400006109da565b6001600160a01b038316600090815260026020526040902054806110b957836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d60208110156110b157600080fd5b505160ff1690505b6001600160a01b0383166000908152600260205260409020548061114257836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561111057600080fd5b505afa158015611124573d6000803e3d6000fd5b505050506040513d602081101561113a57600080fd5b505160ff1690505b818110611162576111566012838303610fc3565b600a0a925050506109da565b6111566012828403611304565b3390565b6001600081815260209182527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54604080516350d25bcd60e01b8152905192936001600160a01b03909216926350d25bcd92600480840193919291829003018186803b1580156111e257600080fd5b505afa1580156111f6573d6000803e3d6000fd5b505050506040513d602081101561120c57600080fd5b5051905080158015906112215750608081901c155b610a7f576040805162461bcd60e51b815260206004820152600f60248201526e33b0b990383934b1b29032b93937b960891b604482015290519081900360640190fd5b6001600160a01b0381166112a95760405162461bcd60e51b81526004018080602001828103825260268152602001806115b36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156109d7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146114a7576001600160a01b0380831660009081526001602052604090205416806113ea576040805162461bcd60e51b81526020600482015260166024820152751d5b9cdd5c1c1bdc9d1959081c1c9a58d9481999595960521b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561142357600080fd5b505afa158015611437573d6000803e3d6000fd5b505050506040513d602081101561144d57600080fd5b5051915081158015906114625750608082901c155b6114a1576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b50610b8e565b50670de0b6b3a7640000919050565b600081836115425760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115075781810151838201526020016114ef565b50505050905090810190601f1680156115345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161154e57fe5b0495945050505050565b600081848411156115aa5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115075781810151838201526020016114ef565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158206ad42dbc23eafadb5c5d3e42cfc73514a135994474251f7ceaa492b7f9c1af4d64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638f32d59b116100b8578063d138f9a11161007c578063d138f9a1146104b1578063d449a832146104e7578063d601e3ff1461050d578063ecc5382d14610515578063f2fde38b14610551578063f80b25fb1461057757610142565b80638f32d59b146103df57806390d1f66f146103e7578063aa2ec7101461040d578063ab2c9d751461047d578063b2cf54ea1461048557610142565b806339cd381e1161010a57806339cd381e146102b65780634b57b0be146102be5780635034709c146102c6578063524efd4b1461038a5780637c2badb7146103b85780638da5cb5b146103d757610142565b80631e2c62d31461014757806329d5277c1461019b5780632a887702146101e25780632d485c5c146102385780632ff0d0121461027a575b600080fd5b610189600480360360a081101561015d57600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356105b9565b60408051918252519081900360200190f35b6101c9600480360360408110156101b157600080fd5b506001600160a01b03813581169160200135166106f4565b6040805192835260208301919091528051918290030190f35b610224600480360360a08110156101f857600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561075b565b604080519115158252519081900360200190f35b61025e6004803603602081101561024e57600080fd5b50356001600160a01b0316610779565b604080516001600160a01b039092168252519081900360200190f35b6101c96004803603608081101561029057600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610794565b61025e610862565b61025e61087a565b610388600480360360408110156102dc57600080fd5b8101906020810181356401000000008111156102f757600080fd5b82018360208201111561030957600080fd5b8035906020019184602083028401116401000000008311171561032b57600080fd5b91939092909160208101903564010000000081111561034957600080fd5b82018360208201111561035b57600080fd5b8035906020019184602083028401116401000000008311171561037d57600080fd5b509092509050610892565b005b610189600480360360408110156103a057600080fd5b506001600160a01b03813581169160200135166109a3565b610388600480360360208110156103ce57600080fd5b503515156109e0565b61025e610a72565b610224610a82565b610189600480360360208110156103fd57600080fd5b50356001600160a01b0316610aa6565b6103886004803603602081101561042357600080fd5b81019060208101813564010000000081111561043e57600080fd5b82018360208201111561045057600080fd5b8035906020019184602083028401116401000000008311171561047257600080fd5b509092509050610b93565b61025e610ca9565b6101896004803603604081101561049b57600080fd5b506001600160a01b038135169060200135610cc1565b610189600480360360608110156104c757600080fd5b506001600160a01b03813581169160208101359091169060400135610d32565b610189600480360360208110156104fd57600080fd5b50356001600160a01b0316610d7a565b610224610d8c565b6101c96004803603608081101561052b57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610d95565b6103886004803603602081101561056757600080fd5b50356001600160a01b0316610dbc565b610189600480360360a081101561058d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e10565b60035460009060ff1615610608576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b6000806106158888610eae565b90925090506106428161063684670de0b6b3a764000063ffffffff610f2816565b9063ffffffff610f8116565b91506106608661063687670de0b6b3a764000063ffffffff610f2816565b9250600082841161067357838303610677565b8284035b905080156106e85761069c846106368368056bc75e2d6310000063ffffffff610f2816565b9050848111156106e8576040805162461bcd60e51b81526020600482015260126024820152711c1c9a58d948191a5cd859dc99595b595b9d60721b604482015290519081900360640190fd5b50505095945050505050565b600354600090819060ff1615610745576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b61074f8484610eae565b915091505b9250929050565b60008061076a87878787610794565b50909210159695505050505050565b6001602052600090815260409020546001600160a01b031681565b6000806000866001600160a01b0316866001600160a01b031614156107c55750670de0b6b3a7640000905082610814565b60006107d187896106f4565b90935090506107f28161063685670de0b6b3a764000063ffffffff610f2816565b9250610810670de0b6b3a7640000610636878663ffffffff610f2816565b9150505b84158015906108235750848110155b15610858576108558561063668056bc75e2d63100000610849858463ffffffff610fc316565b9063ffffffff610f2816565b92505b5094509492505050565b73b72b31907c1c95f3650b64b2469e08edacee5e8f81565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61089a610a82565b6108da576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b82811461091f576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b8381101561099c5782828281811061093657fe5b905060200201356001600160a01b03166001600087878581811061095657fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000208054939091166001600160a01b03199093169290921790915550600101610922565b5050505050565b6000816001600160a01b0316836001600160a01b031614156109cd57670de0b6b3a76400006109d7565b6109d78383611005565b90505b92915050565b6109e8610a82565b610a28576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6003805482151560ff199091168117909155604080519182525133917fd72570f3e3995824c4448eca84a22aed922dab8c58e23e9c5e60e74d0714f7f1919081900360200190a250565b6000546001600160a01b03165b90565b600080546001600160a01b0316610a9761116f565b6001600160a01b031614905090565b600080610ac46ec097ce7bc90715b34b9f1000000000610849611173565b90506001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214801590610afb57506001600160a01b03831615155b15610b8b5760035460ff1615610b4c576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b600080610b6d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286610eae565b9092509050610b8681610636858563ffffffff610f2816565b925050505b90505b919050565b610b9b610a82565b610bdb576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60005b81811015610ca457828282818110610bf257fe5b905060200201356001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d6020811015610c6457600080fd5b505160ff1660026000858585818110610c7957fe5b602090810292909201356001600160a01b031683525081019190915260400160002055600101610bde565b505050565b7356d811088235f11c8920698a204a5010a788f4b381565b60006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415610cef5750806109da565b600080610d108573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26106f4565b9092509050610d2981610636868563ffffffff610f2816565b95945050505050565b60035460009060ff1615610d4857506000610d73565b600080610d558686610eae565b9092509050610d6e81610636868563ffffffff610f2816565b925050505b9392505050565b60026020526000908152604090205481565b60035460ff1681565b600080610da486868686610794565b509150610db18584610cc1565b905094509492505050565b610dc4610a82565b610e04576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610e0d81611264565b50565b600080866001600160a01b0316866001600160a01b03161415610e34575083610e5f565b600080610e4189896106f4565b9092509050610e5a81610636898563ffffffff610f2816565b925050505b6000610e8e610e8168056bc75e2d63100000610636858863ffffffff610f2816565b839063ffffffff61130416565b9050808511610e9e576000610ea2565b8085035b98975050505050505050565b600080826001600160a01b0316846001600160a01b031614610f15576000610ed58561135e565b90506000610ee28561135e565b9050610f008161063684670de0b6b3a764000063ffffffff610f2816565b9350610f0c8686611005565b92505050610754565b50670de0b6b3a764000093849350915050565b600082610f37575060006109da565b82820282848281610f4457fe5b04146109d75760405162461bcd60e51b81526004018080602001828103825260218152602001806115d96021913960400191505060405180910390fd5b60006109d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114b6565b60006109d783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611558565b6000816001600160a01b0316836001600160a01b031614156110305750670de0b6b3a76400006109da565b6001600160a01b038316600090815260026020526040902054806110b957836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d60208110156110b157600080fd5b505160ff1690505b6001600160a01b0383166000908152600260205260409020548061114257836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561111057600080fd5b505afa158015611124573d6000803e3d6000fd5b505050506040513d602081101561113a57600080fd5b505160ff1690505b818110611162576111566012838303610fc3565b600a0a925050506109da565b6111566012828403611304565b3390565b6001600081815260209182527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54604080516350d25bcd60e01b8152905192936001600160a01b03909216926350d25bcd92600480840193919291829003018186803b1580156111e257600080fd5b505afa1580156111f6573d6000803e3d6000fd5b505050506040513d602081101561120c57600080fd5b5051905080158015906112215750608081901c155b610a7f576040805162461bcd60e51b815260206004820152600f60248201526e33b0b990383934b1b29032b93937b960891b604482015290519081900360640190fd5b6001600160a01b0381166112a95760405162461bcd60e51b81526004018080602001828103825260268152602001806115b36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156109d7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146114a7576001600160a01b0380831660009081526001602052604090205416806113ea576040805162461bcd60e51b81526020600482015260166024820152751d5b9cdd5c1c1bdc9d1959081c1c9a58d9481999595960521b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561142357600080fd5b505afa158015611437573d6000803e3d6000fd5b505050506040513d602081101561144d57600080fd5b5051915081158015906114625750608082901c155b6114a1576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b50610b8e565b50670de0b6b3a7640000919050565b600081836115425760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115075781810151838201526020016114ef565b50505050905090810190601f1680156115345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161154e57fe5b0495945050505050565b600081848411156115aa5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115075781810151838201526020016114ef565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158206ad42dbc23eafadb5c5d3e42cfc73514a135994474251f7ceaa492b7f9c1af4d64736f6c63430005110032
Deployed Bytecode Sourcemap
11116:10815:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11116:10815:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13074:1094;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;13074:1094:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11848:322;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11848:322:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17531:484;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17531:484:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11484:54;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11484:54:0;-1:-1:-1;;;;;11484:54:0;;:::i;:::-;;;;-1:-1:-1;;;;;11484:54:0;;;;;;;;;;;;;;16297:1226;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16297:1226:0;;;;;;;;;;;;;;;;;;;;;;:::i;10930:86::-;;;:::i;10738:93::-;;;:::i;18771:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18771:334:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18771:334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18771:334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18771:334:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18771:334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18771:334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;18771:334:0;;-1:-1:-1;18771:334:0;-1:-1:-1;18771:334:0;:::i;:::-;;12178:284;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12178:284:0;;;;;;;;;;:::i;19360:244::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19360:244:0;;;;:::i;2140:79::-;;;:::i;2486:94::-;;;:::i;18088:632::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18088:632:0;-1:-1:-1;;;;;18088:632:0;;:::i;19113:239::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19113:239:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;19113:239:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19113:239:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;19113:239:0;;-1:-1:-1;19113:239:0;-1:-1:-1;19113:239:0;:::i;10838:85::-;;;:::i;14176:525::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14176:525:0;;;;;;;;:::i;12595:471::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12595:471:0;;;;;;;;;;;;;;;;;:::i;11571:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11571:44:0;-1:-1:-1;;;;;11571:44:0;;:::i;11670:39::-;;;:::i;15717:572::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;15717:572:0;;;;;;;;;;;;;;;;;;;;;;:::i;2735:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2735:109:0;-1:-1:-1;;;;;2735:109:0;;:::i;14709:1000::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;14709:1000:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13074:1094::-;13358:19;;13303:28;;13358:19;;13357:20;13349:50;;;;;-1:-1:-1;;;13349:50:0;;;;;;;;;;;;-1:-1:-1;;;13349:50:0;;;;;;;;;;;;;;;13411:12;13425:17;13446:71;13471:11;13497:9;13446:10;:71::i;:::-;13410:107;;-1:-1:-1;13410:107:0;-1:-1:-1;13537:66:0;13410:107;13537:37;13410:107;10389:6;13537:37;:22;:37;:::i;:::-;:55;:66;:55;:66;:::i;:::-;13530:73;-1:-1:-1;13639:75:0;13701:12;13639:43;:10;10389:6;13639:43;:28;:43;:::i;:75::-;13616:98;;13727:19;13772:4;13749:20;:27;:113;;13842:20;13835:4;:27;13749:113;;;13815:4;13792:20;:27;13749:113;13727:135;-1:-1:-1;13879:16:0;;13875:286;;13926:100;14005:20;13926:56;:11;10452:6;13926:56;:33;:56;:::i;:100::-;13912:114;;14084:11;14069;:26;;14043:106;;;;;-1:-1:-1;;;14043:106:0;;;;;;;;;;;;-1:-1:-1;;;14043:106:0;;;;;;;;;;;;;;;13074:1094;;;;;;;;;;:::o;11848:322::-;12032:19;;11974:12;;;;12032:19;;12031:20;12023:50;;;;;-1:-1:-1;;;12023:50:0;;;;;;;;;;;;-1:-1:-1;;;12023:50:0;;;;;;;;;;;;;;;12091:71;12116:11;12142:9;12091:10;:71::i;:::-;12084:78;;;;11848:322;;;;;;:::o;17531:484::-;17767:4;17790:21;17816:137;17847:9;17871:15;17901:10;17926:16;17816;:137::i;:::-;-1:-1:-1;;;;17973:34:0;;17531:484;-1:-1:-1;;;;;;17531:484:0:o;11484:54::-;;;;;;;;;;;;-1:-1:-1;;;;;11484:54:0;;:::o;16297:1226::-;16498:21;16521:28;16567:30;16631:9;-1:-1:-1;;;;;16612:28:0;:15;-1:-1:-1;;;;;16612:28:0;;16608:657;;;-1:-1:-1;10389:6:0;;-1:-1:-1;16682:16:0;16608:657;;;16782:33;16882:86;16910:15;16944:9;16882;:86::i;:::-;16830:138;;-1:-1:-1;16830:138:0;-1:-1:-1;17008:106:0;16830:138;17008:57;16830:138;10389:6;17008:57;:42;:57;:::i;:106::-;16985:129;-1:-1:-1;17156:97:0;10389:6;17156:60;:16;16985:129;17156:60;:38;:60;:::i;:97::-;17131:122;;16608:657;;17281:15;;;;;:55;;;17326:10;17300:22;:36;;17281:55;17277:239;;;17369:135;17493:10;17369:101;10452:6;17369:56;:22;17493:10;17369:56;:44;:56;:::i;:::-;:78;:101;:78;:101;:::i;:135::-;17353:151;;17277:239;16297:1226;;;;;;;;:::o;10930:86::-;10974:42;10930:86;:::o;10738:93::-;10788:42;10738:93;:::o;18771:334::-;2352:9;:7;:9::i;:::-;2344:34;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;;;;18933:29;;;18925:56;;;;;-1:-1:-1;;;18925:56:0;;;;;;;;;;;;-1:-1:-1;;;18925:56:0;;;;;;;;;;;;;;;18999:9;18994:104;19014:17;;;18994:104;;;19078:5;;19084:1;19078:8;;;;;;;;;;;;;-1:-1:-1;;;;;19078:8:0;19053:11;:22;19065:6;;19072:1;19065:9;;;;;;;-1:-1:-1;;;;;19065:9:0;;;;;;;;;;;19053:22;;;;;;;;;;;;-1:-1:-1;19053:22:0;:33;;;;;;-1:-1:-1;;;;;;19053:33:0;;;;;;;;;;-1:-1:-1;19053:33:0;19033:3;18994:104;;;;18771:334;;;;:::o;12178:284::-;12309:7;12356:9;-1:-1:-1;;;;;12341:24:0;:11;-1:-1:-1;;;;;12341:24:0;;;:113;;10389:6;12341:113;;;12381:44;12402:11;12415:9;12381:20;:44::i;:::-;12334:120;;12178:284;;;;;:::o;19360:244::-;2352:9;:7;:9::i;:::-;2344:34;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;;;;19470:19;:30;;;;;-1:-1:-1;;19470:30:0;;;;;;;;19518:78;;;;;;;19552:10;;19518:78;;;;;;;;;;19360:244;:::o;2140:79::-;2178:7;2205:6;-1:-1:-1;;;;;2205:6:0;2140:79;;:::o;2486:94::-;2526:4;2566:6;;-1:-1:-1;;;;;2566:6:0;2550:12;:10;:12::i;:::-;-1:-1:-1;;;;;2550:22:0;;2543:29;;2486:94;:::o;18088:632::-;18191:7;;18235:67;18272:29;18235:18;:16;:18::i;:67::-;18216:86;-1:-1:-1;;;;;;18317:30:0;;10788:42;18317:30;;;;:56;;-1:-1:-1;;;;;;18351:22:0;;;;18317:56;18313:374;;;18399:19;;;;18398:20;18390:50;;;;;-1:-1:-1;;;18390:50:0;;;;;;;;;;;;-1:-1:-1;;;18390:50:0;;;;;;;;;;;;;;;18456:12;18470:17;18491:89;10788:42;18557:8;18491:10;:89::i;:::-;18455:125;;-1:-1:-1;18455:125:0;-1:-1:-1;18606:69:0;18455:125;18606:36;:8;18455:125;18606:36;:30;:36;:::i;:69::-;18595:80;;18313:374;;;18704:8;-1:-1:-1;18088:632:0;;;;:::o;19113:239::-;2352:9;:7;:9::i;:::-;2344:34;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;;;;19228:9;19223:122;19243:17;;;19223:122;;;19313:6;;19320:1;19313:9;;;;;;;;;;;;;-1:-1:-1;;;;;19313:9:0;-1:-1:-1;;;;;19313:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19313:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19313:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19313:20:0;19282:51;;:8;:28;19299:6;;19306:1;19299:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19299:9:0;19282:28;;-1:-1:-1;19282:28:0;;;;;;;;-1:-1:-1;19282:28:0;:51;19262:3;;19223:122;;;;19113:239;;:::o;10838:85::-;10881:42;10838:85;:::o;14176:525::-;14302:17;-1:-1:-1;;;;;14341:34:0;;10788:42;14341:34;14337:357;;;-1:-1:-1;14404:6:0;14337:357;;;14444:14;14460:22;14486:92;14514:12;10788:42;14486:9;:92::i;:::-;14443:135;;-1:-1:-1;14443:135:0;-1:-1:-1;14605:77:0;14443:135;14605:39;:6;14443:135;14605:39;:28;:39;:::i;:77::-;14593:89;14176:525;-1:-1:-1;;;;;14176:525:0:o;12595:471::-;12794:19;;12754:18;;12794:19;;12790:60;;;-1:-1:-1;12837:1:0;12830:8;;12790:60;12861:12;12875:17;12896:71;12921:11;12947:9;12896:10;:71::i;:::-;12860:107;;-1:-1:-1;12860:107:0;-1:-1:-1;12993:65:0;12860:107;12993:36;:12;12860:107;12993:36;:30;:36;:::i;:65::-;12980:78;;12595:471;;;;;;;;:::o;11571:44::-;;;;;;;;;;;;;:::o;11670:39::-;;;;;;:::o;15717:572::-;15935:21;15958:29;16024:137;16055:9;16079:15;16109:10;16134:16;16024;:137::i;:::-;-1:-1:-1;16005:156:0;-1:-1:-1;16198:83:0;16224:15;16254:16;16198:11;:83::i;:::-;16174:107;;15717:572;;;;;;;:::o;2735:109::-;2352:9;:7;:9::i;:::-;2344:34;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;-1:-1:-1;;;2344:34:0;;;;;;;;;;;;;;;2808:28;2827:8;2808:18;:28::i;:::-;2735:109;:::o;14709:1000::-;14933:19;14970:30;15034:9;-1:-1:-1;;;;;15015:28:0;:15;-1:-1:-1;;;;;15015:28:0;;15011:362;;;-1:-1:-1;15085:10:0;15011:362;;;15129:12;15143:17;15164:86;15192:9;15220:15;15164:9;:86::i;:::-;15128:122;;-1:-1:-1;15128:122:0;-1:-1:-1;15290:71:0;15128:122;15290:38;:10;15128:122;15290:38;:32;:38;:::i;:71::-;15265:96;;15011:362;;;15385:16;15404:183;15463:105;10452:6;15463:56;:22;15512:6;15463:56;:48;:56;:::i;:105::-;15404:22;;:183;:40;:183;:::i;:::-;15385:202;;15633:8;15614:16;:27;:87;;15700:1;15614:87;;;15676:8;15657:16;:27;15614:87;15600:101;14709:1000;-1:-1:-1;;;;;;;;14709:1000:0:o;19656:618::-;19785:12;19799:17;19853:9;-1:-1:-1;;;;;19838:24:0;:11;-1:-1:-1;;;;;19838:24:0;;19834:433;;19879:18;19900:27;19915:11;19900:14;:27::i;:::-;19879:48;;19942:16;19961:25;19976:9;19961:14;:25::i;:::-;19942:44;-1:-1:-1;20010:79:0;19942:44;20010:47;:10;10389:6;20010:47;:32;:47;:::i;:79::-;20003:86;;20118:44;20139:11;20152:9;20118:20;:44::i;:::-;20106:56;;19834:433;;;;;-1:-1:-1;10389:6:0;;;;-1:-1:-1;19656:618:0;-1:-1:-1;;19656:618:0:o;5390:471::-;5448:7;5693:6;5689:47;;-1:-1:-1;5723:1:0;5716:8;;5689:47;5760:5;;;5764:1;5760;:5;:1;5784:5;;;;;:10;5776:56;;;;-1:-1:-1;;;5776:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6329:132;6387:7;6414:39;6418:1;6421;6414:39;;;;;;;;;;;;;;;;;:3;:39::i;4474:136::-;4532:7;4559:43;4563:1;4566;4559:43;;;;;;;;;;;;;;;;;:3;:43::i;20779:870::-;20917:7;20961:9;-1:-1:-1;;;;;20946:24:0;:11;-1:-1:-1;;;;;20946:24:0;;20942:700;;;-1:-1:-1;10389:6:0;20987:20;;20942:700;-1:-1:-1;;;;;21070:21:0;;21040:27;21070:21;;;:8;:21;;;;;;21110:24;21106:99;;21182:11;-1:-1:-1;;;;;21175:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21175:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21175:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21175:30:0;21153:52;;;-1:-1:-1;21106:99:0;-1:-1:-1;;;;;21250:19:0;;21222:25;21250:19;;;:8;:19;;;;;;21288:22;21284:93;;21356:9;-1:-1:-1;;;;;21349:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21349:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21349:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21349:28:0;21329:48;;;-1:-1:-1;21284:93:0;21419:19;21398:17;:40;21394:236;;21469:55;21482:2;21504:19;21486:17;:37;21469:12;:55::i;:::-;21464:2;:61;21457:68;;;;;;21394:236;21574:55;21587:2;21611:17;21591:19;:37;21574:12;:55::i;931:98::-;1011:10;931:98;:::o;21657:271::-;21788:11;21735:16;21788:38;;;;;;;;;;:53;;-1:-1:-1;;;21788:53:0;;;;21735:16;;-1:-1:-1;;;;;21788:38:0;;;;:51;;:53;;;;;:38;;:53;;;;;;:38;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;21788:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21788:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21788:53:0;;-1:-1:-1;21861:13:0;;;;;:39;;-1:-1:-1;21891:3:0;21879:15;;;21878:22;21861:39;21853:67;;;;;-1:-1:-1;;;21853:67:0;;;;;;;;;;;;-1:-1:-1;;;21853:67:0;;;;;;;;;;;;;;2950:229;-1:-1:-1;;;;;3024:22:0;;3016:73;;;;-1:-1:-1;;;3016:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3126:6;;;3105:38;;-1:-1:-1;;;;;3105:38:0;;;;3126:6;;;3105:38;;;3154:6;:17;;-1:-1:-1;;;;;;3154:17:0;-1:-1:-1;;;;;3154:17:0;;;;;;;;;;2950:229::o;4018:181::-;4076:7;4108:5;;;4132:6;;;;4124:46;;;;;-1:-1:-1;;;4124:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20282:489;20381:12;-1:-1:-1;;;;;20415:27:0;;10788:42;20415:27;20411:353;;-1:-1:-1;;;;;20482:18:0;;;20459:20;20482:18;;;:11;:18;;;;;;;20523:28;20515:63;;;;;-1:-1:-1;;;20515:63:0;;;;;;;;;;;;-1:-1:-1;;;20515:63:0;;;;;;;;;;;;;;;20608:5;-1:-1:-1;;;;;20608:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20608:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20608:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20608:20:0;;-1:-1:-1;20652:9:0;;;;;:31;;-1:-1:-1;20674:3:0;20666:11;;;20665:18;20652:31;20644:55;;;;;-1:-1:-1;;;20644:55:0;;;;;;;;;;;;-1:-1:-1;;;20644:55:0;;;;;;;;;;;;;;;20411:353;;;;-1:-1:-1;10389:6:0;20282:489;;;:::o;6991:346::-;7077:7;7180:12;7172:6;7164:29;;;;-1:-1:-1;;;7164:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7164:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:9;7220:1;7216;:5;;;;;;;6991:346;-1:-1:-1;;;;;6991:346:0:o;4947:192::-;5033:7;5069:12;5061:6;;;;5053:29;;;;-1:-1:-1;;;5053:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5053:29:0;-1:-1:-1;;;5105:5:0;;;4947:192::o
Swarm Source
bzzr://6ad42dbc23eafadb5c5d3e42cfc73514a135994474251f7ceaa492b7f9c1af4d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.