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 →
Biểu ngữ phiên bản. Trang này tài liệu hóa @raydium-io/raydium-sdk-v2@0.2.64-alpha, phiên bản được ghim mà mọi demo mã trên trang này sử dụng. SDK chưa phải phiên bản 1.0 và bề mặt kiểu dữ liệu đã phát triển qua các bản phát hành — hãy ghim phiên bản của bạn.Phiên bản được nâng cấp từ 0.2.42-alpha vào ngày 2026-09-09 cùng với các nâng cấp chương trình: 0.2.64-alpha là bản phát hành hiện tại của SDK. Kho raydium-sdk-V2-demo mà các trang demo mã liên kết đến cài đặt 0.2.62-alpha, vì vậy hãy ghim một trong hai nếu bạn đang theo dõi demo một cách chính xác. Các demo trên các trang này được thực thi lần cuối cùng với 0.2.42-alpha (2026-04); chữ ký cuộc gọi của chúng được kiểm tra lại với nguồn 0.2.64-alpha vào ngày 2026-09-09, nhưng hãy coi bất kỳ sự không khớp nào là lỗi tài liệu và mở một issue.

Cài đặt

SDK được viết bằng TypeScript và gửi kèm .d.ts cùng với artifact JS của nó. Bộ công cụ tối thiểu: Node 18+, TypeScript 5.0+, moduleResolution: "bundler" hoặc "node16".

Khởi tạo

Điểm vào là Raydium.load:
Raydium.load là async vì, theo mặc định, nó tải danh sách token (raydium.token.load()) từ api-v3.raydium.io. Truyền disableLoadToken: true để bỏ qua lần tìm nạp đó. Việc kiểm tra tính năng khả dụng là một lệnh gọi riêng đến /v3/main/AvailabilityCheckAPI và đã được bỏ qua trừ khi bạn truyền disableFeatureCheck: false một cách tường minh. Các cấu hình phí hoàn toàn không được tìm nạp lúc tải — chúng đến một cách lười biếng từ raydium.api.getCpmmConfigs() / getClmmConfigs() ở lần dùng đầu tiên.

Các module facade

Sau khi tải, đối tượng raydium hiển thị mười module facade cùng với một API client:
(Có năm facade tổng cộng — “bốn” là cách Raydium nhóm chúng công khai, với trade và token là các tiện ích hỗ trợ.)

Các builder giao dịch

Mọi hàm thay đổi trả về một builder thay vì thực thi ngay lập tức:
Các trường được trả về:
  • execute — một hàm tiện lợi ký + gửi. Tương đương với builder.execute.
  • builder — instance TxBuilder với tất cả các hướng dẫn và người ký được tích lũy. builder.build() trả về một TxBuildData mà transaction của nó là một Transaction legacy duy nhất; builder.buildV0() trả về một TxV0BuildData với một VersionedTransaction duy nhất. Chỉ buildMultiTx / buildMultiTxV0 mới tạo ra một mảng.
  • transaction — Transaction / VersionedTransaction đã được xây dựng.
  • instructionTypes / signers — các nhãn hướng dẫn và tập người ký được tích lũy.
  • extInfo — các tính năng bổ sung cụ thể cho sản phẩm. Ví dụ: cpmm.createPool trả về extInfo.address.{poolId, lpMint, vaultA, vaultB}; launchpad.createLaunchpad trả về extInfo.address (một LaunchpadPoolInfo cùng với poolId).
Không có trường innerTransactions nào trên kiểu trả về — destructuring nó là một lỗi TypeScript. Các builder có kiểu trả về là MakeMultiTxData (ví dụ clmm.harvestAllRewards, farm.harvestAllRewards, tradeV2.swap, launchpad.createLaunchpad) cung cấp transactions thay thế, và execute của chúng yêu cầu { sequentially: boolean } và trả về { txIds } chứ không phải { txId }.
txVersion kiểm soát định dạng giao dịch legacy so với V0. V0 (bảng tra cứu địa chỉ) là khuyến nghị mặc định — nó cho phép các swap lớn hơn vừa vặn trong một giao dịch.

Tại sao các builder async?

