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.
Stable AMM chia sẻ phần lớn bộ lệnh với AMM v4. Các lệnh độc nhất là InitModelData và UpdateModelData, lệnh này điền dữ liệu vào bảng tra cứu và cập nhật bảng. Tất cả các hoạt động khác (swap, deposit, withdraw, crank) tuân theo cùng mô hình như AMM v4.
Danh sách lệnh
| Lệnh | Danh mục | Ghi chú |
|---|
Initialize | Vòng đời | Tạo pool (yêu cầu tài khoản model-data được phân bổ trước). |
PreInitialize | Vòng đời | Công cụ hỗ trợ phân bổ trước phiên bản cũ. |
InitModelData | Thiết lập mô hình | Tạo và khởi tạo bảng tra cứu. |
UpdateModelData | Thiết lập mô hình | Điền lên tới 5 phần tử bảng trên mỗi lần gọi. |
Deposit | Thanh khoản | Thêm thanh khoản, nhận LP. |
Withdraw | Thanh khoản | Đốt LP, nhận cả hai bên. |
SwapBaseIn | Swap | Swap nhập liệu chính xác. |
SwapBaseOut | Swap | Swap kết quả chính xác. |
MonitorStep | Crank | Thanh toán OpenBook, cập nhật đơn hàng. |
SetParams | Quản trị | Thay đổi tham số pool. |
WithdrawPnl | Quản trị | Rút lệ phí giao thức tích lũy. |
WithdrawSrm | Phiên bản cũ | Rút hoàn lại SRM (phiên bản cũ). |
SimulateInfo | Chẩn đoán | Công cụ trợ giúp báo giá chỉ đọc. |
Initialize
Khởi động một pool Stable AMM mới được liên kết với một thị trường OpenBook hiện có và một tài khoản ModelDataInfo được tạo trước.
Đối số
Tài khoản (ghi được W, ký S)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | token_program | | | SPL Token. |
| 2 | system_program | | | |
| 3 | rent | | | |
| 4 | amm | W | | Tài khoản AmmInfo của pool. |
| 5 | amm_authority | | | PDA toàn chương trình. |
| 6 | amm_open_orders | W | | OpenOrders của OpenBook. |
| 7 | lp_mint | W | | Mint token LP có thể thay đổi. |
| 8 | coin_mint | | | |
| 9 | pc_mint | | | |
| 10 | pool_coin_token_account | W | | Kho coin của pool. |
| 11 | pool_pc_token_account | W | | Kho pc của pool. |
| 12 | amm_target_orders | W | | Lưới cho các đơn hàng OpenBook. |
| 13 | model_data_account | | | Tài khoản bảng tra cứu. |
| 14 | serum_program | | | Chương trình OpenBook. |
| 15 | serum_market | | | Thị trường OpenBook. |
| 16 | user_dest_lp_token | W | | ATA LP của người tạo (nhận LP ban đầu). |
| 17 | user_wallet | W | S | Người tạo; thanh toán tiền thuê, tài trợ tiền gửi ban đầu. |
| (opt) | srm_token | W | | Tài khoản token SRM để chiết khấu phí (phiên bản cũ). |
Điều kiện tiên quyết
model_data_account phải được tạo và khởi tạo trước bởi InitModelData.
lp_mint phải trống (nguồn cung bằng không).
- Kho phải tồn tại và thuộc sở hữu của
amm_authority.
Điều kiện sau
AmmInfo được khởi tạo với tất cả các tham chiếu.
TargetOrders được đặt về 0 và sẵn sàng cho MonitorStep đầu tiên.
- Các token LP ban đầu được tạo và gửi đến
user_dest_lp_token.
- Các đơn hàng OpenBook chưa được đăng bài;
MonitorStep đầu tiên đăng bài chúng.
InitModelData
Tạo và khởi tạo tài khoản ModelDataInfo. Phải được gọi một lần trước Initialize.
Đối số
multiplier: u64 // hệ số tỷ lệ (ví dụ: 10^6)
Tài khoản (ghi được W, ký S)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | model_data_account | W | | Tài khoản bảng 50k phần tử. |
| 2 | amm_admin | | S | Quản trị viên pool (phải ký để chứng minh quyền). |
Điều kiện tiên quyết
model_data_account phải đủ lớn (~1,2 MB cho 50k × 24 byte).
model_data_account phải thuộc sở hữu của chương trình Stable.
Điều kiện sau
status = Initialized.
multiplier được đặt.
valid_data_count = 0 (không có phần tử nào được điền; gọi UpdateModelData để thêm chúng).
- Mảng
elements được đặt về 0.
UpdateModelData
Điền lên tới 5 phần tử bảng trong một lần gọi. Phải được gọi sau InitModelData nhưng trước khi các swap bắt đầu sử dụng bảng.
Đối số
array_data: [UpdateModelData; 5]
pub struct UpdateModelData {
pub index: u64,
pub data: DataElement,
}
Tài khoản (ghi được W, ký S)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | amm_admin | | S | Người ký (phải là quản trị viên pool). |
| 2 | model_data_account | W | | Tài khoản bảng. |
Điều kiện tiên quyết
amm_admin phải khớp với AmmInfo.amm_admin.
- Mỗi chỉ mục trong
array_data phải hợp lệ (trong phạm vi 50.000).
- Các mục phải được sắp xếp (không được xác thực trên chuỗi để tăng tốc độ): x tăng, y giảm, giá tăng.
Điều kiện sau
- Các phần tử được ghi vào
model_data_account.elements[index] cho mỗi đầu vào.
valid_data_count được cập nhật thành chỉ mục tối đa được ghi + 1.
Ghi chú quản trị: Không có việc thực thi thứ tự sắp xếp hoặc tính nhất quán giá trên chuỗi. Một quản trị viên độc hại hoặc không cẩn thận có thể làm hỏng bảng và gây ra các báo giá không chính xác. Trong thực tế, multisig Raydium kiểm soát địa chỉ này.
Deposit
Thêm thanh khoản, nhận các token LP.
Đối số
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = cơ sở trên coin, 1 = cơ sở trên pc
Tài khoản — giống AMM v4, ~13 tài khoản. Phải bao gồm model_data_account ở chế độ chỉ đọc.
Toán học — pro-rata tiêu chuẩn sử dụng bảng tra cứu để tính tỷ lệ. SDK tính cặp coin/pc cho số lượng LP mong muốn và kiểm tra đối với các giới hạn tối đa.
Withdraw
Đốt LP, nhận cả hai bên pro-rata.
Đối số
amount: u64 // token LP cần đốt
Tài khoản — giống AMM v4, với model_data_account ở chế độ chỉ đọc.
Điều kiện tiên quyết
user_lp_token_account nắm giữ ít nhất amount.
Điều kiện sau
amount token LP bị đốt.
- Người dùng nhận các khoản coin và pc theo pro-rata hiện tại, điều chỉnh cho phí tích lũy.
SwapBaseIn
Swap nhập liệu chính xác sử dụng bảng tra cứu để định giá.
Đối số
amount_in: u64
minimum_amount_out: u64
Tài khoản (~17 tổng cộng)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_open_orders | W | | |
| 5 | amm_target_orders | W | | |
| 6 | pool_coin_token_account | W | | |
| 7 | pool_pc_token_account | W | | |
| 8 | model_data_account | | | Bảng tra cứu chỉ đọc. |
| 9 | serum_program | | | |
| 10 | serum_market | W | | |
| 11 | serum_bids | W | | |
| 12 | serum_asks | W | | |
| 13 | serum_event_queue | W | | |
| 14 | serum_coin_vault | W | | |
| 15 | serum_pc_vault | W | | |
| 16 | serum_vault_signer | | | |
| 17 | user_source_token | W | | Tài khoản token đầu vào của người dùng. |
| 18 | user_dest_token | W | | Tài khoản token đầu ra của người dùng. |
| 19 | user_owner | | S | Người dùng (người ký giao dịch). |
Điều kiện tiên quyết
amm.status cho phép swap.
user_source_token nắm giữ ≥ amount_in.
Điều kiện sau
- Người dùng mất
amount_in, nhận được amount_out ≥ minimum_amount_out.
- Phí pool tăng các bộ đếm
need_take_pnl_*.
- Các đơn hàng OpenBook có thể được thanh toán nếu được điền.
Toán học — Nội suy bảng tra cứu như được mô tả trong products/stable/math.
SwapBaseOut
Swap kết quả chính xác (ngược của SwapBaseIn). Các tài khoản giống nhau, hướng toán học khác.
Đối số
max_amount_in: u64
amount_out: u64
MonitorStep
Crank không cần phép: thanh toán các lần điền OpenBook, cập nhật lưới đơn hàng giới hạn.
Đối số
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
Tài khoản (~18 tổng cộng) — giống MonitorStep của AMM v4 cộng với model_data_account ở chế độ chỉ đọc.
Điều kiện tiên quyết
- Tham chiếu tài khoản OpenBook phải khớp với thị trường được ràng buộc của pool.
Điều kiện sau
- Các lần điền OpenBook đang chờ xử lý được thanh toán vào kho pool.
- Các đơn hàng giới hạn mới được đăng lên OpenBook dựa trên đường cong bảng tra cứu.
TargetOrders được cập nhật.
SetParams
Chỉ quản trị viên. Thay đổi tham số pool (trạng thái, trạng thái, phí, chủ sở hữu, khóa model-data, v.v.).
Đối số
param: u8 // tham số nào để thay đổi (Status, State, Fees, v.v.)
value: Option<u64> // giá trị mới (nếu param là số)
new_pubkey: Option<Pubkey> // địa chỉ mới (nếu param là khóa tài khoản)
fees: Option<Fees> // phí mới (nếu param là Fees)
Tài khoản — thay đổi theo param. Luôn yêu cầu amm_admin là người ký.
Các param phổ biến:
param = 0 (Status) — thay đổi mặt nạ hoạt động.
param = 9 (Fees) — thay đổi trade_fee, phân chia pnl, v.v.
param = 11 (ModelDataKey) — liên kết lại bảng tra cứu (hiếm, yêu cầu hành động quản trị viên).
WithdrawPnl
Chỉ quản trị viên. Rút lệ phí giao thức tích lũy từ need_take_pnl_* vào các tài khoản PnL được chỉ định.
Đối số — không có (điều khiển bởi trạng thái).
Tài khoản (~14 tổng cộng)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_open_orders | W | | |
| 5 | pool_coin_token_account | W | | |
| 6 | pool_pc_token_account | W | | |
| 7 | coin_pnl_dest | W | | Tài khoản coin của quản trị viên (nhận phí). |
| 8 | pc_pnl_dest | W | | Tài khoản pc của quản trị viên (nhận phí). |
| 9 | pnl_admin | | S | Người ký (phải khớp với quyền sở hữu pool). |
| 10+ | Tài khoản OpenBook (~4) | | | Thanh toán các lần điền đang chờ xử lý trước. |
Điều kiện tiên quyết
pnl_admin phải được ủy quyền.
Điều kiện sau
need_take_pnl_coin và need_take_pnl_pc được chuyển đến các tài khoản của quản trị viên.
- Các bộ đếm được đặt về 0.
WithdrawSrm
Phiên bản cũ (không sử dụng trên các pool mới). Rút hoàn lại token chiết khấu phí SRM từ các pool thời kỳ Serum sớm.
Đối số
SimulateInfo
Công cụ trợ giúp báo giá chỉ đọc cho khách hàng và SDK.
Đối số
param: u8 // PoolInfo, SwapBaseInInfo, SwapBaseOutInfo, RunCrankInfo
swap_base_in_value: Option<SwapInstructionBaseIn>
swap_base_out_value: Option<SwapInstructionBaseOut>
Cách sử dụng — được gọi thông qua simulateTransaction để nhận báo giá mà không thực hiện swap.
Tiếp theo
- Tài khoản — cho bố cục và kích thước trường tài khoản.
- Toán học — cho logic nội suy bảng tra cứu.
- Bản demo mã — để xem cách gọi các lệnh này từ SDK.
Nguồn:
raydium-stable/program/src/instruction.rs (enum và pack/unpack)
raydium-stable/program/src/processor.rs (logic thực thi)