Skip to main content
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 →
Nhiệm vụ của một aggregator là cung cấp cho người dùng giá tốt nhất có thể trên nhiều pool, có thể chia một input duy nhất thành nhiều tuyến pool, và thực thi nó một cách nguyên tử. Trang này ghi lại các phần cụ thể của Raydium trong công việc đó: khám phá, lấy báo giá, và lắp ráp giao dịch.

Khám phá

Danh mục pool

Bạn cần danh sách đầy đủ các pool Raydium hoạt động cho từng sản phẩm. Ba tùy chọn:
  1. REST API (đơn giản nhất): GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1 trả về các pool theo lô 1000. Phân trang cho đến khi bạn có tất cả. Lưu vào bộ nhớ đệm trong 1–5 phút.
  2. Quét on-chain: getProgramAccounts trên các ID chương trình CPMM, CLMM và AMM v4, được lọc theo discriminator tài khoản trạng thái. Cho ra ~mọi pool hoạt động với ~10 giây thời gian RPC. Hữu ích khi API bị lỗi hoặc bị giới hạn tốc độ.
  3. Kết hợp: sử dụng API làm nguồn chính; chạy quét on-chain hàng ngày như một kiểm tra hợp lý. Nhóm cam kết giữ API toàn diện, nhưng các pool được tạo thông qua CPI trực tiếp (không có giao diện) đôi khi có thể chậm.

Tra cứu cặp mint

Đối với một cặp (mintA, mintB) cụ thể, sử dụng GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity. Trả về mọi pool ở bất kỳ mức phí nào và loại sản phẩm. Lên đến ~10 kết quả trên mỗi cặp là phổ biến trên các mint được giao dịch nhiều; sắp xếp theo TVL và lấy một vài cái hàng đầu để định tuyến.

Lấy báo giá

Toán học báo giá khác nhau theo sản phẩm. Sử dụng các hàm toán học thuần túy của SDK để bạn không phải triển khai lại:
Ba sản phẩm không chia sẻ một chữ ký. computeAmountOut chỉ tồn tại trên raydium.liquidity (AMM v4) và như PoolUtils.computeAmountOut(Format) cho CLMM; tương đương của CPMM được gọi là computeSwapAmount và nhận các tham số khác nhau. Viết ba lệnh gọi một cách rõ ràng thay vì tham số hóa trên sản phẩm.
Để so sánh aggregator, sử dụng amountOut (trước slippage) từ mỗi cái.

Độ tươi của bộ nhớ đệm

Trạng thái pool trở nên cũ nhanh chóng. Các mục tiêu độ tươi được khuyến nghị: Đối với một aggregator lấy báo giá ở độ trễ tương tác, hãy đăng ký cập nhật tài khoản WebSocket (accountSubscribe) trên mỗi trạng thái pool liên quan. Điều đó lật mô hình từ polling sang push.

Điều chỉnh Token-2022

Nếu bất kỳ mint nào trong tuyến có phí chuyển Token-2022, toán học báo giá phải điều chỉnh input và output theo algorithms/token-2022-transfer-fees. SDK xử lý điều này nếu poolInfo.mintA.extensions.transferFeeConfig được điền. Xác nhận bằng cách xem trường .extensions trước khi tin tưởng báo giá.

Định tuyến

Tuyến pool đơn

Hầu hết các tuyến là pool đơn. Chọn pool có amountOut cao nhất. Nếu nhiều cái gần nhau, phá vòng lặp theo mức phí (thấp hơn tốt hơn), sau đó theo TVL (nhiều hơn an toàn hơn).

Định tuyến chia tách

Đối với các giao dịch lớn trong đó một pool duy nhất có >5% tác động giá, chia tách trên các pool. Một thuật toán tham lam đơn giản:
Điều này tạo ra một vectơ định tuyến [(pool_A, 0.6), (pool_B, 0.3), (pool_C, 0.1)] giảm thiểu tác động tổng hợp. Một giải pháp tối ưu hóa lồi thích hợp (ví dụ: cân bằng giá biên trên các pool) nằm trong ~1% của kết quả tham lam trong thực tế.

Tuyến đa bước

USDC → RAY → SOL qua hai pool riêng biệt là phổ biến khi không có pool USDC-SOL trực tiếp nào cho báo giá tốt (hiếm). Áp dụng giới hạn slippage cho mỗi bước; mỗi bước thực thi minAmountOut của riêng nó. Xem algorithms/slippage-and-price-impact. Đa bước trên cùng một pool (ví dụ: hai bước CLMM trên SOL-USDC) luôn tối ưu kém hơn so với một bước duy nhất — không tạo các tuyến như vậy.

