Sources of protocol fees
Each reserve generates fees independently based on its config. The fees are stored on-chain in the reserve’sliquidity substructure as accumulated_protocol_fees_sf (scaled fraction).
All fees accumulate in the reserve’s fee vault on the same liquidity mint as the reserve. A USDC reserve’s fees are accumulated in USDC.
Two withdrawal handlers
For routine curator operations,
redeemFees is the relevant instruction.
- SDK
- API
- Kamino CLI
Withdraw fees via SDK
The SDK exposes the rawredeemFees and withdrawProtocolFee instructions via the codegen module. Build the instructions with the relevant accounts and submit from the curator’s wallet (or multisig).klend-sdk/src/@codegen/klend/instructions/redeemFees.ts and withdrawProtocolFee.ts.Fee recipient
The fee recipient is configured at the program level. For most curator markets, this is thelending_market_owner (or its multisig). In specialized configurations, it can be a separate dedicated address — useful when the curator wants ops to flow to one signer set and fee revenue to flow to another.
Confirm the recipient by inspecting the market’s accounts via get-market-or-vault-admin-info.
When to withdraw
Fees accrue continuously but withdrawing them is a discrete event. A common cadence:Operational considerations
Reference
- Reserve config reference — all fee-related fields
- Risk parameters → Fees — how to set fee rates
- Market config reference —
referral_fee_bps