Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
版本資訊。
  • SDK:@raydium-io/raydium-sdk-v2@0.2.64-alpha
  • 叢集:Solana mainnet-beta
  • Stable AMM 程式 ID:5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h(參見 reference/program-addresses)
  • 最後驗證:2026-09-09 針對 SDK 0.2.64-alpha 原始碼和 raydium-sdk-V2-demo amm/trade 示例
SDK 的 liquidity 模組原生支援 Stable AMM 池。Stable 池在 ApiV3PoolInfoStandardItem 上顯示為 version: 5(或 pooltype: "StablePool");相同的 addLiquidity / removeLiquidity / 交換輔助函式適用於它們和 AMM v4(version: 4)常數乘積池——SDK 會偵測變體並自動發出正確的指令。鏈下穩定曲線數學位於 src/raydium/liquidity/stable.ts。

設定

initLayout() 對 Stable 池不是可選的。 liquidity.computeAmountOut 根據 poolInfo.version 分支:對於 version 4 使用常數乘積公式,對於其他版本則讀取 this.stableLayout.stableModelData 並插值查詢表。該快取在 initLayout() 執行前為空,因此在沒有它的情況下報價 v5 池會產生垃圾結果而不是錯誤。它是冪等的且成本低廉——在啟動時呼叫一次即可。交易建構器(swap、addLiquidity、removeLiquidity)不需要它:它們根據 pooltype.includes("StablePool") 分派並發出 AmmV5* 指令,你傳入的金額邊界已經計算過了。
liquidity.computeAmountIn 不支援 Stable 池。 與 computeAmountOut 不同,它沒有版本分支——它總是應用常數乘積反演,因此在 v5 池上會返回錯誤的 maxAmountIn。對於針對 Stable 池的精確輸出交換,自己用 getDxByDyBaseIn 反演(參見下面的鏈下報價輔助函式),並將結果傳遞給 swap,設定 fixedSide: "out"。

識別 Stable 池

ApiV3PoolInfoStandardItem 上的兩個等效信號:
AMM v4(version: 4、常數乘積)和 Stable AMM(version: 5)都透過 SDK 上相同的 LiquidityModule API 流動。在內部,模組分派到:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity 用於 v4 池
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity 用於 v5(Stable)池
池的 programId(與池金鑰一起返回)告訴 SDK 要 CPI 進入哪個程式;你不需要硬編碼它。

按代幣對查找池

如果代幣對同時有 v4(常數乘積)池和 v5(穩定)池,回應包含兩者——選擇你的流程需要的那個,或將它們交給 AMM 路由程式,讓它選擇最佳路由。

透過 Stable 池交換

LiquidityModule.swap 流程與 v4 池的形狀相同——只需將 v5 池物件交給它。有兩個細節容易出錯:computeAmountOut 需要池的即時準備金接合到池資訊上(API 項目本身不包含它們),其 slippage 是純數字,不是 Percent:
SDK 從池金鑰讀取池的 programId 並分派進入 Stable AMM 程式。不需要特殊的 programId 引數。

新增和移除流動性

addLiquidity 和 removeLiquidity 在 v4 和 v5 池上的工作方式相同:
在內部,SDK 發出 InstructionType.AmmV5AddLiquidity,因為 pooltype.includes("StablePool") 為真。對應的 removeLiquidity 流程是對稱的——輸入 lpAmount 和你將接受的每一側的最小金額。

鏈下報價輔助函式(stable.ts)

對於伺服器端報價或回測,SDK 公開了底層穩定曲線數學:
這些是純函式——沒有 RPC,沒有簽署。鏈上 ModelDataInfo 由 initLayout() 取得一次並快取在 raydium.liquidity.stableLayout 內,可讀為 .stableModelData。initStableModelLayout() 是冪等的:它只在 validDataCount === 0 時重新取得,因此再次呼叫 initLayout() 是免費的。傳遞當前準備金(x、y),輔助函式透過二進位搜尋查詢表並在兩個相鄰 DataElement 列之間線性插值來計算。參見 products/stable/math 瞭解底層演算法。

透過 AMM 路由進行路由(多跳 / 最佳價格)

如果你不想自己選擇場所,AMM 路由程式將考慮每個 Raydium AMM(v4 / CPMM / CLMM / Stable)並透過最佳組合進行路由: 路由器是五呼叫管道而不是單個 swap(),它完整寫出——帶有使其在生產中可用的快取建議——在 products/routing/code-demos。形狀是:
沒有 raydium.tradeV2.fetchRoutes,且 tradeV2.swap 不接受 inputMint / outputMint / slippage — 它接受已計算的 swapInfo 來自 getAllRouteComputeAmountOut。對於單個已知池,使用該池類型自己的建構器(raydium.liquidity.swap 用於 AMM v4 和 Stable、raydium.cpmm.swap、raydium.clmm.swap),如本頁前面所示。
這是生產交換器和聚合器的推薦路徑——你永遠不需要手動決定 Stable 池是否存在或它今天是否是更好的場所。

建議

  1. 對於終端使用者交換,優先使用 tradeV2 路由流程。它處理每個 Raydium 池類型,包括 Stable。
  2. 對於池特定操作(已知 Stable 池上的 LP 新增 / 移除),直接使用 LiquidityModule — 它自動偵測 v5 池。
  3. 對於鏈下報價 / 分析,在 initLayout() 後呼叫 getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn。模型資料快取後每個報價無 RPC 流量。
  4. 不要手工編碼原始 SwapBaseIn 指令。 2026-06-22 升級移除了死 OpenBook 帳戶,因此新交換佈局採用9 個帳戶(舊 18 帳戶佈局仍向後相容解析)。Deposit 現在是 12 個帳戶(舊 14 相容),Withdraw 12 個(舊 21/22 相容),WithdrawPnl 10 個沒有相容路徑。SDK 的預建輔助函式為你選擇正確的佈局和順序;自己滾動容易出錯。參見 products/stable/instructions 瞭解完整帳戶表。

接下來去哪裡

  • 數學 — 查詢表插值如何工作。
  • 指令 — 完整指令參考。
  • AMM 路由 — 跨 AMM v4、CPMM、CLMM、Stable 的多池路由。
來源: