Non-Fungible Token(非同质化代币) 的 Consecutive 扩展对于 在单个交易中高效地铸造多个代币非常有用。当一次性创建大量代币时,这可以显著 降低成本并提高性能。

用法

我们将继续使用 Non-Fungible Token(非同质化代币) 中的 [example(例子)],并修改合约,以便现在可以通过每次调用 award_items 来批量铸造代币。 请注意,任何账户都可以调用 award_items,我们可能需要实现访问控制来限制谁可以铸造。

use soroban_sdk::{contract, contractimpl, Address, Env, String};
use stellar_macros::default_impl;
use stellar_tokens::non_fungible::{
    consecutive::{Consecutive, NonFungibleConsecutive},
    Base, ContractOverrides, NonFungibleToken,
};

#[contract]
pub struct GameItem;

#[contractimpl]
impl GameItem {
    pub fn __constructor(e: &Env) {
        Base::set_metadata(
            e,
            String::from_str(e, "www.mygame.com"),
            String::from_str(e, "My Game Items Collection"),
            String::from_str(e, "MGMC"),
        );
    }

    pub fn award_items(e: &Env, to: Address, amount: u32) -> u32 {
        // access control might be needed
        // 可能需要访问控制
        Consecutive::batch_mint(e, &to, amount)
    }

    pub fn burn(e: &Env, from: Address, token_id: u32) {
        Consecutive::burn(e, &from, token_id);
    }
}

#[default_impl]
#[contractimpl]
impl NonFungibleToken for GameItem {
    type ContractType = Consecutive;
}

// no entry-point functions required, marker impl
// 不需要入口点函数,标记实现
impl NonFungibleConsecutive for GameItem {}