第十二章 · 高级可编程性

本章系统讲解 sui:: Framework(以及与之配合的 std:: 能力)在合约中的实际用法:从每笔交易自带的上下文,到发布时的一次性初始化链下可观测的事件,再到 Epoch / 时钟 / 随机数,然后是 对象内集合与动态字段上的大规模集合,最后落到 Coin / BCS / 密码学。在进阶篇中,本章位于 第十一章 · 设计模式 之后,可与该章的 OTW、Capability、Publisher 等模式交叉阅读。全章的模块地图与三层包关系已集中在 §12.1 · Sui Framework 概览,建议先通读 §12.1,再按下面路线读各节。


建议阅读路线

阶段主题说明
A. 交易与启动§12.2TxContext隐式模块 tx_contextsender / epoch / object::new 的前提
§12.3init发布时一次;可与 OTW、package::claim 配合
B. 可观测性§12.4event::emitcopy + drop、内部类型约束;链下索引依赖
C. 时间与随机§12.5Epoch 与 Clock粗粒度 epoch vs 毫秒级 Clock@0x6
§12.14Random@0x8与 §12.5 同属「系统共享对象」语境
D. 存储:小与大§12.6VecMap / VecSet数据在对象内部,适合小规模
§12.7动态字段UID 上异构扩展,是 §12.8 / §12.10 的底层
§12.8动态对象字段值为子对象,可索引
§12.9derived_object确定性地址与注册表模式
§12.10Table / Bag / …基于动态(对象)字段的集合;与 §12.6 对照
E. 资产与数据编码§12.11Balance / Coin代币底层;与第十四章 · 代币衔接
§12.12sui::bcs字节与结构体;与 std::bcs 分工见节内
§12.13哈希与签名crypto/* 原语
F. 类型级授权(std)§12.15std::internal / Permit<T>T 的定义模块可 permit<T>();与 §11.2 · Witness 对照
回顾§12.1框架总览move-stdlib / sui-framework / sui-system、集合选型表

本章内容(与 §12.1 对照)

主题在框架中的位置(摘要)
12.1Sui Framework 概览packages 三层、std/sui/sui_system、集合与模块总表
12.2交易上下文隐式 sui::tx_context
12.3模块初始化器initsui::package 与 OTW
12.4事件sui::event
12.5Epoch 与时间sui::clockTxContext 中的 epoch
12.6集合类型(Vec)sui::vec_map / vec_set
12.7动态字段sui::dynamic_field
12.8动态对象字段sui::dynamic_object_field
12.9派生对象sui::derived_object
12.10动态集合table / bag / object_* / linked_table / table_vec
12.11Balance 与 Coinbalance / coin / sui::SUI
12.12BCS 序列化sui::bcs(与 std::bcs 配合)
12.13密码学与哈希crypto/*、哈希、签名
12.14链上随机数sui::random
12.15std::internalPermit<T>std::internalphantom 类型级 witness

与其它章的衔接


学习目标

读完本章后,你将能够:

  • 正确使用 TxContext,并理解 init 与 OTW 在发布流程中的角色
  • 发出符合验证器要求的 事件,并理解其与链下索引的关系
  • 区分 Epoch / Clock / Random 的语义与适用场景
  • VecMap/VecSetTable/Bag/… 之间做存储选型(并与 §12.1 对照表一致)
  • 使用 动态字段与动态对象字段 扩展对象;在合适场景使用 派生对象
  • 操作 Balance/Coin,并了解 BCS密码学模块 的常见用法
  • 理解 std::internal::Permit<T>permit<T>() 的模块边界语义,并能与 Witness / Capability 区分使用场景

本章实战练习

动手任务见 hands-on.md;示例代码见 code/README.md