YieldOracle
Inherits: IYieldOracle, Ownable2Step
An on-chain oracle that provides the APY for each collateral type.
This contract stores a history of the exchange rates of each collateral for the past LOOK_BACK
days. Every time that updateAll()
is called, it will update the value at currentIndex
in the historicalExchangeRates
with the current exchange rate and it will also calculate the APY for each collateral type based on the data currently in the buffer. The APY is calculated by taking the difference between the new element being added and the element being replaced. This provides a growth amount of LOOK_BACK
days. This value is then projected out to a year. Similar to the InterestRate
module, as the amount of collaterals added to the market increases, storage reads during interest accrual can become prohibitively expensive. Therefore, this contract is heavily optimized at the unfortunate cost of code-complexity.
State Variables
apys
historicalExchangeRates
ADDRESS0
ADDRESS1
ADDRESS2
ionPool
currentIndex
lastUpdated
Functions
constructor
Creates a new YieldOracle
instance.
Parameters
_historicalExchangeRates
uint64[ILK_COUNT][LOOK_BACK]
An initial set of values for the historical exchange rates matrix.
_weEth
address
Address of the weETH contract.
_stader
address
Address of the Stader deposit contract.
_swell
address
Address of the Swell Eth contract.
owner
address
Admin address.
updateIonPool
Updates the IonPool
reference.
Parameters
_ionPool
IonPool
pool instance
updateAll
Every update should also accrue interest on IonPool
. This is because an update to the apy changes interest rates which means the previous interest rate must be accrued, or else its effect will be lost. NOTE: This contract should continue to function as normal even if IonPool
is paused.
_updateAll
Handles the logic for updating the APYs and the historical exchange rates matrix. If the last update was less than UPDATE_LOCK_LENGTH
seconds ago, then this function will revert. If APY is ever negative, then it will simply be set to 0.
_getExchangeRate
Returns the exchange rate for a given collateral.
Parameters
ilkIndex
uint256
The index of the collateral.
Returns
exchangeRate
uint64
exchangeRate