跳转到主要内容

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 = base on coin, 1 = base on 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 crank 时传递市场账户。Raydium 路由器在通过 AMM v4 路由时始终使用 V2 形式。 参数与 V1 形式相同(SwapBaseInV2 使用 amount_in / minimum_amount_outSwapBaseOutV2 使用 max_amount_in / amount_out)。

MonitorStep(历史遗留 / 惰性)

不再被 crank。 AMM v4 不再与 OpenBook 共享流动性,所以 MonitorStep 无事可做 — 流动性池没有订单发布来结算、取消或替换。该指令在链上程序中保留用于向后兼容,但 Raydium 守护进程不再调用它。手动调用它实际上是无操作(除刷新零化状态外),集成者不应需要它。
最初该指令 crank 了流动性池的 OpenBook 交互。 参数
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
账户 — 上面交换的所有内容,加上管理 OpenBook 账户。 原始效果(在实践中不再相关):
  • 结算任何已成交订单(其收益从 market_coin_vault/market_pc_vault 通过 OpenBook CPI 移入流动性池金库)。
  • 取消价格或大小不再与 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+ in、− out+ pnl 份额可能重新发布网格
SwapBaseOut+ in、− out+ pnl 份额可能重新发布网格
MonitorStep结算成交取消 / 发布
WithdrawPnl−(pnl 扫账)0
SetParams

下一步

参考资源: