Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Versionsbanner. Diese Seite dokumentiert @raydium-io/raydium-sdk-v2@0.2.64-alpha, die Version, die alle Code-Demos auf dieser Website verwenden. Das SDK ist noch nicht 1.0 und die Typ-Oberfläche hat sich über Releases hinweg entwickelt — fixieren Sie Ihre Version.Die Version wurde am 2026-09-09 von 0.2.42-alpha auf 0.2.64-alpha angehoben, zusammen mit den Programm-Upgrades: 0.2.64-alpha ist die aktuelle SDK-Version. Das raydium-sdk-V2-demo-Repository, auf das die Code-Demo-Seiten verlinken, installiert 0.2.62-alpha, daher fixieren Sie eine dieser Versionen, wenn Sie eine Demo wörtlich befolgen. Die Demos auf diesen Seiten wurden zuletzt gegen 0.2.42-alpha (2026-04) ausgeführt; ihre Aufrufsignaturen wurden am 2026-09-09 gegen die 0.2.64-alpha-Quelle erneut überprüft, aber behandeln Sie jede Abweichung als Dokumentationsfehler und öffnen Sie ein Issue.

Installation

Das SDK ist in TypeScript geschrieben und wird mit .d.ts neben seinem JS-Artefakt ausgeliefert. Minimale Toolchain: Node 18+, TypeScript 5.0+, moduleResolution: "bundler" oder "node16".

Initialisierung

Der Einstiegspunkt ist Raydium.load:
Raydium.load ist asynchron, weil es standardmäßig die Token-Liste (raydium.token.load()) von api-v3.raydium.io lädt. Übergeben Sie disableLoadToken: true, um diesen Abruf zu überspringen. Die Verfügbarkeits-Feature-Prüfung ist ein separater Aufruf von /v3/main/AvailabilityCheckAPI und wird bereits übersprungen, sofern Sie nicht explizit disableFeatureCheck: false übergeben. Gebührenkonfigurationen werden zur Ladezeit überhaupt nicht abgerufen — sie kommen bei der ersten Verwendung träge von raydium.api.getCpmmConfigs() / getClmmConfigs().

Die Modulfassaden

Nach dem Laden stellt das raydium-Objekt zehn Modulfassaden plus einen API-Client bereit:

Transaktions-Builder

Jede mutierende Funktion gibt einen Builder zurück, anstatt sofort auszuführen:
Zurückgegebene Felder:
  • execute — eine Komfortfunktion, die signiert und sendet. Äquivalent zu builder.execute.
  • builder — die TxBuilder-Instanz mit allen angesammelten Anweisungen und Unterzeichnern. builder.build() gibt ein TxBuildData zurück, dessen transaction eine einzelne Legacy-Transaction ist; builder.buildV0() gibt ein TxV0BuildData mit einer einzelnen VersionedTransaction zurück. Nur buildMultiTx / buildMultiTxV0 erzeugen ein Array.
  • transaction — die gebaute Transaction / VersionedTransaction.
  • instructionTypes / signers — die angesammelten Anweisungs-Labels und der Unterzeichner-Satz.
  • extInfo — produktspezifische Extras. Beispielsweise gibt cpmm.createPool extInfo.address.{poolId, lpMint, vaultA, vaultB} zurück; launchpad.createLaunchpad gibt extInfo.address zurück (ein LaunchpadPoolInfo plus poolId).
Es gibt kein Feld innerTransactions im Rückgabetyp — es zu destrukturieren ist ein TypeScript- Fehler. Builder, deren Rückgabetyp MakeMultiTxData ist (zum Beispiel clmm.harvestAllRewards, farm.harvestAllRewards, tradeV2.swap, launchpad.createLaunchpad), stellen stattdessen transactions bereit, und ihr execute erfordert { sequentially: boolean } und liefert { txIds } statt { txId }.
txVersion steuert das Legacy- vs. V0-Transaktionsformat. V0 (Address Lookup Tables) ist die Standard-Empfehlung — es ermöglicht größere Swaps in einer einzelnen Transaktion.

