跳轉到主要內容

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 自動翻譯,所有內容以英文版本為準。查看英文版 →
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
#名稱WS備註
1token_programSPL Token。
2system_program
3rent
4ammWAmmInfo 帳戶(種子鑰匙)。
5amm_authority程式 PDA。
6amm_open_ordersWOpenBook OpenOrders(種子化)。
7lp_mintW
8coin_mint
9pc_mint
10pool_coin_token_accountW
11pool_pc_token_accountW
12pool_withdraw_queueW
13pool_target_orders_accountW
14pool_lp_token_accountW建立者的 LP ATA。
15pool_temp_lp_token_accountW暫存帳戶。
16market_programOpenBook 程式。
17marketOpenBook 市場。
18user_walletWS建立者。支付租金並籌備初始存款。
19user_token_coinW
20user_token_pcW
後置條件
  • 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)
帳戶(簡化版)
#名稱WS
1token_program
2ammW
3amm_authority
4amm_open_orders
5amm_target_ordersW
6lp_mintW
7pool_coin_token_accountW
8pool_pc_token_accountW
9market
10user_coin_token_accountW
11user_pc_token_accountW
12user_lp_token_accountW
13user_ownerS
數學 — 標準按比例。SDK 使用池的 有效 準備金(保管庫 + 帳簿上),計算產生給定 LP 數量的 coin/pc 對,並針對 max_* 檢查。若任一邊超過上限,則以 ExceededSlippage 回滾。

Withdraw

燃燒 LP,收回雙邊。 參數
amount: u64    // 要燃燒的 LP
帳戶 — 類似 Deposit,方向相反;lp_mint 可寫以便燃燒,使用者 ATA 是接收方。在按比例數學之前會發生類似 MonitorStep 的從 OpenBook 結算步驟,以便贖回使用新鮮準備金。

SwapBaseIn

精確輸入交換。總是 AMM 路徑 交換(不透過 OpenBook 配對路由)。
新程式碼使用 V2 變體。 由於 AMM v4 不再與 OpenBook 共享流動性,V1 入點(SwapBaseInSwapBaseOut)— 仍需要完整的 OpenBook 帳戶集進行驗證 — 在功能上是冗餘的。新整合應使用 SwapBaseInV2 / SwapBaseOutV2,它們採用更小的帳戶列表,並代表現今的規範執行路徑。V1 形式此處記載以供完整和閱讀現有鏈上交易。
參數
amount_in:            u64
minimum_amount_out:   u64
帳戶(簡化版)
#名稱WS
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5amm_target_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8market_program
9marketW
10market_bidsW
11market_asksW
12market_event_queueW
13market_coin_vaultW
14market_pc_vaultW
15market_vault_signer
16user_source_token_accountW
17user_dest_token_accountW
18user_ownerS
數學 — 見 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_amountswap_*_out_amount 遞增(用於分析)。
  • need_take_pnl_* 按協議費分享遞增。
常見錯誤ExceededSlippageInvalidInputInvalidStatusInvalidMarket

SwapBaseOut

精確輸出,SwapBaseIn 的反向。相同帳戶。 參數
max_amount_in: u64
amount_out:    u64

SwapBaseInV2 / SwapBaseOutV2

完全跳過 OpenBook 帳戶 的變體交換入點。數學與 V1 路徑相同,但帳戶列表縮減為僅 AMM 側:
#名稱WS
1token_program
2ammW
3amm_authority
4amm_open_orders
5pool_coin_token_accountW
6pool_pc_token_accountW
7user_source_token_accountW
8user_dest_token_accountW
9user_ownerS
池的有效準備金仍考慮發佈在 OpenBook 上的代幣,所以報價數學未變。使用 V2 以節省計算並避免在同一交易中不需要 OpenBook 曲軸時傳遞市場帳戶。Raydium 路由器在透過 AMM v4 路由時總是使用 V2 形式。 參數與 V1 形式相同(SwapBaseInV2amount_in / minimum_amount_outSwapBaseOutV2max_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_ordersamm_open_orders 之間的差距。
無許可。任何帳戶都可呼叫它;歷史上 Raydium 守護程式例行這樣做。

WithdrawPnl / TakePnl

協議費累積的管理員掃。 參數
  • WithdrawPnl 不接受參數;它讀取 need_take_pnl_* 並移動那些精確數額。
帳戶(簡化版)
#名稱WS
1token_program
2ammW
3amm_authority
4amm_config
5amm_open_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8pnl_coin_token_accountW接收者,儲存在 AmmConfig
9pnl_pc_token_accountW
10pnl_ownerS管理員多簽。
11market_program
12marketW
13market_event_queueW
14market_coin_vaultW
15market_pc_vaultW
16market_vault_signer
效果
  • pool_coin_token_account 轉帳 need_take_pnl_coinpnl_coin_token_account
  • pc 相同。
  • need_take_pnl_coinneed_take_pnl_pc 歸零。
由於累積 PnL 已從不變式中排除,準備金無變化。

SetParams

管理員參數變更:狀態位掩碼、排序網格深度、金額波、費用(罕見),等等。由 Raydium 多簽呼叫。參數是 param: u8 標籤 + 負載,類似 CPMM 的 UpdateAmmConfig

狀態變更矩陣

指令lp_mint 供應保管庫PnL 計數器OpenBook
Initialize2初始供應鑄造給建立者+ init_coin_amount+ init_pc_amount0已建立 OpenOrders
Deposit++ 雙邊結算填充
Withdraw− 雙邊結算填充
SwapBaseIn+ 進、− 出+ pnl 分享也許重新發佈網格
SwapBaseOut+ 進、− 出+ pnl 分享也許重新發佈網格
MonitorStep結算填充取消 / 發佈
WithdrawPnl− (pnl 掃)0
SetParams

接下來的去處

來源: