Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
聚合器的工作是為使用者提供跨多個流動性池的最佳價格,可能將單一輸入分割到多個池路由,並以原子方式執行。本頁記錄了該工作的 Raydium 特定部分:發現、報價和交易組裝。

發現

流動性池清單

你需要每個產品的完整即時 Raydium 流動性池列表。有三個選項:
  1. REST API(最簡單):GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1 以 1000 個為一批返回流動性池。分頁直到獲得全部。快取 1–5 分鐘。
  2. 鏈上掃描:在 CPMM、CLMM 和 AMM v4 程式 ID 上執行 getProgramAccounts,按狀態帳戶判別器篩選。產生約每個即時流動性池,耗時約 10 秒的 RPC 時間。當 API 宕機或速率受限時很有用。
  3. 混合:使用 API 作為主要來源;每天執行一次鏈上掃描作為完整性檢查。團隊承諾保持 API 的全面性,但透過直接 CPI 建立的流動性池(無前端)偶爾會滯後。

代幣對查詢

對於特定的 (mintA, mintB) 對,使用 GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity。返回任何費用層級和產品類型的每個流動性池。常見的是每對代幣約 10 個結果;按 TVL 排序並取前幾個用於路由。

報價

報價數學因產品而異。使用 SDK 的純數學函數,這樣你就不需要重新實現:
三個產品不共享一個簽名。computeAmountOut 僅存在於 raydium.liquidity(AMM v4)和 CLMM 的 PoolUtils.computeAmountOut(Format) 上;CPMM 的 等效函數稱為 computeSwapAmount 並採用不同的參數。明確寫出三個呼叫,而不是在產品上參數化。
對於聚合器比較,使用每個的 amountOut(滑點前)。

快取新鮮度

流動性池狀態衰退很快。建議的新鮮度目標: 對於以互動延遲進行報價的聚合器,訂閱每個相關流動性池狀態的 WebSocket 帳戶更新(accountSubscribe)。這將模型從輪詢翻轉為推送。

Token-2022 調整

如果路由中的任何代幣有 Token-2022 轉帳費用,報價數學必須根據 algorithms/token-2022-transfer-fees 調整輸入和輸出。如果 poolInfo.mintA.extensions.transferFeeConfig 已填充,SDK 會處理此問題。在信任報價之前,透過查看 .extensions 欄位進行確認。

路由

單池路由

大多數路由是單池。選擇 amountOut 最高的流動性池。如果多個接近,按費用層級(較低更好)打破平局,然後按 TVL(更多更安全)。

分割路由

對於單個流動性池價格影響 >5% 的大交易,跨流動性池分割。簡單的貪心演算法:
這產生路由向量 [(pool_A, 0.6), (pool_B, 0.3), (pool_C, 0.1)],最小化聚合影響。適當的凸優化解決方案(例如跨流動性池均衡邊際價格)在實踐中與貪心結果相差約 1%。

多跳路由

USDC → RAY → SOL 透過兩個單獨的流動性池很常見,當沒有直接 USDC-SOL 流動性池給出好報價時(罕見)。應用每跳滑點邊界;每跳強制執行自己的 minAmountOut。見 algorithms/slippage-and-price-impact。 跨同一流動性池的多跳(例如 SOL-USDC 上的兩個 CLMM 跳)相比單跳總是次優的——不要生成此類路由。

交易組裝

單跳、單池

對於單個流動性池,呼叫該流動性池類型自己的交換建構器——raydium.liquidity.swap、raydium.cpmm.swap 或 raydium.clmm.swap。raydium.tradeV2.swap 是多跳路由執行器,採用完全不同的形狀({ swapInfo, swapPoolKeys, routeProgram, ownerInfo, txVersion });沒有 raydium.trade。

分割和多跳

手動組合 ATA + 指令。模式:
全部在一個交易內以確保原子性。對於 V0 上的 3 池分割,帶有地址查詢表,這通常適合約 1100 位元組。對於 4+ 個流動性池,交易大小上限強制要麼多交易,要麼在中樞代幣處進行整合。

原子性

聚合器必須保證原子性:要麼完整路由著陸,要麼都不著陸。Raydium 的交換指令在 ExceededSlippage 時還原,所以一個多池路由,其中一跳失敗會導致整個交易還原。免費。 唯一的例外:如果你的路由透過 Raydium + 第三方 DEX,確保該 DEX 也有還原滑點模型。某些程式忽略滑點邊界(罕見)。

陷阱

1. 過時報價

在使用者看到「你將收到 125.43 RAY」和交易著陸之間,儲備可能會移動。在提交前立即重新取得流動性池狀態;重新報價;如果新報價差超過 1%,暫停並與使用者重新確認。

2. 流動性池黑名單

某些 Raydium 流動性池是轉帳費用設定為 99% 或具有不可轉帳擴展的詐騙代幣。REST API 標記這些(見 tags 欄位);跳過任何標記為 scam 或 honeypot 的流動性池。在 Raydium 標籤之上執行自己的安全檢查是謹慎的。

3. CLMM 上的觀察狀態要求

CLMM SwapV2 採用 observation_state 帳戶。SDK 為你填充它;手工建構的指令經常忘記,這會導致程式以 AccountNotFound 還原。始終包含它。

4. 地址查詢表

Raydium 為其最常用的帳戶(主要代幣、程式 ID、AmmConfigs)維護公共查詢表。聚合器應該使用這些——它每個交易節省約 100 位元組,並使更大的路由適合 V0。拉取 LUT 地址:

5. 處理擁塞

在高交易量窗口期間,交易可能在記憶池中停留多個區塊。建議在 TX 過期時進行積極重試(不是還原——還原是確定性的)。SDK 的 sendAndConfirm 選項進行基本重試;生產聚合器在其上層疊自己的邏輯(Jito 束、多 RPC 廣播)。

檢查清單

上線前,驗證:
  • 流動性池發現全面涵蓋 CPMM + CLMM + AMM v4。
  • 報價在少數幾個測試交易上與 Raydium 自己的 UI 報價相差 1 個基點以內。
  • 分割路由在任何單個流動性池上交易 >5% 影響時啟動。
  • 優先費用根據最近的流動性池程式費用調整大小(見 integration-guides/priority-fee-tuning)。
  • Token-2022 轉帳費用已計算並向使用者顯示。
  • 當超過滑點時交易乾淨還原。
  • 重試邏輯區分 tx 過期(重試)和還原(不重試)。

指標

來源: