Skip to main content

Documentation Index

Fetch the complete documentation index at: https://kamino.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

This is the canonical reference for ReserveConfig — the on-chain struct that defines every parameter of a Kamino reserve. Field names below match the JSON used by the kamino-manager CLI (camelCase). The on-chain Rust struct uses snake_case; the SDK handles the conversion. For guidance on choosing values, see Risk parameters, Configure oracles, and the topic-specific guides linked from each section below.

Reserve status

FieldTypeDescription
statusu8 enum0 Active (normal operation), 1 Obsolete (existing positions continue; signals not for new activity), 2 Hidden (hidden from default UIs)

Risk parameters

FieldTypeDescription
loanToValuePctu8 (0–100)Maximum borrowing capacity against this asset as collateral, in percent of USD value
liquidationThresholdPctu8 (0–100)LTV at which a position becomes liquidatable. Must be ≥ loanToValuePct
borrowFactorPctu64 (≥100)Risk multiplier on debt-side valuation. 100 = no adjustment; higher values shrink effective borrow capacity
disableUsageAsCollOutsideEmodeu8 (bool)If 1, this asset can be used as collateral only inside elevation groups
utilizationLimitBlockBorrowingAbovePctu8 (0–100)Block new borrows when utilization is above this percent. 0 disables

Capacity limits

FieldTypeDescription
depositLimitu64 (token base units)Maximum total deposits accepted. 0 = no limit
borrowLimitu64 (token base units)Maximum total borrows. 0 = no borrows allowed
borrowLimitOutsideElevationGroupu64Borrow cap against this asset as collateral when borrower is outside any eMode group. u64::MAX = no cap
borrowLimitAgainstThisCollateralInElevationGrouparray of 32 u64Per-group borrow cap against this asset as collateral. Index = group_id - 1

Withdrawal caps

Each cap is a WithdrawalCaps struct with these fields:
FieldTypeDescription
configCapacityi64 (token base units)Maximum net flow per interval. 0 disables the cap
currentTotali64Net flow within the current interval (program-managed)
lastIntervalStartTimestampu64Unix timestamp when the current interval started (program-managed)
configIntervalLengthSecondsu64Interval length in seconds. Common: 86400 (1 day)
Two caps per reserve:
FieldThrottles
depositWithdrawalCapNet deposit / withdrawal flow on the collateral side
debtWithdrawalCapNet borrow / repay flow on the debt side

Liquidation parameters

FieldTypeDescription
minLiquidationBonusBpsu16 (0–10000)Minimum bonus paid to liquidators
maxLiquidationBonusBpsu16 (0–10000)Maximum bonus paid to liquidators
badDebtLiquidationBonusBpsu16 (0–10000)Bonus when liquidating bad-debt positions (debt > collateral)
protocolLiquidationFeePctu8 (0–100)Protocol’s cut of liquidation proceeds

Auto-deleverage

FieldTypeDescription
autodeleverageEnabledu8 (bool)Per-reserve enablement (market-level flag must also be 1)
deleveragingMarginCallPeriodSecsu64Per-reserve override for the margin-call grace period. 0 falls back to the market default
deleveragingThresholdDecreaseBpsPerDayu64Effective liquidation threshold drops by this many bps per day after margin call
deleveragingBonusIncreaseBpsPerDayu64Liquidator bonus rises by this many bps per day after margin call
minDeleveragingBonusBpsu16Floor on the deleverage-specific bonus

Interest rate curve

"borrowRateCurve": {
  "points": [
    { "utilizationRateBps": 0, "borrowRateBps": 0 },
    // up to 11 points
  ]
}
FieldTypeDescription
borrowRateCurve.pointsarray (exactly 11 entries)Piecewise linear curve. Each entry: { utilizationRateBps, borrowRateBps }. The curve must be non-decreasing in both fields.
utilizationRateBpsu16 (0–10000)Utilization at this breakpoint, in basis points
borrowRateBpsu32Borrow rate at this utilization, in basis points
The first point should be (0, 0) or (0, 1). The last point should be (10000, max_rate). Pad unused slots by repeating the final point.

Fees

FieldTypeDescription
fees.borrowFeestring (decimal)Origination fee charged on each borrow. "0.001" = 0.1%
fees.flashLoanFeestring (decimal)Flash loan fee. "0.001" = 0.1%
protocolTakeRatePctu8 (0–100)Percent of accrued interest routed to protocol fees (depositors receive the remainder)
protocolOrderExecutionFeePctu8 (0–100)Percent of obligation order execution proceeds routed to protocol fees

Token info / oracle config

"tokenInfo": {
  "name": "USDC",
  "heuristic": { "lower": 0, "upper": 0, "exp": 0 },
  "maxAgePriceSeconds": 120,
  "maxAgeTwapSeconds": 240,
  "maxTwapDivergenceBps": 4050,
  "scopeConfiguration": { /* ... */ },
  "switchboardConfiguration": { /* ... */ },
  "pythConfiguration": { /* ... */ },
  "blockPriceUsage": 0
}
FieldTypeDescription
nameUTF-8 string (≤32 bytes)Token symbol. Surfaced in tooling
heuristic.loweru64Sanity bound: minimum acceptable price = lower * 10^exp. 0 disables
heuristic.upperu64Sanity bound: maximum acceptable price
heuristic.expu64Decimal exponent for the heuristic bounds
maxAgePriceSecondsu64Reject prices older than this many seconds
maxAgeTwapSecondsu64Reject TWAPs older than this many seconds. Required if TWAP is enabled
maxTwapDivergenceBpsu64 (0–10000)Reject prices that deviate from TWAP by more than this. 0 disables the TWAP guard
blockPriceUsageu8 (bool)If 1, every operation needing this reserve’s price is rejected. Emergency switch

Scope configuration

"scopeConfiguration": {
  "priceFeed": "<SCOPE_ORACLE_PRICES_PUBKEY>",
  "priceChain": [0, 65535, 65535, 65535],
  "twapChain": [52, 65535, 65535, 65535]
}
FieldTypeDescription
priceFeedPubkeyScope OraclePrices account
priceChainu16 array (length 4)Indices into the Scope feed forming the price chain. 65535 is the unused-slot sentinel
twapChainu16 array (length 4)TWAP indices for the same chain

Fixed-Rate Parameters

Fixed-rate reserves use the same primitives as floating reserves plus four config fields that pin the rate and impose a term. See Fixed Rates for the full configuration workflow.
ParameterTypeDescription
hostFixedInterestRateBpsBasis points (u16)Optional protocol-side spread layered on top of borrowRateCurve. Charged to the borrower and accruing 100% to the protocol. Default 0.
debtTermSecondsu64 (seconds)Per-borrow term. Each borrow matures at last_borrowed_at_timestamp + debtTermSeconds. 0 = open-term (the reserve behaves as floating). Cannot be shortened on a reserve with active borrows.
debtMaturityTimestampu64 (Unix seconds)Reserve-wide sunset. After this, no new borrows are accepted and existing borrows become liquidatable (gated by market flag). 0 = no sunset. Must not be set in the past.
earlyRepayRemainingInterestPctInteger (0–100)Penalty for repaying inside the first term. Penalty = projected interest for the remaining term × this percentage. Accrues to protocol fees on the debt reserve.
For a fixed-rate reserve, configure borrowRateCurve as a flat curve at the target rate (both endpoints set to the same borrowRateBps) and leave hostFixedInterestRateBps at 0 unless an intentional protocol spread is required.

Asset Tier

"pythConfiguration": {
  "price": "<PYTH_PRICE_ACCOUNT>"
}
FieldTypeDescription
pricePubkeyPyth price account

Switchboard configuration

"switchboardConfiguration": {
  "priceAggregator": "<SWITCHBOARD_PRICE_AGGREGATOR>",
  "twapAggregator": "<SWITCHBOARD_TWAP_AGGREGATOR>"
}
FieldTypeDescription
priceAggregatorPubkeySwitchboard price aggregator
twapAggregatorPubkeySwitchboard TWAP aggregator. Required if maxTwapDivergenceBps > 0

Elevation groups

FieldTypeDescription
elevationGroupsu8 array (length 20)List of elevation group IDs this reserve participates in. 0 slots are unused
See Elevation groups.

Fixed-term

FieldTypeDescription
debtTermSecondsu64Duration of fixed-term borrows on this reserve. 0 = open-term (default)
debtMaturityTimestampu64Absolute Unix timestamp when all debt on this reserve matures (cohort mode). 0 = per-borrow rolling term
hostFixedInterestRateBpsu16Fixed-rate component (bps) added on top of the IR curve rate
earlyRepayRemainingInterestPctu8 (0–100)Percent of remaining interest owed on early repay
See Fixed rate reserves.

Emergency

FieldTypeDescription
emergencyModeu8 (bool)Per-reserve emergency mode. 1 halts operations on this reserve
proposerAuthorityLockedu8 (bool)If 1, blocks the proposer authority from updating this reserve config
blockCtokenUsageu8 (bool)If 1, blocks using this reserve’s cTokens as collateral
See Emergency controls.

Fields to ignore

The following appear in some example JSON files but are not part of the current ReserveConfig struct. Treat them as no-ops; the program ignores them on update:
Stale fieldStatus
assetTierDeprecated. Replaced by elevation groups.
multiplierSideBoostRemoved.
multiplierTagBoostRemoved.
If you encounter these in older configs, you can leave them in place (the on-chain struct ignores unrecognized fields during update) or strip them for clarity.

Reading the live config

yarn kamino-manager download-reserve-config \
  --reserve <RESERVE_ADDRESS>
Saves the canonical, on-chain config to a JSON file. Use this as the source of truth before editing.

Reference