本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
自 2026-07 程序升级以来,AMM v4 的 OpenBook / Serum 依赖已被移除。旧版 v1 的
SwapBaseIn / SwapBaseOut、Deposit 和 Withdraw 指令保持原有的账户布局以保证向后兼容:市场账户仍在原有位置被接受,但它们不再被验证或使用(不发出 CPI)。新的集成应使用 V2 交换入口点,它们完全省略了市场账户。多条指令已被移除,现在会回滚——参见更新日志条目。下面的账户列表使用 Raydium SDK 中的字段名;底层 IDL 有时使用 serum_* 前缀。指令清单
SDK 仅为面向用户的指令公开构建器。维护指令通常由 Raydium 守护程序调用。
已移除/不再可调用(现在会以
unimplemented! 回滚,其客户端构建器已删除):Initialize(标签 0,使用 Initialize2)、MonitorStep(2)、MigrateToOpenBook(5)、WithdrawSrm(8)、PreInitialize(10,使用 Initialize2)、SimulateInfo(12)、AdminCancelOrders(13)。
Initialize2
启动绑定到现有 OpenBook 市场的新 AMM v4 池。
参数
W、签名者 S)
后置条件
lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN,其中INIT_BURN≈ 100 LP 单位被保留在流通之外。- 不发布 OpenBook 订单(订单簿网格已被移除)。
market_program/market仍被传递但仅作为参考字段存储;coin_lot_size/pc_lot_size/min_size初始化为0。
InvalidInput(小数不匹配、未排序)、NotAllowed。
Deposit
添加流动性。
参数
数学 — 标准按比例分配。使用池的有效储备(金库 + 账面上),SDK 计算产生给定 LP 数量的 coin/pc 对,并根据
max_* 检查。如果任一方超过上限,则以 ExceededSlippage 回滚。
Withdraw
销毁 LP,接收两种代币。
参数
Deposit,方向相反;lp_mint 可写用于销毁,用户 ATA 是接收方。账户布局不变(市场账户仍按位置传递,被忽略)。不再有从 OpenBook 结算的步骤——按比例分配的数学直接使用金库余额。
SwapBaseIn
精确输入交换。始终是AMM 路径交换(不通过 OpenBook 匹配路由)。
为新代码使用 V2 变体。 由于 AMM v4 的 OpenBook 依赖已被移除,V1 入口点(
SwapBaseIn、SwapBaseOut)仍然期望完整的 17 账户列表(或 18 个含可选的 target-orders 账户),但 OpenBook/市场账户现在按位置被接受并忽略——它们不被验证,不发出 CPI。传递错误的账户数量仍会以 WrongAccountsNumber 回滚,但市场账户内容不再被检查。新的集成应使用 SwapBaseInV2 / SwapBaseOutV2,它们采用更小的账户列表,代表当今的规范执行路径。V1 形式在此记录以供完整性和阅读现有链上交易。
数学 — 参见
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的目标代币。 need_take_pnl_*按协议费份额递增。- 注意:
state_data.swap_*_in_amount/swap_*_out_amount分析计数器不再更新——其值被冻结。使用交易日志进行交易量分析。
ExceededSlippage、InvalidInput、InvalidStatus、NotAllowed(coin/pc mint 相同)。
SwapBaseOut
精确输出,SwapBaseIn 的反向。账户相同。
参数
SwapBaseInV2 / SwapBaseOutV2
变体交换入口点(标签 16 / 17),完全跳过 OpenBook 账户。数学与 V1 路径相同,但账户列表缩小到仅 AMM 端和用户——8 个账户,amm_open_orders 不被传递:
池储备现在是金库余额(减去待处理 PnL),所以报价数学直接且与 v1 路径相同。使用 V2 以节省计算并避免传递(现在被忽略的)市场账户。Raydium 路由器在通过 AMM v4 路由时始终使用 V2 形式。
参数与 V1 形式相同(
SwapBaseInV2 的 amount_in / minimum_amount_out;SwapBaseOutV2 的 max_amount_in / amount_out)。
MonitorStep 和其他已移除的指令
历史上,MonitorStep 驱动池的 OpenBook 交互:它结算已成交订单(通过 OpenBook CPI 将收益从市场金库移到池金库)、取消陈旧订单,并发布新订单以缩小 target_orders 和 amm_open_orders 之间的差距。随着 OpenBook 依赖的移除,没有什么需要驱动,指令已消失。任何仍调用它的守护程序或集成必须移除该调用。
WithdrawPnl / TakePnl
管理员清扫累积的协议费。
参数
WithdrawPnl不接受参数;它读取need_take_pnl_*并移动这些精确数量。
效果
- 从
pool_coin_token_account转移need_take_pnl_coin到pnl_coin_token_account。 - pc 相同。
- 将
need_take_pnl_coin和need_take_pnl_pc置零。 - 逻辑变更:如果金库余额不足以覆盖累积 PnL,指令直接返回
TakePnlError(它不再操纵订单簿状态)。
SetParams
管理员参数更改,由 Raydium 多签调用。参数是 param: u8 标签 + 有效负载。
状态变更矩阵
OpenBook 列已消失——没有指令再接触订单簿。后续步骤
products/amm-v4/code-demos— 交换和 LP 流的 TypeScript 示例。products/amm-v4/fees—WithdrawPnl详情和费用分割。reference/error-codes— 前向参考表(AMM v4 错误列在该页面上)。
- Raydium AMM 程序 —
raydium-io/raydium-amm - Raydium SDK v2
Liquidity模块 - OpenBook 程序 — 市场端的账户验证

