Passer au contenu principal
Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Le Stable AMM est un programme indépendant avec son propre ID de programme. Ce n’est pas un mode du programme AMM v4, et il n’est pas tradé « via » AMM v4 — il est déployé, mis à jour et appelé séparément. Il ressemble à AMM v4 uniquement par ses conventions de frais et de disposition des comptes.
Mise à jour du 2026-06-22 — suppression du code OpenBook (market) mort. Le Stable AMM a cessé de poster des ordres sur OpenBook il y a longtemps ; le chemin de market-making du carnet d’ordres est dormant depuis des années. Cette mise à jour supprime les comptes et le code liés au marché restants — elle ne change pas le comportement du trading en direct.Deux conséquences pour les intégrateurs :
  1. Dispositions de comptes plus petites. SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), et Withdraw (21/22 → 12) suppriment les comptes Serum/market morts. Les anciennes dispositions restent analysables pour la compatibilité rétroactive. WithdrawPnl (16 → 10) est un changement de rupture difficile sans chemin de compatibilité (admin uniquement).
  2. La plupart des instructions sont supprimées. Seules SwapBaseIn, SwapBaseOut, Deposit, Withdraw, et WithdrawPnl restent appelables. Toutes les autres instructions ne peuvent plus être appelées.
Journal des modifications : reference/changelog.

Inventaire des instructions

Appelables

InstructionCatégorieNotes
DepositLiquiditéAjouter de la liquidité, recevoir des LP. Nouvelle disposition de 12 comptes ; l’ancienne disposition de 14 comptes reste compatible.
WithdrawLiquiditéBrûler des LP, recevoir les deux côtés. Nouvelle disposition de 12 comptes ; l’ancienne disposition de 21/22 comptes reste compatible.
SwapBaseInSwapSwap à entrée exacte. Nouvelle disposition de 9 comptes ; l’ancienne disposition de 18 comptes reste compatible.
SwapBaseOutSwapSwap à sortie exacte. Nouvelle disposition de 9 comptes ; l’ancienne disposition de 18 comptes reste compatible.
WithdrawPnlAdminRécupérer les frais de protocole accumulés. Nouvelle disposition de 10 comptes (rupture difficile — pas de compatibilité avec l’ancienne disposition).

Supprimées (plus appelables)

Celles-ci ont été supprimées lors de la mise à jour du 2026-06-22 et ne peuvent plus être invoquées. Voir Instructions supprimées.
InstructionAncienne catégorieAncien objectif
InitializeCycle de vieCréer un pool.
PreInitializeCycle de vieAide de pré-allocation héritée.
InitModelDataConfiguration du modèleCréer et initialiser la table de recherche.
UpdateModelDataConfiguration du modèleRemplir jusqu’à 5 éléments de table par appel.
MonitorStepCrankRégler les remplissages OpenBook, reposter les ordres.
SetParamsAdminModifier les paramètres du pool.
WithdrawSrmHéritéRécupérer les remboursements de réduction de frais SRM.
SimulateInfoDiagnosticAide de devis en lecture seule.

Deposit

