The fee model
Stable AMM reuses AMM v4’sFees struct, but not AMM v4’s numbers. Stable pools charge a far lower fee, which is what you would expect from a pool designed for like-priced assets. There is only one fee tier per pool (set at initialization); pools cannot be reconfigured into higher tiers.
These are not “defaults” — they are the values on every live mainnet Stable pool. All three (USDT/USDC
2EXiumdi14E9b8Fy62QcA5Uh6WdHS2b38wtSxp72Mibj, 9DTY3rv8xRa3CnoPoWJCMcQUSY7kUHZAoFKNsBhx8DDz, 9f4FtV6ikxUZr8fAjKSGNPPnUHJEwi4jNk8d79twbyFf) carry the identical set above, and with SetParams removed in the 2026-06-22 upgrade there is no longer any instruction that can change them. Verified by decoding AmmInfo.fees from mainnet.How the split is computed
On each swap:lp_portionstays in the vault, inflatesk, and benefits LPs on redemption.pnl_portionincrementsAmmInfo.out_put.need_take_pnl_coinorneed_take_pnl_pc(depending on the input token) and is swept byWithdrawPnl.
OpenBook PnL (retired)
Early in its life, the pool also posted limit orders on OpenBook; when those filled, it earned or lost the market-maker/taker spread, settled duringMonitorStep, and tracked the result in the out_put.total_pnl_{coin,pc} counters. That path has been dormant for years — the pool holds no open orders, so the only fee accrual is the 0.0024% protocol share described above. The total_pnl_* counters remain in the layout but no longer increment. The 2026-06-22 upgrade removed the leftover OpenBook code (including MonitorStep). CPMM became the default for new pools partly because of this former coupling to OpenBook; Stable AMM is order-book-independent.
Collection
The Raydium multisig (or whoever controlsamm_admin) calls WithdrawPnl to sweep:
- Transfers
need_take_pnl_coinandneed_take_pnl_pcfrom vaults to admin-designated accounts. - Zeroes the counters.
LP fee redemption
No dedicated “collect fees” instruction. LP fees accumulate in vaults, inflating the reserves. LPs realize them by burning LP viaWithdraw. The value of an LP token grows as reserves grow.
Visualization: where $10,000 of volume goes
On a USDC-heavySwap of $10,000 against a live Stable pool:
index=0 pool $25.00 — 12.5× more. That gap is the point of the product: stable pairs move very little, so LPs need very little compensation for inventory risk, and the tight curve plus the low fee is what keeps large stable-to-stable swaps competitive.
Comparison table
Full matrix:
reference/fee-comparison.
Integrator notes
- Quoting: Always read
AmmInfofrom the chain; do not hardcode fees. WithSetParamsnow removed, the fee parameters on existing pools are effectively fixed. - Don’t assume AMM v4’s rate. The
Feesstruct is shared with AMM v4, so it is easy to copy AMM v4’s25 / 10_000into a Stable quote. Stable pools charge2 / 10_000. Quoting a Stable pool at 0.25% overstates the fee by 12.5×. - Curve vs. fees: Fee application is independent of whether the curve is a formula (x·y=k in AMM v4) or a lookup table (Stable). Both take the fee off the input amount before touching the curve.
- No rewards: Stable pools do not support on-pool reward emissions. Ecosystem farms (Farm v3/v5/v6) handle staking elsewhere.
Where to go next
products/stable/math— fee application in swap math.products/stable/instructions—WithdrawPnlaccount list.products/amm-v4/fees— deeper fee derivation for OpenBook path.reference/fee-comparison— side-by-side all products.
raydium-stable/program/src/state.rs(Feesstruct)- On-chain
AmmInfo.feesfields on live mainnet pools

