销毁代币

在前面的课程中,我们讨论了如何使用 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);
}