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 {}