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. Tất cả các ví dụ TypeScript nhắm mục tiêu @raydium-io/raydium-sdk-v2@0.2.64-alpha; chúng được thực thi lần cuối cùng với 0.2.42-alpha (2026-04) và chữ ký 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, trên Solana mainnet-beta. Bộ khung CPI Rust nhắm mục tiêu raydium-cp-swap trên nhánh chore/upgrade-anchor, Anchor 1.0.2 — master vẫn ghim 0.32.1. ID chương trình được lấy thông qua các hằng số từ reference/program-addresses.

Điều kiện tiên quyết

Mỗi ví dụ trên trang này phản ánh một tệp trong raydium-sdk-V2-demo/src/cpmm; liên kết GitHub nằm bên cạnh mỗi phần. Bootstrap tuân theo config.ts.template của kho lưu trữ demo (nguồn):
Thực thể Raydium là giao diện của SDK — mọi ví dụ dưới đây đều sử dụng nó. Raydium.load là bất đồng bộ vì nó tải danh sách token theo mặc định; hãy chuyển disableLoadToken: true để bỏ qua lần tìm nạp đó. Kiểm tra tính năng khả dụng đã bị bỏ qua trừ khi bạn chuyển disableFeatureCheck: false. Các cấu hình phí được tìm nạp một cách lười biếng khi sử dụng lần đầu tiên thông qua raydium.api.getCpmmConfigs().

Tạo một pool CPMM

Nguồn: src/cpmm/createCpmmPool.ts
Một vài điều mà SDK xử lý một cách im lặng:
  • Sắp xếp các mint theo thứ tự token0/token1 trước khi lấy PDA.
  • Trả create_pool_fee một lần cho poolFeeAccount.
  • Tạo các tài khoản token liên kết của người gọi nếu bị thiếu.
  • Chọn chương trình token phù hợp (SPL Token so với Token-2022) cho mỗi bên.
Sau khi xác nhận, bạn có thể tìm nạp trạng thái pool trực tiếp với:

Swap (base-input)

Nguồn: src/cpmm/swap.ts
Lưu ý: SDK luôn tìm nạp lại trạng thái pool từ RPC bên trong getPoolInfoFromRpc. Không báo giá từ api-v3.raydium.io cho một giao dịch mà bạn sắp ký — một báo giá cũ một khối có thể trượt vào ExceededSlippage tại thời điểm hạ cánh.

Swap (base-output)

Nguồn: src/cpmm/swapBaseOut.ts

Gửi thanh khoản

Nguồn: src/cpmm/deposit.ts
SDK lấy số tiền được ghép nối từ dự trữ hiện tại của pool, tăng mỗi bên theo slippage cho các đối số maximum_* của hướng dẫn, và xây dựng các tạo ATA nếu cần thiết. raydium.cpmm.computePairAmount({ ... }) trả về các số giống nhau nếu bạn muốn chúng cho bản xem trước UI.

Rút thanh khoản

Nguồn: src/cpmm/withdraw.ts

Thu phí giao thức/quỹ/người tạo

Nguồn: src/cpmm/collectCreatorFee.ts, src/cpmm/collectAllCreatorFee.ts Thu phí giao thức và quỹ vẫn bị giới hạn bởi quyền hạn. Phí người tạo có hai đường dẫn: CollectCreatorFee được ký bởi người tạo, và CollectCreatorFeePermissionless bổ sung, mà bất kỳ người trả tiền nào cũng có thể gọi nhưng chỉ có thể chuyển đến các ATA chính tắc của người tạo. 0.2.64-alpha cung cấp các trình xây dựng cấp mô-đun cho cả hai đường dẫn người tạo:
Cả hai hướng dẫn người tạo đã thay đổi danh sách tài khoản của chúng trong bản nâng cấp chương trình ngày 2026-09-19. Mỗi cái bây giờ lấy một PDA creator_fee_share tại ["creator_fee_share", creator, ammConfig], và cái không cần phép cũng lấy amm_config — cả hai được nối vào sau system_program chứ không phải được chèn vào, vì vậy các tài khoản đã có sẵn giữ nguyên vị trí của chúng. Một trình xây dựng được ghim vào bản phát hành SDK trước bản nâng cấp phát ra danh sách ngắn hơn và giao dịch bị từ chối vì thiếu tài khoản. Kiểm tra xem phiên bản bạn cài đặt có mang các tài khoản mới trước khi sử dụng các trình trợ giúp này với chương trình được nâng cấp, và làm mới IDL nếu bạn tạo máy khách từ nó.Chuyển PDA là bắt buộc ngay cả khi nó chưa bao giờ được tạo — lấy nó và chuyển nó; chương trình quay lại AmmConfig.creator_fee_share_rate khi tài khoản trống.
Hai hướng dẫn người tạo có các bộ phân biệt và bố cục tài khoản khác nhau — cái không cần phép thay thế người ký người tạo bằng một payer riêng biệt và một creator không ký. Sử dụng trình xây dựng phù hợp thay vì trao đổi tài khoản thủ công trên cái kia.Không có trình xây dựng phí giao thức hoặc quỹ trong SDK (makeCollectProtocolFeeInstruction và makeCollectFundFeeInstruction không tồn tại dưới bất kỳ tên nào) — đó là những đường dẫn quản trị, cũng như CreateCreatorFeeShare / CloseCreatorFeeShare, không có trình xây dựng nào cả. Các trình xây dựng hướng dẫn cấp thấp thực sự tồn tại là collectCpFeeInstruction, makeCollectCreatorFeeInstruction và collectCreatorFeePermissionlessInInstruction.
Ngoài chuỗi, bạn có thể đọc phí tích lũy trực tiếp từ PoolState:

Bộ khung CPI Rust

Nếu bạn muốn gọi CPMM từ chương trình Anchor của riêng mình — ví dụ, một kho lưu trữ thực hiện swap thay mặt cho những người gửi tiền của nó — ngữ cảnh CPI trông như thế này. Thứ tự tài khoản tuân theo products/cpmm/instructions.
Nếu CPI của bạn ký như một PDA (ví dụ, bạn quản lý một kho lưu trữ thay mặt cho những người gửi tiền), hãy hoán đổi CpiContext::new cho CpiContext::new_with_signer và chuyển các hạt giống của bạn.

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

Một danh sách kiểm tra ngắn trước khi mở một vé hỗ trợ:
  • Mint được sắp xếp. Nếu PDA poolState được lấy của bạn không khớp với pool trên chuỗi, bạn có thể đã quên sắp xếp các mint.
  • Báo giá API cũ. Không bao giờ chuyển một giá trị dự trữ từ api-v3.raydium.io vào CurveCalculator.swap. Tìm nạp từ RPC.
  • Chương trình token sai. Kho của một mint Token-2022 được sở hữu bởi chương trình Token-2022, không phải bởi SPL Token. Luôn sử dụng các trường token_0_program / token_1_program của pool.
  • Slippage dưới mức cho các mint phí chuyển. Nếu bất kỳ bên nào của pool là một mint phí chuyển Token-2022, minimum_amount_out của bạn phải được tính bằng những gì người dùng thực sự nhận được, không phải những gì kho gửi.
  • NotApproved trên một swap. Kiểm tra PoolState.status — quản trị viên có thể đã tạm dừng swap trên pool đó. Xem products/cpmm/instructions để biết mặt nạ trạng thái.

Tiếp theo đi đâu

Nguồn: