Interest Rate Model
How borrow and supply rates are calculated using the two-slope kink model
Utilization Rate
The utilization rate measures what percentage of supplied assets are currently borrowed:
utilization = total_debt / total_supply- Low utilization (e.g., 20%): Plenty of liquidity available, lower rates to encourage borrowing
- High utilization (e.g., 95%): Most funds borrowed, higher rates to encourage repayment
The Kink Model
Interest rates follow a two-slope curve with a "kink" at the optimal utilization point:
Below Optimal Utilization
When utilization is below the optimal point (e.g., 92%), rates grow gradually:
borrow_rate = base_rate + (utilization / optimal) × slope_1Above Optimal Utilization
When utilization exceeds the optimal point, rates accelerate sharply to incentivize repayments and new deposits:
borrow_rate = base_rate + slope_1 + ((utilization - optimal) / (1 - optimal)) × slope_2Example Configuration
A typical pool configuration might look like:
| Parameter | Value | Description |
|---|---|---|
| Base Rate | 2% | Minimum APY even at 0% utilization |
| Optimal Utilization | 92% | The "kink" point |
| Slope 1 | 7% | Linear APR increase from 0% to optimal utilization |
| Slope 2 | 300% | Linear APR increase from optimal utilization to 100% utilization |
| Reserve Factor | 10% | Protocol share of interest, configurable per pool (e.g., 10%) |
Rate Calculations
At 50% utilization:
borrow_rate = 2% + (50/92) × 7% = 5.8% APYAt 92% utilization (kink point):
borrow_rate = 2% + 7% = 9% APYAt 98% utilization:
borrow_rate = 2% + 7% + (6/8) × 300% = 234% APYThe steep slope above optimal utilization creates strong pressure to repay loans or add supply when liquidity becomes scarce.
Supply Rate
Suppliers earn a portion of the interest paid by borrowers:
supply_rate = borrow_rate × utilization × (1 - reserve_factor)Example at 80% utilization:
borrow_rate = 10%
utilization = 80%
reserve_factor = 10%
supply_rate = 10% × 0.8 × 0.9 = 7.2% APYWhy the Difference?
- Utilization factor: Only borrowed funds generate interest
- Reserve factor: Protocol share of interest, configurable per pool (e.g., 10%)
- Net to suppliers: Portion of borrower interest distributed to suppliers (e.g., 90%)
Index-Based Accrual
Rather than updating every user's balance continuously, the protocol uses indices that grow over time:
Borrow Index (Compounded)
new_borrow_index = old_borrow_index × (1 + borrow_rate / YEAR_SECS)^elapsed_secondsLending Index (Linear)
new_lending_index = old_lending_index × (1 + lending_rate × elapsed_seconds / YEAR_SECS)The index approach means interest accrues in O(1) time regardless of how many users are in the pool. User balances are calculated on-demand as balance = shares × index.
Protocol Revenue
The difference between what borrowers pay and what suppliers earn becomes protocol revenue:
protocol_revenue = debt_interest - supply_interestThis revenue is captured as treasury shares that can be claimed by protocol governance.