Interpreting Exchange Rates

The aToken Exchange Rate is scaled by the difference in decimals between the aToken and the underlying asset.

const oneATokenInUnderlying = exchangeRateCurrent / (1 * 10 ^ (18 + underlyingDecimals - aTokenDecimals))

Here is an example of finding the value of 1 aWETH in WETH with Web3.js JavaScript.

const aTokenDecimals = 8; // all aTokens have 8 decimal places
const underlying = new web3.eth.Contract(erc20Abi, ethAddress);
const aToken = new web3.eth.Contract(aTokenAbi, aEthAddress);
const underlyingDecimals = await underlying.methods.decimals().call();
const exchangeRateCurrent = await aToken.methods.exchangeRateCurrent().call();
const mantissa = 18 + parseInt(underlyingDecimals) - aTokenDecimals;
const oneATokenInUnderlying = exchangeRateCurrent / Math.pow(10, mantissa);
console.log('1 aWETH can be redeemed for', oneATokenInUnderlying, 'WETH');

There is no underlying contract for CORE, so to do this with aCORE, set underlyingDecimals to 18.

To find the number of underlying tokens that can be redeemed for aTokens, multiply the number of aTokens by the above value oneATokenInUnderlying.

const underlyingTokens = aTokenAmount * oneATokenInUnderlying

Last updated