Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 12648920 | 1171 days ago | IN | 0 ETH | 0.02485495 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
YearnPricer
Compiler Version
v0.6.10+commit.00c0fcaf
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.10; import {OracleInterface} from "../interfaces/OracleInterface.sol"; import {OpynPricerInterface} from "../interfaces/OpynPricerInterface.sol"; import {YearnVaultInterface} from "../interfaces/YearnVaultInterface.sol"; import {ERC20Interface} from "../interfaces/ERC20Interface.sol"; import {SafeMath} from "../packages/oz/SafeMath.sol"; /** * @notice A Pricer contract for a Yearn yToken */ contract YearnPricer is OpynPricerInterface { using SafeMath for uint256; /// @notice opyn oracle address OracleInterface public oracle; /// @notice yToken that this pricer will a get price for YearnVaultInterface public yToken; /// @notice underlying asset for this yToken ERC20Interface public underlying; /** * @param _yToken yToken asset * @param _underlying underlying asset for this yToken * @param _oracle Opyn Oracle contract address */ constructor( address _yToken, address _underlying, address _oracle ) public { require(_yToken != address(0), "YearnPricer: yToken address can not be 0"); require(_underlying != address(0), "YearnPricer: underlying address can not be 0"); require(_oracle != address(0), "YearnPricer: oracle address can not be 0"); yToken = YearnVaultInterface(_yToken); underlying = ERC20Interface(_underlying); oracle = OracleInterface(_oracle); } /** * @notice get the live price for the asset * @dev overrides the getPrice function in OpynPricerInterface * @return price of 1e8 yToken in USD, scaled by 1e8 */ function getPrice() external override view returns (uint256) { uint256 underlyingPrice = oracle.getPrice(address(underlying)); require(underlyingPrice > 0, "YearnPricer: underlying price is 0"); return _underlyingPriceToYtokenPrice(underlyingPrice); } /** * @notice set the expiry price in the oracle * @dev requires that the underlying price has been set before setting a yToken price * @param _expiryTimestamp expiry to set a price for */ function setExpiryPriceInOracle(uint256 _expiryTimestamp) external { (uint256 underlyingPriceExpiry, ) = oracle.getExpiryPrice(address(underlying), _expiryTimestamp); require(underlyingPriceExpiry > 0, "YearnPricer: underlying price not set yet"); uint256 yTokenPrice = _underlyingPriceToYtokenPrice(underlyingPriceExpiry); oracle.setExpiryPrice(address(yToken), _expiryTimestamp, yTokenPrice); } /** * @dev convert underlying price to yToken price with the yToken to underlying exchange rate * @param _underlyingPrice price of 1 underlying token (ie 1e6 USDC, 1e18 WETH) in USD, scaled by 1e8 * @return price of 1e8 yToken in USD, scaled by 1e8 */ function _underlyingPriceToYtokenPrice(uint256 _underlyingPrice) private view returns (uint256) { uint256 pricePerShare = yToken.pricePerShare(); uint8 underlyingDecimals = underlying.decimals(); return pricePerShare.mul(_underlyingPrice).div(10**uint256(underlyingDecimals)); } function getHistoricalPrice(uint80 _roundId) external override view returns (uint256, uint256) { revert("YearnPricer: Deprecated"); } }
/** * SPDX-License-Identifier: UNLICENSED */ pragma solidity 0.6.10; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface ERC20Interface { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); function decimals() external view returns (uint8); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.10; interface OpynPricerInterface { function getPrice() external view returns (uint256); function getHistoricalPrice(uint80 _roundId) external view returns (uint256, uint256); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.10; interface OracleInterface { function isLockingPeriodOver(address _asset, uint256 _expiryTimestamp) external view returns (bool); function isDisputePeriodOver(address _asset, uint256 _expiryTimestamp) external view returns (bool); function getExpiryPrice(address _asset, uint256 _expiryTimestamp) external view returns (uint256, bool); function getDisputer() external view returns (address); function getPricer(address _asset) external view returns (address); function getPrice(address _asset) external view returns (uint256); function getPricerLockingPeriod(address _pricer) external view returns (uint256); function getPricerDisputePeriod(address _pricer) external view returns (uint256); function getChainlinkRoundData(address _asset, uint80 _roundId) external view returns (uint256, uint256); // Non-view function function setAssetPricer(address _asset, address _pricer) external; function setLockingPeriod(address _pricer, uint256 _lockingPeriod) external; function setDisputePeriod(address _pricer, uint256 _disputePeriod) external; function setExpiryPrice( address _asset, uint256 _expiryTimestamp, uint256 _price ) external; function disputeExpiryPrice( address _asset, uint256 _expiryTimestamp, uint256 _price ) external; function setDisputer(address _disputer) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.6.10; interface YearnVaultInterface { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function pricePerShare() external view returns (uint256); function deposit(uint256) external; function withdraw(uint256) external; }
// SPDX-License-Identifier: MIT // openzeppelin-contracts v3.1.0 /* solhint-disable */ pragma solidity ^0.6.0; /** * @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. */ 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. */ 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 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. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "libraries": { "": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_yToken","type":"address"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getHistoricalPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract OracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiryTimestamp","type":"uint256"}],"name":"setExpiryPriceInOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"contract ERC20Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yToken","outputs":[{"internalType":"contract YearnVaultInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516108893803806108898339818101604052606081101561003357600080fd5b50805160208201516040909201519091906001600160a01b0383166100895760405162461bcd60e51b815260040180806020018281038252602881526020018061080d6028913960400191505060405180910390fd5b6001600160a01b0382166100ce5760405162461bcd60e51b815260040180806020018281038252602c815260200180610835602c913960400191505060405180910390fd5b6001600160a01b0381166101135760405162461bcd60e51b81526004018080602001828103825260288152602001806108616028913960400191505060405180910390fd5b600180546001600160a01b039485166001600160a01b0319918216179091556002805493851693821693909317909255600080549190931691161790556106ae8061015f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806349bfcca1146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610288565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff16610355565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806102015760405162461bcd60e51b81526004018080602001828103825260298152602001806106506029913960400191505060405180910390fd5b600061020c826103a7565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102dc57600080fd5b505afa1580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b50519050806103465760405162461bcd60e51b815260040180806020018281038252602281526020018061060d6022913960400191505060405180910390fd5b61034f816103a7565b91505090565b6040805162461bcd60e51b815260206004820152601760248201527f596561726e5072696365723a20446570726563617465640000000000000000006044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f857600080fd5b505afa15801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b50516002546040805163313ce56760e01b815290519293506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b15801561046f57600080fd5b505afa158015610483573d6000803e3d6000fd5b505050506040513d602081101561049957600080fd5b505190506104c360ff8216600a0a6104b7848763ffffffff6104cb16565b9063ffffffff61052d16565b949350505050565b6000826104da57506000610527565b828202828482816104e757fe5b04146105245760405162461bcd60e51b815260040180806020018281038252602181526020018061062f6021913960400191505060405180910390fd5b90505b92915050565b600061052483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105bb5781810151838201526020016105a3565b50505050905090810190601f1680156105e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161060257fe5b049594505050505056fe596561726e5072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596561726e5072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212200ba62c24da2d0313e512caee6daedf6abe78105e0ea0c0eaef9ebbb40a3d0ec864736f6c634300060a0033596561726e5072696365723a2079546f6b656e20616464726573732063616e206e6f742062652030596561726e5072696365723a20756e6465726c79696e6720616464726573732063616e206e6f742062652030596561726e5072696365723a206f7261636c6520616464726573732063616e206e6f7420626520300000000000000000000000005f18c75abdae578b483e5f43f12a39cf75b973a9000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c497f40d1b7db6fa5017373f1a0ec6d53126da23
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c806349bfcca1146100675780636f307dc31461008b5780637dc0d1d014610093578063963672901461009b57806398d5fdca146100ba578063eec377c0146100d4575b600080fd5b61006f610116565b604080516001600160a01b039092168252519081900360200190f35b61006f610125565b61006f610134565b6100b8600480360360208110156100b157600080fd5b5035610143565b005b6100c2610288565b60408051918252519081900360200190f35b6100fd600480360360208110156100ea57600080fd5b503569ffffffffffffffffffff16610355565b6040805192835260208301919091528051918290030190f35b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b60008054600254604080516301957f8160e01b81526001600160a01b03928316600482015260248101869052815192909316926301957f819260448083019392829003018186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60408110156101c157600080fd5b50519050806102015760405162461bcd60e51b81526004018080602001828103825260298152602001806106506029913960400191505060405180910390fd5b600061020c826103a7565b600080546001546040805163ee53140960e01b81526001600160a01b0392831660048201526024810189905260448101869052905194955091169263ee5314099260648084019391929182900301818387803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b50505050505050565b60008054600254604080516341976e0960e01b81526001600160a01b0392831660048201529051849392909216916341976e0991602480820192602092909190829003018186803b1580156102dc57600080fd5b505afa1580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b50519050806103465760405162461bcd60e51b815260040180806020018281038252602281526020018061060d6022913960400191505060405180910390fd5b61034f816103a7565b91505090565b6040805162461bcd60e51b815260206004820152601760248201527f596561726e5072696365723a20446570726563617465640000000000000000006044820152905160009182919081900360640190fd5b600080600160009054906101000a90046001600160a01b03166001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156103f857600080fd5b505afa15801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b50516002546040805163313ce56760e01b815290519293506000926001600160a01b039092169163313ce56791600480820192602092909190829003018186803b15801561046f57600080fd5b505afa158015610483573d6000803e3d6000fd5b505050506040513d602081101561049957600080fd5b505190506104c360ff8216600a0a6104b7848763ffffffff6104cb16565b9063ffffffff61052d16565b949350505050565b6000826104da57506000610527565b828202828482816104e757fe5b04146105245760405162461bcd60e51b815260040180806020018281038252602181526020018061062f6021913960400191505060405180910390fd5b90505b92915050565b600061052483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105bb5781810151838201526020016105a3565b50505050905090810190601f1680156105e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161060257fe5b049594505050505056fe596561726e5072696365723a20756e6465726c79696e672070726963652069732030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596561726e5072696365723a20756e6465726c79696e67207072696365206e6f742073657420796574a26469706673582212200ba62c24da2d0313e512caee6daedf6abe78105e0ea0c0eaef9ebbb40a3d0ec864736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f18c75abdae578b483e5f43f12a39cf75b973a9000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c497f40d1b7db6fa5017373f1a0ec6d53126da23
-----Decoded View---------------
Arg [0] : _yToken (address): 0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9
Arg [1] : _underlying (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _oracle (address): 0xc497f40D1B7db6FA5017373f1a0Ec6d53126Da23
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f18c75abdae578b483e5f43f12a39cf75b973a9
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 000000000000000000000000c497f40d1b7db6fa5017373f1a0ec6d53126da23
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.