Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
一段話總結
AMM Routing 程式將多跳交換(multi-hop swap)打包成單一鏈上交易,跨池串聯流動性。你只需提供一條路由(池列表與中間 mint 的清單)和一條含滑點參數的指令,路由器便會依序執行所有 N 跳,將上一個池的輸出作為下一個池的輸入。價格計算不需要獨立的鏈上路由邏輯——每一跳的手續費與曲線計算由各自的池程式透過 CPI 處理——路由器負責的是帳戶傳遞與代幣移動的協調。為何需要獨立的路由程式?
Raydium 客戶端與聚合器本可在不使用路由器的情況下,直接在客戶端串接多跳交換:為每個池各建一條 swap 指令,並在單一交易中提交。既然如此,為何還需要專用的路由程式?使用路由器的理由
- 從其他程式發起 CPI。 若你自己的程式需要在較大型的交易中呼叫一條路由(例如:將手續費換成目標代幣的流動性管理器),CPI 進路由器比在合約中管理 N 個子 CPI 及其所有帳戶更簡潔。
- 原子化帳戶狀態。 所有跳數的帳戶清單在同一指令上下文中完成驗證。若中間某個池的狀態異常或限價斷言失敗,整條路由將原子性地失敗,不會產生部分結算。
- 單一指令組合。 SDK 與前端可以將多跳路由表示為一個邏輯操作,而非 N 條碰巧連續的獨立指令。
客戶端串接仍是預設做法
對大多數應用而言,為每個池分別建立Swap 指令並依序提交,既更簡單、更易組合,也同樣有效。Raydium SDK 的 Trade.makeSwapTransaction 及類似流程,針對大多數路由正是這樣處理的。
路由器是一種替代方案,而非取代品。以下情況適合使用它:
- 你正在實作一個需要將路由作為更大原子操作一部分的程式。
- 你正在建構一個希望以單一「提交此路由」操作為核心的聚合器。
運作原理
一條路由指令包含:- 交換參數:精確輸入(
amount_in、minimum_amount_out)或精確輸出(maximum_amount_in、amount_out)。 - 路由規格:依序排列的每一跳所對應的
program_id與子程式帳戶清單。路由器讀取每個跳數群組的第一個帳戶來決定要呼叫哪個程式。 - 限價(適用於 CLMM):由
VecDeque<u128>組成的sqrt_price_x64上下限。僅用於進入 CLMM 池的跳數;對較舊的指令變體而言,空的 deque 會回傳錯誤。
- 執行第一跳: 將
amount_in(或計算精確輸出所需的輸入量)轉入第一個池的輸入金庫,呼叫該池的 swap,並收集輸出。 - 串接後續各跳: 對每一跳 N,以第 N−1 跳的輸出作為第 N 跳的輸入。
- 執行滑點檢查: 在每個 CLMM 跳數中,將
sqrt_price與對應的limit_price比對;在最後一跳,將總輸出與全域minimum_amount_out比對。
定價與手續費的委派
路由器本身不計算價格。每一跳委派給子程式的曲線:- AMM v4:使用搭配 OpenBook 混合定價的恆定乘積公式。
- CPMM:使用搭配設定手續費等級的恆定乘積公式。
- CLMM:使用基於 tick 定價的集中流動性數學。
- Stable:針對同類型代幣使用穩定交換曲線。
何時應避免使用路由器
- 跳數少(1–2 跳)。 帳戶傳遞的額外開銷微乎其微,直接使用兩條獨立的 swap 指令即可。
- 非 Raydium 池。 路由器僅支援四種 Raydium 池類型。若路由跨越外部程式,請在客戶端串接指令。
- 條件式路由。 若你需要在路由中途根據價格或池狀態進行分支判斷,鏈上路由的靈活性不如客戶端組合。
思維模型
可以把路由器理解為一個交易打包工具。它接收你的路由規格,將其打包成一條指令、一筆交易、一個運算預算。每一跳在內部 CPI 進其池程式,並在那裡處理曲線計算。路由器的職責是正確傳遞帳戶、在各跳之間移動代幣,以及執行滑點檢查。後續步驟
products/routing/accounts— 路由權限 PDA 與共用帳戶模式。products/routing/instructions— 完整指令 API(共 10 種變體)。products/routing/code-demos— 以 TypeScript 與原始 Rust 建構路由的範例。integration-guides/routing-and-mev— 多跳路由的整體策略。


