Yours Protocol supports both non-fungible and semi-fungible tokens. The difference is simply how many tokens you create under the same project and collection.
Non-Fungible Tokens
Tokens that are non-fungible are unique per token, this means that under each token, there should maxiumum exist 1 token_balance.
function mint_non_fungible_token(name, to_account_id: byte_array) {
val spec = yours.token_info(
project = "Cat Dapp",
collection = "Cats Collection",
name,
modules = [rell.meta(mint_non_fungible_token).module_name]
);
val token = yours.create_token(spec);
val account = accounts.account @ { .id == to_account_id };
yours.mint(token, yours.balance_info(account, 1L));
}
With the function above, each time we mint, it will create a new token under the same collection.
The tokens that would get created are the following.
Project
Collection
Token ID
Token Name
Token Balance
Cat Dapp
Cats Collection
0
Bengal
1
Cat Dapp
Cats Collection
1
Maine Coon
1
Cat Dapp
Cats Collection
2
Ragdoll
1
Semi-Fungible Tokens
Semi-Fungible Tokens can be shared among multiple users, and each user can own multiple of them. This means that we will end up with multiple token_balance under the same token.
function register_semi_fungible_token(name) {
val spec = yours.token_info(
project = "Cat Dapp",
collection = "Cats Collection",
name,
modules = [rell.meta(mint_non_fungible_token).module_name]
);
val token = yours.create_token(spec);
}
function mint_semi_fungible_token(
collection,
token_id,
to_account_id: byte_array,
amount: big_integer
) {
val token = yours.get_token("Cat Dapp", collection, token_id);
val account = accounts.account @ { .id == to_account_id };
yours.mint(token, yours.balance_info(account, amount));
}
With the functions above, we will mint new balances of the provided token.