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 = base on coin, 1 = base on 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 crank 时传递市场账户。Raydium 路由器在通过 AMM v4 路由时始终使用 V2 形式。
参数与 V1 形式相同(SwapBaseInV2 使用 amount_in / minimum_amount_out;SwapBaseOutV2 使用 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_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 | — | + in、− out | + pnl 份额 | 可能重新发布网格 |
SwapBaseOut | — | + in、− out | + pnl 份额 | 可能重新发布网格 |
MonitorStep | — | 结算成交 | — | 取消 / 发布 |
WithdrawPnl | — | −(pnl 扫账) | 0 | — |
SetParams | — | — | — | — |
下一步
参考资源: