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.42-alpha trên Solana mainnet-beta, được xác minh vào tháng 4 năm 2026. Bộ khung CPI Rust nhắm mục tiêu raydium-cp-swap trên nhánh master, Anchor 0.30.x. 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 sử dụng nó. Nó lấy danh sách token và cấu hình phí một cách lười biếng từ api-v3.raydium.io; bạn có thể khởi tạo nó bằng dữ liệu của riêng mình trong các môi trường ngoại tuyến.

Tạo một pool CPMM

Nguồn: src/cpmm/createCpmmPool.ts
Một vài điều mà SDK xử lý im lặng:
  • Sắp xếp các mint theo thứ tự token0/token1 trước khi lấy PDA.
  • Trả phí 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ể lấy 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 lấy 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 chuyển đổi lpAmount thành needed_token_0needed_token_1 bằng cách sử dụng dự trữ hiện tại của pool, tăng mỗi cái lên 1 + slippage cho các đối số maximum_* của lệnh, và xây dựng các tạo ATA nếu cần thiết.

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. Phí người tạo có hai đường dẫn: CollectCreatorFee được ký bởi người tạo hiện có, 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. SDK được ghim hiển thị các trình xây dựng thô hiện có:
@raydium-io/raydium-sdk-v2@0.2.42-alpha chưa hiển thị một trình xây dựng cho CollectCreatorFeePermissionless. Cho đến khi một bản phát hành SDK thêm nó, hãy xây dựng từ IDL CPMM được nâng cấp hoặc gọi chương trình trực tiếp. Không sử dụng lại makeCollectCreatorFeeInstruction: lệnh mới có một discriminator khác và thay thế các vị trí ký người tạo / amm_config bằng các tài khoản payercreator không ký riêng biệt.
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. Lấy từ RPC.
  • Chương trình token sai. Kho lưu trữ 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 một trong hai bên 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 lưu trữ 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 cho mặt nạ trạng thái.

Tiếp theo đi đâu

Nguồn: