Stable AMM 是一個獨立程式,擁有自己的程式 ID。它不是 AMM v4 程式的一種模式,也不是透過 AMM v4 進行交易 — 它是單獨部署、升級和呼叫的。它只在費用和帳戶配置慣例上類似於 AMM v4。
2026-06-22 升級 — 移除已棄用的 OpenBook(市場)程式碼。 Stable AMM 很久以前就停止向 OpenBook 發佈訂單;訂單簿做市路徑已經閒置多年。此升級刪除了剩餘的市場相關帳戶和程式碼 — 它不會改變實時交易行為。對整合者的兩個影響:
- 更小的帳戶配置。
SwapBaseIn / SwapBaseOut(18 → 9)、Deposit(14 → 12)和 Withdraw(21/22 → 12)移除了已棄用的 Serum/市場帳戶。舊配置仍可解析以保持向後相容性。WithdrawPnl(16 → 10)是硬性破壞性變更,沒有相容性路徑(僅限管理員)。
- 大多數指令已移除。 只有
SwapBaseIn、SwapBaseOut、Deposit、Withdraw 和 WithdrawPnl 保持可呼叫。所有其他指令無法再被呼叫。
變更日誌:reference/changelog。
指令清單
可呼叫
| 指令 | 類別 | 備註 |
|---|
Deposit | 流動性 | 新增流動性,接收 LP。新的 12 帳戶配置;舊的 14 帳戶配置仍相容。 |
Withdraw | 流動性 | 銷毀 LP,接收雙邊。新的 12 帳戶配置;舊的 21/22 帳戶配置仍相容。 |
SwapBaseIn | 交換 | 精確輸入交換。新的 9 帳戶配置;舊的 18 帳戶配置仍相容。 |
SwapBaseOut | 交換 | 精確輸出交換。新的 9 帳戶配置;舊的 18 帳戶配置仍相容。 |
WithdrawPnl | 管理員 | 清掃累積的協議費用。新的 10 帳戶配置(硬性破壞 — 無舊配置相容性)。 |
已移除(無法再呼叫)
這些在 2026-06-22 升級中被移除,無法再被呼叫。請參閱已移除的指令。
| 指令 | 前類別 | 前用途 |
|---|
Initialize | 生命週期 | 建立資金池。 |
PreInitialize | 生命週期 | 舊版預分配輔助工具。 |
InitModelData | 模型設定 | 建立並初始化查詢表。 |
UpdateModelData | 模型設定 | 每次呼叫最多填充 5 個表格元素。 |
MonitorStep | Crank | 結算 OpenBook 成交,重新發佈訂單。 |
SetParams | 管理員 | 變更資金池參數。 |
WithdrawSrm | 舊版 | 清掃 SRM 費用折扣回扣。 |
SimulateInfo | 診斷 | 唯讀報價輔助工具。 |
Deposit
新增流動性,接收 LP 代幣。
引數
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = base on coin, 1 = base on pc
帳戶 — 新配置,12 個帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 備註 |
|---|
| 0 | token_program | | | SPL Token。 |
| 1 | amm | W | | 資金池的 AmmInfo。 |
| 2 | amm_authority | | | 程式範圍 PDA。 |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | LP 鑄幣。 |
| 5 | amm_coin_vault | W | | 資金池 coin 金庫。 |
| 6 | amm_pc_vault | W | | 資金池 pc 金庫。 |
| 7 | model_data_account | | | 唯讀查詢表。 |
| 8 | user_source_coin | W | | 使用者的 coin 輸入。 |
| 9 | user_source_pc | W | | 使用者的 pc 輸入。 |
| 10 | user_dest_lp | W | | 使用者的 LP ATA。 |
| 11 | user_source_owner | | S | 交易簽署者。 |
相容性:amm_open_orders(舊 #3)和 serum_market(舊 #9)已移除。當傳遞 14 個帳戶時,指令使用舊的 14 帳戶配置進行解析;Serum 帳戶被忽略。
數學 — 使用查詢表計算比率的標準按比例分配。SDK 計算所需 LP 數量的 coin/pc 對,並檢查最大上限。
Withdraw
銷毀 LP,按比例接收雙邊。
引數
amount: u64 // 要銷毀的 LP 代幣
帳戶 — 新配置,12 個帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 備註 |
|---|
| 0 | token_program | | | SPL Token。 |
| 1 | amm | W | | 資金池的 AmmInfo。 |
| 2 | amm_authority | | | 程式範圍 PDA。 |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | LP 鑄幣。 |
| 5 | amm_coin_vault | W | | 資金池 coin 金庫。 |
| 6 | amm_pc_vault | W | | 資金池 pc 金庫。 |
| 7 | model_data_account | | | 唯讀查詢表。 |
| 8 | user_source_lp | W | | 使用者的 LP 來源。 |
| 9 | user_dest_coin | W | | 使用者的 coin 輸出。 |
| 10 | user_dest_pc | W | | 使用者的 pc 輸出。 |
| 11 | user_lp_owner | | S | 交易簽署者。 |
相容性:九個 Serum 帳戶(amm_open_orders、serum_program、serum_market、serum_coin_vault、serum_pc_vault、serum_vault_signer、serum_event_q、serum_bids、serum_asks)已移除。舊的 21 或 22 帳戶配置仍被接受。但請注意,第 22 個可選 referrer_pc_wallet 帳戶的推薦費邏輯已被移除 — 它仍可傳遞但不再生效。
前置條件
user_source_lp 持有至少 amount。
後置條件
amount LP 代幣被銷毀。
- 使用者根據目前按比例分配接收 coin 和 pc 數量,已調整累積費用。
SwapBaseIn
使用查詢表進行定價的精確輸入交換。
引數
amount_in: u64
minimum_amount_out: u64
帳戶 — 新配置,9 個帳戶(可寫 W、簽署者 S)
| # | 名稱 | W | S | 備註 |
|---|
| 0 | spl_token program | | | SPL Token。 |
| 1 | amm | W | | 資金池的 AmmInfo。 |
| 2 | amm_authority | | | 程式範圍 PDA。 |
| 3 | amm_coin_vault | W | | 資金池 coin 金庫。 |
| 4 | amm_pc_vault | W | | 資金池 pc 金庫。 |
| 5 | model_data_account | | | 唯讀查詢表。 |
| 6 | user_source_token | W | | 使用者的輸入代幣帳戶。 |
| 7 | user_destination_token | W | | 使用者的輸出代幣帳戶。 |
| 8 | user_source_owner | | S | 使用者(交易簽署者)。 |
相容性:九個 OpenBook 帳戶(amm_open_orders、serum_program、serum_market、serum_bids、serum_asks、serum_event_queue、serum_coin_vault、serum_pc_vault、serum_vault_signer)已移除。如果傳遞的帳戶數不是 9,指令使用舊的 18 帳戶配置進行解析;Serum 帳戶必須仍佔據其位置,但其內容不再被驗證或使用。
前置條件
amm.status 允許交換。
user_source_token 持有 ≥ amount_in。
後置條件
- 使用者失去
amount_in,獲得 amount_out ≥ minimum_amount_out。
- 資金池費用增加
need_take_pnl_* 計數器。
數學 — 如 products/stable/math 中所述的查詢表插值。
SwapBaseOut
精確輸出交換(SwapBaseIn 的反向)。相同的 9 帳戶配置,不同的數學方向。
引數
max_amount_in: u64
amount_out: u64
WithdrawPnl
僅限管理員。從 need_take_pnl_* 清掃累積的協議費用到指定的 PnL 帳戶。
硬性破壞性變更 — 沒有相容性路徑。 此指令沒有舊配置的解析。發送舊配置會因帳戶錯位而失敗,出現驗證錯誤,例如 InvalidTokenCoin(舊 #3 是 open_orders)。呼叫 WithdrawPnl 的管理員工具必須更新到新的 10 帳戶配置。
引數 — 無(狀態驅動)。
帳戶 — 新配置,固定 10 個帳戶,僅限管理員(可寫 W、簽署者 S)
| # | 名稱 | W | S | 備註 |
|---|
| 0 | spl_token program | | | SPL Token。 |
| 1 | amm | W | | 資金池的 AmmInfo。 |
| 2 | amm_authority | | | 程式範圍 PDA。 |
| 3 | amm_coin_vault | W | | 資金池 coin 金庫。 |
| 4 | amm_pc_vault | W | | 資金池 pc 金庫。 |
| 5 | amm_target_orders | W | | |
| 6 | model_data | | | 查詢表。 |
| 7 | user_coin | W | | 管理員的 coin 帳戶(接收費用)。 |
| 8 | user_pc | W | | 管理員的 pc 帳戶(接收費用)。 |
| 9 | amm_admin | | S | 資金池管理員(簽署者)。 |
邏輯變更:當資金池的可用資金不足以提取累積的 PnL 時,資金池不再進入 CancelAllOrdersState / Disabled;指令直接返回 TakePnlError。可選的 referrer_pc_wallet 也已被移除。
前置條件
後置條件
need_take_pnl_coin 和 need_take_pnl_pc 被轉移到管理員的帳戶。
- 計數器被清零。
已移除的指令
以下指令在 2026-06-22 升級中被移除,無法再被呼叫。此處記錄它們只是為了讓整合者在歷史交易和 SDK 中識別它們。
Initialize — 曾經啟動新的 Stable AMM 資金池。已移除。
PreInitialize — 舊版預分配輔助工具。已移除。
InitModelData — 曾經建立並初始化 ModelDataInfo 查詢表。已移除。
UpdateModelData — 曾經每次呼叫最多填充 5 個查詢表元素。已移除。
MonitorStep — 結算成交並重新發佈訂單網格的 OpenBook crank。在資金池停止向 OpenBook 發佈後已長期閒置;現已移除。
SetParams — 管理員參數變更(狀態、費用、所有者、模型資料鍵等)。已移除。
WithdrawSrm — 從早期 Serum 時代資金池清掃 SRM 費用折扣回扣。已移除。
SimulateInfo — 唯讀報價輔助工具。已移除;使用 SDK 的離鏈穩定曲線輔助工具進行報價(請參閱程式碼示例)。
後續步驟
- 帳戶 — 帳戶欄位配置和大小。
- 數學 — 查詢表插值邏輯。
- 程式碼示例 — 查看如何從 SDK 呼叫這些。
來源:
raydium-stable/program/src/instruction.rs(列舉和 pack/unpack)
raydium-stable/program/src/processor.rs(執行邏輯)