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.
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Tóm tắt một đoạn
Chương trình AMM Routing gói gọn các swap multi-hop vào một giao dịch on-chain duy nhất, nối liquidity qua các pool. Bạn cung cấp một route (danh sách các pool và mint trung gian) và một instruction với các tham số slippage; router thực hiện tất cả N hop theo thứ tự, chuyển output từ một pool sang input của pool tiếp theo. Không cần logic router on-chain riêng biệt cho việc tính giá—phí và curve của mỗi hop được xử lý bởi chương trình pool riêng của nó thông qua CPI—nhưng router điều phối việc truyền account và chuyển token.Tại sao lại có một chương trình router riêng biệt?
Các client của Raydium và aggregator luôn có thể ghép các swap multi-hop lại với nhau ở phía client mà không sử dụng router: xây dựng N instruction swap (một cho mỗi pool) và gửi chúng trong một giao dịch duy nhất. Vậy tại sao lại có một chương trình router chuyên dụng?Lý do sử dụng router
- CPI từ các chương trình khác. Nếu chương trình của bạn cần gọi một route như một phần của giao dịch lớn hơn (ví dụ: một trình quản lý liquidity hoán đổi phí cho một token mục tiêu), việc CPI vào router sạch hơn so với việc gộp N child CPI và quản lý tất cả account của chúng trong hợp đồng.
- Trạng thái account nguyên tử. Danh sách account của mỗi hop được xác thực trong một context instruction duy nhất. Nếu trạng thái của một pool trung gian bị hỏng hoặc một khẳng định limit-price không đạt, toàn bộ route sẽ thất bại một cách nguyên tử mà không có bất kỳ thanh toán một phần nào.
- Thành phần instruction duy nhất. SDK và frontend có thể biểu diễn một route multi-hop là một thao tác logic duy nhất, chứ không phải là N instruction riêng biệt xảy ra liên tiếp.
Việc ghép lại ở phía client vẫn là mặc định
Đối với hầu hết các ứng dụng, việc xây dựng các instructionSwap riêng biệt cho mỗi pool và gửi chúng theo thứ tự đơn giản hơn, khả dụng hơn và bằng nhau. Flow Trade.makeSwapTransaction của Raydium SDK và các flow tương tự thực hiện chính xác điều này cho hầu hết các route.
Router là một lựa chọn thay thế, không phải thay thế. Sử dụng nó khi:
- Bạn đang triển khai một chương trình cần routing như một phần của thao tác nguyên tử lớn hơn.
- Bạn đang xây dựng một aggregator muốn có một thao tác “gửi route này” duy nhất.
Cách thức hoạt động
Một instruction router mang theo:- Swap args: input chính xác (
amount_in,minimum_amount_out) hoặc output chính xác (maximum_amount_in,amount_out). - Route specification: danh sách
program_id+ child-program account cho mỗi hop, theo thứ tự. Router đọc account đầu tiên trong mỗi nhóm hop để xác định chương trình nào cần gọi. - Limit prices (cho CLMM): một
VecDeque<u128>của giới hạnsqrt_price_x64. Chỉ được sử dụng cho các hop vào pool CLMM; deque trống là lỗi cho các biến thể instruction cũ hơn.
- Thực hiện hop đầu tiên: chuyển
amount_in(hoặc tính input yêu cầu cho exact-output) đến vault input của pool đầu tiên, gọi swap của pool đó và thu thập output. - Nối các hop tiếp theo: cho mỗi hop N, sử dụng output từ hop N−1 làm input cho hop N.
- Thực thi slippage: ở mỗi hop CLMM, kiểm tra
sqrt_priceso vớilimit_pricetương ứng; ở hop cuối cùng, kiểm tra tổng output so vớiminimum_amount_outtoàn cục.
Ủy quyền tính giá và phí
Router không tính giá chính nó. Mỗi hop ủy quyền cho curve của chương trình con:- AMM v4: sử dụng công thức constant-product với định giá hybrid OpenBook.
- CPMM: sử dụng công thức constant-product với mức phí được cấu hình.
- CLMM: sử dụng toán học concentrated-liquidity với định giá dựa trên tick.
- Stable: sử dụng curve stable-swap cho các token cùng loại.
Khi nào nên tránh router
- Số hop thấp (1–2 hop). Overhead truyền account là tối thiểu; chỉ cần sử dụng hai instruction swap riêng biệt.
- Pool không phải của Raydium. Router chỉ biết về bốn loại pool của Raydium. Đối với các route vượt qua các chương trình bên ngoài, hãy ghép lại instruction ở phía client.
- Routing có điều kiện. Nếu bạn cần phân nhánh dựa trên giá hoặc trạng thái pool giữa route, routing on-chain ít linh hoạt hơn thành phần ở phía client.
Mô hình tư duy
Hãy coi router như một tiện ích đóng gói giao dịch. Nó lấy thông số định tuyến của bạn và đóng gói nó vào một instruction, một giao dịch, một compute budget. Mỗi hop nội bộ CPI vào chương trình pool của nó và xử lý curve math ở đó. Công việc của router là truyền account đúng cách, chuyển token giữa các hop và kiểm tra slippage.Bước tiếp theo
products/routing/accounts— route authority PDA và mô hình shared-account.products/routing/instructions— API instruction đầy đủ (tất cả 10 biến thể).products/routing/code-demos— ví dụ về xây dựng route trong TypeScript và Rust.integration-guides/routing-and-mev— chiến lược rộng hơn cho multi-hop routing.