Hầu như mọi builder đều tìm nạp trạng thái on-chain nội bộ: thông tin pool (cho các báo giá), quyền sở hữu chương trình token (cho định tuyến Token-2022 so với SPL), miễn phí thuê tài khoản (cho tạo ATA), v.v. SDK lưu vào bộ nhớ cache một cách tích cực nhưng lệnh gọi đầu tiên cho một pool mới liên quan đến các vòng RPC. Giữ một instance raydium lâu dài để tránh tìm nạp lại.

Bổ sung module CLMM (bản phát hành mới nhất)

Facade CLMM đã có các bề mặt cho các tính năng phí động, phí một chiều và lệnh giới hạn mới:
  • raydium.clmm.createCustomizablePool — siêu tập hợp của createPool chấp nhận collectFeeOn và dynamicFeeConfig (PublicKey của tài khoản cấu hình). Việc cung cấp dynamicFeeConfig chính là điều bật phí động; không có cờ enableDynamicFee riêng và cũng không có dynamicFeeConfigId. createPool cổ điển tiếp tục hoạt động cho các pool phí mặc định.
  • raydium.clmm.openLimitOrder — mở một lệnh giới hạn tick đơn. Lấy poolInfo, baseIn (hướng), orderTick, amount, và tùy chọn tickArrayBitmap, noneIndex, ownerInfo. Dùng trợ giúp được xuất ra getOrderTick({ baseIn, mintADecimal, mintBDecimal, tickSpacing, price }) để lượng tử hóa tick.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — điều chỉnh phần chưa điền của một lệnh hiện có. Cả hai lấy { poolInfo, limitOrder, amount }; decreaseLimitOrder thêm một slippage tùy chọn. Giảm sẽ hoàn nguyên trên một lệnh đã điền đầy với InvalidOrderPhase.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — quét đầu ra đã điền vào ATA của chủ sở hữu. settleLimitOrder chỉ lấy { limitOrder } — không có poolInfo. Hoặc chủ sở hữu lệnh hoặc keeper limit_order_admin của chương trình đều có thể gọi nó.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — đóng các lệnh đã giải quyết hoàn toàn để khôi phục tiền thuê.
  • raydium.api.getClmmDynamicConfigs() — trợ giúp REST nhấn điểm cuối mới /main/clmm-dynamic-config. (Không có trợ giúp hay điểm cuối cấu hình lệnh giới hạn: các lệnh giới hạn được khóa theo tick, không theo một tài khoản cấu hình cho mỗi pool.)
Gói này không khai báo subpath export nào, nên @raydium-io/raydium-sdk-v2/<anything> không phân giải được ở bất kỳ cách viết nào — hãy import mọi thứ từ thùng gói cấp cao nhất. (Về mặt nội bộ, src/raydium/clmm/utils/ đã được đổi tên thành src/raydium/clmm/libraries/, nhưng đó chưa bao giờ là một điểm vào công khai.) Các hướng dẫn TypeScript từ đầu đến cuối nằm trong products/clmm/code-demos.

Những cạm bẫy phổ biến

1. Cluster không khớp

Cấu hình khởi động của SDK là cụ thể cho cluster. Trộn cluster: "mainnet" với Connection devnet gây ra định tuyến sai lặng lẽ: SDK báo giá chống lại AmmConfig mainnet nhưng gửi đến devnet. Luôn truyền cả hai.

2. Quên tạo trước ATA

Khi tương tác lần đầu tiên với một mint, Associated Token Account của người dùng có thể không tồn tại. SDK tự động thêm một hướng dẫn AssociatedTokenAccount::create khi nó phát hiện ATA bị thiếu, điều này tốn một lượng nhỏ tiền thuê. Nếu ví của bạn có ít SOL, điều này sẽ thất bại một cách im lặng. Kiểm tra và tài trợ trước khi thử lại.

3. poolInfo cũ

poolInfo là một ảnh chụp nhanh được lưu vào bộ nhớ cache. Nếu trạng thái pool đã thay đổi kể từ khi bạn tìm nạp nó (một giao dịch lớn di chuyển giá, chẳng hạn), minAmountOut của swap có thể được tính toán dựa trên trạng thái cũ và hạ xuống dưới số tiền on-chain, hoàn nguyên. Tìm nạp lại poolInfo ngay trước khi xây dựng các giao dịch có giá trị cao, hoặc sử dụng computeAmountOut của SDK, nó sẽ truy vấn lại dự trữ.

4. Phí ưu tiên

SDK không thêm giá đơn vị tính toán theo mặc định. Trong các cửa sổ khối lượng cao (khởi chạy pool mới, sự kiện meme-coin), điều này có nghĩa là giao dịch của bạn cạnh tranh với nhiều giao dịch khác và có thể không hạ cánh. Cung cấp một computeBudgetConfig rõ ràng:
Xem integration-guides/priority-fee-tuning để hướng dẫn kích thước.

5. Dung sai slippage phải khớp với loại pool

CPMM và AMM v4 là toán học CPMM (tác động thấp trên các giao dịch bình thường). CLMM là từng phần (tác động nhảy tại các vị trí tick). Nếu bạn sao chép dung sai slippage 0,5% từ một ví dụ CPMM vào một swap CLMM vượt qua nhiều tick, giao dịch có khả năng hoàn nguyên. computeAmountOut của SDK trả về priceImpact; kích thước dung sai của bạn phải cao hơn nó.

6. BN so với number

Tất cả các trường số tiền trong SDK là các instance BN của bn.js — không bao giờ là number của JavaScript. Chuyển đổi các giá trị số tiền qua .toNumber() sẽ cắt ngắn im lặng ở 2^53; đối với bất kỳ giá trị nào trên ~9 triệu tỷ (không phổ biến trên các mint 9 chữ số thập phân), điều này tạo ra kết quả sai. Giữ mọi thứ trong BN cho đến khi hiển thị UI cuối cùng.

Chính sách phiên bản

  • @raydium-io/raydium-sdk-v2 là SDK duy nhất mà Raydium duy trì. Tất cả tài liệu, demo và hướng dẫn tích hợp nhắm mục tiêu nó.
  • Một gói v1 cũ hơn (@raydium-io/raydium-sdk) tồn tại trên npm vì lý do lịch sử. Bảo trì kết thúc sau khi CPMM và LaunchLab được gửi (v1 không bao giờ có hỗ trợ cho cả hai), và không có bản phát hành v1 nào kể từ năm 2024. Coi v1 là hết hạn: không sử dụng nó cho mã mới, và di chuyển bất kỳ tích hợp v1 còn lại sang v2.
  • SDK v2 là pre-1.0. Các thay đổi ngắt giữa các bản phát hành phụ 0.x là có thể; ghim phiên bản bạn đã xác minh và kiểm tra ghi chú phát hành GitHub khi nâng cấp.

Nâng cấp

Khi nâng cấp giữa các phiên bản phụ SDK:
  1. Kiểm tra lại kiểu trả về của mọi lệnh gọi thay đổi — các thay đổi hình dạng (ví dụ: extInfo) xảy ra thường xuyên.
  2. Tạo lại chữ ký tìm nạp poolInfo — một trường có thể đã được đổi tên.
  3. Xác minh lại xử lý slippage của bạn; SDK đã chuyển giữa các hành vi ràng buộc tự động và ràng buộc opt-in trên các bản phát hành.
  4. Nếu bạn sử dụng raydium.tradeV2 (định tuyến), xác minh lại hình dạng tuyến đường — đó là phần không ổn định nhất của bề mặt. Lưu ý facade đã được đổi tên từ trade thành tradeV2; tên cũ không còn tồn tại.

Nhận trợ giúp

Để hỏi về SDK và API:
  • GitHub issues — tệp tại github.com/raydium-io/raydium-sdk-V2/issues cho lỗi và yêu cầu tính năng. Nhóm Raydium theo dõi một cách tích cực.
  • Discord — kênh #dev-support tại discord.gg/raydium để nhận trợ giúp đồng bộ.
  • Telegram — trò chuyện nhà phát triển được liên kết từ raydium.io (tránh các nhóm Telegram không được xác minh).
Đối với các vấn đề bảo mật, không đăng trong các kênh công khai — xem security/disclosure.

Con trỏ

Nguồn: