Zum Hauptinhalt springen

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.

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.42-alpha, die Version, die für alle Code-Beispiele dieser Website überprüft wurde (2026-04). Das SDK ist noch nicht 1.0, und die Typ-Oberfläche hat sich zwischen Versionen verändert – fixieren Sie Ihre Version.

Installation

npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# oder
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
Das SDK ist in TypeScript geschrieben und wird mit .d.ts neben dem JS-Artefakt ausgeliefert. Minimale Toolchain: Node 18+, TypeScript 5.0+, moduleResolution: "bundler" oder "node16".

Initialisierung

Der Einstiegspunkt ist Raydium.load:
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // skip the SDK's startup feature-detect API call
  blockhashCommitment: "confirmed",
});
Raydium.load ist async, weil beim Start eine kleine /config-Payload von api-v3.raydium.io abgerufen wird (mit aktuellen AmmConfig-Konten, Gebührensätzen usw.). Setzen Sie disableFeatureCheck: true in Offline-Umgebungen; Sie müssen diese Werte dann manuell an einige Builder übergeben.

Die vier Modulfassaden

Nach dem Laden zeigt das raydium-Objekt vier Modulfassaden, eine pro Produktoberfläche:
raydium.cpmm       // CPMM-Pools: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // CLMM-Pools: createPool, openPositionFromBase, increasePositionFromBase,
                   //             decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // AMM v4-Pools: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Multi-Pool-Routing: quotes, route-execution (Beta in 0.2.41)
raydium.token      // Helfer: Token-Liste abrufen, Metadaten, ATA-Erstellung
(Ja, insgesamt fünf Fassaden — „vier” ist die Art, wie Raydium sie öffentlich gruppiert, wobei trade und token als unterstützende Dienstprogramme fungieren.)

Transaktions-Builder

Jede mutierende Funktion gibt einen Builder zurück, anstatt sofort auszuführen:
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
Zurückgegebene Felder:
  • execute — eine Komfortfunktion, die signiert und sendet. Äquivalent zu builder.execute.
  • builder — die TxBuilder-Instanz mit allen angesammelten Anweisungen und Unterzeichnern. Rufen Sie .build() auf, um ein VersionedTransaction[] zu erhalten; nützlich, wenn Sie Ihre eigenen Anweisungen einfügen oder mit externen Unterzeichnern signieren müssen.
  • transaction / innerTransactions — die rohen Anweisungs-Arrays. Verwenden Sie diese beim Erstellen zusammengesetzter Multi-Program-Transaktionen.
  • extInfo — produktspezifische Extras. Zum Beispiel gibt createPool extInfo.poolId zurück; createLaunchpad gibt die neue Launch-Status-PDA zurück.
txVersion steuert 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-Status ab: Pool-Infos (für Quotes), Token-Programm-Besitz (für Token-2022 vs. SPL-Routing), Konto-Mietbefreiung (für ATA-Erstellung) usw. Das SDK zwischenspeichert aggressiv, aber der erste Aufruf für einen neuen Pool beinhaltet RPC-Roundtrips. Halten Sie eine lang lebende raydium-Instanz, um erneutes Abrufen zu vermeiden.

CLMM-Moduls-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, enableDynamicFee und dynamicFeeConfigId akzeptiert. Verwenden Sie dies für alle neuen Pools, die die neuen Schalter benötigen; das klassische createPool funktioniert weiterhin für Pools mit Standardgebühren.
  • raydium.clmm.openLimitOrder — öffnet eine Limit-Order mit einzelnem Tick auf einem Pool, der diese unterstützt. Nimmt poolInfo, poolKeys, limitOrderConfig (von /main/clmm-limit-order-config), inputMint, inputAmount und den Ziel-tick.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — passt den unfüllten Teil einer bestehenden Order an. Das Verringern bricht bei einer vollständig gefüllten Order mit InvalidOrderPhase ab.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — wischt gefüllte Ausgabe zur ATA des Eigentümers. Entweder der Besitzer der Order oder der limit_order_admin-Keeper des Pools können diese aufrufen.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — schließt vollständig eingezogene Orders, um Miete zurückzubekommen.
  • raydium.api.getClmmDynamicConfigs() / getClmmLimitOrderConfigs() — REST-Helfer, die die neuen Endpunkte /main/clmm-dynamic-config und /main/clmm-limit-order-config aufrufen.
Eine kleine Umorganisation verlagerte auch utils/ nach libraries/. Code, der von @raydium-io/raydium-sdk-v2/utils/... importiert, sollte zu @raydium-io/raydium-sdk-v2/libraries/... wechseln. Das Top-Level-Paket-Barrel ist unverändert, daher sehen die meisten Benutzer die Umbenennung nie. Umfassende TypeScript-Walkthroughs sind unter products/clmm/code-demos verfügbar.

