Skip to main content
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Bannière de version. Tous les démonstrations TypeScript ciblent @raydium-io/raydium-sdk-v2@0.2.42-alpha sur Solana mainnet-beta, vérifiées en avril 2026. Le squelette CPI Rust cible raydium-cp-swap sur la branche master, Anchor 0.30.x. Les ID de programme sont extraits via des constantes de reference/program-addresses.

Prérequis

Chaque démonstration sur cette page correspond à un fichier dans raydium-sdk-V2-demo/src/cpmm ; le lien GitHub se trouve à côté de chaque section. L’initialisation suit le fichier config.ts.template du dépôt de démonstration (source) :
L’instance Raydium est la façade du SDK — chaque démonstration ci-dessous l’utilise. Elle récupère paresseusement les listes de tokens et les configurations de frais depuis api-v3.raydium.io ; vous pouvez l’initialiser avec vos propres données dans les environnements hors ligne.

Créer un pool CPMM

Source : src/cpmm/createCpmmPool.ts
Quelques éléments que le SDK gère silencieusement :
  • Tri des mints dans l’ordre token0/token1 avant de dériver le PDA.
  • Paiement des frais uniques create_pool_fee à poolFeeAccount.
  • Création des comptes de tokens associés de l’appelant s’ils manquent.
  • Choix du bon programme de tokens (SPL Token vs Token-2022) de chaque côté.
Après confirmation, vous pouvez récupérer l’état du pool en direct avec :

Swap (base-input)

Source : src/cpmm/swap.ts
Remarque : le SDK récupère toujours l’état du pool depuis un RPC à l’intérieur de getPoolInfoFromRpc. Ne cotez pas à partir de api-v3.raydium.io pour une transaction que vous êtes sur le point de signer — une cotation qui a un bloc de retard peut glisser dans ExceededSlippage au moment du débarquement.

Swap (base-output)

Source : src/cpmm/swapBaseOut.ts

Déposer de la liquidité

Source : src/cpmm/deposit.ts
Le SDK convertit lpAmount en needed_token_0 et needed_token_1 en utilisant les réserves actuelles du pool, augmente chacun de 1 + slippage pour les arguments maximum_* de l’instruction, et construit les créations d’ATA si nécessaire.

Retirer de la liquidité

Source : src/cpmm/withdraw.ts

Collecter les frais de protocole/fonds/créateur

Source : src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts La collecte de protocole et de fonds reste contrôlée par l’autorité. Les frais de créateur ont deux chemins : le CollectCreatorFee signé par le créateur existant, et le CollectCreatorFeePermissionless additif, que n’importe quel payeur peut invoquer mais qui ne peut transférer que vers les ATA canoniques du créateur. Le SDK épinglé expose les constructeurs bruts existants :
@raydium-io/raydium-sdk-v2@0.2.42-alpha n’expose pas encore de constructeur pour CollectCreatorFeePermissionless. Jusqu’à ce qu’une version du SDK l’ajoute, construisez à partir de l’IDL CPMM mis à jour ou invoquez le programme directement. Ne réutilisez pas makeCollectCreatorFeeInstruction : la nouvelle instruction a un discriminateur différent et remplace les positions du signataire créateur / amm_config par des comptes payer et creator distincts sans signature.
Hors chaîne, vous pouvez lire les frais accumulés directement depuis PoolState :

Squelette CPI Rust

Si vous souhaitez invoquer CPMM depuis votre propre programme Anchor — par exemple, un coffre-fort qui swapper au nom de ses déposants — le contexte CPI ressemble à ceci. L’ordre des comptes suit products/cpmm/instructions.
Si votre CPI signe en tant que PDA (par exemple, vous gérez un coffre-fort au nom des déposants), remplacez CpiContext::new par CpiContext::new_with_signer et passez vos graines.

Pièges courants

Une courte liste de contrôle avant d’ouvrir un ticket d’assistance :
  • Mints triés. Si votre PDA poolState dérivé ne correspond pas au pool on-chain, vous avez probablement oublié de trier les mints.
  • Cotation API obsolète. Ne passez jamais une valeur de réserve de api-v3.raydium.io dans CurveCalculator.swap. Récupérez depuis un RPC.
  • Mauvais programme de tokens. Le coffre-fort d’un mint Token-2022 est détenu par le programme Token-2022, pas par SPL Token. Utilisez toujours les champs token_0_program / token_1_program du pool.
  • Slippage sous-dénominé pour les mints avec frais de transfert. Si l’un ou l’autre côté du pool est un mint Token-2022 avec frais de transfert, votre minimum_amount_out doit être dénominé en ce que l’utilisateur reçoit réellement, pas en ce que le coffre-fort envoie.
  • NotApproved sur un swap. Vérifiez PoolState.status — l’administrateur peut avoir mis en pause les swaps sur ce pool. Voir products/cpmm/instructions pour le masque de statut.

Où aller ensuite

Sources :