Token Đầu Tiên Trên Move
Học mô hình tài sản của Move thông qua việc phát hành token đầu tiên
💡 Mục tiêu chương này
- Hiểu mô hình tài sản của Move (
resource
,object
) qua thực hành. - Nắm quy trình phát hành token với
Coin
,TreasuryCap
, vàmint
/burn
. - Tạo & quản lý token riêng bằng mẫu Sui Extension.
1. Tổng quan — Tài sản trong Move là gì?
Trong Move, mọi tài sản—coin, NFT, quyền—đều là resource. Resource không thể sao chép hay xóa, chỉ có thể di chuyển.
Khái niệm | Giải thích |
---|---|
resource | Giá trị không thể sao chép hoặc xóa; chỉ di chuyển |
object | Instance của resource do Sui quản lý |
Coin<T> | Đối tượng biểu diễn token |
TreasuryCap<T> | Quyền năng để phát hành (mint) hoặc đốt (burn) |
2. Chuẩn bị template — Managed Token
Trong Sui Extension, chọn “Sui Move Intro Course: Fungible Token (Managed)”.
📌 Các bước
- VS Code → Explorer → Nhấp phải thư mục → New Move Project
- Chọn Fungible Token (Managed)
- Chạy Build / Test / Deploy để triển khai
Sau khi triển khai sẽ có
TreasuryCap<...::MANAGED>
— đại diện quyền mint/burn.
3. Phân tích code — Phát hành & quyền hạn
Định nghĩa loại token
move
public struct MANAGED has drop {}
Khởi tạo
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
tạo token & metadata.metadata
chứa tên, ký hiệu, mô tả.treasury_cap
cấp quyền mint/burn.
4. Thực hành — Mint & Burn
Hàm 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)
}
- Chỉ tài khoản có
TreasuryCap
mới gọi được. - Chuyển token đã phát hành tới
recipient
.
Hàm burn
move
public fun burn(treasury_cap: &mut TreasuryCap<MANAGED>, coin: Coin<MANAGED>) {
treasury_cap.burn(coin);
}
- Đốt token đang có.
5. Chạy trong PTB Builder 🌟
Mở PTB Builder
Thêm
moveCall
Load package
Chọn hàm:
0x<package_address>::managed::mint
Thiết lập tham số:
object(treasuryCapId)
pure.u64(amount)
pure.address(recipient)
Nhấn Run và kiểm tra Transaction Digest
- Xem trên Sui Explorer hoặc tại ptb.wal.app/viewer (
https://ptb.wal.app/viewer?tx=<DIGEST>
)
- Xem trên Sui Explorer hoặc tại ptb.wal.app/viewer (
💡 PTB Builder có thể xuất code TypeScript tương ứng. Dùng Export để đưa vào dự án.
6. Kết quả & Ứng dụng
Coin<MANAGED>
mới sẽ hiển thị trong Owner Objects Explorer.- Có thể gọi
burn
để đốt token. - PTB Builder và CLI đều tạo cùng một transaction block.