Passer au contenu principal

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 →
Le Stable AMM partage la plupart de sa surface d’instructions avec AMM v4. Les instructions uniques sont InitModelData et UpdateModelData, qui remplissent et mettent à jour la table de recherche. Toutes les autres opérations (swap, dépôt, retrait, crank) suivent le même motif qu’AMM v4.

Inventaire des instructions

InstructionCatégorieNotes
InitializeCycle de vieCréer un pool (nécessite un compte model-data pré-alloué).
PreInitializeCycle de vieAide héritée de pré-allocation.
InitModelDataConfiguration du modèleCréer et initialiser la table de recherche.
UpdateModelDataConfiguration du modèleRemplir jusqu’à 5 éléments de table par appel.
DepositLiquiditéAjouter de la liquidité, recevoir des LP.
WithdrawLiquiditéBrûler les LP, recevoir les deux côtés.
SwapBaseInSwapSwap à entrée exacte.
SwapBaseOutSwapSwap à sortie exacte.
MonitorStepCrankRégler OpenBook, mettre à jour les ordres.
SetParamsAdminModifier les paramètres du pool.
WithdrawPnlAdminRécupérer les frais de protocole accumulés.
WithdrawSrmHéritageRécupérer les remises SRM (héritage).
SimulateInfoDiagnosticAssistant de devis en lecture seule.

Initialize

Amorcer un nouveau pool Stable AMM lié à un marché OpenBook existant et à un compte ModelDataInfo pré-créé. Arguments
nonce: u8
open_time: u64
Comptes (modifiable W, signataire S)
#NomWSNotes
1token_programSPL Token.
2system_program
3rent
4ammWCompte AmmInfo du pool.
5amm_authorityPDA à l’échelle du programme.
6amm_open_ordersWOpenBook OpenOrders.
7lp_mintWMint de jeton LP fongible.
8coin_mint
9pc_mint
10pool_coin_token_accountWCoffre coin du pool.
11pool_pc_token_accountWCoffre pc du pool.
12amm_target_ordersWGrille pour les ordres OpenBook.
13model_data_accountLe compte de la table de recherche.
14serum_programProgramme OpenBook.
15serum_marketMarché OpenBook.
16user_dest_lp_tokenWATA LP du créateur (reçoit les LP initiaux).
17user_walletWSCréateur ; paie le loyer, finance le dépôt initial.
(opt)srm_tokenWCompte de jeton SRM pour les réductions de frais (héritage).
Préconditions
  • model_data_account doit déjà être créé et initialisé par un InitModelData antérieur.
  • lp_mint doit être vide (zéro supply).
  • Les coffres doivent exister et être propriété de amm_authority.
Postconditions
  • AmmInfo est initialisé avec toutes les références.
  • TargetOrders est remis à zéro et prêt pour le premier MonitorStep.
  • Les jetons LP initiaux sont créés et envoyés à user_dest_lp_token.
  • Les ordres OpenBook n’ont pas encore été affichés ; le premier MonitorStep les affiche.

InitModelData

Créer et initialiser le compte ModelDataInfo. Doit être appelé une fois avant Initialize. Arguments
multiplier: u64       // facteur d'échelle (par exemple, 10^6)
Comptes (modifiable W, signataire S)
#NomWSNotes
1model_data_accountWLe compte de table avec 50k éléments.
2amm_adminSAdministrateur du pool (doit signer pour prouver l’autorité).
Préconditions
  • model_data_account doit être suffisamment grand (~1,2 MB pour 50k × 24 octets).
  • model_data_account doit être propriété du programme Stable.
Postconditions
  • status = Initialized.
  • multiplier est défini.
  • valid_data_count = 0 (aucun élément peuplé encore ; appelez UpdateModelData pour en ajouter).
  • Le tableau elements est remis à zéro.

UpdateModelData

Remplir jusqu’à 5 éléments de table en un seul appel. Doit être appelé après InitModelData mais avant que les swaps ne commencent à utiliser la table. Arguments
array_data: [UpdateModelData; 5]

pub struct UpdateModelData {
  pub index: u64,
  pub data: DataElement,
}
Comptes (modifiable W, signataire S)
#NomWSNotes
1amm_adminSSignataire (doit être l’administrateur du pool).
2model_data_accountWLe compte de table.
Préconditions
  • amm_admin doit correspondre à AmmInfo.amm_admin.
  • Chaque index dans array_data doit être valide (dans 50 000).
  • Les entrées doivent être triées (non validé on-chain pour la rapidité) : x ascendant, y descendant, prix ascendant.
