ch03-13 源码阅读路线
先抓住结构
读“源码阅读路线”时先画边界。一个真实协议最容易读乱的地方,不是函数太多,而是不知道 Pool、Book、State、Vault 和 BalanceManager 各自负责哪一段。
架构坐标
先把架构坐标钉在这些文件上。读这一节时不需要展开所有实现,只要看清对象分工、入口函数和后续会反复回来的状态边界。
- packages/deepbook/sources/pool.move
- packages/deepbook/sources/book/book.move
- packages/deepbook/sources/state/state.move
- packages/deepbook/sources/vault/vault.move
- packages/deepbook/sources/order_query.move
- crates/indexer
这些入口是架构地图上的锚点。先标注每个模块负责的状态,再顺着一次下单或结算回到具体函数。
读架构
建议按以下顺序阅读:
pool.move:先看 public 函数,理解外部调用面。book/book.move:看Book字段、create_order、match_against_book、inject_limit_order。book/order_info.move:看订单状态、订单类型约束、fill 事件生成。book/order.move和book/fill.move:看 maker 订单如何变成 Fill。state/state.move:看 fill 如何转换为账户余额、费用和历史数据。vault/vault.move:看净额如何转成 BalanceManager 存取款。registry.move和balance_manager.move:补齐版本、权限和账户模型。
阅读补充
推荐路线是先读 pool.move 的 public 函数签名,再读 book.move 的撮合,再读 state.move 的费用和账户更新,再读 vault.move 的资产结算,最后读事件和 Indexer 查询。这条路线对应真实交易顺序,比按文件名 alphabet 读更有效。
每读完一个模块都写一句“它不负责什么”。例如 Book 不负责资产保管,Vault 不负责价格排序,Indexer 不负责交易执行。负面边界能帮助你在调试时快速排除错误归因。
工程判断
- 每次跳文件都记录触发跳转的函数名或返回值。
- 阅读笔记要保留“不负责”边界,减少架构误解。
- 查询和 Indexer 放在最后读,因为它们解释结果,不决定交易原子性。
读完以后问自己
- 为什么阅读路线从 Pool 开始?
- Book、State、Vault 的阅读顺序对应交易中的哪些阶段?
- 为什么 Indexer 不适合作为第一源码入口?