Adjust interest rate to account for APY over-approximation
- Update interest rate on AMPL market to account for over-approximation in compounded interest computation.
- Make use of the exponential curve due to the over-approximation to set higher max APY.
In AAVEs MathUtils an over-approximation in the application of the interest rate for computing compounded interest was discovered.
In calculateCompoundedInterest method
Periodic rate (per second) is computed as:
uint256 ratePerSecond = rate / SECONDS_PER_YEAR;
in comparison to the exact computation.
The deviation in the applied interest rate causes a small over-approximation for APYs <10%, but grows exponentially as can be seen below.
|Expected APY||Effective APY||Expected daily rate||Effective daily rate|
This difference is especially noticeable in the AMPL market, where the configured interest rate can go up to 10,002% at max utilization.
The AAVE Genesis team has been made aware and they will publish more guidance on the discrepancy.
As mentioned in AIP-26, a nonlinear - logistic or exponential - interest curve is more suited for AMPL's market and potentially other assets on AAVE's platform.
The over-approximation mentioned above results in an exponential curve which allows for defining a more suitable interest curve for AMPL. We propose the following parameters, which produces the curve below.
- Optimal utilization = 80%
- Base rate = 1%
- Slope1 = 2%
- Slope2 = 750%
APY table above 80% Utilization:
The part of the curve under 80% Utilization:
- Accounting for the over-approximation of the existing Slope2=10,000% interest curve requires reducing the slope2 parameter.
- Taking advantage of the exponential curve allows for: a. Setting a higher optimal utilization rate. b. Setting a higher maximum APY to reduce the potential for utilization being at 100% for extended periods without creating a too steep of an interest rate increase right above the optimal utilization rate.
A deployment of the existing implementation of the Interest Strategy will be used, with the following parameters:
optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(), baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(), variableRateSlope1: new BigNumber(0.02).multipliedBy(oneRay).toFixed(), variableRateSlope2: new BigNumber(7.5).multipliedBy(oneRay).toFixed(),
Copyright and related rights waived via CC0.
Your voting info
Top 10 addresses