Chuyển đến nội dung chính

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 →
Thông tin phiên bản. Trang này tài liệu hóa @raydium-io/raydium-sdk-v2@0.2.42-alpha, phiên bản được xác minh cho mọi demo mã trong trang web này (2026-04). SDK ở giai đoạn pre-1.0 và bề mặt type đã phát triển qua các bản phát hành — hãy ghim phiên bản của bạn.

Cài đặt

npm install @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
# hoặc
pnpm add @raydium-io/raydium-sdk-v2 @solana/web3.js @solana/spl-token
SDK được viết bằng TypeScript và đ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:
import { Raydium } from "@raydium-io/raydium-sdk-v2";
import { Connection, Keypair, clusterApiUrl } from "@solana/web3.js";

const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner      = Keypair.fromSecretKey(/* ... */);

const raydium = await Raydium.load({
  owner,
  connection,
  cluster: "mainnet",           // "mainnet" | "devnet"
  disableFeatureCheck: true,    // bỏ qua lệnh gọi API kiểm tra tính năng khởi động của SDK
  blockhashCommitment: "confirmed",
});
Raydium.load là async vì nó tìm nạp một payload /config nhỏ từ api-v3.raydium.io khi khởi động (liệt kê các tài khoản AmmConfig hiện tại, tiers phí, v.v.). Đặt disableFeatureCheck: true trong các môi trường ngoại tuyến; bạn sẽ phải cung cấp các giá trị đó theo cách thủ công cho một số builder.

Bốn module facade

Sau khi tải, đối tượng raydium hiển thị bốn module facade, mỗi cái một bề mặt sản phẩm:
raydium.cpmm       // CPMM pools: createPool, addLiquidity, withdrawLiquidity, swap, ...
raydium.clmm       // CLMM pools: createPool, openPositionFromBase, increasePositionFromBase,
                   //             decreaseLiquidity, harvestAllRewards, swap, ...
raydium.liquidity  // AMM v4 pools: computeAmountOut, swap, addLiquidity, removeLiquidity, ...
raydium.farm       // Farm v3/v5/v6: deposit, withdraw, harvestAllRewards, create, setRewards
raydium.launchpad  // LaunchLab: createLaunchpad, buyExactIn, sellExactIn, graduate, ...
raydium.trade      // Multi-pool routing: quotes, route-execution (beta in 0.2.41)
raydium.token      // Helpers: get token list, metadata, ATA creation
(Có năm facade tổng cộng — “bốn” là cách Raydium nhóm chúng công khai, với tradetoken là tiện ích hỗ trợ.)

Xây dựng transaction

Mọi hàm thay đổi trả về một builder thay vì thực hiện ngay lập tức:
const { execute, builder, transaction, innerTransactions, extInfo } =
  await raydium.cpmm.addLiquidity({
    poolInfo,
    amountInA,
    amountInB,
    slippage: 0.005,
    txVersion: TxVersion.V0,
  });
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 instruction và signer được tích lũy. Gọi .build() để lấy VersionedTransaction[]; hữu ích khi bạn cần inject các instruction của riêng mình hoặc ký bằng signer bên ngoài.
  • transaction / innerTransactions — các mảng instruction thô. Sử dụng khi xây dựng transaction đa chương trình được kết hợp.
  • extInfo — những thứ bổ sung dành riêng cho sản phẩm. Ví dụ: createPool trả về extInfo.poolId; createLaunchpad trả về PDA trạng thái launch mới.
txVersion điều khiển định dạng transaction legacy vs V0. V0 (address lookup tables) là khuyến cáo mặc định — nó cho phép swap lớn hơn vừa vặn trong một transaction.

Tại sao builder async?

