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 →
Matrice de support : CPMM supporte complètement Token-2022, y compris les mints avec frais de transfert. CLMM supporte Token-2022 avec frais de transfert via les comptes
SwapV2 explicites. AMM v4 ne supporte pas du tout Token-2022. LaunchLab ne supporte pas Token-2022 pour le mint de base (il crée des mints SPL classiques). Farm v6 supporte Token-2022 sur les deux mints de staking et de récompense.Qu’est-ce qu’un frais de transfert
Token-2022 est le deuxième programme SPL Token (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA → TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb). Parmi ses extensions, l’extension transfer-fee déduit un frais du montant transféré à chaque TransferChecked sur un mint de token. Le frais est acheminé vers un destinataire désigné par l’autorité du mint et peut être mis à jour par celle-ci (dans les limites).
Un mint avec frais de transfert a deux paramètres pertinents :
transfer_fee_basis_points— le taux (p. ex. 100 = 1 %).maximum_fee— un plafond absolu par transfert (ainsi, les gros transferts ne paient pas des frais illimités).
Pourquoi c’est important pour les swaps
Les coffres d’un pool contiennent les soldes réels. Quand un utilisateur appelle un swap Raydium :- L’utilisateur envoie
amount_inau coffre du pool. Si le mint d’entrée a un frais de transfert, le coffre reçoitamount_in − fee_in, nonamount_in. - Le calcul du swap fonctionne sur le montant reçu par le coffre.
- Le pool envoie
amount_outà l’ATA de l’utilisateur. Si le mint de sortie a un frais de transfert, l’utilisateur reçoitamount_out − fee_out, nonamount_out.
amount_in, la vérification d’invariant échoue parce que le coffre a reçu moins que ce que le programme pense. Inversement, s’il calcule amount_out sans soustraire le frais de transfert sortant, l’utilisateur constate une perte et blâme le programme.
Raydium CPMM et CLMM (via SwapV2) gèrent cela en :
- Pré-swap : calculer
in_after_fee = amount_in − transfer_fee_on(amount_in, in_mint), et utiliserin_after_feedans le calcul de la courbe. - Post-swap : calculer
out_gross = amount_out_from_curve, envoyerout_grossà l’utilisateur viaTransferCheckedque le programme Token-2022 réduira lui-même par le frais de transfert.
minAmountOut de l’utilisateur est vérifiée contre out_gross (ce que le pool envoie), non contre ce que l’utilisateur reçoit. C’est ainsi que tous les principaux DEX Solana gèrent Token-2022, et c’est important parce que :
- Si le pool vérifiait post-frais, une mise à jour de frais entre le devis et l’exécution ferait échouer la transaction.
- Vérifier pré-frais fixe l’échec à la qualité du devis lui-même, non aux changements de frais hors-bande de l’utilisateur.
Calcul du frais Token-2022
Le programme SPL Token-2022 expose un helper déterministe. En Rust :@solana/spl-token) :
Formules de swap ajustées (CPMM, exact-input)
Soitf_pool le taux de frais du pool, f_in le taux de frais de transfert du mint d’entrée, max_in son plafond, f_out le taux de frais de transfert du mint de sortie, max_out son plafond.
amount_out_gross ≥ min_amount_out (non user_receives ≥ min_amount_out). Le minAmountOut de l’utilisateur est défini par le SDK à expected_gross · (1 − slippage) — gardez le seuil du côté « envoyé », pas du côté « reçu ».
Formules ajustées (CPMM, exact-output)
Le SDK itère pour trouveramount_in tel que user_receives = amount_out_exact :
max_in / max_out rendent le calcul non-linéaire parce que dès que le plafond est atteint, le frais cesse de croître. Le computeAmountIn / computeAmountOut du SDK gère cela en itérant si la formule naïve dépasserait le plafond.
Cas limites
Frais asymétriques (un côté a un frais, l’autre non)
Courant en pratique. Les formules ci-dessus gèrent déjà cela — si un côté af_in = 0, les termes pertinents s’effondrent. Il n’y a pas de cas spécial dans le programme.
Mises à jour de frais mid-swap
Si le frais de transfert du mint change entre le moment du devis et l’exécution, le swap se terminera soit avec des économies légèrement pires (l’utilisateur subit la différence dans la tolérance de slippage), soit échouera (la sortie brute descend sousminAmountOut). Les seuils de slippage absorbent cela ; aucune protection supplémentaire n’est nécessaire.
Plafond de frais maximum
Dès que l’échange est assez important pour atteindremaximum_fee, le frais se sature et la croissance ultérieure est zéro. Cela rend le taux effectif asymptotique à zéro pour les très gros échanges, ce qui peut causer des courbes de prix bizarres sur les marchés profondément illiquides. Le computeAmountOut du SDK en tient compte.
Extension non transférable
Certains mints Token-2022 utilisent l’extensionNonTransferable, qui rejette tous les appels Transfer sauf vers et depuis l’autorité du mint. De tels mints ne peuvent pas être utilisés dans un pool Raydium du tout. CreatePool les rejette à l’initialisation.
Mints porteurs d’intérêt
Token-2022 supporte aussi une extensionInterestBearingConfig qui fait croître les soldes au fil du temps. Les pools de Raydium lisent les soldes bruts des coffres (qui ignorent l’accumulation d’intérêt), donc sur un pool avec un mint porteur d’intérêt, les LPs capturent l’intérêt accumulé comme un pur cadeau quand ils se retirent (le solde du coffre a grandi plus vite que la représentation de l’offre de LP). Les intégrateurs devraient traiter cela comme un non-problème mais le documenter pour le côté LP.
Transfer hooks
L’extensionTransferHook de Token-2022 permet du CPI arbitraire à chaque transfert. Raydium CPMM supporte ces éléments — l’instruction de swap fait suivre les comptes du hook — mais cela ajoute une surcharge CU et exige que le hook se comporte bien. CLMM SwapV2 supporte aussi les hooks. AMM v4 ne supporte pas du tout Token-2022, donc la question ne se pose pas.
Exemple travaillé
Pool CPMM,x = 1_000_000 USDY, y = 1_000_000 USDC, frais du pool 0,25 %.
- USDY a un frais de transfert de 1 %,
max_fee = 10_000(0,01 USDY avec 6 décimales). - USDC n’a pas de frais de transfert.
amount_in = 1_000 USDY contre USDC (exact-input).
Références
products/cpmm/overview— Support Token-2022 CPMM.products/clmm/instructions—SwapV2vsSwappour le routage Token-2022.solana-fundamentals/spl-token-and-token-2022— Le modèle d’extension Token-2022 général.
- Documentation de l’extension transfer-fee SPL Token-2022
- Code source du programme Raydium CPMM (gestion Token-2022
SwapBaseInput/SwapBaseOutput). - Code source du programme Raydium CLMM (
SwapV2).


