[GIP-76] Modify Pools Interest rate curve to two-point model
[GIP-76] Modify Pools Interest rate curve to two-point model
Motivation
This proposal aims to change the interest rate curve (utilization curve) for lenders & borrowers. The same exact model is proposed to be used in v3 in the future (those can be considered this proposal as part of the transition to v3, the main proposals for which will be in subsequent GIPs).
The new mode should majorly improve user experience when it comes to sudden increases of rates. For example, previously, when a new Credit Account was opened or closed to utilization 1-tick, the rates would skyrocket or drop instantly. That is because the state of the curve was either cheap to borrow or insanely expensive to borrow. That made decision-making for both users confusing. With the new model, it introduces three states essentially: cheap to borrow, high but acceptable rate for borrowing, and insanely expensive to borrow.
Suggestion
As you know, interest rates in Gearbox Protocol are defined using a two-point piecewise linear function https://docs.gearbox.finance/lending-market/pools-and-apy#how-to-calculate-apy.
This function is actively used in DeFi (see Aave, Compound and other lending markets). However, like any solution, it has drawbacks. In Gearbox, the interest rates were calculated so that the utilization was close to the optimal utilization. This was successful for long periods of time (see https://dune.com/apeir99n/gearbox-protocol-dashboard), however, it also gave an undesirable sharp increase in APY when the whale withdrew a significant amount (~1M+). For such cases, it is desired to have a more gradual increase in the interest rate, since a sharp increase in the rate leads to all users of Credit Accounts receiving losses in their leverage farming strategies.
To overcome this drawback, it is proposed to consider a 2-point interest rate curve:
- If pool utilization is less than U_1, r(u) = r_0+ u/U_1 * (r_1-r_0), where r_0,r_1,U_1 are some constants
- If pool utilization is in the interval [U_1,U_2], then r(u)=r_1+(u-U_1)*(r_2-r_1)/(U_2-U_1), where r_2,U_2 are some constants
- If utilization is greater than U_2, then r(u)=r_2+(u-U_2)*(r_3-r_2)/(1-U_2), where r_3 is also a constant.
Such a curve model will make it possible to select parameters such that most of the time the pool is in the interval around [U_1-delta,U_2], thereby avoiding sharp jumps in the interest rate (in the interval [U_1,U_2] the interest rate grows faster than in the interval [0, U_1], but still not as aggressive as in the interval [U_2,1]).
Parameters
As part of the transition to the 2-point model, it is proposed to use the following parameters:
| Asset pool | r_0 | r_1 | r_2 | r_3 | U_1 | U_2 |
|---|---|---|---|---|---|---|
| USDC | 0 | 1 | 1.25 | 100 | 70 | 90 |
| DAI | 0 | 1 | 1.25 | 100 | 70 | 90 |
| FRAX | 0 | 1 | 1.25 | 100 | 70 | 90 |
| ETH | 0 | 2 | 2.5 | 60 | 70 | 90 |
| wstETH | 0 | 2 | 2.5 | 60 | 70 | 90 |
| WBTC | 0 | 2 | 2.5 | 60 | 70 | 90 |
This will allow the target utilization value to be targeted at ~70%, while at the same time short-term increases in utilization up to 90% will not lead to a dramatic increase in interest rates.
Specification
- Deploy new two-point LinearInterestRateModel for USDC, DAI, FRAX v1 pools
- Deploy new two-point LinearInterestRateModel for ETH, WBTC, wstETH v1 pools
- Set new model as model for USDC pool with poolService.updateInterestRateModel() call
- Set new model as model for FRAX pool with poolService.updateInterestRateModel() call
- Set new model as model for DAI pool with poolService.updateInterestRateModel() call
- Set new model as model for WETH pool with poolService.updateInterestRateModel() call
- Set new model as model for wstETH pool with poolService.updateInterestRateModel() call
- Set new model as model for WBTC pool with poolService.updateInterestRateModel() call
- Update lower bound of yvWETH price feed
- Update lower bound of crvCVXETH price feed
- Update lower bound of crvUSDETHCRV price feed
ETA 18 oct 2023 15:00 CET
Voting
Simple Approve / Reject
| Voter | Cast Power | Vote & Rationale |
|---|---|---|
0xeEEC...3665a3 | 54.429M | Approve |
0xC4CA...43153B | 33.333M | Approve |
0x81E8...Fd2c08 | 29.455M | Approve |
0xdAb4...40a38D | 20.769M | Approve |
0xb9b7...6CceeA | 19.883M | Approve |
VOTE POWER
Proposal Status
- Thu October 12 2023, 06:18 pmVoting Period Starts
- Sun October 15 2023, 06:18 pmEnd Voting Period
Current Results
1-Approve
217.449M
2-Reject
1.64M
