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.
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
| Instruction | Catégorie | Notes |
|---|
Initialize | Cycle de vie | Créer un pool (nécessite un compte model-data pré-alloué). |
PreInitialize | Cycle de vie | Aide héritée de pré-allocation. |
InitModelData | Configuration du modèle | Créer et initialiser la table de recherche. |
UpdateModelData | Configuration du modèle | Remplir jusqu’à 5 éléments de table par appel. |
Deposit | Liquidité | Ajouter de la liquidité, recevoir des LP. |
Withdraw | Liquidité | Brûler les LP, recevoir les deux côtés. |
SwapBaseIn | Swap | Swap à entrée exacte. |
SwapBaseOut | Swap | Swap à sortie exacte. |
MonitorStep | Crank | Régler OpenBook, mettre à jour les ordres. |
SetParams | Admin | Modifier les paramètres du pool. |
WithdrawPnl | Admin | Récupérer les frais de protocole accumulés. |
WithdrawSrm | Héritage | Récupérer les remises SRM (héritage). |
SimulateInfo | Diagnostic | Assistant de devis en lecture seule. |
Initialize
Amorcer un nouveau pool Stable AMM lié à un marché OpenBook existant et à un compte ModelDataInfo pré-créé.
Arguments
Comptes (modifiable W, signataire S)
| # | Nom | W | S | Notes |
|---|
| 1 | token_program | | | SPL Token. |
| 2 | system_program | | | |
| 3 | rent | | | |
| 4 | amm | W | | Compte AmmInfo du pool. |
| 5 | amm_authority | | | PDA à l’échelle du programme. |
| 6 | amm_open_orders | W | | OpenBook OpenOrders. |
| 7 | lp_mint | W | | Mint de jeton LP fongible. |
| 8 | coin_mint | | | |
| 9 | pc_mint | | | |
| 10 | pool_coin_token_account | W | | Coffre coin du pool. |
| 11 | pool_pc_token_account | W | | Coffre pc du pool. |
| 12 | amm_target_orders | W | | Grille pour les ordres OpenBook. |
| 13 | model_data_account | | | Le compte de la table de recherche. |
| 14 | serum_program | | | Programme OpenBook. |
| 15 | serum_market | | | Marché OpenBook. |
| 16 | user_dest_lp_token | W | | ATA LP du créateur (reçoit les LP initiaux). |
| 17 | user_wallet | W | S | Créateur ; paie le loyer, finance le dépôt initial. |
| (opt) | srm_token | W | | Compte 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)
| # | Nom | W | S | Notes |
|---|
| 1 | model_data_account | W | | Le compte de table avec 50k éléments. |
| 2 | amm_admin | | S | Administrateur 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)
| # | Nom | W | S | Notes |
|---|
| 1 | amm_admin | | S | Signataire (doit être l’administrateur du pool). |
| 2 | model_data_account | W | | Le 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)
| # | Nom | W | S | Notes |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_open_orders | W | | |
| 5 | amm_target_orders | W | | |
| 6 | pool_coin_token_account | W | | |
| 7 | pool_pc_token_account | W | | |
| 8 | model_data_account | | | Table de recherche en lecture seule. |
| 9 | serum_program | | | |
| 10 | serum_market | W | | |
| 11 | serum_bids | W | | |
| 12 | serum_asks | W | | |
| 13 | serum_event_queue | W | | |
| 14 | serum_coin_vault | W | | |
| 15 | serum_pc_vault | W | | |
| 16 | serum_vault_signer | | | |
| 17 | user_source_token | W | | Compte de jeton d’entrée de l’utilisateur. |
| 18 | user_dest_token | W | | Compte de jeton de sortie de l’utilisateur. |
| 19 | user_owner | | S | Utilisateur (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)
| # | Nom | W | S | Notes |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_open_orders | W | | |
| 5 | pool_coin_token_account | W | | |
| 6 | pool_pc_token_account | W | | |
| 7 | coin_pnl_dest | W | | Compte coin de l’administrateur (reçoit le frais). |
| 8 | pc_pnl_dest | W | | Compte pc de l’administrateur (reçoit le frais). |
| 9 | pnl_admin | | S | Signataire (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
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)