KVORUM
aaveSource: Aave governor v2 · #36

Adjust interest rate to account for APY over-approximation

executedSep 16, 2021, 07:40 PM UTCby320x32a9…fb2c

01Summary

AISummary by Kvorumclaude-haiku-4-5

Update AMPL market interest rate parameters (optimal utilization to 80%, base rate to 1%, slope1 to 2%, slope2 to 750%) to account for an over-approximation in AAVE's interest computation formula that causes exponential discrepancies at high APYs. The new curve leverages this over-approximation to create more suitable borrowing incentives for AMPL.

Type
parameter change

Key changes

  • Optimal utilization rate changed to 80% (from previous level supporting up to 10,002% max interest)(high)
  • Base variable borrow rate set to 0%(medium)
  • Variable rate slope1 set to 2%(medium)
  • Variable rate slope2 reduced to 750% (from 10,002%) to account for over-approximation in compounded interest calculation(high)
  • Interest rate curve restructured to use exponential growth above optimal utilization instead of linear(high)

Notable concerns

  • The existing interest computation in AAVE's MathUtils contains an over-approximation that causes exponential deviation at high APYs (e.g., 638.91% effective vs 200% expected at 200% APY)
  • AMPL market previously allowed rates up to 10,002% which created extreme over-approximation effects
  • New curve creates extremely steep rate increases above 80% utilization (e.g., 186,210% APY at 100% utilization), which may create execution/liquidation risks
  • AAVE Genesis team awareness of the discrepancy noted but no definitive guidance published yet
Contracts0x17ec6a7044c5b665d304126a96d8affca440715c
Generated by Kvorum
model: claude-haiku-4-5
provider: anthropic
profile: anthropic-fast-v1
prompt: v1.0
generated: 2mo ago
Read the description ↗

02Description

393 words

Simple Summary

  • 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.

Motivation

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.

|281x35

derived from:

|269x48

The deviation in the applied interest rate causes a small over-approximation for APYs <10%, but grows exponentially as can be seen below.

Expected APYEffective APYExpected daily rateEffective daily rate
4.00%4.08%0.01%0.01%
5.00%5.13%0.01%0.01%
10.00%10.52%0.03%0.03%
50.00%64.87%0.11%0.14%
100.00%171.83%0.19%0.27%
200.00%638.91%0.31%0.55%
1000.00%2202543.09%0.68%2.78%
10000.00%2.69E+43%1.30%31.52%

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.

Specification

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%

|624x384

APY table above 80% Utilization:
UtilizationAPY
80.00%3.05%
81.00%49.93%
82.00%118.15%
83.00%217.40%
84.00%361.82%
85.00%571.94%
86.00%877.67%
87.00%1322.50%
88.00%1969.72%
89.00%2911.43%
90.00%4281.60%
91.00%6275.19%
92.00%9175.85%
93.00%13396.29%
94.00%19536.98%
95.00%28471.63%
96.00%41471.48%
97.00%60386.14%
98.00%87906.81%
99.00%127949.14%
100.00%186210.38%
The part of the curve under 80% Utilization:

|624x325

Rationale

  1. Accounting for the over-approximation of the existing Slope2=10,000% interest curve requires reducing the slope2 parameter.
  2. 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.

Implementation

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(),

https://etherscan.io/address/0x84d1FaD9559b8AC1Fda17d073B8542c8Fb6986dd#readContract

Copyright

Copyright and related rights waived via CC0.

03Mismatch analysis

AIMismatch analysis by Kvorumlow confidenceclaude-sonnet-5
Consistent

The decoded on-chain action is a single generic execute() (fallback) call to what appears to be an Aave governance executor/payload contract, with no decoded arguments. This is typical for Aave AIPs, where the actual logic (deploying a new interest rate strategy contract and setting it on the AMPL reserve) is embedded in the payload contract's bytecode rather than in the governance calldata. Because no parameters are exposed in the decoded action, it is not possible to directly verify that the on-chain execution matches the specific numeric parameters described (optimal utilization 80%, base rate 0-1%, slope1 2%, slope2 750%). I found one internal inconsistency within the description itself: the Specification section says 'Base rate = 1%' while the Implementation section codes baseVariableBorrowRate as 0. This is a minor issue but cannot be confirmed against the calldata due to lack of visibility. Given the opacity of the calldata, confidence in this comparison is low, and I found no evidence of a mismatch between the stated intent and the single decoded action (which is consistent with executing a governance-approved parameter update). No omissions, extra claims, or target mismatches are identifiable from the available calldata.

Discrepancies

  • lowmisleading phrasing

    The proposal's own Specification section states 'Base rate = 1%' while the Implementation section sets baseVariableBorrowRate to 0 (0 * oneRay). This is an internal inconsistency in the description, though it cannot be checked against the calldata since the on-chain action is an opaque execute() call with no visible parameters.

    “Base rate = 1%”

Generated by Kvorum
model: claude-sonnet-5
provider: anthropic
profile: anthropic-strong-v1
prompt: v1.0
generated: 2mo ago
Review the decoded actions ↗

04Actions

1 total
#0fallback()chain 0x1
Target
0x17ec…715c
Value
0 wei
Function
fallback()
Arguments
{}
Calldata

05Tally

Summed from votes

Voters0
VP participating0
Outcome (current)—
Current support—

06Voters

0 total

No votes recorded yet.

07Forum

No forum thread is confidently linked to this proposal.