Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Versionsbanner. Alle TypeScript-Demos zielen auf @raydium-io/raydium-sdk-v2@0.2.64-alpha ab; sie wurden zuletzt gegen 0.2.42-alpha (2026-04) ausgeführt und ihre Aufrufsignaturen wurden am 09.09.2026 gegen die 0.2.64-alpha-Quelle überprüft, gegen Solana mainnet-beta. Das Rust-CPI-Skelett zielt auf raydium-cp-swap auf master, Anchor 1.0.2. Programm-IDs werden über Konstanten aus reference/program-addresses abgerufen.

Voraussetzungen

Jedes Demo auf dieser Seite spiegelt eine Datei in raydium-sdk-V2-demo/src/cpmm; der GitHub-Link befindet sich neben jedem Abschnitt. Das Bootstrap folgt der config.ts.template des Demo-Repos (Quelle):
Die Raydium-Instanz ist die Fassade des SDK — jedes Demo unten nutzt sie. Raydium.load ist asynchron, da es standardmäßig die Token-Liste lädt; übergeben Sie disableLoadToken: true, um diesen Abruf zu überspringen. Die Verfügbarkeitsprüfung ist bereits übersprungen, es sei denn, Sie übergeben disableFeatureCheck: false. Fee-Konfigurationen werden beim ersten Gebrauch über raydium.api.getCpmmConfigs() lazy geladen.

CPMM-Pool erstellen

Quelle: src/cpmm/createCpmmPool.ts
Ein paar Dinge, die das SDK stillschweigend übernimmt:
  • Sortieren der Mints in token0/token1-Reihenfolge vor der PDA-Ableitung.
  • Zahlen der einmaligen create_pool_fee an poolFeeAccount.
  • Erstellen der zugehörigen Token-Konten des Aufrufers, falls fehlend.
  • Auswahl des richtigen Token-Programms (SPL Token vs. Token-2022) pro Seite.
Nach der Bestätigung können Sie den Live-Pool-Status abrufen mit:

Swap (Basis-Input)

Quelle: src/cpmm/swap.ts
Hinweis: Das SDK ruft den Pool-Status immer von einem RPC innerhalb von getPoolInfoFromRpc ab. Zitieren Sie nicht von api-v3.raydium.io für eine Transaktion, die Sie gerade signieren werden — ein Zitat, das einen Block alt ist, kann beim Landen in ExceededSlippage rutschen.

Swap (Basis-Output)

Quelle: src/cpmm/swapBaseOut.ts

Liquidität einzahlen

Quelle: src/cpmm/deposit.ts
Das SDK leitet den gepaarten Betrag aus den aktuellen Reserven des Pools ab, erhöht jede Seite um den Slippage für die maximum_*-Argumente der Anweisung und erstellt die ATA-Erstellungen bei Bedarf. raydium.cpmm.computePairAmount({ ... }) gibt die gleichen Zahlen zurück, wenn Sie diese für eine UI-Vorschau möchten.

Liquidität abheben

Quelle: src/cpmm/withdraw.ts

Protokoll-/Fonds-/Creator-Gebühren einziehen

Quelle: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts Protokoll- und Fondseinzug bleiben an Autorisierung gebunden. Creator-Gebühren haben zwei Pfade: das von der Creator signierte CollectCreatorFee und das additive CollectCreatorFeePermissionless, das jeder Zahler aufrufen kann, aber nur an die kanonischen ATAs des Creators überweisen kann. 0.2.64-alpha liefert Builder auf Modulebene für beide Creator-Pfade:
Beide Creator-Instruktionen haben ihre Kontolisten im Programm-Upgrade vom 2026-09-19 geändert. Jede nimmt nun eine creator_fee_share PDA unter ["creator_fee_share", creator, ammConfig] auf, und die permissionless-Variante nimmt auch amm_config — beide nach system_program angehängt statt eingefügt, sodass die bereits vorhandenen Konten ihre Positionen behalten. Ein Builder, der an eine SDK-Version vor dem Upgrade gebunden ist, gibt die kürzere Liste aus und die Transaktion wird wegen fehlender Konten abgelehnt. Überprüfen Sie, dass die installierte Version die neuen Konten enthält, bevor Sie diese Helfer gegen das aktualisierte Programm verwenden, und aktualisieren Sie die IDL, wenn Sie Clients daraus generieren.Das Übergeben der PDA ist obligatorisch, auch wenn sie noch nie erstellt wurde — leiten Sie sie ab und übergeben Sie sie; das Programm fällt auf AmmConfig.creator_fee_share_rate zurück, wenn das Konto leer ist.
Die beiden Creator-Instruktionen haben unterschiedliche Diskriminatoren und Kontolayouts — die permissionless-Variante ersetzt den Creator-Signer durch einen separaten payer und einen nicht signierenden creator. Verwenden Sie den passenden Builder, statt Konten der anderen Instruktion manuell auszutauschen.Es gibt keinen Protokoll- oder Fonds-Gebühren-Builder im SDK (makeCollectProtocolFeeInstruction und makeCollectFundFeeInstruction existieren unter keinem Namen) — das sind Admin-Pfade, ebenso wie CreateCreatorFeeShare / CloseCreatorFeeShare, die auch keinen Builder haben. Die Low-Level-Instruktions-Builder, die es gibt, sind collectCpFeeInstruction, makeCollectCreatorFeeInstruction und collectCreatorFeePermissionlessInInstruction.
Off-Chain können Sie aufgelaufene Gebühren direkt aus PoolState auslesen:

Rust-CPI-Skelett

Wenn Sie CPMM aus Ihrem eigenen Anchor-Programm aufrufen möchten — beispielsweise ein Vault, das im Namen seiner Einzahler swapped — sieht der CPI-Kontext so aus. Die Kontoordnung folgt products/cpmm/instructions.
Wenn Ihr CPI als PDA signiert (z. B. verwalten Sie einen Vault im Namen von Einzahlern), ersetzen Sie CpiContext::new durch CpiContext::new_with_signer und übergeben Sie Ihre Seeds.

Häufige Fallstricke

Eine kurze Checkliste, bevor Sie ein Support-Ticket öffnen:
  • Sortierte Mints. Wenn Ihre abgeleitete poolState PDA nicht mit dem On-Chain-Pool übereinstimmt, haben Sie wahrscheinlich vergessen, die Mints zu sortieren.
  • Veraltetes API-Angebot. Übergeben Sie niemals einen Reserve-Wert von api-v3.raydium.io an CurveCalculator.swap. Rufen Sie von einem RPC ab.
  • Falsches Token-Programm. Der Vault eines Token-2022-Mints wird vom Token-2022-Programm verwaltet, nicht vom SPL Token. Verwenden Sie immer die Felder token_0_program / token_1_program des Pools.
  • Slippage unter-denominiert für Transfer-Fee-Mints. Wenn eine Seite des Pools ein Token-2022-Transfer-Fee-Mint ist, muss Ihr minimum_amount_out in dem denominiert sein, was der Benutzer tatsächlich erhält, nicht in dem, was der Vault sendet.
  • NotApproved bei einem Swap. Überprüfen Sie PoolState.status — der Admin hat möglicherweise Swaps auf diesem Pool pausiert. Siehe products/cpmm/instructions für die Status-Bitmaske.

Nächste Schritte

Quellen: