Interest Rates: The Jump Rate Model

No committee sets Peridot's rates. Every market prices itself from a single input, utilization (the share of the pool currently lent out), through a curve called the jump rate model. This page walks through the exact math the contracts run on every block.

Utilization#

utilization = totalBorrows / (cash + totalBorrows)
cash = liquidity sitting in the pool; totalBorrows = everything currently lent out.

Utilization is the market's supply-and-demand gauge. Low utilization means idle liquidity: rates fall to attract borrowers. High utilization means the pool is nearly drained: rates rise sharply to attract deposits and encourage repayment, protecting withdrawals.

The jump rate model#

The borrow rate follows utilization along two straight lines that meet at the kink (typically 80%). Below the kink, rates climb gently; above it, the slope jumps steeply, and that jump is the pool's self-defense against running out of liquidity:

u ≤ kink:   borrowRate = base + u × multiplier
u > kink:   borrowRate = base + kink × multiplier
                        + (u − kink) × jumpMultiplier

Suppliers earn the borrow rate scaled by two factors: only the utilized share of the pool earns interest, and a slice (the reserve factor) accrues to protocol reserves as an insurance buffer:

supplyRate = borrowRate × utilization × (1 − reserveFactor)
This identity guarantees interest paid in ≥ interest paid out; the pool can't promise yield it isn't earning.

Rate-curve explorer

Drag utilization along the curve (and reshape the curve itself) to see how both rates respond.

Utilization65%
Base rate0%
Slope to kink5%
Jump slope109%
Kink80%
Reserve factor10%
Borrow APRSupply APR

Utilization

65%

Borrow APR

3.25%

Supply APR

1.90%

Two curves, two asset classes#

  • Stablecoin markets (USDC, EURC) use a flatter curve: demand for dollar liquidity is steady, so rates stay in a narrow, predictable band below the kink.
  • Volatile markets (XLM) use a steeper curve with a harsher jump: when a volatile asset's pool drains fast, the model reacts fast.

From per-block rate to APY#

On-chain, the model quotes a rate per block (per ledger on Stellar). The app annualizes it, and the compounding of the exchange rate turns the annual rate (APR) into the slightly higher APY you see displayed:

APR = ratePerBlock × blocksPerYear
APY ≈ (1 + APR/n)ⁿ − 1   for n compounding periods
Rates below one basis point display as “<0.01%” rather than rounding to zero.

Rates are variable by design

Your APY changes whenever anyone deposits, withdraws, borrows, or repays; that's the mechanism working, not a malfunction. Large moves in either direction pull the rate back toward equilibrium: high rates attract deposits, which lowers utilization, which lowers rates.

Common questions

Why did my APY change without me doing anything?

Because rates track utilization, and utilization changes whenever anyone else deposits, withdraws, borrows or repays in the same pool. That is the mechanism working, not a fault.

What is the kink in the jump rate model?

The utilization level, typically 80%, where the rate curve changes slope. Below it rates climb gently; above it they climb steeply, which is the pool's defence against running out of withdrawable liquidity.

What is the difference between APR and APY here?

APR is the simple annualized rate the contract quotes. APY includes compounding, which on Peridot happens automatically through the exchange rate, so APY is the number your balance actually tracks.

What is the reserve factor?

The share of borrower interest that accrues to protocol reserves as an insurance buffer instead of to suppliers. It is why the supply rate is always below the borrow rate.

Last reviewed on .