In order to execute the calculations outlined above, accessing onchain data is essential. Our method of obtaining a vault's share price depends on the type of vault, as specified below.
ERC-4626 vaults
In the case of ERC-4626 vaults, we can call the totalSupply and totalAssets smart contract functions to calculate share price.
totalSupply = total shares
totalAssets = total shares value
Non ERC-4626 vaults
If a vault is not ERC-4626 compliant, proxies for the above functions can usually be found in the following functions:
mint
deposit
burn
redeem
You can see an example of this in the code snippets below.
The functions provided are typical examples and not an exhaustive list; some vaults may require individual solutions.
Liquid Staking Tokens (LSTs and LRTs)
To calculate APY for LSTs (e.g., Lido) and other vaults that periodically update their earnings (e.g., Yearn vaults), we use the totalSupply and getEthValue(totalSupply)functions.
totalSupply = total shares
getEthValue(totalSupply)= total shares value
One challenge we face is accounting for the irregular intervals at which some vaults update their earnings — leading to sudden and significant fluctuations in APY. Understanding this nuance is essential for accurately interpreting discrepancies on vaults.fyi.
Rebasing supply vaults
Vaults that gradually increase the user's LP token balance, such as those on Aave, are known as rebasing supply vaults. We calculate the share price for rebasing supply vaults with the totalSupply and scaledTotalSupply functions.
scaledTotalSupply = total shares
totalSupply = total shares value
Staking mechanism vaults
Vaults that do not compound automatically (e.g., StakeWise) are known as staking mechanism vaults. These vaults do not compound interest automatically, instead making users periodically harvest and redeposit it to maximize yield. Calculating returns in such scenarios can be complex, as the total shares:value ratio does not reflect share price accurately.
Instead, we can ascertain the actual share price with the following formulas:
total principal value=sETH2.totalSupply()total rewards value=rETH2.totalSupply()TVL=total principal value+total rewards valueshare price=1+rETH2.rewardPerToken()totalSupply=share priceTVL
These formulas result in a simulated calculation of totalSupply. It is not directly fetched from the blockchain.
Real World Assets (RWAs)
RWAs on vaults.fyi are ERC-20 tokens that reflect investments in offchain financial assets. To assess the yield of RWAs we use:
The totalSupply function to calculate total shares.
The RWAOracle.price function to fetch share price.
The StablecoinOracle.price function to fetch the underlying asset's (i.e, a stablecoin) price.
These functions are used in the following formulas to calculate yield:
total sharesshare asset priceunderlying asset pricetotal shares in USDtotal shares in assettotal shares value=totalSupply()=RWAOracle.price()=StablecoinOracle.price()=total shares×share asset price=underlying asset pricetotal shares in USD=total shares in asset