Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Versionsbanner.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • Cluster: Solana mainnet-beta
  • Stable-AMM-Programm-ID: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (siehe reference/program-addresses)
  • Zuletzt verifiziert: 2026-09-09 gegen SDK 0.2.64-alpha Quellcode und die raydium-sdk-V2-demo amm/trade Demos
Das liquidity-Modul des SDK verarbeitet Stable-AMM-Pools nativ. Stable Pools erscheinen als version: 5 (oder pooltype: "StablePool") auf ApiV3PoolInfoStandardItem; die gleichen addLiquidity / removeLiquidity / Swap-Helfer funktionieren für sie wie für AMM-v4-Pools (version: 4) mit konstanter Produktformel — das SDK erkennt die Variante und gibt automatisch die korrekten Anweisungen aus. Die Off-Chain-Stable-Curve-Mathematik befindet sich in src/raydium/liquidity/stable.ts.

Setup

initLayout() ist für Stable Pools nicht optional. liquidity.computeAmountOut verzweigt sich auf poolInfo.version: Für Version 4 wird die Konstant-Produkt-Formel verwendet, und für alles andere wird this.stableLayout.stableModelData gelesen und die Nachschlagetabelle interpoliert. Dieser Cache ist leer, bis initLayout() ausgeführt wird. Daher erzeugt die Quotierung eines v5-Pools ohne ihn Müll statt einen Fehler. Es ist idempotent und kostengünstig — rufen Sie es einmal beim Start auf.Die Transaktions-Builder (swap, addLiquidity, removeLiquidity) benötigen es nicht: Sie verzweigen sich auf pooltype.includes("StablePool") und geben AmmV5*-Anweisungen aus, und die Mengengrenzen, die Sie übergeben, sind bereits berechnet.
liquidity.computeAmountIn unterstützt Stable Pools nicht. Im Gegensatz zu computeAmountOut hat es keine Versionsverzweigung — es wendet immer die Konstant-Produkt-Umkehrung an, daher gibt es auf einem v5-Pool ein falsches maxAmountIn zurück. Für einen Exact-Output-Swap gegen einen Stable Pool invertieren Sie selbst mit getDxByDyBaseIn (siehe Off-Chain-Quote-Helfer unten) und übergeben Sie das Ergebnis an swap mit fixedSide: "out".

Einen Stable Pool identifizieren

Zwei äquivalente Signale auf ApiV3PoolInfoStandardItem:
Sowohl AMM v4 (version: 4, Konstant-Produkt) als auch Stable AMM (version: 5) fließen durch die gleiche LiquidityModule-API im SDK. Intern verzweigt sich das Modul zu:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity für v4-Pools
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity für v5 (Stable) Pools
Die programId des Pools (wird mit den Pool-Schlüsseln zurückgegeben) teilt dem SDK mit, in welches Programm es CPI durchführen soll; Sie müssen es nicht hardcodieren.

Einen Pool nach Mint-Paar finden

Wenn das Mint-Paar sowohl einen v4 (Konstant-Produkt) Pool als auch einen v5 (Stable) Pool hat, enthält die Antwort beide — wählen Sie den, den Ihr Flow benötigt, oder übergeben Sie sie an das AMM Routing-Programm und lassen Sie es die beste Route wählen.

Durch einen Stable Pool swappen

Der LiquidityModule.swap-Flow hat die gleiche Form wie für v4-Pools — übergeben Sie einfach ein v5-Pool-Objekt. Zwei Details sind leicht zu übersehen: computeAmountOut benötigt die Live-Reserven des Pools, die auf die Pool-Info aufgepfropft sind (das API-Element allein trägt sie nicht), und sein slippage ist eine einfache Zahl, keine Percent:
Das SDK liest die programId des Pools aus den Pool-Schlüsseln und verzweigt sich in das Stable-AMM-Programm. Es ist kein spezielles programId-Argument erforderlich.

Liquidität hinzufügen und entfernen

