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 2026-09-09 gegen die 0.2.64-alpha-Quelle auf Solana mainnet-beta überprüft. Das Rust-CPI-Gerüst zielt auf raydium-cp-swap im Branch chore/upgrade-anchor, Anchor 1.0.2 ab — master pinnt immer noch 0.32.1. 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. Gebührenkonfigurationen werden bei der ersten Verwendung ü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 (Base-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 bei der Landung in ExceededSlippage rutschen.

Swap (Base-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 behördengesteuert. Creator-Gebühren haben zwei Pfade: das von Creator signierte CollectCreatorFee und das additive CollectCreatorFeePermissionless, das jeder Zahler aufrufen kann, aber nur an die kanonischen ATAs des Creators übertragen kann. 0.2.64-alpha liefert Module-Level-Builder für beide Creator-Pfade:
Beide Creator-Anweisungen änderten ihre Kontolisten im Programm-Upgrade vom 2026-09-19. Jede nimmt jetzt eine creator_fee_share-PDA unter ["creator_fee_share", creator, ammConfig] und die erlaubnisfreie 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 gepinnt ist, gibt die kürzere Liste aus und die Transaktion wird wegen fehlender Konten abgelehnt. Überprüfen Sie, dass die Version, die Sie installieren, die neuen Konten trägt, bevor Sie diese Helper 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-Anweisungen haben unterschiedliche Diskriminatoren und Kontolayouts — die erlaubnisfreie ersetzt den Creator-Unterzeichner durch einen separaten payer und einen nicht signierenden creator. Verwenden Sie den passenden Builder, anstatt Konten auf dem anderen manuell auszutauschen.Es gibt keinen Protokoll- oder Fonds-Gebühren-Builder im SDK (makeCollectProtocolFeeInstruction und makeCollectFundFeeInstruction existieren unter keinem Namen) — das sind Admin-Pfade, und ebenso CreateCreatorFeeShare / CloseCreatorFeeShare, die auch keinen Builder haben. Die Low-Level-Instruction-Builder, die existieren, sind collectCpFeeInstruction, makeCollectCreatorFeeInstruction und collectCreatorFeePermissionlessInInstruction.
Off-Chain können Sie aufgelaufene Gebühren direkt aus PoolState lesen:

Rust-CPI-Gerüst

Wenn Sie CPMM von Ihrem eigenen Anchor-Programm aufrufen möchten — zum Beispiel 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), tauschen Sie CpiContext::new gegen CpiContext::new_with_signer aus 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-Zitat. Übergeben Sie niemals einen Reservewert von api-v3.raydium.io an CurveCalculator.swap. Rufen Sie von einem RPC ab.
  • Falsches Token-Programm. Ein Token-2022-Mint-Vault wird vom Token-2022-Programm besessen, nicht von SPL Token. Verwenden Sie immer die token_0_program / token_1_program-Felder 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: