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 →
Kể từ nâng cấp chương trình 2026-07, phụ thuộc OpenBook / Serum của AMM v4 đã bị loại bỏ. Các lệnh v1 cũ SwapBaseIn / SwapBaseOut, DepositWithdraw giữ nguyên bố cục tài khoản cũ để tương thích ngược: các tài khoản thị trường vẫn được chấp nhận ở vị trí cũ, nhưng chúng không còn được xác thực hoặc sử dụng (không có CPI được phát hành). Các tích hợp mới nên sử dụng các điểm vào swap V2, loại bỏ hoàn toàn các tài khoản thị trường. Một số lệnh đã bị loại bỏ và hiện trả về lỗi — xem mục nhập changelog. Danh sách tài khoản dưới đây sử dụng tên trường từ Raydium SDK; IDL cơ bản đôi khi sử dụng tiền tố serum_*.Nâng cấp chương trình 2026-09 thêm một lệnh quản trị viên, WithdrawExcessLamports (tag 18), và loại bỏ sysvar rent khỏi CreateConfigAccount. Mọi thứ mà nhà giao dịch hoặc LP gọi đều không thay đổi. Xem mục nhập changelog 2026-09-09.

Danh sách lệnh

SDK chỉ hiển thị các builder cho các lệnh hướng tới người dùng. Các lệnh bảo trì thường được gọi bởi người giữ Raydium. Đã loại bỏ / không còn có thể gọi được (các builder client của chúng đã bị xóa): Initialize (tag 0, sử dụng Initialize2), MonitorStep (2), MigrateToOpenBook (5), WithdrawSrm (8), PreInitialize (10, sử dụng Initialize2), SimulateInfo (12), AdminCancelOrders (13). Một giao dịch mang một trong những tag này sẽ thất bại; chương trình không bao giờ thực thi lệnh. Coi tất cả bảy cái như đã biến mất thay vì các đường dẫn lỗi để xử lý.

Initialize2

Khởi động một pool AMM v4 mới được liên kết với một thị trường OpenBook hiện có. Tham số
Tài khoản (có thể ghi W, ký S)
Hai bố cục được chấp nhận. Danh sách 19 tài khoản ở trên là bố cục được khuyến nghị. Để tương thích ngược, chương trình cũng đọc một bố cục cũ gồm 21 tài khoản, chèn thêm một amm_open_orders bị bỏ qua ở vị trí 7 và một market_program bị bỏ qua ở vị trí 16 — đây là những gì trình xây dựng chỉ thị initialize2 trong repo vẫn phát ra. Bất kỳ độ dài nào khác sẽ được phân tích theo vị trí đối chiếu với bố cục cũ và sẽ thất bại.
Điều kiện sau
  • LP được mint cho người tạo = sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. Số thập phân của LP bằng coin_mint.decimals, nên lượng bị trừ đi đúng bằng một token LP trọn vẹn; nó không bao giờ được mint và vĩnh viễn nằm ngoài lưu thông. Nếu sqrt(...) nhỏ hơn lượng đó, chỉ thị sẽ revert với InitLpAmountTooLess.
  • AmmInfo.lp_amount lưu trọn giá trị sqrt(...), không phải lượng đã được mint — nên lp_mint.supply vĩnh viễn thấp hơn amm.lp_amount đúng một token LP trọn vẹn. Mọi phép toán theo tỷ lệ đều dùng amm.lp_amount.
  • Không có đơn hàng OpenBook nào được đăng (lưới sổ đặt hàng đã bị loại bỏ). AmmInfo.market ghi lại tài khoản được truyền ở slot 15, nhưng cả AmmInfo.open_ordersAmmInfo.market_program đều được ghi là Pubkey::default(), và coin_lot_size / pc_lot_size / min_size được khởi tạo thành 0. Trên bố cục cũ 21 tài khoản, các tài khoản thêm amm_open_ordersmarket_program được đọc rồi loại bỏ.
Lỗi phổ biếnInvalidCoinMint (coin mint và pc mint giống nhau), InvalidConfigAccount (PDA amm_config sai), InvalidFee (đích phí tạo pool sai), InvalidProgramAddress (amm_authority sai hoặc nonce sai), RepeatCreateAmm (đã tồn tại một pool cho thị trường này), InitLpAmountTooLess, InvalidSupply (một trong hai lượng khởi tạo bằng 0, hoặc mint LP đã có cung), AlreadyInUse.

