Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Stable AMM ist ein unabhängiges Programm mit eigener Program ID. Es ist kein Modus des AMM v4 Programms und wird nicht „durch” AMM v4 gehandelt — es wird separat bereitgestellt, aktualisiert und aufgerufen. Es ähnelt AMM v4 nur in Gebühren- und Account-Layout-Konventionen.
Upgrade vom 2026-06-22 — Entfernung von inaktivem OpenBook (Market) Code. Stable AMM hat schon lange keine Aufträge mehr auf OpenBook gepostet; der Orderbook-Market-Making-Pfad ist seit Jahren inaktiv. Dieses Upgrade löscht die verbleibenden marktbezogenen Accounts und Code — es ändert nicht das Live-Trading-Verhalten.Zwei Konsequenzen für Integratoren:
  1. Kleinere Account-Layouts. SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), und Withdraw (21/22 → 12) entfernen die inaktiven Serum/Market-Accounts. Alte Layouts werden aus Gründen der Rückwärtskompatibilität weiterhin geparst. WithdrawPnl (16 → 10) ist eine harte Breaking Change ohne Kompatibilitätspfad (nur Admin).
  2. Die meisten Anweisungen werden entfernt. Nur SwapBaseIn, SwapBaseOut, Deposit, Withdraw und WithdrawPnl bleiben aufrufbar. Alle anderen Anweisungen können nicht mehr aufgerufen werden.
Changelog: reference/changelog.

Anweisungsbestand

Aufrufbar

AnweisungKategorieHinweise
DepositLiquiditätLiquidität hinzufügen, LP erhalten. Neues 12-Account-Layout; altes 14-Account-Layout noch kompatibel.
WithdrawLiquiditätLP verbrennen, beide Seiten erhalten. Neues 12-Account-Layout; altes 21/22-Account-Layout noch kompatibel.
SwapBaseInSwapExact-Input-Swap. Neues 9-Account-Layout; altes 18-Account-Layout noch kompatibel.
SwapBaseOutSwapExact-Output-Swap. Neues 9-Account-Layout; altes 18-Account-Layout noch kompatibel.
WithdrawPnlAdminProtokollgebühren einziehen. Neues 10-Account-Layout (harte Breaking Change — keine Kompatibilität mit altem Layout).

Entfernt (nicht mehr aufrufbar)

Diese wurden beim Upgrade vom 2026-06-22 entfernt und können nicht mehr aufgerufen werden. Siehe Entfernte Anweisungen.
AnweisungFrühere KategorieFrüherer Zweck
InitializeLebenszyklusPool erstellen.
PreInitializeLebenszyklusLegacy-Vorab-Zuordnungs-Helfer.
InitModelDataModelleinrichtungLookup-Tabelle erstellen und initialisieren.
UpdateModelDataModelleinrichtungBis zu 5 Tabellenelemente pro Aufruf einfügen.
MonitorStepCrankOpenBook-Fills abwickeln, Aufträge neu posten.
SetParamsAdminPool-Parameter ändern.
WithdrawSrmLegacySRM-Gebührenrabatt-Rückerstattungen einziehen.
SimulateInfoDiagnoseRead-Only-Quote-Helfer.

Deposit

