Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ch03-11 DeepBookV2 到 V3 的关键变化

返回本章

先抓住结构

读“DeepBookV2 到 V3 的关键变化”时先画边界。一个真实协议最容易读乱的地方,不是函数太多,而是不知道 Pool、Book、State、Vault 和 BalanceManager 各自负责哪一段。

架构坐标

先把架构坐标钉在这些文件上。读这一节时不需要展开所有实现,只要看清对象分工、入口函数和后续会反复回来的状态边界。

这些入口是架构地图上的锚点。先标注每个模块负责的状态,再顺着一次下单或结算回到具体函数。

读架构

从源码结构看,V3 的重点是把交易入口统一到 Pool,把用户资金抽象到 BalanceManager,并通过 State 把账户、历史、治理和费用组织到池内。相比只关注订单簿本身的阅读方式,V3 更强调完整交易账户:

  • 订单簿不直接保管用户余额。
  • 订单生命周期返回 OrderInfo,事件和余额计算围绕它展开。
  • 池状态使用 Versioned 控制升级可用性。
  • Vault 明确承担资产保管和闪电贷底层能力。

如果你迁移旧集成,优先检查 BalanceManager、TradeProof、订单类型常量、事件结构和 fee 字段,而不是只替换下单函数名。

阅读补充

从 V2 到 V3 的阅读重点不是“函数名变了”,而是架构职责重新拆分:用户余额通过 BalanceManager 抽象,订单生命周期集中到 OrderInfo,资产保管交给 Vault,版本控制进入 Pool/Registry 加载路径。

迁移应用时要先重画交易输入对象和事件消费逻辑。旧代码如果假设订单簿直接保管用户余额,或只监听旧事件字段,就会在 V3 中出现余额解释和订单状态回放错误。

工程判断

  • 迁移前列出旧代码依赖的余额、订单和事件假设。
  • 把 V3 的 BalanceManager 充值/授权流程纳入用户 onboarding。
  • 版本控制和 Registry 检查应成为 SDK 初始化的一部分。

读完以后问自己

  • V3 为什么引入 BalanceManager 抽象?
  • OrderInfo 对事件和余额计算有什么帮助?
  • 旧 V2 应用迁移时最容易漏掉哪两类输入对象?