Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
自 2026-07 程序升级以来,AMM v4 的 OpenBook / Serum 依赖已被移除。旧版 v1 的 SwapBaseIn / SwapBaseOutDepositWithdraw 指令保持原有的账户布局以保证向后兼容:市场账户仍在原有位置被接受,但它们不再被验证或使用(不发出 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 入口点(SwapBaseInSwapBaseOut)仍然期望完整的 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 分析计数器不再更新——其值被冻结。使用交易日志进行交易量分析。
常见错误ExceededSlippageInvalidInputInvalidStatusNotAllowed(coin/pc mint 相同)。

SwapBaseOut

精确输出,SwapBaseIn 的反向。账户相同。 参数

SwapBaseInV2 / SwapBaseOutV2

变体交换入口点(标签 16 / 17),完全跳过 OpenBook 账户。数学与 V1 路径相同,但账户列表缩小到仅 AMM 端和用户——8 个账户,amm_open_orders 不被传递 池储备现在是金库余额(减去待处理 PnL),所以报价数学直接且与 v1 路径相同。使用 V2 以节省计算并避免传递(现在被忽略的)市场账户。Raydium 路由器在通过 AMM v4 路由时始终使用 V2 形式。 参数与 V1 形式相同(SwapBaseInV2amount_in / minimum_amount_outSwapBaseOutV2max_amount_in / amount_out)。

MonitorStep 和其他已移除的指令

已移除——不再可调用。 自 2026-07 升级以来,MonitorStep(标签 2)已从程序中移除,现在如果被调用会回滚unimplemented!)。其客户端构建器也被删除了。同样适用于 MigrateToOpenBook(5)、WithdrawSrm(8)、SimulateInfo(12)、AdminCancelOrders(13)以及旧版 Initialize(0)/ PreInitialize(10)池创建入口点——改用 Initialize2
历史上,MonitorStep 驱动池的 OpenBook 交互:它结算已成交订单(通过 OpenBook CPI 将收益从市场金库移到池金库)、取消陈旧订单,并发布新订单以缩小 target_ordersamm_open_orders 之间的差距。随着 OpenBook 依赖的移除,没有什么需要驱动,指令已消失。任何仍调用它的守护程序或集成必须移除该调用。

WithdrawPnl / TakePnl

管理员清扫累积的协议费。 参数
  • WithdrawPnl 不接受参数;它读取 need_take_pnl_* 并移动这些精确数量。
破坏性变更(仅限管理员)。 账户列表从 17 个(+1 个可选)减少到10 个——amm_open_orders 和所有六个市场账户被移除——没有兼容性解析。旧布局错位(旧 #5 是 amm_open_orders,现在是 pool_coin_token_account)并以 InvalidCoinVault 等错误失败。管理员工具必须更新。
账户(新 10 账户布局) 效果
  • pool_coin_token_account 转移 need_take_pnl_coinpnl_coin_token_account
  • pc 相同。
  • need_take_pnl_coinneed_take_pnl_pc 置零。
  • 逻辑变更:如果金库余额不足以覆盖累积 PnL,指令直接返回 TakePnlError(它不再操纵订单簿状态)。
储备无变化,因为累积 PnL 已从不变量中排除。

SetParams

管理员参数更改,由 Raydium 多签调用。参数是 param: u8 标签 + 有效负载。
破坏性变更(仅限管理员)。 账户列表被减少到仅 [amm (W), admin (S)](权限、open-orders、target-orders、金库和所有市场账户被移除)。param 枚举被重新编号和修剪Status = 0、State = 1、Fees = 2(曾为 9)、SetOpenTime = 3(曾为 11)。所有订单簿网格参数和 AmmOwnerLastOrderDistanceUpdateOpenOrder 被移除,SetParamsInstruction 结构体删除了 new_pubkeylast_order_distance。管理员工具必须更新。

状态变更矩阵

OpenBook 列已消失——没有指令再接触订单簿。

后续步骤

来源: