Skip to main content

PSP22 Pallet Mintable

This example shows how you can reuse the implementation of PSP22 Pallet token with PSP22Mintable extension via pallet-assets chain extension.

How to use this extension

First, you should implement basic version of PSP22 Pallet.

After you can just add implementation of PSP22PalletMintable via #[openbrush::implementation(PSP22PalletMintable)] attribute.

Final code

#![cfg_attr(not(feature = "std"), no_std, no_main)]

#[openbrush::implementation(PSP22Pallet, PSP22PalletMintable)]
#[openbrush::contract]
pub mod my_psp22_pallet_mintable {
use openbrush::traits::Storage;

#[ink(storage)]
#[derive(Default, Storage)]
pub struct Contract {
#[storage_field]
pallet: psp22_pallet::Data,
}

impl Contract {
/// During instantiation of the contract, you need to pass native tokens as a deposit
/// for asset creation.
#[ink(constructor)]
#[ink(payable)]
pub fn new(asset_id: u32, min_balance: Balance, total_supply: Balance) -> Self {
let mut instance = Self::default();
let caller = instance.env().caller();

psp22_pallet::Internal::_create(&mut instance, asset_id, Self::env().account_id(), min_balance)
.expect("Should create an asset");
instance.pallet.asset_id.set(&asset_id);
instance.pallet.origin.set(&Origin::Caller);
psp22_pallet::Internal::_mint_to(&mut instance, caller, total_supply).expect("Should mint_to");

instance
}
}
}

And that's it! Your PSP22 Pallet is now extended by the PSP22Mintable extension and ready to use its functions!