Skip to main content

PSP34 Enumerable

This example shows how you can reuse the implementation of PSP34 token with PSP34Enumerable extension.

First, you should implement basic version of PSP34.

Step 1: Implement features

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

#[openbrush::implementation(PSP34, PSP34Mintable, PSP34Burnable, PSP34Enumerable)]
#[openbrush::contract]
pub mod my_psp34 {
...

Step 2: Define storage

Pass enumerable::Balances into psp34::Data to be able to use PSP34Enumerable extension in your PSP34 implementation.

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

Final code

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

#[openbrush::implementation(PSP34, PSP34Mintable, PSP34Burnable, PSP34Enumerable)]
#[openbrush::contract]
pub mod my_psp34_enumerable {
use openbrush::traits::Storage;

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

impl Contract {
#[ink(constructor)]
pub fn new() -> Self {
Self::default()
}
}
}

And that's it! Your PSP34 is now extended by the PSP34Enumerable extension and ready to use its functions! You can check an example of the usage of PSP34 Enumerable.