Ajouter de la liquidité, recevoir des jetons LP. Arguments
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base sur coin, 1 = base sur pc
Comptes — nouvelle disposition, 12 comptes (inscriptible W, signataire S)
#NomWSNotes
0token_programSPL Token.
1ammWAmmInfo du pool.
2amm_authorityPDA à l’échelle du programme.
3amm_target_ordersW
4amm_lp_mintWMint LP.
5amm_coin_vaultWCoffre-fort coin du pool.
6amm_pc_vaultWCoffre-fort pc du pool.
7model_data_accountTable de recherche en lecture seule.
8user_source_coinWEntrée coin de l’utilisateur.
9user_source_pcWEntrée pc de l’utilisateur.
10user_dest_lpWATA LP de l’utilisateur.
11user_source_ownerSSignataire de la transaction.
Compatibilité : amm_open_orders (ancien #3) et serum_market (ancien #9) sont supprimés. Quand 14 comptes sont passés, l’instruction est analysée avec l’ancienne disposition de 14 comptes ; les comptes Serum sont ignorés. Mathématiques — pro-rata standard utilisant la table de recherche pour calculer le ratio. Le SDK calcule la paire coin/pc pour le montant LP souhaité et vérifie par rapport aux plafonds maximaux.

Withdraw

Brûler des LP, recevoir les deux côtés pro-rata. Arguments
amount: u64            // Jetons LP à brûler
Comptes — nouvelle disposition, 12 comptes (inscriptible W, signataire S)
#NomWSNotes
0token_programSPL Token.
1ammWAmmInfo du pool.
2amm_authorityPDA à l’échelle du programme.
3amm_target_ordersW
4amm_lp_mintWMint LP.
5amm_coin_vaultWCoffre-fort coin du pool.
6amm_pc_vaultWCoffre-fort pc du pool.
7model_data_accountTable de recherche en lecture seule.
8user_source_lpWSource LP de l’utilisateur.
9user_dest_coinWSortie coin de l’utilisateur.
10user_dest_pcWSortie pc de l’utilisateur.
11user_lp_ownerSSignataire de la transaction.
Compatibilité : neuf comptes Serum (amm_open_orders, serum_program, serum_market, serum_coin_vault, serum_pc_vault, serum_vault_signer, serum_event_q, serum_bids, serum_asks) sont supprimés. Les anciennes dispositions de 21 ou 22 comptes sont toujours acceptées. Notez cependant que la logique de frais de parrainage pour le 22e compte optionnel referrer_pc_wallet a été supprimée — il peut toujours être passé mais n’a plus d’effet. Préconditions
  • user_source_lp détient au moins amount.
Postconditions
  • amount jetons LP sont brûlés.
  • L’utilisateur reçoit les montants coin et pc selon le pro-rata actuel, ajustés pour les frais accumulés.

SwapBaseIn

Swap à entrée exacte utilisant la table de recherche pour la tarification. Arguments
amount_in: u64
minimum_amount_out: u64
Comptes — nouvelle disposition, 9 comptes (inscriptible W, signataire S)
#NomWSNotes
0spl_token programSPL Token.
1ammWAmmInfo du pool.
2amm_authorityPDA à l’échelle du programme.
3amm_coin_vaultWCoffre-fort coin du pool.
4amm_pc_vaultWCoffre-fort pc du pool.
5model_data_accountTable de recherche en lecture seule.
6user_source_tokenWCompte de jeton d’entrée de l’utilisateur.
7user_destination_tokenWCompte de jeton de sortie de l’utilisateur.
8user_source_ownerSUtilisateur (signataire de la transaction).
Compatibilité : les neuf comptes OpenBook (amm_open_orders, serum_program, serum_market, serum_bids, serum_asks, serum_event_queue, serum_coin_vault, serum_pc_vault, serum_vault_signer) sont supprimés. Si le nombre de comptes passés n’est pas 9, l’instruction est analysée avec l’ancienne disposition de 18 comptes ; les comptes Serum doivent toujours occuper leurs positions, mais leur contenu n’est plus validé ni utilisé. Préconditions
  • amm.status permet le swap.
  • user_source_token détient ≥ amount_in.
Postconditions
  • L’utilisateur perd amount_in, gagne amount_out ≥ minimum_amount_out.
  • Les frais du pool incrémentent les compteurs need_take_pnl_*.
Mathématiques — Interpolation de table de recherche comme décrit dans products/stable/math.

SwapBaseOut

Swap à sortie exacte (inverse de SwapBaseIn). Même disposition de 9 comptes, direction mathématique différente. Arguments
max_amount_in: u64
amount_out: u64

WithdrawPnl

Admin uniquement. Récupérer les frais de protocole accumulés de need_take_pnl_* dans les comptes PnL désignés.
Changement de rupture difficile — pas de chemin de compatibilité. Cette instruction n’a pas d’analyse pour l’ancienne disposition. L’envoi de l’ancienne disposition échoue avec des erreurs de validation telles que InvalidTokenCoin en raison du désalignement des comptes (ancien #3 était open_orders). Les outils d’administration qui appellent WithdrawPnl doivent être mis à jour vers la nouvelle disposition de 10 comptes.
Arguments — aucun (piloté par l’état). Comptes — nouvelle disposition, 10 comptes fixes, admin uniquement (inscriptible W, signataire S)
#NomWSNotes
0spl_token programSPL Token.
1ammWAmmInfo du pool.
2amm_authorityPDA à l’échelle du programme.
3amm_coin_vaultWCoffre-fort coin du pool.
4amm_pc_vaultWCoffre-fort pc du pool.
5amm_target_ordersW
6model_dataTable de recherche.
7user_coinWCompte coin de l’admin (reçoit les frais).
8user_pcWCompte pc de l’admin (reçoit les frais).
9amm_adminSAdmin du pool (signataire).
Changement logique : quand les fonds disponibles du pool sont insuffisants pour retirer le PnL accumulé, le pool n’est plus mis en CancelAllOrdersState / Disabled ; l’instruction retourne TakePnlError directement. Le referrer_pc_wallet optionnel a également été supprimé. Préconditions
  • amm_admin doit être autorisé.
Postconditions
  • need_take_pnl_coin et need_take_pnl_pc sont transférés aux comptes de l’admin.
  • Les compteurs sont remis à zéro.

Instructions supprimées

Les instructions suivantes ont été supprimées lors de la mise à jour du 2026-06-22 et ne peuvent plus être appelées. Elles sont documentées ici uniquement pour que les intégrateurs les reconnaissent dans les transactions historiques et les SDK.
  • Initialize — autrefois amorçait un nouveau pool Stable AMM. Supprimée.
  • PreInitialize — aide de pré-allocation héritée. Supprimée.
  • InitModelData — autrefois créait et initialisait la table de recherche ModelDataInfo. Supprimée.
  • UpdateModelData — autrefois remplissait jusqu’à 5 éléments de table de recherche par appel. Supprimée.
  • MonitorStep — le crank OpenBook qui réglait les remplissages et repostait la grille d’ordres. Déjà longtemps dormant après que le pool ait cessé de poster sur OpenBook ; maintenant supprimée.
  • SetParams — modifications des paramètres d’administration (statut, frais, propriétaire, clé de données de modèle, etc.). Supprimée.
  • WithdrawSrm — récupérait les remboursements de réduction de frais SRM des pools de l’ère Serum précoce. Supprimée.
  • SimulateInfo — aide de devis en lecture seule. Supprimée ; utilisez les aides de courbe stable hors chaîne du SDK pour les devis (voir Démos de code).

Où aller ensuite

  • Comptes — pour les dispositions et tailles des champs de compte.
  • Mathématiques — pour la logique d’interpolation de table de recherche.
  • Démos de code — pour voir comment appeler celles-ci depuis le SDK.
Sources :
  • raydium-stable/program/src/instruction.rs (enum et pack/unpack)
  • raydium-stable/program/src/processor.rs (logique d’exécution)