Lắp ráp giao dịch

Đơn bước, pool đơn

Đối với một pool duy nhất, gọi trình tạo swap của loại pool đó — raydium.liquidity.swap, raydium.cpmm.swap hoặc raydium.clmm.swap. raydium.tradeV2.swap là trình thực thi tuyến đa bước và có hình dạng hoàn toàn khác ({ swapInfo, swapPoolKeys, routeProgram, ownerInfo, txVersion }); không có raydium.trade.

Chia tách và đa bước

Soạn ATA + hướng dẫn theo cách thủ công. Mẫu:
Tất cả trong một giao dịch để đảm bảo tính nguyên tử. Đối với một chia tách 3 pool trên V0 với bảng tra cứu địa chỉ, điều này thường phù hợp trong ~1100 byte. Đối với 4+ pool, giới hạn kích thước giao dịch buộc phải sử dụng multi-tx hoặc hợp nhất tại một mint hub.

Tính nguyên tử

Các aggregator phải đảm bảo tính nguyên tử: toàn bộ tuyến hạ cánh hoặc không có gì cả. Các hướng dẫn swap của Raydium hoàn nguyên trên ExceededSlippage, vì vậy một tuyến đa pool trong đó một bước thất bại khiến toàn bộ giao dịch hoàn nguyên. Miễn phí. Ngoại lệ duy nhất: nếu tuyến của bạn đi qua Raydium + một DEX của bên thứ ba, hãy đảm bảo DEX đó cũng có mô hình hoàn nguyên trên slippage. Một số chương trình bỏ qua giới hạn slippage (hiếm).

Những cạm bẫy

1. Báo giá cũ

Giữa lúc người dùng thấy “Bạn nhận được 125.43 RAY” và giao dịch hạ cánh, dự trữ có thể thay đổi. Tải lại trạng thái pool ngay trước khi gửi; lấy báo giá lại; nếu báo giá mới tệ hơn >1%, tạm dừng và xác nhận lại với người dùng.

2. Danh sách đen pool

Một số pool Raydium là token lừa đảo với phí chuyển được đặt thành 99% hoặc có các tiện ích không thể chuyển. REST API gắn thẻ những cái này (xem trường tags); bỏ qua bất kỳ pool nào được gắn thẻ scam hoặc honeypot. Chạy các kiểm tra an toàn của riêng bạn trên các thẻ của Raydium là thận trọng.

3. Yêu cầu trạng thái quan sát trên CLMM

CLMM SwapV2 nhận một tài khoản observation_state. SDK điền nó cho bạn; các hướng dẫn được xây dựng bằng tay thường quên, điều này khiến chương trình hoàn nguyên với AccountNotFound. Luôn bao gồm nó.

4. Bảng tra cứu địa chỉ

Raydium duy trì các bảng tra cứu công khai cho các tài khoản được sử dụng nhiều nhất của nó (mint chính, ID chương trình, AmmConfigs). Các aggregator nên sử dụng những cái này — nó tiết kiệm ~100 byte trên mỗi giao dịch và cho phép các tuyến lớn hơn phù hợp với V0. Kéo các địa chỉ LUT:

5. Xử lý tắc nghẽn

Trong các cửa sổ khối lượng cao, các giao dịch có thể nằm trong mempool trong nhiều khối. Thử lại tích cực trên hết hạn TX (không phải trên hoàn nguyên — hoàn nguyên là xác định) được khuyến nghị. Tùy chọn sendAndConfirm của SDK thực hiện các thử lại cơ bản; các aggregator sản xuất lớp logic riêng của họ (Jito bundle, phát sóng multi-RPC) trên đó.

Danh sách kiểm tra

Trước khi đi trực tiếp, hãy xác minh:
  • Khám phá pool bao gồm CPMM + CLMM + AMM v4 một cách toàn diện.
  • Báo giá khớp với báo giá giao diện người dùng của Raydium trong 1 điểm cơ sở trên một số giao dịch thử nghiệm.
  • Định tuyến chia tách bắt đầu cho các giao dịch >5% tác động trên bất kỳ pool đơn nào.
  • Phí ưu tiên được định kích thước so với phí chương trình pool gần đây (xem integration-guides/priority-fee-tuning).
  • Phí chuyển Token-2022 được tính toán và hiển thị cho người dùng.
  • Giao dịch hoàn nguyên sạch khi slippage bị vượt quá.
  • Logic thử lại phân biệt hết hạn tx (thử lại) từ hoàn nguyên (không thử lại).

Con trỏ

Nguồn: