前言
今天我们要聊两个发币故事:一个关于"霸道总裁"的专属代币,另一个关于"平民化"的水龙头代币。通过这两个例子,让我们看看 Move 合约是如何玩转不同的发币策略的。
第一幕:霸道总裁的专属代币 (My Coin) 👔
想象一下,你是一个区块链世界的霸道总裁,想要发行一个只有你才能掌控的代币。这就是 My Coin 的故事:
module mycoin::bright_coin {
use sui::coin::{Self, TreasuryCap};
public struct BRIGHT_COIN has drop {}
fun init(witness: BRIGHT_COIN, ctx: &mut TxContext) {
let (treasury, metadata) = coin::create_currency(
witness,
6, // 小数位数:6 (像个总裁一样精确)
b"Bright", // 名字就要亮眼
b"bright coin",
b"My_token",
option::none(),
ctx
);
// 冻结 metadata,就像总裁的决心一样坚定
transfer::public_freeze_object(metadata);
// 霸道总裁的专属权限
transfer::public_transfer(treasury, tx_context::sender(ctx));
}
}
这个合约就像一个霸道总裁文里的男主角:
- 铸币权?只能是我的!✨
- 代币参数?我说了算!💼
- 其他人想铸币?先问问我同不同意!🤵
第二幕:平民化的水龙头代币 (Faucet Coin) 🚰但是后来,我们的"霸道总裁"被感化了,决定创建一个人人都能使用的水龙头代币:
module faucetcoin::bright_faucet_coin { use sui::coin::{Self, TreasuryCap}; public struct BRIGHT_FAUCET_COIN has drop {} fun init(witness: BRIGHT_FAUCET_COIN, ctx: &mut TxContext) { let (treasury, metadata) = coin::create_currency( witness, 6, // 依然保持精确,但这次是为了大家 b"BrightFaucet", // 名字都带着 Faucet,多亲民啊! b"bright faucet coin", b"faucet_token", option::none(), ctx ); // metadata 还是要冻结,毕竟规矩还是要有的 transfer::public_freeze_object(metadata); // 重点来了:铸币权共享给所有人! transfer::public_share_object(treasury); } }
这版本简直就是"霸道总裁爱上我"的平民版:
- 铸币权?大家一起来!🎉
- 想要代币?自己就能铸!💖
- 人人平等!世界和平!🌈
关键区别对比 🔍
- 权限控制
- My Coin:transfer::public_transfer(treasury, tx_context::sender(ctx))
- Faucet Coin:transfer::public_share_object(treasury)
- 使用场景
- My Coin:适合需要中心化控制的商业场景
- Faucet Coin:适合社区驱动的去中心化项目
- 铸币方式
- My Coin:只有部署者可以调用 mint_in_my_module
- Faucet Coin:任何人都可以调用 mint_faucet_module
实际应用 🌟
两种代币都有其适用场景:
- My Coin 适合:公司代币、权益凭证、受控资产
- Faucet Coin 适合:测试网代币、社区代币、学习用途
结语 🎬
从霸道总裁到平民化的转变,展示了 Move 智能合约的灵活性。无论你是想做区块链世界的霸道总裁,还是平民化的代币推动者,Move 都能满足你的需求。
记住:
> 代码千万行,初心不改变。
> 无论是专属还是共享,安全永远是第一位!
这就是我们的 Move 合约"霸道总裁爱上平民"的故事!🎭