APY and APR
You can query latest APY and APR on chain and subgraph
All rates queried on chain or subgraph, are expressed in RAY units i.e. 10^27.
All emissions are expressed in WAD units i.e. 10^18.
The deposit and borrow APY displayed on the Aave front-end is compounded per second.
{
reserves {
name
underlyingAsset
liquidityRate
stableBorrowRate
variableBorrowRate
aEmissionPerSecond
vEmissionPerSecond
sEmissionPerSecond
totalATokenSupply
totalCurrentVariableDebt
}
}
[, liquidityIndex, variableBorrowIndex,
currentLiquidityRate, currentVariableBorrowRate,
currentStableBorrowRate, ,
aTokenAddress, stableDebtTokenAddress,
variableDebtTokenAddress, , ] = LendingPool.getReserveData(asset.address)
// asset is the ERC20 supplied or borrowed, eg. DAI, WETH
//For stable borrows, the rate is specific to a user and can be queried through the ProtocolDataProvider contract
userStableBorrowRate = ProtocolDataProvider.getUserReserveData(asset.address, userAddress)
[,aEmissionPerSecond,] = IncentivesController.getAssetData(aTokenAddress)
[,vEmissionPerSecond,] = IncentivesController.getAssetData(variableDebtTokenAddress)
[,sEmissionPerSecond,] = IncentivesController.getAssetData(stableDebtTokenAddress)
// If the current UNIX timestamp > distributionEnd then the incentives are no longer active
distributionEnd = IncentivesController.DISTRIBUTION_END();
Calculate rates as👇🏻with
js
, python
or whatever you like 😉RAY = 10**27 // 10 to the power 27
SECONDS_PER_YEAR = 31536000
// Deposit and Borrow calculations
// APY and APR are returned here as decimals, multiply by 100 to get the percents
depositAPR = liquidityRate/RAY
variableBorrowAPR = variableBorrowRate/RAY
stableBorrowAPR = variableBorrowRate/RAY
depositAPY = ((1 + (depositAPR / SECONDS_PER_YEAR)) ^ SECONDS_PER_YEAR) - 1
variableBorrowAPY = ((1 + (variableBorrowAPR / SECONDS_PER_YEAR)) ^ SECONDS_PER_YEAR) - 1
stableBorrowAPY = ((1 + (stableBorrowAPR / SECONDS_PER_YEAR)) ^ SECONDS_PER_YEAR) - 1
// Incentives calculation
aEmissionPerYear = aEmissionPerSecond * SECONDS_PER_YEAR
vEmissionPerYear = vEmissionPerSecond * SECONDS_PER_YEAR
WEI_DECIMALS = 10**18 // All emissions are in wei units, 18 decimal places
// UNDERLYING_TOKEN_DECIMALS will be the decimals of token underlying the aToken or debtToken
// For Example, UNDERLYING_TOKEN_DECIMALS for aUSDC will be 10**6 because USDC has 6 decimals
incentiveDepositAPRPercent = 100 * (aEmissionPerYear * REWARD_PRICE_ETH * WEI_DECIMALS)/
(totalATokenSupply * TOKEN_PRICE_ETH * UNDERLYING_TOKEN_DECIMALS)
incentiveBorrowAPRPercent = 100 * (vEmissionPerYear * REWARD_PRICE_ETH * WEI_DECIMALS)/
(totalCurrentVariableDebt * TOKEN_PRICE_ETH * UNDERLYING_TOKEN_DECIMALS)
Both of these conversions take the input and ouput in decimal form. Multiply the output by 100 to get the percentage.
To convert the APR to APY compounded per second the formula is:
To convert APY compounded per second to APR the formula is:
Last modified 9d ago