Warum asynchrone Builder?

Fast jeder Builder ruft intern On-Chain-State ab: Pool-Informationen (für Quotes), Token-Programm-Eigentümerschaft (für Token-2022 vs. SPL-Routing), Account-Rent-Exemption (für ATA-Erstellung) usw. Das SDK speichert aggressiv, aber der erste Aufruf für einen neuen Pool beinhaltet RPC-Roundtrips. Behalten Sie eine langlebige raydium-Instanz, um erneutes Abrufen zu vermeiden.

CLMM-Modul-Erweiterungen (neueste Version)

Die CLMM-Fassade erhielt Oberflächen für die neuen dynamischen Gebühren-, einseitigen Gebühren- und Limit-Order-Funktionen:
  • raydium.clmm.createCustomizablePool — Obermenge von createPool, die collectFeeOn und dynamicFeeConfig (den PublicKey des Config-Kontos) akzeptiert. Das Übergeben von dynamicFeeConfig ist es, was dynamische Gebühren aktiviert; es gibt kein separates enableDynamicFee-Flag und kein dynamicFeeConfigId. Klassisches createPool funktioniert weiterhin für Pools mit Standardgebühren.
  • raydium.clmm.openLimitOrder — öffnet eine Limit-Order mit einem einzelnen Tick. Nimmt poolInfo, baseIn (Richtung), orderTick, amount und optional tickArrayBitmap, noneIndex, ownerInfo. Verwenden Sie den exportierten Helfer getOrderTick({ baseIn, mintADecimal, mintBDecimal, tickSpacing, price }), um den Tick zu quantisieren.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — passen Sie den ungefüllten Teil einer bestehenden Order an. Beide nehmen { poolInfo, limitOrder, amount }; decreaseLimitOrder fügt ein optionales slippage hinzu. Das Verringern wird bei einer vollständig gefüllten Order mit InvalidOrderPhase zurückgewiesen.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — fegen Sie gefüllte Ausgaben zur ATA des Eigentümers. settleLimitOrder nimmt nur { limitOrder } — kein poolInfo. Entweder der Eigentümer der Order oder der limit_order_admin-Keeper des Programms können sie aufrufen.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — schließen Sie vollständig abgewickelte Orders, um Rent zurückzugewinnen.
  • raydium.api.getClmmDynamicConfigs() — REST-Helfer, der den neuen /main/clmm-dynamic-config-Endpunkt trifft. (Es gibt keinen Limit-Order-Config-Helfer und keinen solchen Endpunkt: Limit-Orders werden über den Tick geschlüsselt, nicht über ein Config-Konto pro Pool.)
Das Paket deklariert keine Subpath-Exporte, daher löst @raydium-io/raydium-sdk-v2/<anything> in keiner Schreibweise auf — importieren Sie alles aus dem Top-Level-Barrel. (Intern wurde src/raydium/clmm/utils/ in src/raydium/clmm/libraries/ umbenannt, aber das war nie ein öffentlicher Einstiegspunkt.) End-to-End-TypeScript-Walkthroughs finden Sie in products/clmm/code-demos.

Häufige Fallstricke

1. Cluster-Mismatch

Die SDK-Startkonfiguration ist clusterspezifisch. Das Mischen von cluster: "mainnet" mit einer Devnet-Connection verursacht stille Fehlleitung: Das SDK quotiert gegen Mainnet-AmmConfig, sendet aber an Devnet. Übergeben Sie immer beide.

2. Vergessen, ATAs vorab zu erstellen

Bei der ersten Interaktion mit einem Mint existiert das Associated Token Account des Benutzers möglicherweise nicht. Das SDK stellt automatisch eine AssociatedTokenAccount::create-Anweisung voran, wenn es ein fehlendes ATA erkennt, was eine kleine Menge Rent kostet. Wenn Ihre Wallet wenig SOL hat, schlägt dies stillschweigend fehl. Überprüfen und finanzieren Sie vor dem erneuten Versuch.

3. Veraltete poolInfo