Häufige Anfängerfehler

1. Cluster-Mismatch

Die Startup-Konfiguration des SDK ist clusterspezifisch. Das Mischen von cluster: "mainnet" mit einer Devnet-Connection führt zu stillschweigendem Fehlrouting: Das SDK quoted gegen Mainnet-AmmConfig, sendet aber zu Devnet. Übergeben Sie immer beides.

2. Vergessen, ATAs vorher zu erstellen

Bei der ersten Interaktion mit einem Mint existiert das Associated Token Account des Benutzers möglicherweise nicht. Das SDK fügt automatisch eine AssociatedTokenAccount::create-Anweisung vorne ein, wenn es ein fehlendes ATA erkennt, was eine kleine Mietgebühr kostet. Wenn Ihre Brieftasche wenig SOL hat, schlägt dies lautlos fehl. Überprüfen und finanzieren Sie, bevor Sie es erneut versuchen.

3. Veraltetes poolInfo

poolInfo ist ein zwischengespeichertes Snapshot. Wenn sich der Pool-Status seit dem Abrufen geändert hat (ein großer Trade hat den Preis verschoben, beispielsweise), kann minAmountOut des Swaps gegen den alten Status berechnet werden und unter dem On-Chain-Amount-Out landen, was zu einer Reversion führt. Rufen Sie poolInfo unmittelbar vor der Erstellung hochwertiger Transaktionen erneut ab, oder verwenden Sie das computeAmountOut des SDK, das Reserven erneut abfragt.

4. Prioritätsgebühren

Das SDK fügt Compute-Unit-Preise standardmäßig nicht hinzu. In Hochlast-Fenster (neue Pool-Starts, Meme-Coin-Events) bedeutet dies, dass Ihre Transaktion mit vielen anderen konkurriert und möglicherweise nicht landet. Stellen Sie eine explizite computeBudgetConfig bereit:
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // CU limit
    microLamports: 50_000,   // priority fee per CU
  },
});
Siehe integration-guides/priority-fee-tuning für Sizing-Anleitung.

5. Slippage-Toleranz muss dem Pool-Typ entsprechen

CPMM und AMM v4 verwenden CPMM-Mathematik (niedrige Auswirkung bei normalen Trades). CLMM ist stückweise (Auswirkung 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 revertiert. Das computeAmountOut des SDK gibt priceImpact zurück; dimensionieren Sie Ihre Toleranz darüber hinaus.

6. BN vs number

Alle Betragfelder im SDK sind bn.js-BN-Instanzen – nie JavaScript number. Das Konvertieren von Beträgen über .toNumber() schneidet stillschweigend bei 2^53 ab; für Werte über ~9 Billiarden (nicht ungewöhnlich bei 9-Dezimal-Mints) ergibt dies das falsche Ergebnis. Halten Sie alles in BN, bis das finale UI-Rendering.

Versionierungspolitik

  • @raydium-io/raydium-sdk-v2 ist das einzige SDK, das Raydium verwaltet. Alle Dokumentationen, Demos und Integrationsleitfäden zielen darauf ab.
  • Ein älteres v1-Paket (@raydium-io/raydium-sdk) existiert aus historischen Gründen auf npm. Die Wartung endete, nachdem CPMM und LaunchLab ausgeliefert wurden (v1 erhielt niemals Unterstützung für eines davon), und es gibt seit 2024 keine v1-Veröffentlichungen 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-Versionen sind möglich; fixieren Sie die Version, die Sie überprüft haben, und überprüfen Sie die GitHub-Release-Noten beim Upgrade.

Upgrade

Beim Upgrade zwischen SDK-Minor-Versionen:
  1. Überprüfen Sie erneut den Rückgabetyp jedes Mutationsaufrufs – Formänderungen (z. B. extInfo) finden häufig statt.
  2. Regenerieren Sie Abruf-Signaturen für poolInfo – ein Feld könnte umbenannt worden sein.
  3. Überprüfen Sie Ihre Slippage-Handhabung erneut; das SDK hat zwischen Auto-Bound- und Opt-in-Bound-Verhalten zwischen Versionen gewechselt.
  4. Wenn Sie raydium.trade (Routing) verwenden, überprüfen Sie die Route-Form erneut – es ist der instabilste Teil der Oberfläche.

Hilfe erhalten

Für SDK- und API-Fragen: Für Sicherheitsprobleme, nicht in öffentliche Kanäle posten — siehe security/disclosure.

Verweise

Quellen: