最初のトークン
First Token on Move
💡 この章の目標
- Move の資産モデル(
resource
,object
)を手を動かして理解する。 Coin
,TreasuryCap
,mint
/burn
を通じてトークン発行の流れを学ぶ。- Sui Extension テンプレートで独自トークンを作成・管理する。
1. 概要 — Move における資産とは?
Move ではコイン、NFT、権限などの資産はすべて resource として表現されます。resource は コピー(copy) や 削除(drop) ができず、移動(move) のみが可能です。
概念 | 説明 |
---|---|
resource | 複製不可・削除不可で、移動のみ可能な値 |
object | Sui が管理する resource のインスタンス |
Coin<T> | トークンを表すオブジェクト |
TreasuryCap<T> | 発行・焼却の権限(capability)を持つオブジェクト |
2. テンプレート準備 — Managed Token
VS Code の Sui Extension で “Sui Move Intro Course: Fungible Token (Managed)” を選択します。
📌 手順
- VS Code → Explorer → 右クリック → New Move Project
- Fungible Token (Managed) を選択
- Build / Test / Deploy を実行
デプロイ後に
TreasuryCap<...::MANAGED>
が作成されます(mint/burn 権限)。
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 Blockchain Explorer または ptb.wal.app/viewer(
https://ptb.wal.app/viewer?tx=<DIGEST>
)で確認可能
- Sui Blockchain Explorer または ptb.wal.app/viewer(
💡 PTB Builder は実行内容を TypeScript に変換できます。Export からプロジェクトに貼り付けて再利用可能です。
6. 結果の確認と応用
- 発行された
Coin<MANAGED>
は Owner Objects Explorer に表示。 burn
を呼び出して焼却も可能。- PTB Builder と CLI は同一のトランザクションブロックを生成。