跳转到主要内容
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
文档更新日志条目。所有更新的索引见 reference/changelog。协议的历史时间线见 introduction/history-and-milestones
AMM v4 很久以前就停止了向 OpenBook(原 Serum)共享流动性;混合订单簿做市路径已经休眠多年。此次升级是清理工作:它从程序中移除了 Serum 依赖、所有订单簿 CPI 和已废弃的做市指令,使 AMM v4 成为纯常数乘积(x·y=k)AMM。它不会改变任何实时交易行为——没有遗留的 OpenBook 订单需要停止下单。

集成者速览

  • Swap / Deposit / Withdraw 继续工作,无需更改。 使用旧账户布局构建的交易仍然执行——被移除的 Serum/市场账户被简单忽略(无验证、无 CPI)。SwapBaseIn / SwapBaseOut 仍然需要 17 个(+1 可选) 账户;DepositWithdraw 布局不变。你不需要发布客户端更新来保持现有流程运行。
  • 迁移到 V2 swap 入口点。 SwapBaseInV2 / SwapBaseOutV2 不包含市场账户和 amm_open_orders(共 8 个账户),因此交易更小、成本更低。路由器/聚合器应该通过 V2 路由。
  • WithdrawPnl 是硬破坏性变更(仅限管理员)。 它从 17 个(+1 可选)→ 10 个 账户,无兼容性解析;旧布局错位(旧的 #5 是 amm_open_orders)并导致验证失败。管理员工具必须更新。
  • SetParams 是硬破坏性变更(仅限管理员)。 账户缩减为 [amm, admin]param 枚举被重新编号Fees 9 → 2,SetOpenTime 11 → 3);AmmOwnerLastOrderDistanceUpdateOpenOrder 和网格参数被移除。
  • 多个指令不再可调用。 InitializePreInitializeMonitorStepMigrateToOpenBookWithdrawSrmSimulateInfoAdminCancelOrders 现在会回滚。使用 Initialize2 创建池。
  • 链上账户布局字节稳定,错误代码不变。 AmmInfo / StateData 保持其布局(旧 OpenBook 字段保留但已弃用/冻结);AmmError 编号保留,仅在末尾追加新的 NotAllowed

为什么这很重要(对交易者、LP 和集成者)

  • 交易者看不到 swap 行为或定价的变化——常数乘积曲线不变。V2 布局 swap 的成本更低,因为它们携带的账户少约 8 个。
  • LP 保持相同的存取经济学。流动性长期以来完全位于池金库中,因此池价值完全在链上;此升级仅删除了陈旧的市场管道。
  • 集成者获得更小、更简单的交易和直接从金库读取的报价模型。现有集成不会中断(除了管理员 WithdrawPnl / SetParams),但 v1-swap 兼容性垫片是临时的——可以随时迁移到 V2。

指令级变更

仍可调用,布局不变(向后兼容)

Initialize2DepositWithdrawSwapBaseInSwapBaseOutCreateConfigAccountUpdateConfigAccount 保持其现有账户列表。在 SwapBaseIn / SwapBaseOutDepositWithdraw 上,OpenBook/市场账户仍然按位置接受,但不再被验证或使用——不发出 CPI,池储备仅从金库计算。账户数量仍然必须匹配,因此现有交易继续不变地执行。

SwapBaseInV2 / SwapBaseOutV2 — 推荐路径

完全省略市场账户和 amm_open_orders(8 个账户;标签 16 / 17)。报价数学与 v1 相同。新集成和路由器应使用 V2。

WithdrawPnl — 17 个(+1 可选)→ 10 个账户(⚠️ 硬破坏,无兼容性路径)

amm_open_orders 和所有六个市场账户被移除。新的固定 10 账户、仅限管理员的布局没有兼容性解析;旧布局错位并导致诸如 InvalidCoinVault 的错误。

SetParams — 缩减为 [amm, admin](⚠️ 硬破坏)+ 重新编号的参数

权限、开放订单、目标订单、金库和所有市场账户被移除。param 枚举被重新编号和精简:
参数旧值新值
Status00
State11
Fees92
SetOpenTime113
所有订单簿网格参数(OrderNumDepthAmountWaveMinPriceMultiplierMaxPriceMultiplierMinSizeVolMaxCutRatioInitOrderDepthSetSwitchTimeClearOpenTimeSeperate)加上 AmmOwnerLastOrderDistanceUpdateOpenOrder 被移除。SetParamsInstruction 结构体删除了 new_pubkeylast_order_distance

不再可调用(运行时回滚;构建器已移除)

指令标签替代品
Initialize0Initialize2
MonitorStep2无(订单簿 crank,已停用)
MigrateToOpenBook5
WithdrawSrm8无(SRM 费用折扣,已停用)
PreInitialize10Initialize2
SimulateInfo12链下 / SDK 报价
AdminCancelOrders13

储备 / 状态变更

  • 池资产公式。 总池资产现在为 金库余额 − 待处理 PnL(need_take_pnl);OpenBook 开放订单项——实际上已经为零——被删除。报价代码可以直接从金库余额读取。
  • 已弃用的状态字段。 StateData.total_pnl_pctotal_pnl_coinorderbook_to_init_timeswap_coin_in_amountswap_pc_out_amountswap_acc_pc_feeswap_pc_in_amountswap_coin_out_amountswap_acc_coin_fee 为了布局兼容性而保留,但不再更新。依赖 swap_* 交易量计数器的消费者应切换到交易日志。
  • AmmInfo 初始化。 coin_lot_sizepc_lot_sizemin_size 现在初始化为 0
  • 移除的依赖和 CPI。 serum_dex crate 从 Cargo.toml 中删除;所有 Serum DEX CPI(invoke_dex_new_order_v3invoke_dex_cancel_order_v2invoke_dex_settle_fundsinvoke_dex_init_open_orders、…)从 invokers.rs 中移除。移除的数据结构:LastOrderDistanceSimulateParamsRunCrankDataGetPoolDataGetSwapBaseInDataGetSwapBaseOutData