Skip to main content
Risk parameters are how a curator expresses a thesis about an asset. They determine how much can be borrowed against it, when liquidations trigger, what the cost of borrowing is at each utilization level, and how much capital can flow into and out of the reserve. This page is a guide to choosing values. Every field documented here is in Reserve config reference; refer there for the full schema and defaults.

The relationship between LTV and liquidation threshold

Common reference points used across major Kamino markets: These are reference ranges. Tune them to each asset based on its volatility profile, on-chain liquidity, oracle reliability, and historical depeg / recovery behavior.

Borrow factor

A multiplier on the debt-side valuation of an asset. Borrowing 100 units of an asset with borrowFactorPct: 125 is treated as if you borrowed 125 units for risk purposes — making the position behave more conservatively. The program enforces borrowFactorPct >= 100; values below have no effect.

The interest rate curve

The borrow rate is determined by reserve utilization (borrowed / deposited) using a piecewise linear curve. The curve must satisfy:
  • Exactly 11 points (pad with the final point repeated if you have fewer breakpoints)
  • utilizationRateBps strictly non-decreasing from 0 to 10000 (0% to 100%)
  • borrowRateBps non-decreasing across the curve
  • Rate between two breakpoints is linearly interpolated

Designing the curve

The economics of an IR curve hinge on the kink — the breakpoint where the rate starts climbing steeply. For most assets, the kink sits at 70–85% utilization. The slope above the kink is what enforces solvency: at 95% utilization, depositors should earn enough that capital flows in; borrowers should pay enough that capital flows out. A common shape: The exact numbers depend on the asset and demand. Stablecoins with steady deposit demand can run with kinks at 90% and tighter slopes; volatile or thinly-supplied assets need wider slopes to keep utilization in check.

Padding the array

The on-chain struct expects 11 points. If your curve has fewer real breakpoints, repeat the final point to fill:

Deposit and borrow caps

Limits are denominated in token base units (lamports for SOL, smallest unit for the token’s decimals). A common pattern for new reserves: borrowLimit < depositLimit ensures there is always some unborrowed liquidity (subject to live withdrawals). borrowLimit == depositLimit allows full utilization but means depositors may need the withdrawal queue to redeem. A focused command exists for adjusting just the borrow cap:

Utilization-based borrow blocking

Blocks new borrows once utilization exceeds the configured percentage. 0 disables. Useful as a softer alternative to borrowLimit for reserves where you want to throttle leverage at high utilization without capping total deposits. Example: utilizationLimitBlockBorrowingAbovePct: 90 means borrows revert when utilization is above 90%, while existing borrows and repayments continue unaffected.

Fees

Default for curator markets: all zero. Curator-set fees go to the curator-controlled lending_market_owner via redeem_fees.

Reserve status

Most reserves stay at 0. Use 1 when phasing out a reserve while honoring existing obligations.

Putting it together: a checklist for a new reserve

1

Pick LTV and liquidation threshold

Use comparable Kamino reserves as a starting reference. For a never-listed asset, start more conservatively than analogues and widen later.
2

Set borrow factor

100 for major assets and stables. 125+ for assets with thinner exit liquidity.
3

Design the IR curve

Pick a kink (typically 70–85% utilization). Set base rate at the kink (3–8% for stables, 5–15% for volatile assets). Set max rate at 100% utilization (40–80% APR is common).
4

Choose caps

depositLimit proportional to the asset’s verified on-chain liquidity. borrowLimit 80–90% of depositLimit.
5

Set fees

protocolTakeRatePct = 0–20% if you want the curator to capture interest revenue. Origination fees default to 0 for most consumer-facing reserves.
6

Configure the oracle

Scope is the default. Set TWAP and staleness guards. → Configure oracles
7

Decide on advanced features

eMode? Auto-deleverage? Withdrawal queue? Fixed-term? Each is opt-in. → Lifecycle

Reference