Hầu hết mọi builder đều tìm nạp trạng thái on-chain nội bộ: pool info (cho quotes), quyền sở hữu token program (cho Token-2022 vs SPL routing), account rent-exemption (cho ATA creation), v.v. SDK 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 RPC round-trips. Giữ một instance raydium dài hạn để tránh re-fetching.

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 dynamic-fee, single-sided-fee mới và limit-order:
  • raydium.clmm.createCustomizablePool — tập hợp super của createPool chấp nhận collectFeeOn, enableDynamicFee, và dynamicFeeConfigId. Sử dụng điều này cho bất kỳ pool mới nào cần các knob mới; 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 limit order single-tick trên pool hỗ trợ chúng. Lấy poolInfo, poolKeys, limitOrderConfig (từ /main/clmm-limit-order-config), inputMint, inputAmount, và target tick.
  • raydium.clmm.increaseLimitOrder / decreaseLimitOrder — điều chỉnh phần chưa được điền của đơn hàng hiện có. Giảm revert trên một đơn hàng đã điền hoàn toàn với InvalidOrderPhase.
  • raydium.clmm.settleLimitOrder / settleAllLimitOrder — quét output đã điền vào ATA của owner. Là owner của đơn hàng hay keeper limit_order_admin của pool đều có thể gọi chúng.
  • raydium.clmm.closeLimitOrder / closeAllLimitOrder — đóng các đơn hàng đã settle hoàn toàn để khôi phục rent.
  • raydium.api.getClmmDynamicConfigs() / getClmmLimitOrderConfigs() — trình helper REST truy cập các endpoint /main/clmm-dynamic-config/main/clmm-limit-order-config mới.
Một sự tổ chức lại nhỏ cũng di chuyển utils/ sang libraries/. Code nhập từ @raydium-io/raydium-sdk-v2/utils/... nên chuyển sang @raydium-io/raydium-sdk-v2/libraries/.... Package barrel cấp cao nhất không thay đổi, vì vậy hầu hết người dùng không bao giờ thấy việc đổi tên. Những bước đi cuối cùng TypeScript nằm trong products/clmm/code-demos.

Những lỗi bẫy phổ biến

1. Cluster không khớp

Config khởi động SDK là dành riêng cho cluster. Trộn cluster: "mainnet" với một Connection devnet gây ra mis-routing âm thầm: SDK quote lại AmmConfig mainnet nhưng gửi đến devnet. Luôn luôn vượt qua cả hai.

2. Quên pre-create ATA

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

3. poolInfo

poolInfo là một snapshot được 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à rơi bên dưới amount-out trên chuỗi, revert. Re-fetch poolInfo ngay lập tức trước khi xây dựng transaction cao giá trị, hoặc sử dụng computeAmountOut của SDK để re-query reserves.

4. Priority fees

SDK không thêm compute-unit prices theo mặc định. Trong các cửa sổ khối lượng cao (khởi động pool mới, sự kiện meme-coin) điều này có nghĩa là transaction của bạn cạnh tranh với nhiều cái khác và có thể không hạ cánh. Cung cấp một computeBudgetConfig rõ ràng:
const { execute } = await raydium.cpmm.swap({
  poolInfo,
  inputAmount: new BN(...),
  swapResult: ...,
  slippage: 0.005,
  txVersion: TxVersion.V0,
  computeBudgetConfig: {
    units: 250_000,          // CU limit
    microLamports: 50_000,   // priority fee per CU
  },
});
Xem integration-guides/priority-fee-tuning để hướng dẫn về kích thước.

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

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

6. BN vs number

Tất cả các trường số lượng trong SDK là BN instance của bn.js — không bao giờ JavaScript number. Chuyển đổi giá trị số lượng thông qua .toNumber() cắt âm thầm ở 2^53; đối với bất kỳ giá trị nào ở trên ~9 quadrillion (không hiếm gặp trên 9-decimal mints), điều này tạo ra kết quả sai. Giữ mọi thứ trong BN cho đến cuối cùng render UI.

Chính sách versioning

  • @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 tới nó.
  • Một package 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 kể từ 2024. Coi v1 là end-of-life: không sử dụng nó cho code mới, và di chuyển bất kỳ tích hợp v1 còn lại sang v2.
  • SDK v2 ở giai đoạn pre-1.0. Những thay đổi quan trọng giữa các bản phát hành minor 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 minor SDK:
  1. Re-check kiểu trả về của mỗi lệnh gọi thay đổi — những thay đổi hình dạng (ví dụ: extInfo) hạ cánh thường xuyên.
  2. Tái tạo ra poolInfo fetch signatures — một trường có thể đã được đổi tên.
  3. Re-verify xử lý slippage của bạn; SDK đã dịch chuyển giữa auto-bound và opt-in bound behaviors qua các bản phát hành.
  4. Nếu bạn sử dụng raydium.trade (routing), re-verify hình dạng route — đó là phần không ổn định nhất của bề mặt.

Nhận trợ giúp

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

Con trỏ

Nguồn: