跳轉到主要內容

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.

本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
Stable AMM 與 AMM v4 共享大部分指令介面。獨有指令是 InitModelDataUpdateModelData,用於建立和更新查詢表。所有其他操作(交換、存入、提取、執行)都遵循與 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 帳戶。 引數
nonce: u8
open_time: u64
帳戶(可寫 W、簽署者 S
#名稱WS說明
1token_programSPL Token。
2system_program
3rent
4ammW資金池的 AmmInfo 帳戶。
5amm_authority全程式 PDA。
6amm_open_ordersWOpenBook OpenOrders
7lp_mintW可互換 LP 代幣鑄造。
8coin_mint
9pc_mint
10pool_coin_token_accountW資金池的 coin 保管庫。
11pool_pc_token_accountW資金池的 pc 保管庫。
12amm_target_ordersWOpenBook 訂單方格。
13model_data_account查詢表帳戶。
14serum_programOpenBook 程式。
15serum_marketOpenBook 市場。
16user_dest_lp_tokenW建立者的 LP ATA(接收初始 LP)。
17user_walletWS建立者;支付租金、提供初始存入。
(opt)srm_tokenWSRM 代幣帳戶以取得費用折扣(舊版)。
前置條件
  • 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
#名稱WS說明
1model_data_accountW50k 元素表帳戶。
2amm_adminS資金池管理員(必須簽署以證明權限)。
前置條件
  • 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
#名稱WS說明
1amm_adminS簽署者(必須是資金池管理員)。
2model_data_accountW表帳戶。
前置條件
  • 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 個總計)
#名稱WS說明
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5amm_target_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8model_data_account唯讀查詢表。
9serum_program
10serum_marketW
11serum_bidsW
12serum_asksW
13serum_event_queueW
14serum_coin_vaultW
15serum_pc_vaultW
16serum_vault_signer
17user_source_tokenW使用者的輸入代幣帳戶。
18user_dest_tokenW使用者的輸出代幣帳戶。
19user_ownerS使用者(交易簽署者)。
前置條件
  • 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 個總計)
#名稱WS說明
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5pool_coin_token_accountW
6pool_pc_token_accountW
7coin_pnl_destW管理員的 coin 帳戶(接收費用)。
8pc_pnl_destW管理員的 pc 帳戶(接收費用)。
9pnl_adminS簽署者(必須符合資金池擁有權)。
10+OpenBook 帳戶(~4)先結算待處理成交。
前置條件
  • pnl_admin 必須被授權。
後置條件
  • need_take_pnl_coinneed_take_pnl_pc 轉移至管理員帳戶。
  • 計數器清零。

WithdrawSrm

舊版不在新資金池上使用)。從早期 Serum 時代資金池提取 SRM 費用折扣代幣返佣。 引數
amount: u64

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(執行邏輯)