Deposit

Thêm thanh khoản. Tham số
Tài khoản (tóm tắt)
Các số lượng được chấp nhận là 11, 14 hoặc 15 — không gì khác. Bố cục cũ là 14 tài khoản (hoặc 15 với một tài khoản bị bỏ qua ở cuối): cùng danh sách đó với một amm_open_orders bị bỏ qua ở vị trí 4, một market bị bỏ qua ở vị trí 9, và một market_event_queue bị bỏ qua được thêm vào ở vị trí 14. Bất kỳ số lượng nào khác sẽ revert với WrongAccountsNumber.
Toán học — theo tỷ lệ tiêu chuẩn. Sử dụng dự trữ hiệu quả của pool (kho + trên sổ), SDK tính toán cặp coin/pc mang lại số lượng LP nhất định và kiểm tra nó so với max_*. Trả về lỗi ExceededSlippage nếu một trong hai bên vượt quá giới hạn.

Withdraw

Đốt LP, nhận cả hai bên. Tham số
Tài khoản — bố cục 11 tài khoản được khuyến nghị
Withdraw không phải là Deposit đảo ngược. Các số lượng được chấp nhận là 11, hoặc từ 20 đến 23. Bố cục cũ 20 tài khoản đặt tài khoản LP của người dùng trước hai ATA nhận và xen kẽ năm tài khoản thị trường bị bỏ qua: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W). Các dạng 22 và 23 tài khoản chèn thêm hai tài khoản đệm bị bỏ qua sau vị trí 8. Bất kỳ số lượng nào khác sẽ revert với WrongAccountsNumber.
Không còn bước thanh toán từ OpenBook nữa — phép toán theo tỷ lệ sử dụng trực tiếp số dư kho.

SwapBaseIn

Swap đầu vào chính xác. Luôn là swap đường dẫn AMM (không định tuyến qua khớp OpenBook).
Sử dụng các biến thể V2 cho mã mới. Vì phụ thuộc OpenBook của AMM v4 đã bị loại bỏ, các điểm vào V1 (SwapBaseIn, SwapBaseOut) vẫn mong đợi danh sách tài khoản đầy đủ 17 tài khoản (hoặc 18 với tài khoản target-orders tùy chọn), nhưng các tài khoản OpenBook/market hiện được chấp nhận theo vị trí và bị bỏ qua — chúng không được xác thực và không có CPI được phát hành. Truyền số lượng tài khoản sai vẫn trả về lỗi WrongAccountsNumber, nhưng nội dung tài khoản thị trường không còn được kiểm tra. Các tích hợp mới nên sử dụng SwapBaseInV2 / SwapBaseOutV2, lấy danh sách tài khoản nhỏ hơn nhiều và đại diện cho đường dẫn thực thi chính tắc ngày hôm nay. Các hình thức V1 được ghi lại ở đây để hoàn chỉnh và để đọc các giao dịch trên chuỗi hiện có.
Tham số
Tài khoản (tóm tắt) Toán học — xem products/amm-v4/math. Điều kiện trước
  • AmmStatus::from_u64(amm.status).swap_permission() là true — nghĩa là status bằng 1 (Initialized), 6 (SwapOnly) hoặc 7 (WaitingTrade). status là một giá trị enum, không phải bitmask; xem products/amm-v4/accounts.
  • amm.state_data.pool_open_time <= now.
  • amount_in > 0.
  • user_source_token_account giữ ít nhất amount_in.
Điều kiện sau
  • Người dùng mất amount_in của token nguồn, nhận amount_out ≥ minimum_amount_out của token đích.
  • Phí swap ở lại trong các vault, làm tăng bất biến k. Các bộ đếm need_take_pnl_* không bị các lần swap chạm tới — PnL giao thức được tính lại từ delta của k ở lần Deposit, Withdraw hoặc WithdrawPnl tiếp theo (Processor::calc_take_pnl).
  • Lưu ý: các bộ đếm phân tích state_data.swap_*_in_amount / swap_*_out_amount không còn được cập nhật — giá trị của chúng bị đóng băng. Sử dụng nhật ký giao dịch để phân tích khối lượng.