addLiquidity und removeLiquidity funktionieren identisch über v4- und v5-Pools:
Intern gibt das SDK InstructionType.AmmV5AddLiquidity aus, weil pooltype.includes("StablePool") wahr ist. Der entsprechende removeLiquidity-Flow ist symmetrisch — geben Sie lpAmount und die minimalen Mengen ein, die Sie auf jeder Seite akzeptieren.

Off-Chain-Quote-Helfer (stable.ts)

Für serverseitige Quotierung oder Backtesting stellt das SDK die zugrunde liegende Stable-Curve-Mathematik bereit:
Dies sind reine Funktionen — kein RPC, kein Signieren. Die On-Chain-ModelDataInfo wird einmal von initLayout() abgerufen und im raydium.liquidity.stableLayout zwischengespeichert, lesbar als .stableModelData. initStableModelLayout() ist idempotent: Es ruft nur ab, während validDataCount === 0, daher ist ein erneuter Aufruf von initLayout() kostenlos. Übergeben Sie aktuelle Reserven (x, y) und die Helfer berechnen durch binäre Suche in der Nachschlagetabelle und lineare Interpolation zwischen den zwei umgebenden DataElement-Zeilen. Siehe products/stable/math für den zugrunde liegenden Algorithmus.

Routing durch AMM Routing (Multi-Hop / Best-Price)

Wenn Sie nicht selbst einen Veranstaltungsort wählen möchten, berücksichtigt das AMM Routing-Programm jeden Raydium-AMM (v4 / CPMM / CLMM / Stable) und leitet durch die beste Kombination: Der Router ist eine Fünf-Aufruf-Pipeline statt eines einzelnen swap(), und er ist vollständig ausgeschrieben — mit dem Caching-Rat, der ihn in der Produktion nutzbar macht — auf products/routing/code-demos. Die Form ist:
Es gibt kein raydium.tradeV2.fetchRoutes, und tradeV2.swap akzeptiert nicht inputMint / outputMint / slippage — es nimmt ein bereits berechnetes swapInfo von getAllRouteComputeAmountOut. Für einen einzelnen bekannten Pool verwenden Sie den Builder dieses Pool-Typs (raydium.liquidity.swap für AMM v4 und Stable, raydium.cpmm.swap, raydium.clmm.swap) wie früher auf dieser Seite gezeigt.
Dies ist der empfohlene Pfad für Produktions-Swapper und Aggregatoren — Sie müssen nie manuell entscheiden, ob ein Stable Pool existiert oder ob er heute der bessere Veranstaltungsort ist.

Empfehlungen

  1. Für End-User-Swaps bevorzugen Sie den tradeV2-Routing-Flow. Er verarbeitet jeden Raydium-Pool-Typ einschließlich Stable.
  2. Für Pool-spezifische Operationen (LP hinzufügen / entfernen auf einem bekannten Stable Pool) verwenden Sie das LiquidityModule direkt — es erkennt v5-Pools automatisch.
  3. Für Off-Chain-Quotierung / Analytik rufen Sie getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn nach initLayout() auf. Kein RPC-Verkehr pro Quotierung, nachdem die Modelldaten zwischengespeichert sind.
  4. Codieren Sie nicht manuell rohe SwapBaseIn-Anweisungen. Das 2026-06-22-Upgrade entfernte die toten OpenBook-Konten, daher benötigt das neue Swap-Layout 9 Konten (das alte 18-Konto-Layout wird immer noch für Rückwärtskompatibilität geparst). Deposit ist jetzt 12 Konten (alte 14 kompatibel), Withdraw 12 (alte 21/22 kompatibel), und WithdrawPnl 10 mit keinem Kompatibilitätspfad. Die vordefinierten Helfer des SDK wählen das korrekte Layout und die Reihenfolge für Sie aus; das Rollen Ihrer eigenen ist fehleranfällig. Siehe products/stable/instructions für die vollständigen Kontotabellen.

Wo es weitergeht

  • Math — wie die Nachschlagetabel-Interpolation funktioniert.
  • Instructions — vollständige Anweisungsreferenz.
  • AMM Routing — Multi-Pool-Routing über AMM v4, CPMM, CLMM, Stable.
Quellen: