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