poolInfo ist ein gecachter Snapshot. Wenn sich der Pool-Status seit dem Abrufen geändert hat (ein großer Trade hat den Preis bewegt, sagen wir), kann die minAmountOut des Swaps gegen den alten Status berechnet werden und unter dem On-Chain-Amount-Out landen, was zu einer Rückweisung führt. Rufen Sie poolInfo unmittelbar vor dem Erstellen von Transaktionen mit hohem Wert erneut ab, oder verwenden Sie das SDK’s computeAmountOut, das Reserven erneut abfragt.

4. Prioritätsgebühren

Das SDK fügt standardmäßig keine Compute-Unit-Preise hinzu. In Hochlast-Fenster (neue Pool-Starts, Meme-Coin-Events) bedeutet dies, dass Ihre Transaktion mit vielen anderen konkurriert und möglicherweise nicht landet. Geben Sie eine explizite computeBudgetConfig an:
Siehe integration-guides/priority-fee-tuning für Größenanleitungen.

5. Slippage-Toleranz muss dem Pool-Typ entsprechen

CPMM und AMM v4 verwenden CPMM-Mathematik (niedriger Impact bei normalen Trades). CLMM ist stückweise (Impact springt bei Tick-Übergängen). Wenn Sie eine 0,5%-Slippage-Toleranz aus einem CPMM-Beispiel in einen CLMM-Swap kopieren, der mehrere Ticks kreuzt, wird die Transaktion wahrscheinlich zurückgewiesen. Das SDK’s computeAmountOut gibt priceImpact zurück; dimensionieren Sie Ihre Toleranz darüber.

6. BN vs. number

Alle Betrag-Felder im SDK sind bn.js-BN-Instanzen — niemals JavaScript-number. Das Konvertieren von Betragswerten über .toNumber() schneidet stillschweigend bei 2^53 ab; für jeden Wert über etwa 9 Billiarden (nicht ungewöhnlich bei 9-dezimalen Mints) wird das falsche Ergebnis erzeugt. Behalten Sie alles in BN, bis zum finalen UI-Rendering.

Versionierungsrichtlinie

  • @raydium-io/raydium-sdk-v2 ist das einzige SDK, das Raydium verwaltet. Alle Docs, Demos und Integrationsleitfäden zielen darauf ab.
  • Ein älteres v1-Paket (@raydium-io/raydium-sdk) existiert auf npm aus historischen Gründen. Die Wartung endete, nachdem CPMM und LaunchLab ausgeliefert wurden (v1 erhielt niemals Unterstützung für eines davon), und es gab seit 2024 keine v1-Releases mehr. Behandeln Sie v1 als End-of-Life: Verwenden Sie es nicht für neuen Code und migrieren Sie alle verbleibenden v1-Integrationen zu v2.
  • SDK v2 ist vor 1.0. Breaking Changes zwischen 0.x Minor-Releases sind möglich; fixieren Sie die Version, die Sie überprüft haben, und überprüfen Sie die GitHub-Release-Notizen beim Upgrade.

Upgrade

Beim Upgrade zwischen SDK Minor-Versionen:
  1. Überprüfen Sie erneut den Rückgabetyp jedes mutierenden Aufrufs — Formänderungen (z. B. extInfo) landen häufig.
  2. Regenerieren Sie poolInfo-Abrufsignaturen — ein Feld könnte umbenannt worden sein.
  3. Überprüfen Sie Ihre Slippage-Behandlung erneut; das SDK hat sich über Releases hinweg zwischen Auto-Bound- und Opt-In-Bound-Verhalten verschoben.
  4. Wenn Sie raydium.tradeV2 (Routing) verwenden, überprüfen Sie die Route-Form erneut — es ist der instabilste Teil der Oberfläche. Beachten Sie, dass die Fassade von trade in tradeV2 umbenannt wurde; der alte Name existiert nicht mehr.

Hilfe erhalten

Für SDK- und API-Fragen: Für Sicherheitsprobleme posten Sie nicht in öffentlichen Kanälen — siehe security/disclosure.

Verweise

Quellen: