DEVNETYou are on Solana devnet. Funds are not real. Behavior matches mainnet.

Pool parameters

This page is a reference for every parameter a Milky pool exposes. It's useful both for would-be pool operators and for LPs and borrowers who want to understand exactly what a pool has committed to.

Parameters are grouped by what they control: liquidity, loans, fees, risk caps, and governance.

Liquidity & accounting

These parameters define how the pool holds and tracks capital.

ParameterMeaningMutable?
quote_mintThe SPL token used for deposits, loans, and repayments. USDC in production.No (set at init)
quote_vaultPDA holding the pool's idle USDC.No (derived)
total_lp_sharesSum of all outstanding shares across LP positions.Auto
outstanding_principalSum of principal currently lent out.Auto
accrued_interestInterest recognized as belonging to the pool.Auto
protocol_fees_accumulatedFee revenue earmarked for the protocol (separate from LP NAV).Auto

Loan terms

Each pool publishes up to three term options. A borrower picks one at loan creation; the term option fully determines duration, rate, and grace period.

FieldMeaningBounds
term_secsLoan duration in seconds.86,400 (1 day) to 31,557,600 (1 year)
rate_bpsFixed APR in basis points (10,000 = 100%).Up to 22,000 (220%) per term
grace_period_secsTime after maturity before default is eligible.Up to 2,592,000 (30 days)

Pools typically advertise three options like 7d / 30d / 90d at progressively higher rates. The protocol does not require all three to be set; one or two options are valid configurations.

Principal & LTV limits

These are the per-loan ceilings that bound how much can be borrowed against a single card.

ParameterMeaningProtocol bounds
min_principalSmallest allowed principal per loan.Floor 1 USDC (1,000,000 micro-USDC)
max_principalLargest allowed principal per loan.Ceiling 1,000,000 USDC
max_principal_per_cardPer-card cap to prevent single-card concentration.Pool-defined (within max_principal)
max_ltv_bpsMaximum LTV the pool will accept for any loan.Up to 9,000 (90%); typical default 7,000 (70%)

The actual LTV applied to a given loan is the minimum of max_ltv_bps and the LTV the oracle returns in its signed quote. The oracle can be more conservative than the pool ceiling on a per-card basis.

Risk caps

The risk caps prevent quiet over-concentration as the pool fills up.

ParameterMeaningProtocol bounds
utilization_cap_bpsMax post-draw utilization (outstanding / NAV).Default 8,000 (80%); ceiling 9,500 (95%)
max_exposure_per_typeMax outstanding principal per canonical asset type.Must be > 0; updates can raise but not zero out

TypeExposure accounts track running outstanding-principal-by-asset-type, and the protocol refuses any new draw that would push a given asset type over the cap.

Allowlists

Allowlists restrict which collections of NFTs can secure loans from this pool. They live in separate AllowedCollection PDAs, one per accepted collection mint, with an active flag the admin can toggle.

ParameterMeaning
AllowedCollection.collection_mintThe Metaplex collection mint to allow.
AllowedCollection.activeWhether the collection is currently accepted.

A loan against an NFT whose verified collection isn't on the pool's allowlist will be rejected at create time. NFTs without a verified collection bypass this check (but are still subject to the global Merkle allowlist).

Fees

The fee parameters live primarily on the global Config, but pools inherit them and they affect borrower and LP economics directly.

ParameterMeaningBounds
Config.origination_fee_bpsOrigination fee as a percentage of interest.Default 200 (2%); max 500 (5%)
Config.auction_fee_bpsProtocol's share of auction surplus above debt.Default 5,000 (50%); max 5,000 (50%)
Config.insurance_fund_split_bpsOf the protocol fee, what share routes to the insurance fund.Default 3,000 (30%)

The pool itself accumulates protocol fees in protocol_fees_accumulated; a separate admin instruction (protocol_withdraw_fees) sweeps them to the protocol fee recipient and the insurance fund.

Governance

Parameters that control who can modify the pool.

ParameterMeaningMutable?
adminThe wallet authorized to update parameters and (today) deposit liquidity.No (set at init)
pausedPer-pool emergency pause flag. Halts new loans and deposits.Yes (admin or governance)
auto_approve_threshold_micro_usdcBackend hint for which loans don't need manual review.Yes

Some constraints worth noting:

  • The pool admin is immutable. There is no admin-rotation instruction, by design — anyone evaluating the pool can verify the admin pubkey once and trust that it can't silently change.
  • The auto_approve_threshold_micro_usdc is a backend-only hint that doesn't gate any on-chain behavior. The on-chain program ignores it.

Updating parameters

Most mutable parameters are changed via pool_update_params, which requires the pool admin signature and validates each new value against the same protocol-wide bounds enforced at initialization. A few specific constraints:

  • max_exposure_per_type can be raised but cannot be set to zero (initialization also requires non-zero).
  • LTV and fee parameters are checked against their global ceilings.
  • Term options are validated for bounds; setting an empty term-option list is not allowed.