Lỗi phổ biếnExceededSlippage, InvalidInput, InvalidStatus, NotAllowed (mint coin/pc giống nhau).

SwapBaseOut

Đầu ra chính xác, nghịch đảo của SwapBaseIn. Cùng tài khoản. Tham số

SwapBaseInV2 / SwapBaseOutV2

Các điểm vào swap biến thể (tag 16 / 17) bỏ qua hoàn toàn các tài khoản OpenBook. Toán học giống với đường dẫn V1, nhưng danh sách tài khoản thu nhỏ xuống chỉ còn phía AMM và người dùng — 8 tài khoản, và amm_open_orders không được truyền: Dự trữ pool hiện là số dư kho (trừ PnL đang chờ xử lý), vì vậy toán học báo giá rõ ràng và giống với đường dẫn v1. Sử dụng V2 để tiết kiệm tính toán và tránh truyền các tài khoản thị trường (hiện bị bỏ qua). Bộ định tuyến Raydium luôn sử dụng hình thức V2 khi định tuyến qua AMM v4. Các tham số giống như các hình thức V1 (amount_in / minimum_amount_out cho SwapBaseInV2; max_amount_in / amount_out cho SwapBaseOutV2).

MonitorStep và các lệnh đã loại bỏ khác

Đã loại bỏ — không còn có thể gọi được. Kể từ nâng cấp 2026-07, MonitorStep (tag 2) đã bị loại bỏ khỏi chương trình và hiện trả về lỗi (unimplemented!) nếu được gọi. Trình tạo client của nó cũng đã bị xóa. Điều tương tự cũng áp dụng cho MigrateToOpenBook (5), WithdrawSrm (8), SimulateInfo (12), AdminCancelOrders (13), và các điểm vào tạo pool cũ Initialize (0) / PreInitialize (10) — sử dụng Initialize2 thay thế.
Về mặt lịch sử, MonitorStep quay vòng tương tác OpenBook của pool: nó thanh toán các đơn hàng đã điền (di chuyển tiền từ kho thị trường vào kho pool thông qua CPI OpenBook), hủy các đơn hàng cũ, và đăng các đơn hàng mới để đóng khoảng cách giữa target_ordersamm_open_orders. Với phụ thuộc OpenBook bị loại bỏ, không có gì để quay vòng và lệnh đã biến mất. Bất kỳ người giữ hoặc tích hợp nào vẫn gọi nó phải loại bỏ lệnh gọi.

WithdrawPnl / TakePnl

Quét quản trị viên của phí giao thức tích lũy. Tham số
  • WithdrawPnl không lấy tham số; nó đọc need_take_pnl_* và di chuyển những số tiền chính xác đó.
