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 與 AMM v4 共享大部分指令介面。獨有指令是 InitModelData 和 UpdateModelData,用於建立和更新查詢表。所有其他操作(交換、存入、提取、執行)都遵循與 AMM v4 相同的模式。
指令清單
| 指令 | 類別 | 說明 |
|---|
Initialize | 生命週期 | 建立資金池(需要預先配置的 model-data 帳戶)。 |
PreInitialize | 生命週期 | 舊版預先配置輔助程式。 |
InitModelData | 模型設置 | 建立並初始化查詢表。 |
UpdateModelData | 模型設置 | 每次呼叫最多填入 5 個表格元素。 |
Deposit | 流動性 | 添加流動性,接收 LP。 |
Withdraw | 流動性 | 燒毀 LP,接收雙側代幣。 |
SwapBaseIn | 交換 | 精確輸入交換。 |
SwapBaseOut | 交換 | 精確輸出交換。 |
MonitorStep | 執行 | 結算 OpenBook、更新訂單。 |
SetParams | 管理員 | 變更資金池參數。 |
WithdrawPnl | 管理員 | 提取累計協議費用。 |
WithdrawSrm | 舊版 | 提取 SRM 返佣(舊版)。 |
SimulateInfo | 診斷 | 唯讀報價輔助工具。 |
Initialize
建立新的 Stable AMM 資金池,繫結到現有 OpenBook 市場和預先建立的 ModelDataInfo 帳戶。
引數
帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 說明 |
|---|
| 1 | token_program | | | SPL Token。 |
| 2 | system_program | | | |
| 3 | rent | | | |
| 4 | amm | W | | 資金池的 AmmInfo 帳戶。 |
| 5 | amm_authority | | | 全程式 PDA。 |
| 6 | amm_open_orders | W | | OpenBook OpenOrders。 |
| 7 | lp_mint | W | | 可互換 LP 代幣鑄造。 |
| 8 | coin_mint | | | |
| 9 | pc_mint | | | |
| 10 | pool_coin_token_account | W | | 資金池的 coin 保管庫。 |
| 11 | pool_pc_token_account | W | | 資金池的 pc 保管庫。 |
| 12 | amm_target_orders | W | | OpenBook 訂單方格。 |
| 13 | model_data_account | | | 查詢表帳戶。 |
| 14 | serum_program | | | OpenBook 程式。 |
| 15 | serum_market | | | OpenBook 市場。 |
| 16 | user_dest_lp_token | W | | 建立者的 LP ATA(接收初始 LP)。 |
| 17 | user_wallet | W | S | 建立者;支付租金、提供初始存入。 |
| (opt) | srm_token | W | | SRM 代幣帳戶以取得費用折扣(舊版)。 |
前置條件
model_data_account 必須已由先前的 InitModelData 建立並初始化。
lp_mint 必須為空(零供應量)。
- 保管庫必須存在且由
amm_authority 擁有。
後置條件
AmmInfo 使用所有參考資訊初始化。
TargetOrders 清零並準備好首個 MonitorStep。
- 初始 LP 代幣已鑄造並發送至
user_dest_lp_token。
- OpenBook 訂單尚未發佈;首個
MonitorStep 會發佈它們。
InitModelData
建立並初始化 ModelDataInfo 帳戶。必須在 Initialize 之前呼叫一次。
引數
multiplier: u64 // 規模係數(例如 10^6)
帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 說明 |
|---|
| 1 | model_data_account | W | | 50k 元素表帳戶。 |
| 2 | amm_admin | | S | 資金池管理員(必須簽署以證明權限)。 |
前置條件
model_data_account 必須足夠大(~1.2 MB,用於 50k × 24 位元組)。
model_data_account 必須由 Stable 程式擁有。
後置條件
status = Initialized。
multiplier 已設置。
valid_data_count = 0(暫無已填入的元素;呼叫 UpdateModelData 以新增)。
elements 陣列清零。
UpdateModelData
在單次呼叫中填入最多 5 個表格元素。必須在 InitModelData 之後但表開始用於交換之前呼叫。
引數
array_data: [UpdateModelData; 5]
pub struct UpdateModelData {
pub index: u64,
pub data: DataElement,
}
帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 說明 |
|---|
| 1 | amm_admin | | S | 簽署者(必須是資金池管理員)。 |
| 2 | model_data_account | W | | 表帳戶。 |
前置條件
amm_admin 必須符合 AmmInfo.amm_admin。
array_data 中的每個索引必須有效(在 50,000 以內)。
- 項目必須排序(為速度起見,不在鏈上驗證):x 遞增、y 遞減、價格遞增。
後置條件
- 元素寫入
model_data_account.elements[index](每個輸入)。
valid_data_count 更新為寫入的最大索引 + 1。
治理注意: 鏈上沒有強制排序或價格一致性。惡意或不謹慎的管理員可能損毀表並導致報價不正確。實際上,Raydium 多簽控制此位址。
Deposit
添加流動性,接收 LP 代幣。
引數
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = base on coin, 1 = base on pc
帳戶 — 類似 AMM v4,~13 個帳戶。必須包含 model_data_account 作為唯讀。
計算 — 使用查詢表計算比率的標準按比例分配。SDK 計算所需 LP 數量的 coin/pc 對,並檢查最大上限。
Withdraw
燒毀 LP,按比例接收雙側代幣。
引數
amount: u64 // 要燒毀的 LP 代幣
帳戶 — 類似 AMM v4,model_data_account 作為唯讀。
前置條件
user_lp_token_account 至少持有 amount。
後置條件
amount LP 代幣已燒毀。
- 使用者根據現有按比例分配(已調整累計費用)接收 coin 和 pc 數量。
SwapBaseIn
使用查詢表進行定價的精確輸入交換。
引數
amount_in: u64
minimum_amount_out: u64
帳戶(~17 個總計)
| # | 名稱 | W | S | 說明 |
|---|
| 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 | | | 唯讀查詢表。 |
| 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 | | 使用者的輸入代幣帳戶。 |
| 18 | user_dest_token | W | | 使用者的輸出代幣帳戶。 |
| 19 | user_owner | | S | 使用者(交易簽署者)。 |
前置條件
amm.status 允許交換。
user_source_token 持有 ≥ amount_in。
後置條件
- 使用者損失
amount_in,獲得 amount_out ≥ minimum_amount_out。
- 資金池費用增加
need_take_pnl_* 計數器。
- OpenBook 訂單可能結算(若已成交)。
計算 — 如 products/stable/math 所述的查詢表內插。
SwapBaseOut
精確輸出交換(SwapBaseIn 的反向)。相同帳戶,不同計算方向。
引數
max_amount_in: u64
amount_out: u64
MonitorStep
無需許可的執行器:結算 OpenBook 成交、更新限價單方格。
引數
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
帳戶(~18 個總計) — 與 AMM v4 MonitorStep 相同,加上 model_data_account 作為唯讀。
前置條件
- OpenBook 帳戶參考必須符合資金池繫結的市場。
後置條件
- 待處理的 OpenBook 成交結算至資金池保管庫。
- 新的限價單根據查詢表曲線發佈至 OpenBook。
TargetOrders 已更新。
SetParams
僅管理員。變更資金池參數(狀態、狀態標誌、費用、擁有者、模型資料鍵等)。
引數
param: u8 // 要變更的參數(Status、State、Fees 等)
value: Option<u64> // 新值(若參數為數值)
new_pubkey: Option<Pubkey> // 新位址(若參數為帳戶鍵)
fees: Option<Fees> // 新費用(若參數為 Fees)
帳戶 — 依參數而異。始終要求 amm_admin 作為簽署者。
常見參數:
param = 0(Status)— 變更操作位元遮罩。
param = 9(Fees)— 變更交易費用、pnl 分割等。
param = 11(ModelDataKey)— 重新繫結查詢表(罕見,需要管理員操作)。
WithdrawPnl
僅管理員。將累計協議費用從 need_take_pnl_* 提取至指定 PnL 帳戶。
引數 — 無(狀態驅動)。
帳戶(~14 個總計)
| # | 名稱 | W | S | 說明 |
|---|
| 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 | | 管理員的 coin 帳戶(接收費用)。 |
| 8 | pc_pnl_dest | W | | 管理員的 pc 帳戶(接收費用)。 |
| 9 | pnl_admin | | S | 簽署者(必須符合資金池擁有權)。 |
| 10+ | OpenBook 帳戶(~4) | | | 先結算待處理成交。 |
前置條件
後置條件
need_take_pnl_coin 和 need_take_pnl_pc 轉移至管理員帳戶。
- 計數器清零。
WithdrawSrm
舊版(不在新資金池上使用)。從早期 Serum 時代資金池提取 SRM 費用折扣代幣返佣。
引數
SimulateInfo
用於用戶端和 SDK 的唯讀報價輔助工具。
引數
param: u8 // PoolInfo、SwapBaseInInfo、SwapBaseOutInfo、RunCrankInfo
swap_base_in_value: Option<SwapInstructionBaseIn>
swap_base_out_value: Option<SwapInstructionBaseOut>
用法 — 透過 simulateTransaction 呼叫以取得報價而不執行交換。
接下來的步驟
- 帳戶 — 帳戶欄位佈局和大小。
- 計算 — 查詢表內插邏輯。
- 程式碼示例 — 查看如何從 SDK 呼叫這些。
來源:
raydium-stable/program/src/instruction.rs(列舉和打包/解包)
raydium-stable/program/src/processor.rs(執行邏輯)