Skip to main content
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Banneau de version.
  • SDK : @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • Cluster : Solana mainnet-beta
  • ID du programme Stable AMM : 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (voir reference/program-addresses)
  • Dernière vérification : 2026-09-09 contre la source du SDK 0.2.64-alpha et les démos amm/trade de raydium-sdk-V2-demo
Le module liquidity du SDK gère nativement les pools Stable AMM. Les pools stables apparaissent comme version: 5 (ou pooltype: "StablePool") sur ApiV3PoolInfoStandardItem ; les mêmes assistants addLiquidity / removeLiquidity / swap fonctionnent pour eux que pour les pools à produit constant AMM v4 (version: 4) — le SDK détecte la variante et émet automatiquement les bonnes instructions. Les mathématiques de courbe stable hors chaîne se trouvent dans src/raydium/liquidity/stable.ts.

Configuration

initLayout() n’est pas optionnel pour les pools Stable. liquidity.computeAmountOut se branche sur poolInfo.version : pour la version 4, elle utilise la formule à produit constant, et pour tout le reste, elle lit this.stableLayout.stableModelData et interpole la table de recherche. Ce cache est vide jusqu’à ce que initLayout() s’exécute, donc le devis d’un pool v5 sans lui produit des résultats incorrects plutôt qu’une erreur. C’est idempotent et peu coûteux — appelez-le une fois au démarrage.Les constructeurs de transactions (swap, addLiquidity, removeLiquidity) n’en ont pas besoin : ils se distribuent sur pooltype.includes("StablePool") et émettent des instructions AmmV5*, et les limites de montant que vous transmettez sont déjà calculées.
liquidity.computeAmountIn ne supporte pas les pools Stable. Contrairement à computeAmountOut, il n’a pas de branche de version — il applique toujours l’inverse à produit constant, donc sur un pool v5, il retourne un maxAmountIn incorrect. Pour un swap à sortie exacte contre un pool Stable, inversez avec getDxByDyBaseIn vous-même (voir Assistants de devis hors chaîne ci-dessous) et transmettez le résultat à swap avec fixedSide: "out".

Identifier un pool Stable

Deux signaux équivalents sur ApiV3PoolInfoStandardItem :
À la fois AMM v4 (version: 4, produit constant) et Stable AMM (version: 5) passent par la même API LiquidityModule sur le SDK. En interne, le module se distribue à :
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity pour les pools v4
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity pour les pools v5 (Stable)
Le programId du pool (retourné avec les clés du pool) indique au SDK quel programme appeler via CPI ; vous n’avez pas besoin de le coder en dur.

Trouver un pool par paire de mints

Si la paire de mints a à la fois un pool v4 (produit constant) et un pool v5 (stable), la réponse inclut les deux — choisissez celui dont votre flux a besoin, ou transmettez-les au programme AMM Routing et laissez-le choisir la meilleure route.

Effectuer un swap via un pool Stable

Le flux LiquidityModule.swap a la même forme que pour les pools v4 — transmettez-lui simplement un objet pool v5. Deux détails sont faciles à se tromper : computeAmountOut a besoin des réserves en direct du pool greffées sur les infos du pool (l’élément API seul ne les porte pas), et son slippage est un nombre simple, pas un Percent :
Le SDK lit le programId du pool à partir des clés du pool et se distribue dans le programme Stable AMM. Aucun argument programId spécial n’est nécessaire.

Ajouter et retirer de la liquidité

addLiquidity et removeLiquidity fonctionnent de manière identique sur les pools v4 et v5 :
En interne, le SDK émet InstructionType.AmmV5AddLiquidity parce que pooltype.includes("StablePool") est vrai. Le flux removeLiquidity correspondant est symétrique — transmettez lpAmount et les montants minimums que vous accepterez de chaque côté.

Assistants de devis hors chaîne (stable.ts)

Pour les devis côté serveur ou le backtesting, le SDK expose les mathématiques de courbe stable sous-jacentes :
Ce sont des fonctions pures — pas de RPC, pas de signature. Le ModelDataInfo on-chain est récupéré une fois par initLayout() et mis en cache dans raydium.liquidity.stableLayout, lisible comme .stableModelData. initStableModelLayout() est idempotent : il ne re-récupère que si validDataCount === 0, donc appeler initLayout() à nouveau est gratuit. Transmettez les réserves actuelles (x, y) et les assistants calculent en recherchant binaire dans la table de recherche et en interpolant linéairement entre les deux lignes DataElement environnantes. Voir products/stable/math pour l’algorithme sous-jacent.

Routage via AMM Routing (multi-hop / meilleur prix)

Si vous ne voulez pas choisir un lieu vous-même, le programme AMM Routing considérera chaque Raydium AMM (v4 / CPMM / CLMM / Stable) et routera via la combinaison la meilleure : Le routeur est un pipeline de cinq appels plutôt qu’un seul swap(), et il est écrit en entier — avec le conseil de mise en cache qui le rend utilisable en production — sur products/routing/code-demos. La forme est :
Il n’y a pas de raydium.tradeV2.fetchRoutes, et tradeV2.swap n’accepte pas inputMint / outputMint / slippage — il prend un swapInfo déjà calculé de getAllRouteComputeAmountOut. Pour un seul pool connu, utilisez le constructeur de ce type de pool (raydium.liquidity.swap pour AMM v4 et Stable, raydium.cpmm.swap, raydium.clmm.swap) comme montré plus tôt sur cette page.
C’est le chemin recommandé pour les swappeurs et agrégateurs en production — vous n’avez jamais besoin de décider manuellement si un pool Stable existe ou s’il est le meilleur lieu aujourd’hui.

Recommandations

  1. Pour les swaps des utilisateurs finaux, préférez le flux de routage tradeV2. Il gère chaque type de pool Raydium, y compris Stable.
  2. Pour les opérations spécifiques au pool (ajout/suppression de LP sur un pool Stable connu), utilisez directement LiquidityModule — il détecte automatiquement les pools v5.
  3. Pour les devis hors chaîne / analytique, appelez getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn après initLayout(). Pas de trafic RPC par devis après que les données du modèle soient mises en cache.
  4. Ne codez pas en dur les instructions SwapBaseIn brutes. La mise à jour du 2026-06-22 a supprimé les comptes OpenBook morts, donc la nouvelle disposition de swap prend 9 comptes (l’ancienne disposition de 18 comptes analyse toujours pour la compatibilité rétroactive). Deposit est maintenant 12 comptes (anciens 14 compatibles), Withdraw 12 (anciens 21/22 compatibles), et WithdrawPnl 10 sans aucun chemin de compatibilité. Les assistants pré-construits du SDK sélectionnent la disposition et l’ordre corrects pour vous ; rouler le vôtre est sujet aux erreurs. Voir products/stable/instructions pour les tableaux de comptes complets.

Où aller ensuite

  • Math — comment fonctionne l’interpolation de la table de recherche.
  • Instructions — référence complète des instructions.
  • AMM Routing — routage multi-pool sur AMM v4, CPMM, CLMM, Stable.
Sources :