Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Deux frais indépendants, quatre destinations
CPMM applique deux frais distincts sur chaque swap :- Frais de trade — prélevés au taux
AmmConfig.trade_fee_rateet répartis entre trois destinations :- Part LP — reste dans le vault et augmente
k. Réclamée implicitement par la destruction de tokens LP. - Part protocole — accumulée dans
PoolState.protocol_fees_token*; collectée parprotocol_ownerviaCollectProtocolFee. - Part fonds — accumulée dans
PoolState.fund_fees_token*; collectée parfund_ownerviaCollectFundFee.
- Part LP — reste dans le vault et augmente
- Frais créateur (optionnel, par pool) — prélevés au taux
AmmConfig.creator_fee_rateindépendamment des frais de trade, accumulés dansPoolState.creator_fees_token*, collectés parpool_state.pool_creatorviaCollectCreatorFee. Actifs uniquement si le pool a été créé avecenable_creator_fee = true.
trade_fee uniquement, jamais de creator_fee. Un pool avec creator_fee_rate = 1000 (0,10 %) et trade_fee_rate = 2500 (0,25 %) facture au total 0,35 % de l’input lors d’un swap avec frais créateur sur input, dont le créateur garde 0,10 % et le bucket frais de trade reçoit 0,25 %.
Les taux de frais de trade (trade_fee_rate, protocol_fee_rate, fund_fee_rate) et creator_fee_rate se trouvent tous sur AmmConfig. Le flag par pool enable_creator_fee et le mode creator_fee_on (de quel côté du trade les frais créateur sont prélevés) se trouvent sur PoolState. Voir products/cpmm/accounts.
Taux et unités
Tous les taux sont desu64 exprimés en unités de 1 / FEE_RATE_DENOMINATOR où FEE_RATE_DENOMINATOR = 1_000_000.
trade_fee_rateest une fraction du volume échangé.2500⇒ 0,25 % du côté pertinent (input ou output, seloncreator_fee_on— voir « De quel côté du trade les frais sont prélevés » ci-dessous).creator_fee_rateest une fraction du volume échangé, prélevée séparément des frais de trade.1000⇒ 0,10 % du côté pertinent.protocol_fee_rateetfund_fee_ratesont des fractions des frais de trade, non du volume.120_000⇒ 12 % des frais de trade.
AmmConfig[index=0] (le pool « standard » à 0,25 %) sur mainnet, à titre de référence :
| Champ | Valeur | Pourcentage effectif |
|---|---|---|
trade_fee_rate | 2500 | 0,25 % du volume (bucket frais de trade) |
protocol_fee_rate | 120000 | 12 % des frais de trade ≈ 0,030 % du volume |
fund_fee_rate | 40000 | 4 % des frais de trade ≈ 0,010 % du volume |
creator_fee_rate | 0 (défaut) | 0 % (bucket séparé) |
| → Part LP effectif | 0,210 % du volume |
AmmConfig[0] avec enable_creator_fee = false : 2,50 $ de frais de trade totaux, dont 2,10 $ restent aux LP, 0,30 $ vont au protocole, 0,10 $ au fonds. Le bucket créateur est à 0 car les frais créateur sont désactivés.
Si le même pool avait enable_creator_fee = true et creator_fee_rate = 1000 (0,10 %), l’utilisateur paierait un supplément de 1,00 $ au bucket créateur — prélevé du même côté du trade configuré par creator_fee_on — pour un total de 3,50 $ de frais. Le bucket frais de trade et ses répartitions protocole/fonds restent inchangés.
Confirmez les valeurs mainnet actuelles en consultant GET https://api-v3.raydium.io/main/cpmm-config — les taux sont modifiables par l’admin et doivent être lus en direct plutôt que codés en dur.
La répartition, en code
- Le frais total sur input arrondit vers le haut pour que le pool ne sous-facture jamais.
- Les sous-répartitions de
trade_fee(protocole, fonds) arrondissent vers le bas pour que leur somme ne dépasse jamaistrade_fee; le reste est la part LP. lp_share = trade_fee − protocol_fee − fund_fee(creator_fee n’est pas soustrait ici car c’est son propre bucket).- Les frais créateur sont prélevés de l’input ou de l’output selon
PoolState.creator_fee_on(voir la section suivante). Le taux reste inchangé de chaque façon.
De quel côté du trade les frais sont prélevés
CPMM dispose d’un paramètre par poolcreator_fee_on (BothToken / OnlyToken0 / OnlyToken1) qui détermine si les frais créateur sont prélevés du côté input ou du côté output d’un swap donné. La fonction runtime is_creator_fee_on_input(direction) réduit cela à un booléen par swap :
creator_fee_on | Swap 0 → 1 | Swap 1 → 0 |
|---|---|---|
BothToken (0) | côté input | côté input |
OnlyToken0 (1) | côté input | côté output |
OnlyToken1 (2) | côté output | côté input |
amount_in avant l’exécution de la courbe. Mathématique du devis : prélever le combiné trade_rate + creator_rate sur l’input.
Quand les frais créateur sont du côté output, seuls les frais de trade sont déduits de amount_in ; la courbe produit un output sans frais, puis les frais créateur sont déduits de cet output. Mathématique du devis : prélever trade_rate sur l’input ; prélever creator_rate sur l’output.
Les frais de trade eux-mêmes sont toujours prélevés sur le côté input (le modèle standard Uniswap-V2). Seuls les frais créateur peuvent se retrouver sur l’output.
Comment les frais « accumulés » interagissent avec la courbe
Une subtilité importante : les frais protocole, fonds et créateur restent physiquement dans le vault jusqu’à ce que l’instructionCollect* correspondante soit appelée. Mais ils sont exclus de la vue de la courbe du solde du vault.
Une image concrète après un swap :
curve_x (et l’analogue curve_y) lors de l’application de k' ≥ k. C’est ainsi que les frais non-LP atteignent leurs destinations sans augmenter la part LP du pool.
Conséquences que vous devriez prévoir :
- Citer basé sur les soldes bruts est incorrect. Si vous construisez un quoteur sur
getTokenAccountBalance, vous suréstimérez systématiquement le prix que le pool honorera. Soustrayez toujours les frais accumulés, ou simulez viaSwapBaseInput/ l’API. CollectProtocolFeene modifie pas le prix. Il retire les tokens du vault et remet les compteursprotocol_fees_token*à zéro, donccurve_xetcurve_yrestent inchangés.- Les frais LP ne s’accumulent pas dans un compteur. Ils sont implicites dans le solde du vault. Le droit des LP aux frais LP accumulés est exercé en brûlant les tokens LP (c’est-à-dire via
Withdraw) — il n’y a pas deCollectLpFee.
Interaction avec les frais de transfert Token-2022
Les frais de transfert Token-2022 sont appliqués par le mint, non par CPMM. Ils s’appliquent à chaque transfert de token — swap, dépôt, retrait et les appelsCollect*. La mathématique des frais de trade de CPMM est calculée sur le montant qui a réellement atterri dans le vault, c’est-à-dire net des frais de transfert du mint d’input (s’il y en a).
Dans le pire cas, un utilisateur paie donc trois taxes distinctes sur un swap input-exact :
- Les frais de transfert du mint d’input sur
amount_in(à l’autorité de frais du mint). - Les frais
trade_feedu pool sur le reste (répartis comme ci-dessus). - Les frais de transfert du mint d’output sur
amount_out(à l’autorité de frais du mint).
minimum_amount_out est exprimé en ce que l’utilisateur reçoit réellement. Si vous écrivez votre propre quoteur, miroir ce comportement, ou vos vérifications de slippage seront systématiquement trop généreuses.
Voir algorithms/token-2022-transfer-fees pour la dérivation détaillée.
Frais créateur
Les frais créateur sont optionnels et par pool. Le taux se trouve surAmmConfig.creator_fee_rate ; le flag d’activation et le côté (creator_fee_on) se trouvent sur PoolState :
- Activé à la création du pool.
Initializedéfinitenable_creator_fee = falsepar défaut ; les pools créés viaInitializeWithPermission(utilisé par les graduations LaunchLab et autres chemins contrôlés) peuvent passerenable_creator_fee = trueet choisircreator_fee_on. - Le taux est partagé avec l’échelon de frais. Le taux lui-même est
AmmConfig.creator_fee_rate, la même valeur sur tous les pools liés à cette config. Chaque pool décide ensuite s’il doit l’appliquer (enable_creator_fee) et de quel côté du swap l’appliquer (creator_fee_on). Quandenable_creator_fee = false, le taux créateur effectif du pool est zéro quel que soit la valeur de la config (voirPoolState::adjust_creator_fee_ratedans le code source). - Indépendant des frais de trade. Les frais créateur ne réduisent jamais les parts LP / protocole / fonds — c’est son propre taux, appliqué séparément, accumulé dans ses propres compteurs.
- Collectés via
CollectCreatorFee, signé parPoolState.pool_creator. - Ne peuvent pas être réactivés ou redéployés après la création. Un pool initialisé avec
enable_creator_fee = falsene facturera jamais de frais créateur ; un initialisé avec uncreator_fee_onparticulier ne peut pas changer de côté.
CollectCreatorFee indéfiniment.
Flux opérationnel de collection
| Signataire | Instruction | Compteurs source remis à zéro | Cadence typique |
|---|---|---|---|
amm_config.protocol_owner | CollectProtocolFee | protocol_fees_token{0,1} | Hebdomadaire ou programmatique |
amm_config.fund_owner | CollectFundFee | fund_fees_token{0,1} | Hebdomadaire ou programmatique |
pool_state.pool_creator | CollectCreatorFee | creator_fees_token{0,1} | Anytime |
security/admin-and-multisig. Le signataire créateur est le compte qui a exécuté Initialize.
Modification d’un échelon de frais
Les taux de frais peuvent être modifiés par l’admin viaUpdateAmmConfig (voir products/cpmm/instructions). Les modifications prennent effet au prochain swap pour chaque pool lié à cet AmmConfig — il n’y a pas de migration, car les pools chargent la config à chaque swap.
Ce que l’admin ne peut pas faire :
- Déplacer un pool d’un
AmmConfigà un autre. - Rétablir le prix rétroactivement des frais déjà accumulés.
- Collecter les frais sans le signataire
protocol_owner/fund_owner.
Lecture des frais d’un pool en cours d’exécution
Comparaison avec CLMM et AMM v4
Voirreference/fee-comparison pour une matrice côte à côte. Résumé :
- AMM v4 utilise un frais de trade fixe de 0,25 % avec une répartition LP/protocole différente et pas de frais de fonds.
- CLMM les frais sont par échelon de tick-spacing, accumulés par position (non par pool), et réclamés via
DecreaseLiquidityouCollectFees.
Où aller ensuite
products/cpmm/math— où la déduction des frais de trade s’insère dans la courbe.products/cpmm/instructions— les listes de comptes des instructionsCollect*.algorithms/token-2022-transfer-fees— comment combiner correctement un frais de trade de pool avec un frais de transfert de mint.


