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.
AMM v4 指令統一預期 池側(AMM v4 程式帳戶)和 市場側(繫結市場的 OpenBook 帳戶)。省略或不匹配任一組帳戶都會導致交易回滾。下方的帳戶列表使用 Raydium SDK 的欄位名稱以求清晰;底層 IDL 有時使用 serum_* 字首。
指令清單
| 群組 | 指令 | 備註 |
|---|
| 池生命週期 | Initialize2 | 目前的池建立指令(仍可用;UI 預設為新池使用 CPMM)。 |
| 流動性 | Deposit | 增加流動性,收到 LP。 |
| 流動性 | Withdraw | 燃燒 LP,按比例收回雙邊。 |
| 交換 | SwapBaseIn | 精確輸入交換(完整路徑:保管庫 + OpenBook)。 |
| 交換 | SwapBaseOut | 精確輸出交換(完整路徑)。 |
| 交換 | SwapBaseInV2 | 繞過 OpenBook 的精確輸入交換 — 僅保管庫,帳戶更少。 |
| 交換 | SwapBaseOutV2 | 繞過 OpenBook 的精確輸出交換。 |
| 維護 | SetParams | 管理員:變更池參數。 |
| 維護 | WithdrawPnl | 將累積的協議 PnL 掃入 PnL 所有者帳戶。 |
| 維護 | CreateConfigAccount | 管理員:初始化程式級 AmmConfig PDA。 |
| 維護 | UpdateConfigAccount | 管理員:變更程式級設定參數。 |
SDK 僅公開面向用戶的指令的建構器。維護指令通常由 Raydium 守護程式呼叫。
Initialize2
啟動綁定到現有 OpenBook 市場的新 AMM v4 池。
參數
nonce: u8
open_time: u64
init_pc_amount: u64
init_coin_amount: u64
帳戶(可寫 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 | | |
| 8 | coin_mint | | | |
| 9 | pc_mint | | | |
| 10 | pool_coin_token_account | W | | |
| 11 | pool_pc_token_account | W | | |
| 12 | pool_withdraw_queue | W | | |
| 13 | pool_target_orders_account | W | | |
| 14 | pool_lp_token_account | W | | 建立者的 LP ATA。 |
| 15 | pool_temp_lp_token_account | W | | 暫存帳戶。 |
| 16 | market_program | | | OpenBook 程式。 |
| 17 | market | | | OpenBook 市場。 |
| 18 | user_wallet | W | S | 建立者。支付租金並籌備初始存款。 |
| 19 | user_token_coin | W | | |
| 20 | user_token_pc | W | | |
後置條件
lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN,其中 INIT_BURN ≈ 100 LP 單位保留流通外。
- OpenBook 訂單 尚未 發佈;第一個
MonitorStep 發佈初始網格。
常見錯誤 — InvalidInput(小數不匹配、排序不當)、NotApproved、OpenBook 側 InvalidMarketState。
Deposit
增加流動性。
參數
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = 基數在 coin,1 = 基數在 pc
// (某些 SDK 變體也接受 other_amount_min)
帳戶(簡化版)
| # | 名稱 | W | S |
|---|
| 1 | token_program | | |
| 2 | amm | W | |
| 3 | amm_authority | | |
| 4 | amm_open_orders | | |
| 5 | amm_target_orders | W | |
| 6 | lp_mint | W | |
| 7 | pool_coin_token_account | W | |
| 8 | pool_pc_token_account | W | |
| 9 | market | | |
| 10 | user_coin_token_account | W | |
| 11 | user_pc_token_account | W | |
| 12 | user_lp_token_account | W | |
| 13 | user_owner | | S |
數學 — 標準按比例。SDK 使用池的 有效 準備金(保管庫 + 帳簿上),計算產生給定 LP 數量的 coin/pc 對,並針對 max_* 檢查。若任一邊超過上限,則以 ExceededSlippage 回滾。
Withdraw
燃燒 LP,收回雙邊。
參數
帳戶 — 類似 Deposit,方向相反;lp_mint 可寫以便燃燒,使用者 ATA 是接收方。在按比例數學之前會發生類似 MonitorStep 的從 OpenBook 結算步驟,以便贖回使用新鮮準備金。
SwapBaseIn
精確輸入交換。總是 AMM 路徑 交換(不透過 OpenBook 配對路由)。
新程式碼使用 V2 變體。 由於 AMM v4 不再與 OpenBook 共享流動性,V1 入點(SwapBaseIn、SwapBaseOut)— 仍需要完整的 OpenBook 帳戶集進行驗證 — 在功能上是冗餘的。新整合應使用 SwapBaseInV2 / SwapBaseOutV2,它們採用更小的帳戶列表,並代表現今的規範執行路徑。V1 形式此處記載以供完整和閱讀現有鏈上交易。
參數
amount_in: u64
minimum_amount_out: u64
帳戶(簡化版)
| # | 名稱 | 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 | market_program | | |
| 9 | market | W | |
| 10 | market_bids | W | |
| 11 | market_asks | W | |
| 12 | market_event_queue | W | |
| 13 | market_coin_vault | W | |
| 14 | market_pc_vault | W | |
| 15 | market_vault_signer | | |
| 16 | user_source_token_account | W | |
| 17 | user_dest_token_account | W | |
| 18 | user_owner | | S |
數學 — 見 products/amm-v4/math。
前置條件
amm.status 允許交換(狀態位掩碼位 0 未設置)。
amm.state_data.pool_open_time <= now。
amount_in > 0。
user_source_token_account 持有至少 amount_in。
後置條件
- 使用者失去
amount_in 的源代幣,獲得 amount_out ≥ minimum_amount_out 的目標代幣。
state_data.swap_*_in_amount 和 swap_*_out_amount 遞增(用於分析)。
need_take_pnl_* 按協議費分享遞增。
常見錯誤 — ExceededSlippage、InvalidInput、InvalidStatus、InvalidMarket。
SwapBaseOut
精確輸出,SwapBaseIn 的反向。相同帳戶。
參數
max_amount_in: u64
amount_out: u64
SwapBaseInV2 / SwapBaseOutV2
完全跳過 OpenBook 帳戶 的變體交換入點。數學與 V1 路徑相同,但帳戶列表縮減為僅 AMM 側:
| # | 名稱 | W | S |
|---|
| 1 | token_program | | |
| 2 | amm | W | |
| 3 | amm_authority | | |
| 4 | amm_open_orders | | |
| 5 | pool_coin_token_account | W | |
| 6 | pool_pc_token_account | W | |
| 7 | user_source_token_account | W | |
| 8 | user_dest_token_account | W | |
| 9 | user_owner | | S |
池的有效準備金仍考慮發佈在 OpenBook 上的代幣,所以報價數學未變。使用 V2 以節省計算並避免在同一交易中不需要 OpenBook 曲軸時傳遞市場帳戶。Raydium 路由器在透過 AMM v4 路由時總是使用 V2 形式。
參數與 V1 形式相同(SwapBaseInV2 的 amount_in / minimum_amount_out;SwapBaseOutV2 的 max_amount_in / amount_out)。
MonitorStep(遺留 / 惰性)
不再曲軸。 AMM v4 不再與 OpenBook 共享流動性,所以 MonitorStep 無所事事 — 池沒有發佈的訂單要結算、取消或重新發佈。指令在鏈上程式中保留以供向後相容,但 Raydium 守護程式不再呼叫它。手動呼叫它實際上是空操作(除了重新整理歸零的狀態),不應由整合者需要。
原本此指令曲軸池的 OpenBook 互動。
參數
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
帳戶 — 交換的所有上述內容,加上管理 OpenBook 帳戶。
原始效果(現在實踐中不再相關):
- 結算任何已填訂單(其收益透過 OpenBook CPI 從
market_coin_vault/market_pc_vault 移至池的保管庫)。
- 取消其價格或大小不再匹配
target_orders 的陳舊訂單。
- 發佈新訂單以縮小
target_orders 和 amm_open_orders 之間的差距。
無許可。任何帳戶都可呼叫它;歷史上 Raydium 守護程式例行這樣做。
WithdrawPnl / TakePnl
協議費累積的管理員掃。
參數
WithdrawPnl 不接受參數;它讀取 need_take_pnl_* 並移動那些精確數額。
帳戶(簡化版)
| # | 名稱 | W | S | |
|---|
| 1 | token_program | | | |
| 2 | amm | W | | |
| 3 | amm_authority | | | |
| 4 | amm_config | | | |
| 5 | amm_open_orders | W | | |
| 6 | pool_coin_token_account | W | | |
| 7 | pool_pc_token_account | W | | |
| 8 | pnl_coin_token_account | W | | 接收者,儲存在 AmmConfig。 |
| 9 | pnl_pc_token_account | W | | |
| 10 | pnl_owner | | S | 管理員多簽。 |
| 11 | market_program | | | |
| 12 | market | W | | |
| 13 | market_event_queue | W | | |
| 14 | market_coin_vault | W | | |
| 15 | market_pc_vault | W | | |
| 16 | market_vault_signer | | | |
效果
- 從
pool_coin_token_account 轉帳 need_take_pnl_coin 至 pnl_coin_token_account。
- pc 相同。
- 將
need_take_pnl_coin 和 need_take_pnl_pc 歸零。
由於累積 PnL 已從不變式中排除,準備金無變化。
SetParams
管理員參數變更:狀態位掩碼、排序網格深度、金額波、費用(罕見),等等。由 Raydium 多簽呼叫。參數是 param: u8 標籤 + 負載,類似 CPMM 的 UpdateAmmConfig。
狀態變更矩陣
| 指令 | lp_mint 供應 | 保管庫 | PnL 計數器 | OpenBook |
|---|
Initialize2 | 初始供應鑄造給建立者 | + init_coin_amount、+ init_pc_amount | 0 | 已建立 OpenOrders |
Deposit | + | + 雙邊 | — | 結算填充 |
Withdraw | − | − 雙邊 | — | 結算填充 |
SwapBaseIn | — | + 進、− 出 | + pnl 分享 | 也許重新發佈網格 |
SwapBaseOut | — | + 進、− 出 | + pnl 分享 | 也許重新發佈網格 |
MonitorStep | — | 結算填充 | — | 取消 / 發佈 |
WithdrawPnl | — | − (pnl 掃) | 0 | — |
SetParams | — | — | — | — |
接下來的去處
來源: