第十五章 · 实战练习
以下练习按难度递进。建议先在 测试网 完成 实战一~三,再视需要完成进阶项。
实战一:发布 silver_coin 并铸币
- 进入
src/15_tokens/code/silver_coin/,执行sui move build。 - 将包发布到测试网,记录 包 ID 与
TreasuryCap<SILVER>对象 ID。 - 调用包内
mint_to_sender(或等价entry),向自己铸少量SILVER。 - 验收:在浏览器或
sui client中能看到 类型为SILVER的Coin对象,且总额与铸币量一致。
要点复述:本路径对应 §15.2 的 new_currency_with_otw + finalize;TreasuryCap 是铸币唯一入口(在供应策略允许的前提下)。
实战二:对照 Currency 元数据
- 在链上定位
Currency<SILVER>(或当前版本等价展示路径)。 - 读出
symbol、decimals,用手算验证:若最小单位整数为 (N),展示是否满足 (N / 10^{\text{decimals}})。 - 验收:能向他人说明
MetadataCap与TreasuryCap的职责分离(见 §15.3)。
实战三:Coin 拆分与转账
- 使自己地址下至少有一枚 足够大的
Coin<SILVER>(或两枚可合并的小额)。 - 用 PTB:
splitCoins拆出小额,再transferObjects到第二个测试地址。 - 验收:发送方 各
Coin余额之和 加上接收方增加量,等于操作前 可追踪的总额(gas 另计)。
实战四(进阶):受监管初始化
- 复制
silver_coin为新包名,在finalize之前 调用coin_registry::make_regulated(仅测试网资产)。 - 部署后使用
coin::deny_list_v2_add对 测试地址 做一次封禁(需DenyList与DenyCapV2引用)。 - 验收:写出 「提交封禁」与「当前 epoch 是否已生效」 的差异说明(见 §15.8)。
实战五(进阶):阅读 token 源码
- 打开依赖中的
sui::token,梳理new_policy→share_policy→from_coin→confirm_request的调用链。 - 记录
allow与add_rule_for_action在策略上的区别。 - 验收:能解释
ActionRequest.approvals与TokenPolicy.rules的匹配关系(见 §15.10)。
实战六(进阶):嵌入式金库
- 仿 §15.13,实现
deposit/withdraw,并补sui move test或用 测试场景 验证 余额守恒。 - 验收:能说明 为何池内
Balance不会单独出现在钱包对象列表中。
阅读建议
完成上述练习后,建议用 本书 §15.1 的四层模型图 在白纸上 默画一遍,并能 各举一例 对应到 coin_registry / coin / balance / token 模块中的类型与函数。若能做到,说明本章主干已建立,可转入 全栈或 NFT 章节做串联。