Move 上的第一个代币
通过发行第一个代币学习 Move 的资产模型
💡 本章目标
- 通过实践理解 Move 的 资产模型(
resource
,object
)。 - 学习用
Coin
、TreasuryCap
及mint
/burn
实现 代币发行流程。 - 使用 Sui Extension 模板 创建并管理你的代币。
1. 概述 — 什么是 Move 中的资产?
在 Move 中,代币、NFT、权限等都以 resource(资源) 的形式存在。资源不能 复制 或 删除,只能 移动(move)。
概念 | 说明 |
---|---|
resource | 不能复制或删除,只能移动的值 |
object | 在 Sui 上由资源实例化的对象 |
Coin<T> | 表示代币的对象类型 |
TreasuryCap<T> | 具有发行(mint)与销毁(burn)权限的对象 |
2. 准备模板 — Managed Token
在 Sui Extension 中选择 “Sui Move Intro Course: Fungible Token (Managed)”。
📌 步骤
- VS Code → Explorer 中右键文件夹 → New Move Project
- 选择 Fungible Token (Managed)
- 执行 Build / Test / Deploy
部署完成后会生成
TreasuryCap<...::MANAGED>
,用于 发行/销毁 的权限控制。
3. 代码解析 — 发行与权限
定义代币类型
move
public struct MANAGED has drop {}
初始化逻辑
move
fun init(witness: MANAGED, ctx: &mut TxContext) {
let (treasury_cap, metadata) = sui::coin::create_currency<MANAGED>(
witness, 2, b"MANAGED", b"MNG", b"", std::option::none(), ctx
);
sui::transfer::public_freeze_object(metadata);
sui::transfer::public_transfer(treasury_cap, sui::tx_context::sender(ctx));
}
create_currency
创建代币与元数据。metadata
保存名称、符号、描述。treasury_cap
表示发行/销毁权限。
4. 实践 — 发行(Mint)与销毁(Burn)
mint 函数
move
public fun mint(
treasury_cap: &mut TreasuryCap<MANAGED>,
amount: u64,
recipient: address,
ctx: &mut TxContext,
) {
treasury_cap.mint_and_transfer(amount, recipient, ctx)
}
- 只有持有
TreasuryCap
的账户可以调用。 - 将新铸造的代币转至
recipient
。
burn 函数
move
public fun burn(treasury_cap: &mut TreasuryCap<MANAGED>, coin: Coin<MANAGED>) {
treasury_cap.burn(coin);
}
- 销毁现有代币。
5. 在 PTB Builder 中运行 🌟
打开 PTB Builder
添加
moveCall
节点加载包
选择函数:
0x<package_address>::managed::mint
设置参数:
object(treasuryCapId)
pure.u64(amount)
pure.address(recipient)
点击 Run 查看 Transaction Digest
- 可在 Sui Explorer 或 ptb.wal.app/viewer(
https://ptb.wal.app/viewer?tx=<DIGEST>
)中查看
- 可在 Sui Explorer 或 ptb.wal.app/viewer(
💡 PTB Builder 可将执行内容转换为 TypeScript 代码。通过 Export 直接复用到你的项目中。
6. 结果与应用
- 新增的
Coin<MANAGED>
将出现在 Owner Objects Explorer 中。 - 可调用
burn
销毁代币。 - PTB Builder 与 CLI 会生成相同的交易块。