Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
版本說明。 所有 TypeScript 示例針對 @raydium-io/raydium-sdk-v2@0.2.64-alpha;最後執行於 0.2.42-alpha(2026-04),其呼叫簽名已針對 0.2.64-alpha 原始碼重新檢查(2026-09-09),針對 Solana mainnet-beta。Rust CPI 骨架針對 raydium-cp-swap 的 chore/upgrade-anchor 分支,Anchor 1.0.2 — master 仍然固定於 0.32.1。程式 ID 透過 reference/program-addresses 的常數提取。

前置需求

本頁的每個示例都對應 raydium-sdk-V2-demo/src/cpmm 中的一個檔案;GitHub 連結位於每個部分旁邊。初始化遵循示例倉庫的 config.ts.template(來源):
Raydium 實例是 SDK 的外觀 — 下面的每個示例都使用它。Raydium.load 是非同步的,因為它預設載入代幣列表;傳遞 disableLoadToken: true 以跳過該提取。可用性功能檢查已被跳過,除非你傳遞 disableFeatureCheck: false。費用配置透過 raydium.api.getCpmmConfigs() 在首次使用時延遲提取。

建立 CPMM 流動性池

來源:src/cpmm/createCpmmPool.ts
SDK 悄悄處理的幾件事:
  • 在衍生 PDA 之前將 mint 排序為 token0/token1 順序。
  • 向 poolFeeAccount 支付一次性 create_pool_fee。
  • 如果缺少,建立呼叫者的關聯代幣帳戶。
  • 根據每一側選擇正確的代幣程式(SPL Token 與 Token-2022)。
確認後,你可以使用以下方式提取即時流動性池狀態:

交換(基礎輸入)

來源:src/cpmm/swap.ts
注意:SDK 總是在 getPoolInfoFromRpc 內從 RPC 重新提取流動性池狀態。不要從 api-v3.raydium.io 報價你即將簽署的交易 — 一個區塊陳舊的報價可能在著陸時滑入 ExceededSlippage。

交換(基礎輸出)

來源:src/cpmm/swapBaseOut.ts

存入流動性

來源:src/cpmm/deposit.ts
SDK 從流動性池的目前儲備衍生配對金額,將每一側膨脹滑點以用於指令的 maximum_* 引數,並在必要時建立 ATA 建立。raydium.cpmm.computePairAmount({ ... }) 如果你想要它們用於 UI 預覽,會傳回相同的數字。

提取流動性

來源:src/cpmm/withdraw.ts

收取協議/基金/建立者費用

來源:src/cpmm/collectCreatorFee.ts、src/cpmm/collectAllCreatorFee.ts 協議和基金收集仍然受權限限制。建立者費用有兩條路徑:建立者簽署的 CollectCreatorFee 和加法 CollectCreatorFeePermissionless,任何支付者都可以呼叫,但只能轉移到建立者的規範 ATA。0.2.64-alpha 為兩個建立者路徑提供模組級別的建構器:
兩個建立者指令在 2026-09-19 程式升級中改變了它們的帳戶列表。 每個現在都採用 ["creator_fee_share", creator, ammConfig] 處的 creator_fee_share PDA,無許可的也採用 amm_config — 兩者都附加在 system_program 之後而非插入,因此已存在的帳戶保持其位置。固定到升級前 SDK 版本的建構器發出較短的列表,交易會因缺少帳戶而被拒絕。在針對升級後的程式使用這些輔助函式之前,檢查你安裝的版本是否包含新帳戶,如果你從它生成客戶端,請重新整理 IDL。即使 PDA 從未被建立,傳遞它也是強制性的 — 衍生它並傳遞它;當帳戶為空時,程式回退到 AmmConfig.creator_fee_share_rate。
兩個建立者指令有不同的判別器和帳戶配置 — 無許可的用單獨的 payer 和非簽署的 creator 替換建立者簽署者。使用匹配的建構器,而不是在另一個上手動交換帳戶。SDK 中沒有協議或基金費用建構器(makeCollectProtocolFeeInstruction 和 makeCollectFundFeeInstruction 在任何名稱下都不存在) — 那些是管理員路徑,CreateCreatorFeeShare / CloseCreatorFeeShare 也是,它們也沒有建構器。確實存在的低級指令建構器是 collectCpFeeInstruction、makeCollectCreatorFeeInstruction 和 collectCreatorFeePermissionlessInInstruction。
離鏈,你可以直接從 PoolState 讀取應計費用:

Rust CPI 骨架

如果你想從自己的 Anchor 程式呼叫 CPMM — 例如,代表其存款人進行交換的保管庫 — CPI 上下文看起來像這樣。帳戶順序遵循 products/cpmm/instructions。
如果你的 CPI 作為 PDA 簽署(例如,你代表存款人管理保管庫),將 CpiContext::new 交換為 CpiContext::new_with_signer 並傳遞你的種子。

常見陷阱

開啟支援票證前的簡短檢查清單:
  • 排序的 mint。 如果你衍生的 poolState PDA 與鏈上流動性池不符,你可能忘記排序 mint。
  • 陳舊的 API 報價。 永遠不要將 api-v3.raydium.io 的儲備值傳遞到 CurveCalculator.swap。從 RPC 提取。
  • 錯誤的代幣程式。 Token-2022 mint 的保管庫由 Token-2022 程式擁有,而不是 SPL Token。始終使用流動性池的 token_0_program / token_1_program 欄位。
  • 轉移費用 mint 的滑點未充分計價。 如果流動性池的任一側是 Token-2022 轉移費用 mint,你的 minimum_amount_out 必須以使用者實際收到的計價,而不是保管庫傳送的。
  • 交換時 NotApproved。 檢查 PoolState.status — 管理員可能已暫停該流動性池上的交換。見 products/cpmm/instructions 以取得狀態位元遮罩。

接下來去哪裡

來源: