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

ch06-09 成交历史、个人成交和未成交订单

返回本章

先从用户动作开始

这一节把“成交历史、个人成交和未成交订单”当作应用流程来读:先看用户要完成什么,再反推 PTB 需要哪些对象、参数、dry run 和失败处理。

源码入口

从应用反推链上

OrderInfo 会发出三类核心事件:

  • OrderPlaced:订单进入订单簿。
  • OrderFilled:maker 订单被 taker 成交,包含 maker/taker order ID、client order ID、价格、数量、手续费和双方 manager ID。
  • OrderFullyFilled:订单完全成交。

个人成交可按 maker_balance_manager_idtaker_balance_manager_id 过滤 OrderFilled。未成交订单可以来自两处:链上 order_query 的 orderbook 加本地用户 manager ID 过滤,或 indexer 维护的 open orders 表。

工程旁白:Spot 应用先看用户状态机:市场、余额、订单、提交、确认。链上提交仍然落到 pool.movebalance_manager.move;UI 只是把这些固定入口组织成用户能理解的交易动作。

读模型要区分链上查询和 indexer 缓存。packages/deepbook/sources/order_query.move 适合读取当前订单簿快照,个人成交历史则应以事件和交易 digest 为准;前端本地缓存只能做临时加速,不能覆盖链上最终状态。

写应用时

  • 所有用户输入先做 decimal、tick size、lot size 和 min size 转换,再构造 PTB。
  • 提交前 dry run,提交后用 digest、事件和 order_query.move 刷新状态。
  • UI/CLI 中分开展示 wallet coins、manager 余额、open orders 和最近一次交易状态。

动手检查

  • 成交历史、个人成交和未成交订单 需要哪些对象 ID、type arguments、cap/proof 和数值参数?
  • dry run 失败时应给用户显示哪类提示:余额、精度、订单状态、版本暂停还是 Gas?
  • 交易成功后应用应该依赖事件、order query 还是本地缓存更新页面?