Thay đổi phá vỡ (chỉ quản trị viên). Danh sách tài khoản giảm từ 17 (+1 tùy chọn) xuống 10amm_open_orders và tất cả sáu tài khoản thị trường đã bị loại bỏ — mà không có phân tích tương thích ngược. Bố cục cũ không khớp (cũ #5 là amm_open_orders, hiện là pool_coin_token_account) và thất bại với các lỗi như InvalidCoinVault. Công cụ quản trị viên phải được cập nhật.
Tài khoản (bố cục 10 tài khoản mới) Hiệu ứng
  • Chuyển need_take_pnl_coin từ pool_coin_token_account đến pnl_coin_token_account.
  • Tương tự cho pc.
  • Đặt need_take_pnl_coinneed_take_pnl_pc thành 0.
  • Thay đổi logic: nếu số dư kho không đủ để bao gồm PnL tích lũy, lệnh trả về TakePnlError trực tiếp (nó không còn thao tác với trạng thái sổ đặt hàng).
Không thay đổi dự trữ vì PnL tích lũy đã bị loại trừ khỏi bất biến.

SetParams

Thay đổi tham số quản trị viên, được gọi bởi multisig Raydium. Các tham số là tag param: u8 + tải trọng.
Thay đổi phá vỡ (chỉ quản trị viên). Danh sách tài khoản được giảm xuống chỉ còn [amm (W), admin (S)] (quyền hạn, open-orders, target-orders, kho, và tất cả các tài khoản thị trường đã bị loại bỏ). Enum param được đánh số lại và cắt ngắn: Status = 0, State = 1, Fees = 2 (trước đó là 9), SetOpenTime = 3 (trước đó là 11). Tất cả các tham số lưới sổ đặt hàng và AmmOwner, LastOrderDistance, UpdateOpenOrder đã bị loại bỏ, và struct SetParamsInstruction đã loại bỏ new_pubkeylast_order_distance. Công cụ quản trị viên phải được cập nhật.

CreateConfigAccount / UpdateConfigAccount

Quản lý quản trị viên của PDA AmmConfig cấp chương trình (seed ["amm_config_account_seed"]). Tài khoản này chỉ chứa đúng ba trường có ý nghĩa — pnl_owner, cancel_ownercreate_pool_fee — cộng với hai vùng đệm dự trữ; không có cờ tạo pool. UpdateConfigAccount đặt pnl_owner với param = 0, cancel_owner với param = 1, và create_pool_fee với param = 2.
Đã thay đổi trong 2026-09, và tương thích ngược. CreateConfigAccount không còn đọc sysvar rent. Danh sách tài khoản của nó hiện là 4 tài khoản, giảm từ 5:Chương trình đọc các tham số rent từ Rent::get() thay vì giải mã một tài khoản sysvar được truyền vào — điều mà phụ thuộc Solana 3.0 làm cho tự nhiên.Tài khoản đã loại bỏ là cuối cùng trong danh sách, và trình xử lý đọc các tài khoản của nó theo vị trí thông qua next_account_info mà không có kiểm tra độ dài. Do đó, một công cụ quản trị viên hiện có vẫn truyền danh sách 5 tài khoản cũ sẽ tiếp tục hoạt động: tài khoản rent ở cuối đơn giản là không bao giờ được đọc. Cập nhật nó khi thuận tiện, không phải khẩn cấp. UpdateConfigAccount không thay đổi.
Initialize2 giữ sysvar rent ở vị trí 3, và vẫn sử dụng nó: chương trình ngừng gọi Rent::from_account_info trên nó, nhưng nó vẫn được chuyển tiếp vào các CPI spl_token::initialize_accountinitialize_mint tạo kho và LP mint của pool. Không loại bỏ nó khỏi danh sách tài khoản.

WithdrawExcessLamports

Quét quản trị viên của lamports nằm trên mức tối thiểu miễn phí thuê trên các tài khoản mà chương trình kiểm soát. Được thêm vào nâng cấp 2026-09 để khôi phục quá mức tài trợ mà SIMD-0437 rent reduction để lại trên các tài khoản được tạo trước mỗi bước. Nó chỉ di chuyển phần dư. Số dư token, dữ liệu tài khoản, chủ sở hữu, và trạng thái pool không bị chạm, và lệnh là no-op trên một tài khoản đã ở mức tối thiểu của nó — vì vậy nó an toàn để kích hoạt lặp đi lặp lại và lại sau mỗi bước triển khai. Tham số — không có. Tải trọng là byte tag duy nhất 18. Tài khoản Cách mỗi tài khoản nguồn được xử lý Chương trình phân phối dựa trên chủ sở hữu tài khoản nguồn: Lỗi phổ biếnInvalidSignAccount (ký tên sai), InvalidSplTokenProgram (chương trình sai ở slot 3), InvalidProgramAddress (amm_authority sai), LamportsCalculateError (mã tùy chỉnh 60; vòng wSOL không lưới về 0), và InsufficientFunds từ đường dẫn do chương trình sở hữu khi tài khoản giữ ít hơn mức rent tối thiểu của nó. Không có builder SDK. @raydium-io/raydium-sdk-v2 không gửi builder cho lệnh này, cũng như repo raydium-sdk-V2-demo — đó là đường dẫn quản trị viên. Mã hóa nó bằng tay, theo cách quét phía ví trong solana-fundamentals/rent-and-reclaimable-rent làm cho lệnh token-program.

Ma trận thay đổi trạng thái

Cột OpenBook đã biến mất — không có lệnh nào chạm vào sổ đặt hàng nữa.

Tiếp theo

Nguồn: