本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
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 之前呼叫一次。
引數
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 之後但表開始用於交換之前呼叫。
引數
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。
Deposit
添加流動性,接收 LP 代幣。
引數
model_data_account 作為唯讀。
計算 — 使用查詢表計算比率的標準按比例分配。SDK 計算所需 LP 數量的 coin/pc 對,並檢查最大上限。
Withdraw
燒毀 LP,按比例接收雙側代幣。
引數
model_data_account 作為唯讀。
前置條件
user_lp_token_account至少持有amount。
amountLP 代幣已燒毀。- 使用者根據現有按比例分配(已調整累計費用)接收 coin 和 pc 數量。
SwapBaseIn
使用查詢表進行定價的精確輸入交換。
引數
| # | 名稱 | 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 的反向)。相同帳戶,不同計算方向。
引數
MonitorStep
無需許可的執行器:結算 OpenBook 成交、更新限價單方格。
引數
MonitorStep 相同,加上 model_data_account 作為唯讀。
前置條件
- OpenBook 帳戶參考必須符合資金池繫結的市場。
- 待處理的 OpenBook 成交結算至資金池保管庫。
- 新的限價單根據查詢表曲線發佈至 OpenBook。
TargetOrders已更新。
SetParams
僅管理員。變更資金池參數(狀態、狀態標誌、費用、擁有者、模型資料鍵等)。
引數
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) | 先結算待處理成交。 |
pnl_admin必須被授權。
need_take_pnl_coin和need_take_pnl_pc轉移至管理員帳戶。- 計數器清零。
WithdrawSrm
舊版(不在新資金池上使用)。從早期 Serum 時代資金池提取 SRM 費用折扣代幣返佣。
引數
SimulateInfo
用於用戶端和 SDK 的唯讀報價輔助工具。
引數
simulateTransaction 呼叫以取得報價而不執行交換。
接下來的步驟
來源:raydium-stable/program/src/instruction.rs(列舉和打包/解包)raydium-stable/program/src/processor.rs(執行邏輯)

