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)]
pub mod my_psp22_pallet_mintable {
use openbrush::traits::Storage;

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

impl Contract {
/// During instantiation of the contract, you need to pass native tokens as a deposit
/// for asset creation.
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");
psp22_pallet::Internal::_mint_to(&mut instance, caller, total_supply).expect("Should mint_to");


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