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

ch02 Sui Move 开发基础

本章目标

读完本章后,你应该能够:

  • 读懂 DeepBook 源码中的 modulestructfun、ability 和泛型。
  • 解释 keystorecopydrop 对金融协议对象的影响。
  • 区分 owned object、shared object、immutable object,以及 UIDIDTxContextClock 的职责。
  • 理解 Coin<T>Balance<T> 的转换意义。
  • 找到 event::emit 和 abort code,并知道 Indexer 为什么依赖事件。

本章学习阶梯

  • L1 用 hello_move.move 读懂 Move 基本语法。
  • L2 用 Coin<T>Balance<T>、ability 和 shared object 理解金融对象。
  • L3 从 DeepBook 源码中定位事件、abort code、泛型资产和动态字段。
  • L4 写一个最小 Move 练习,把语法变成可运行对象和事件。

源码地图

主题GitHub 源码阅读重点
Move 包配置packages/deepbook/Move.tomlpackage 名称、edition、依赖和地址映射
Move 基础示例packages/deepbook/sources/hello_move.movemodule、struct、ability、泛型、对象、事件
资金账户packages/deepbook/sources/balance_manager.moveCoin<T> 入账为 Balance<T>,余额事件,cap 和 proof
交易入口packages/deepbook/sources/pool.movePool<BaseAsset, QuoteAsset>Clock、泛型资产
订单事件packages/deepbook/sources/book/order_info.move订单生命周期事件
共享状态辅助packages/deepbook/sources/helper/big_vector.movekey 对象和动态扩展数据结构

小节目录

Move 高阶穿插点

  • 学 Move 不要停在语法表,直接用 DeepBook 的资产、订单、cap、proof 来理解 ability 的工程后果。
  • 看到 Coin<T>Balance<T> 时,追踪它们在函数边界上的转换,不要把钱包资产和协议内部余额混成一个概念。
  • assert! 时把 abort code 写成“用户会看到什么错误、开发者该回到哪条交易前检查”。

常见错误

  • 给资产、cap、proof 加上不该有的 copydrop,破坏资源约束。
  • ID 当成 UID 使用。ID 是可记录的值,UID 是对象身份字段。
  • 忘记 TxContext,导致无法 object::new(ctx)into_coin(ctx)
  • 在 TypeScript move call 中漏写泛型资产类型。
  • 只查询对象当前字段,不查询事件,导致订单历史和余额流水不完整。

本章检查清单

  • 能解释 Greeting has copy, drop, storeUserProfile has key 的差异。
  • 能说出 Coin<T> 存入 BalanceManager 后如何变成 Balance<T>
  • 能找到 BalanceEventOrderPlaced 的事件定义。
  • 能根据 abort code 回到源码定位 assert!
  • 能读懂 packages/deepbook/Move.toml

进阶练习

  1. 实现一个最小共享对象计数器:Counter has key,包含 increment(&mut Counter)value(&Counter): u64
  2. 实现一个 Coin<T> 存取款示例:存入时 into_balance,取出时 into_coin
  3. 给计数器增加事件 CounterUpdated,然后用 RPC 查询事件。