Postconditions
  • Les éléments sont écrits dans model_data_account.elements[index] pour chaque entrée.
  • valid_data_count est mis à jour avec l’index maximum écrit + 1.
Note de gouvernance : Il n’y a pas d’application on-chain de l’ordre de tri ou de la cohérence des prix. Un administrateur malveillant ou négligent peut corrompre la table et causer des devis incorrects. En pratique, le multisig de Raydium contrôle cette adresse.

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 — comme AMM v4, ~13 comptes. Doit inclure le model_data_account en lecture seule. Math — 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 les LP, recevoir les deux côtés pro-rata. Arguments
amount: u64            // Jetons LP à brûler
Comptes — comme AMM v4, avec model_data_account en lecture seule. Préconditions
  • user_lp_token_account 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é 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 (~17 au total)
#NomWSNotes
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5amm_target_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8model_data_accountTable de recherche en lecture seule.
9serum_program
10serum_marketW
11serum_bidsW
12serum_asksW
13serum_event_queueW
14serum_coin_vaultW
15serum_pc_vaultW
16serum_vault_signer
17user_source_tokenWCompte de jeton d’entrée de l’utilisateur.
18user_dest_tokenWCompte de jeton de sortie de l’utilisateur.
19user_ownerSUtilisateur (signataire de la transaction).
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_*.
  • Les ordres OpenBook peuvent être réglés s’ils sont remplis.
Math — Interpolation de la table de recherche comme décrit dans products/stable/math.

SwapBaseOut

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

MonitorStep

Crank sans permission : régler les remplissages OpenBook, mettre à jour la grille d’ordres limités. Arguments
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
Comptes (~18 au total) — comme AMM v4 MonitorStep plus le model_data_account en lecture seule. Préconditions
  • Les références de compte OpenBook doivent correspondre au marché lié du pool.
Postconditions
  • Les remplissages OpenBook en attente sont réglés dans les coffres du pool.
  • De nouveaux ordres limités sont affichés sur OpenBook selon la courbe de la table de recherche.
  • TargetOrders est mis à jour.

SetParams

Administrateur uniquement. Modifier les paramètres du pool (statut, état, frais, propriétaire, clé model-data, etc.). Arguments
param: u8              // quel paramètre changer (Status, State, Fees, etc.)
value: Option<u64>    // nouvelle valeur (si param est numérique)
new_pubkey: Option<Pubkey>  // nouvelle adresse (si param est une clé de compte)
fees: Option<Fees>    // nouveaux frais (si param est Fees)
Comptes — varie selon le param. Nécessite toujours amm_admin comme signataire. Paramètres courants :
  • param = 0 (Status) — modifier le masque de bit d’opération.
  • param = 9 (Fees) — modifier trade_fee, split pnl, etc.
  • param = 11 (ModelDataKey) — réassocier la table de recherche (rare, nécessite l’action de l’administrateur).

WithdrawPnl

Administrateur uniquement. Récupérer les frais de protocole accumulés de need_take_pnl_* dans les comptes PnL désignés. Arguments — aucun (piloté par état). Comptes (~14 au total)
#NomWSNotes
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5pool_coin_token_accountW
6pool_pc_token_accountW
7coin_pnl_destWCompte coin de l’administrateur (reçoit le frais).
8pc_pnl_destWCompte pc de l’administrateur (reçoit le frais).
9pnl_adminSSignataire (doit correspondre à la propriété du pool).
10+Comptes OpenBook (~4)Régler les remplissages en attente en premier.
Préconditions
  • pnl_admin doit être autorisé.
Postconditions
  • need_take_pnl_coin et need_take_pnl_pc sont transférés aux comptes de l’administrateur.
  • Les compteurs sont remis à zéro.

WithdrawSrm

Héritage (ne pas utiliser sur les nouveaux pools). Récupère les remises de jetons SRM de réduction de frais des premiers pools de l’ère Serum. Arguments
amount: u64

SimulateInfo

Assistant de devis en lecture seule pour les clients et le SDK. Arguments
param: u8              // PoolInfo, SwapBaseInInfo, SwapBaseOutInfo, RunCrankInfo
swap_base_in_value: Option<SwapInstructionBaseIn>
swap_base_out_value: Option<SwapInstructionBaseOut>
Utilisation — invoqué via simulateTransaction pour obtenir un devis sans exécuter un swap.

Où aller ensuite

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