Liquidität hinzufügen, LP-Token erhalten. Argumente
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base on coin, 1 = base on pc
Accounts — neues Layout, 12 Accounts (schreibbar W, Unterzeichner S)
#NameWSHinweise
0token_programSPL Token.
1ammWPool’s AmmInfo.
2amm_authorityProgrammweite PDA.
3amm_target_ordersW
4amm_lp_mintWLP Mint.
5amm_coin_vaultWPool Coin Vault.
6amm_pc_vaultWPool PC Vault.
7model_data_accountRead-Only Lookup-Tabelle.
8user_source_coinWCoin-Eingabe des Benutzers.
9user_source_pcWPC-Eingabe des Benutzers.
10user_dest_lpWLP ATA des Benutzers.
11user_source_ownerSTransaktionsunterzeichner.
Kompatibilität: amm_open_orders (altes #3) und serum_market (altes #9) werden entfernt. Wenn 14 Accounts übergeben werden, wird die Anweisung mit dem alten 14-Account-Layout geparst; die Serum-Accounts werden ignoriert. Mathematik — Standard-Pro-Rata unter Verwendung der Lookup-Tabelle zur Berechnung des Verhältnisses. Das SDK berechnet das Coin/PC-Paar für die gewünschte LP-Menge und prüft gegen maximale Obergrenzen.

Withdraw

LP verbrennen, beide Seiten pro-rata erhalten. Argumente
amount: u64            // LP-Token zum Verbrennen
Accounts — neues Layout, 12 Accounts (schreibbar W, Unterzeichner S)
#NameWSHinweise
0token_programSPL Token.
1ammWPool’s AmmInfo.
2amm_authorityProgrammweite PDA.
3amm_target_ordersW
4amm_lp_mintWLP Mint.
5amm_coin_vaultWPool Coin Vault.
6amm_pc_vaultWPool PC Vault.
7model_data_accountRead-Only Lookup-Tabelle.
8user_source_lpWLP-Quelle des Benutzers.
9user_dest_coinWCoin-Ausgabe des Benutzers.
10user_dest_pcWPC-Ausgabe des Benutzers.
11user_lp_ownerSTransaktionsunterzeichner.
Kompatibilität: neun Serum-Accounts (amm_open_orders, serum_program, serum_market, serum_coin_vault, serum_pc_vault, serum_vault_signer, serum_event_q, serum_bids, serum_asks) werden entfernt. Die alten 21- oder 22-Account-Layouts werden weiterhin akzeptiert. Beachten Sie jedoch, dass die Referral-Fee-Logik für den 22. optionalen referrer_pc_wallet Account entfernt wurde — er kann weiterhin übergeben werden, hat aber keine Auswirkung mehr. Vorbedingungen
  • user_source_lp hält mindestens amount.
Nachbedingungen
  • amount LP-Token werden verbrannt.
  • Der Benutzer erhält Coin- und PC-Beträge gemäß dem aktuellen Pro-Rata, angepasst für aufgelaufene Gebühren.

SwapBaseIn

Exact-Input-Swap unter Verwendung der Lookup-Tabelle für Preisgestaltung. Argumente
amount_in: u64
minimum_amount_out: u64
Accounts — neues Layout, 9 Accounts (schreibbar W, Unterzeichner S)
#NameWSHinweise
0spl_token programSPL Token.
1ammWPool’s AmmInfo.
2amm_authorityProgrammweite PDA.
3amm_coin_vaultWPool Coin Vault.
4amm_pc_vaultWPool PC Vault.
5model_data_accountRead-Only Lookup-Tabelle.
6user_source_tokenWInput-Token-Account des Benutzers.
7user_destination_tokenWOutput-Token-Account des Benutzers.
8user_source_ownerSBenutzer (Transaktionsunterzeichner).
Kompatibilität: die neun OpenBook-Accounts (amm_open_orders, serum_program, serum_market, serum_bids, serum_asks, serum_event_queue, serum_coin_vault, serum_pc_vault, serum_vault_signer) werden entfernt. Wenn die Anzahl der übergebenen Accounts nicht 9 ist, wird die Anweisung mit dem alten 18-Account-Layout geparst; die Serum-Accounts müssen weiterhin ihre Positionen einnehmen, aber ihr Inhalt wird nicht mehr validiert oder verwendet. Vorbedingungen
  • amm.status erlaubt Swap.
  • user_source_token hält ≥ amount_in.
Nachbedingungen
  • Benutzer verliert amount_in, gewinnt amount_out ≥ minimum_amount_out.
  • Pool-Gebühren erhöhen need_take_pnl_* Zähler.
Mathematik — Lookup-Tabellen-Interpolation wie in products/stable/math beschrieben.

SwapBaseOut

Exact-Output-Swap (Umkehrung von SwapBaseIn). Gleiches 9-Account-Layout, andere Mathematik-Richtung. Argumente
max_amount_in: u64
amount_out: u64

WithdrawPnl

Nur Admin. Aufgelaufene Protokollgebühren von need_take_pnl_* in designierte PnL-Accounts einziehen.
Harte Breaking Change — kein Kompatibilitätspfad. Diese Anweisung hat kein Parsing für das alte Layout. Das Senden des alten Layouts schlägt mit Validierungsfehlern wie InvalidTokenCoin fehl, da die Accounts nicht ausgerichtet sind (altes #3 war open_orders). Admin-Tools, die WithdrawPnl aufrufen, müssen auf das neue 10-Account-Layout aktualisiert werden.
Argumente — keine (zustandsgesteuert). Accounts — neues Layout, feste 10 Accounts, nur Admin (schreibbar W, Unterzeichner S)
#NameWSHinweise
0spl_token programSPL Token.
1ammWPool’s AmmInfo.
2amm_authorityProgrammweite PDA.
3amm_coin_vaultWPool Coin Vault.
4amm_pc_vaultWPool PC Vault.
5amm_target_ordersW
6model_dataLookup-Tabelle.
7user_coinWCoin-Account des Admins (erhält Gebühr).
8user_pcWPC-Account des Admins (erhält Gebühr).
9amm_adminSPool-Admin (Unterzeichner).
Logikänderung: wenn die verfügbaren Mittel des Pools nicht ausreichen, um das aufgelaufene PnL abzubuchen, wird der Pool nicht mehr in CancelAllOrdersState / Disabled versetzt; die Anweisung gibt stattdessen direkt TakePnlError zurück. Der optionale referrer_pc_wallet wurde ebenfalls entfernt. Vorbedingungen
  • amm_admin muss autorisiert sein.
Nachbedingungen
  • need_take_pnl_coin und need_take_pnl_pc werden auf die Admin-Accounts übertragen.
  • Zähler werden auf Null gesetzt.

Entfernte Anweisungen

Die folgenden Anweisungen wurden beim Upgrade vom 2026-06-22 entfernt und können nicht mehr aufgerufen werden. Sie werden hier nur dokumentiert, damit Integratoren sie in historischen Transaktionen und SDKs erkennen können.
  • Initialize — bootstrappte früher einen neuen Stable AMM Pool. Entfernt.
  • PreInitialize — Legacy-Vorab-Zuordnungs-Helfer. Entfernt.
  • InitModelData — erstellte und initialisierte früher die ModelDataInfo Lookup-Tabelle. Entfernt.
  • UpdateModelData — füllte früher bis zu 5 Lookup-Tabellen-Elemente pro Aufruf. Entfernt.
  • MonitorStep — der OpenBook-Crank, der Fills abwickelte und das Auftrags-Grid neu postete. Bereits lange inaktiv, nachdem der Pool aufgehört hatte, auf OpenBook zu posten; jetzt entfernt.
  • SetParams — Admin-Parameteränderungen (Status, Gebühren, Besitzer, Modell-Datenschlüssel, etc.). Entfernt.
  • WithdrawSrm — zog SRM-Gebührenrabatt-Rückerstattungen aus frühen Serum-Ära-Pools ein. Entfernt.
  • SimulateInfo — Read-Only-Quote-Helfer. Entfernt; verwenden Sie stattdessen die Off-Chain-Stable-Curve-Helfer des SDK zum Quoting (siehe Code-Demos).

Nächste Schritte

  • Accounts — für Account-Feldlayouts und Größen.
  • Mathematik — für die Lookup-Tabellen-Interpolationslogik.
  • Code-Demos — um zu sehen, wie diese vom SDK aufgerufen werden.
Quellen:
  • raydium-stable/program/src/instruction.rs (enum und pack/unpack)
  • raydium-stable/program/src/processor.rs (Ausführungslogik)