销毁代币
在前面的课程中,我们讨论了如何使用 TreasuryCap 铸造代币。
use std::string;
use sui::url;
public struct MYCOIN has drop {}
public struct TreasuryCapHolder has key {
id: UID,
treasury_cap: TreasuryCap<MYCOIN>,
}
entry fun mint(treasury_cap_holder: &mut TreasuryCapHolder, ctx: &mut TxContext) {
let treasury_cap = &mut TreasuryCapHolder.treasury_cap;
let coins = coin::mint(treasury_cap, 1000, ctx);
// 用coin做点什么
}
我们也可以使用 TreasuryCap 来销毁代币:
entry fun burn(treasury_cap_holder: &mut TreasuryCapHolder, coins: Coin<MYCOIN>) {
let treasury_cap = &mut TreasuryCapHolder.treasury_cap;
coin::burn(treasury_cap, coins);
}
coin::burn
将销毁给定 Coin 对象中的所有代币,并且还会销毁 Coin 对象本身。这相当于销毁整个钱包。
如果开发人员只想从 Coin 对象中销毁特定数量的代币,他们需要先提取出该数量的代币,然后只销毁这些特定的代币:
entry fun burn(treasury_cap_holder: &mut TreasuryCapHolder, coins: &mut Coin<MYCOIN>, amount: u64, ctx: &mut TxContext) {
let coins_to_burn = coin::take(coin::balance_mut(coins), amount);
let treasury_cap = &mut TreasuryCapHolder.treasury_cap;
coin::burn(treasury_cap, coins_to_burn);
}