本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
文档更新日志条目。所有更新的索引见
reference/changelog。协议的历史时间线见 introduction/history-and-milestones。x·y=k)AMM。它不会改变任何实时交易行为——没有遗留的 OpenBook 订单需要停止下单。
集成者速览
- Swap / Deposit / Withdraw 继续工作,无需更改。 使用旧账户布局构建的交易仍然执行——被移除的 Serum/市场账户被简单忽略(无验证、无 CPI)。
SwapBaseIn/SwapBaseOut仍然需要 17 个(+1 可选) 账户;Deposit和Withdraw布局不变。你不需要发布客户端更新来保持现有流程运行。 - 迁移到 V2 swap 入口点。
SwapBaseInV2/SwapBaseOutV2不包含市场账户和amm_open_orders(共 8 个账户),因此交易更小、成本更低。路由器/聚合器应该通过 V2 路由。 WithdrawPnl是硬破坏性变更(仅限管理员)。 它从 17 个(+1 可选)→ 10 个 账户,无兼容性解析;旧布局错位(旧的 #5 是amm_open_orders)并导致验证失败。管理员工具必须更新。SetParams是硬破坏性变更(仅限管理员)。 账户缩减为[amm, admin],param枚举被重新编号(Fees9 → 2,SetOpenTime11 → 3);AmmOwner、LastOrderDistance、UpdateOpenOrder和网格参数被移除。- 多个指令不再可调用。
Initialize、PreInitialize、MonitorStep、MigrateToOpenBook、WithdrawSrm、SimulateInfo和AdminCancelOrders现在会回滚。使用Initialize2创建池。 - 链上账户布局字节稳定,错误代码不变。
AmmInfo/StateData保持其布局(旧 OpenBook 字段保留但已弃用/冻结);AmmError编号保留,仅在末尾追加新的NotAllowed。
为什么这很重要(对交易者、LP 和集成者)
- 交易者看不到 swap 行为或定价的变化——常数乘积曲线不变。V2 布局 swap 的成本更低,因为它们携带的账户少约 8 个。
- LP 保持相同的存取经济学。流动性长期以来完全位于池金库中,因此池价值完全在链上;此升级仅删除了陈旧的市场管道。
- 集成者获得更小、更简单的交易和直接从金库读取的报价模型。现有集成不会中断(除了管理员
WithdrawPnl/SetParams),但 v1-swap 兼容性垫片是临时的——可以随时迁移到 V2。
指令级变更
仍可调用,布局不变(向后兼容)
Initialize2、Deposit、Withdraw、SwapBaseIn、SwapBaseOut、CreateConfigAccount 和 UpdateConfigAccount 保持其现有账户列表。在 SwapBaseIn / SwapBaseOut、Deposit 和 Withdraw 上,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 枚举被重新编号和精简:
| 参数 | 旧值 | 新值 |
|---|---|---|
Status | 0 | 0 |
State | 1 | 1 |
Fees | 9 | 2 |
SetOpenTime | 11 | 3 |
OrderNum、Depth、AmountWave、MinPriceMultiplier、MaxPriceMultiplier、MinSize、VolMaxCutRatio、InitOrderDepth、SetSwitchTime、ClearOpenTime、Seperate)加上 AmmOwner、LastOrderDistance 和 UpdateOpenOrder 被移除。SetParamsInstruction 结构体删除了 new_pubkey 和 last_order_distance。
不再可调用(运行时回滚;构建器已移除)
| 指令 | 标签 | 替代品 |
|---|---|---|
Initialize | 0 | Initialize2 |
MonitorStep | 2 | 无(订单簿 crank,已停用) |
MigrateToOpenBook | 5 | 无 |
WithdrawSrm | 8 | 无(SRM 费用折扣,已停用) |
PreInitialize | 10 | Initialize2 |
SimulateInfo | 12 | 链下 / SDK 报价 |
AdminCancelOrders | 13 | 无 |
储备 / 状态变更
- 池资产公式。 总池资产现在为
金库余额 − 待处理 PnL(need_take_pnl);OpenBook 开放订单项——实际上已经为零——被删除。报价代码可以直接从金库余额读取。 - 已弃用的状态字段。
StateData.total_pnl_pc、total_pnl_coin、orderbook_to_init_time、swap_coin_in_amount、swap_pc_out_amount、swap_acc_pc_fee、swap_pc_in_amount、swap_coin_out_amount和swap_acc_coin_fee为了布局兼容性而保留,但不再更新。依赖swap_*交易量计数器的消费者应切换到交易日志。 AmmInfo初始化。coin_lot_size、pc_lot_size和min_size现在初始化为0。- 移除的依赖和 CPI。
serum_dexcrate 从Cargo.toml中删除;所有 Serum DEX CPI(invoke_dex_new_order_v3、invoke_dex_cancel_order_v2、invoke_dex_settle_funds、invoke_dex_init_open_orders、…)从invokers.rs中移除。移除的数据结构:LastOrderDistance、SimulateParams、RunCrankData、GetPoolData、GetSwapBaseInData、GetSwapBaseOutData。

