Skip to main content
A fixed-rate reserve uses the same primitives as a floating reserve plus four config fields that pin the rate and impose a term. This page covers what those fields mean and the workflow for creating a reserve.

What pins a fixed-rate reserve

debt_term_seconds and debt_maturity_timestamp are independent. Set neither (effectively a floating reserve), one, or both. Use debt_term_seconds to express every borrow gets a 3-month clock starting at borrow time. Use debt_maturity_timestamp to express this whole reserve sunsets on January 1. The two compose: a reserve with both constraints requires every borrow to fit inside the remaining time until reserve maturity.
The borrower’s effective rate is the borrow_rate_curve value at current utilization plus host_fixed_interest_rate_bps. For most fixed-rate reserves you want a flat borrow_rate_curve at the desired rate and host_fixed_interest_rate_bps = 0. Set a non-zero host_fixed_interest_rate_bps only when you intentionally want a protocol-side spread on top of the lender-facing rate.

Creating a fixed-rate reserve

A fixed-rate reserve is created the same way as a floating one — the difference is in the config you supply.
1

Add the reserve to your market

This creates a new reserve account against the specified mint. Multiple reserves for the same mint can coexist in a market — each one is its own independent pool with its own config.
2

Download the default reserve config

3

Edit the config for fixed-rate behaviour

In the JSON, set:
  • borrowRateCurve.points — flat curve at the target rate. Both endpoints set to the same borrowRateBps. See pattern below.
  • debtTermSeconds — term in seconds (e.g. 7776000 for 90 days, 2592000 for 30 days).
  • debtMaturityTimestamp — only if you want the entire reserve to sunset on a specific date; otherwise leave at 0.
  • earlyRepayRemainingInterestPct — typical values are 10–25% (the first-term-only penalty).
  • hostFixedInterestRateBps — usually 0. Only set if you want a protocol-side spread.
Example flat curve at 5.5%:
The remaining points in the curve array should be padded to the same final value (the SDK and CLI handle padding automatically when you start from a flat curve).
4

Set risk parameters

Standard reserve risk params still apply — set them appropriate to the collateral, not to the term:
  • loanToValuePct, liquidationThresholdPct — the same curve as the floating-rate reserve for the same debt token typically applies. Term doesn’t change credit risk; collateral does.
  • minLiquidationBonusBps, maxLiquidationBonusBps, deleveragingBonusIncreaseBpsPerDay — these matter especially for fixed-rate because protocol-enforced liquidation (term/maturity breach) ramps the bonus from min to max linearly per day. Set values that produce a meaningful incentive curve for liquidators.
See Reserve Parameters for the full parameter reference.
5

Preview and apply

Then re-run with --mode execute (or --mode multisig to produce a Squads payload).
Reserve config changes typically have a lock time (~4 hours) before they take effect on-chain. Plan parameter changes ahead of testing windows; the change won’t be live immediately even after the multisig executes.

What’s next

Market Settings

Enable the market-level features that fixed-rate reserves depend on.

Lifecycle Operations

Update or sunset an existing fixed-rate reserve.