本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
聚合器的工作是為使用者提供跨多個流動性池的最佳價格,可能將單一輸入分割到多個池路由,並以原子方式執行。本頁記錄了該工作的 Raydium 特定部分:發現、報價和交易組裝。
發現
流動性池清單
你需要每個產品的完整即時 Raydium 流動性池列表。有三個選項:- REST API(最簡單):
GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1以 1000 個為一批返回流動性池。分頁直到獲得全部。快取 1–5 分鐘。 - 鏈上掃描:在 CPMM、CLMM 和 AMM v4 程式 ID 上執行
getProgramAccounts,按狀態帳戶判別器篩選。產生約每個即時流動性池,耗時約 10 秒的 RPC 時間。當 API 宕機或速率受限時很有用。 - 混合:使用 API 作為主要來源;每天執行一次鏈上掃描作為完整性檢查。團隊承諾保持 API 的全面性,但透過直接 CPI 建立的流動性池(無前端)偶爾會滯後。
代幣對查詢
對於特定的(mintA, mintB) 對,使用 GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity。返回任何費用層級和產品類型的每個流動性池。常見的是每對代幣約 10 個結果;按 TVL 排序並取前幾個用於路由。
報價
報價數學因產品而異。使用 SDK 的純數學函數,這樣你就不需要重新實現: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 + 指令。模式:原子性
聚合器必須保證原子性:要麼完整路由著陸,要麼都不著陸。Raydium 的交換指令在ExceededSlippage 時還原,所以一個多池路由,其中一跳失敗會導致整個交易還原。免費。
唯一的例外:如果你的路由透過 Raydium + 第三方 DEX,確保該 DEX 也有還原滑點模型。某些程式忽略滑點邊界(罕見)。
陷阱
1. 過時報價
在使用者看到「你將收到 125.43 RAY」和交易著陸之間,儲備可能會移動。在提交前立即重新取得流動性池狀態;重新報價;如果新報價差超過 1%,暫停並與使用者重新確認。2. 流動性池黑名單
某些 Raydium 流動性池是轉帳費用設定為 99% 或具有不可轉帳擴展的詐騙代幣。REST API 標記這些(見tags 欄位);跳過任何標記為 scam 或 honeypot 的流動性池。在 Raydium 標籤之上執行自己的安全檢查是謹慎的。
3. CLMM 上的觀察狀態要求
CLMMSwapV2 採用 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 過期(重試)和還原(不重試)。
指標
integration-guides/routing-and-mev— 三明治抵抗、束。integration-guides/priority-fee-tuning— 調整計算預算指令大小。sdk-api/rest-api— 流動性池列表端點。

