The Core Idea
Vanna does not have a fixed interest rate. Borrowing costs adjust continuously based on a single input: how much of the pool is currently being borrowed. When a pool is mostly idle, borrowing is cheap - the protocol wants to attract borrowers. When a pool is nearly fully lent out, borrowing becomes very expensive - the protocol needs to incentivize repayment and keep liquidity available for withdrawals. This happens automatically. No governance votes, no manual updates. The rate responds to pool state in real time.Utilization - The Only Input
Every rate calculation starts with the pool’s utilization ratio: Utilization is a number between 0 and 1. Everything else is a function of this single value.| Utilization | State |
|---|---|
| 0% | Pool is idle - no active borrowing |
| 50% | Half the pool is deployed |
| 80% | Pool is tightening - rate begins climbing |
| 95%+ | Near-fully lent - rate becomes expensive |
| 100% | Every asset is borrowed - withdrawals blocked |
The Rate Curve
Vanna uses a smooth polynomial curve - not a two-segment “kinked” model with a hard breakpoint. The borrow rate accelerates organically as utilization increases, with the steepest acceleration above 90%.Borrow APR
120%
80%
40%
0%
80%
gradual
steep
rise
rise
0%25%50%75%100%
Utilization →
Rate stays near-flat below 80% utilization, then accelerates sharply near 90–100%.
| Coefficient | Value | Role |
|---|---|---|
| C₁ | 0.1 | Weight on the linear and 32nd-power terms |
| C₂ | 0.3 | Weight on the 64th-power term |
| C₃ | 3.5 | Overall scaling multiplier |
How the three terms work
The three terms -u, u^32, and u^64 - behave very differently depending on utilization:
| Term | At 50% util | At 90% util | At 99% util |
|---|---|---|---|
u × C₁ (linear) | 0.050 | 0.090 | 0.099 |
u^32 × C₁ | ≈ 0 | 0.003 | 0.073 |
u^64 × C₂ | ≈ 0 | 0.001 | 0.158 |
| Total × C₃ = APR | ~18% | ~33% | ~115% |
There is no kink point - no arbitrary breakpoint where the rate suddenly jumps. Acceleration is organic: the high-exponent terms are near zero at low utilization, then rapidly dominate as utilization approaches 100%.
Approximate rate levels
| Utilization | Approx Borrow APR |
|---|---|
| 25% | ~9% |
| 50% | ~18% |
| 75% | ~26% |
| 80% | ~28% |
| 90% | ~33% |
| 95% | ~44% |
| 99% | ~115% |
The Self-Correcting Loop
This design means the pool naturally stabilizes without external intervention:Borrowing becomes expensive
At high utilization, borrowing costs exceed returns for marginal strategies. Borrowers repay or hold off.
Utilization falls
Repayments reduce outstanding borrows. The rate decreases and liquidity becomes available again.
Related
- Lending Pools - how utilization is computed from pool state
- vTokens - how borrow interest flows into LP yield
- Health Factor - what happens when borrowing costs erode account health
- Rate Model reference - the full function interface

