本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
版本資訊。 所有 TypeScript 示例針對
@raydium-io/raydium-sdk-v2@0.2.64-alpha;最後執行於 0.2.42-alpha(2026-04),並於 2026-09-09 針對 Solana mainnet-beta 重新檢查了 0.2.64-alpha 原始碼中的呼叫簽名。Rust CPI 骨架針對 master 上的 raydium-cp-swap,Anchor 1.0.2。程式 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
- 在衍生 PDA 之前將代幣排序為 token0/token1 順序。
- 向
poolFeeAccount支付一次性create_pool_fee。 - 如果缺少,建立呼叫者的關聯代幣帳戶。
- 根據每一側選擇正確的代幣程式(SPL Token 與 Token-2022)。
交換(基礎輸入)
原始碼:src/cpmm/swap.ts
getPoolInfoFromRpc 內從 RPC 重新提取池狀態。不要針對你即將簽署的交易從 api-v3.raydium.io 報價 — 一個區塊陳舊的報價可能在著陸時滑入 ExceededSlippage。
交換(基礎輸出)
原始碼:src/cpmm/swapBaseOut.ts
存入流動性
原始碼:src/cpmm/deposit.ts
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 為兩種創作者路徑提供了模組級別的建構器:
兩個創作者指令有不同的判別器和帳戶佈局 — 無需許可的指令用單獨的
payer 和非簽署的 creator 替換創作者簽署者。使用匹配的建構器,而不是在另一個上手動交換帳戶。SDK 中沒有協議費用或基金費用建構器(makeCollectProtocolFeeInstruction 和 makeCollectFundFeeInstruction 不以任何名稱存在)— 這些是管理員路徑,CreateCreatorFeeShare / CloseCreatorFeeShare 也是,它們也沒有建構器。確實存在的低級指令建構器是 collectCpFeeInstruction、makeCollectCreatorFeeInstruction 和 collectCreatorFeePermissionlessInInstruction。PoolState 讀取應計費用:
Rust CPI 骨架
如果你想從自己的 Anchor 程式中調用 CPMM — 例如,代表存款人進行交換的金庫 — CPI 上下文如下所示。帳戶順序遵循products/cpmm/instructions。
CpiContext::new 交換為 CpiContext::new_with_signer 並傳遞你的種子。
常見陷阱
開啟支援工單前的簡短檢查清單:- 排序的 mint。 如果你推導的
poolStatePDA 與鏈上池不匹配,你可能忘記了排序 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以了解狀態位掩碼。
後續步驟
sdk-api/typescript-sdk— 完整 SDK 參考。sdk-api/rest-api— 報價和池元數據端點。user-flows/create-cpmm-pool— 相同流程的非代碼演練。integration-guides/aggregator— 如果你將 CPMM 作為多跳路徑的一部分進行路由。

