Get started with the simple things as a basis to learn more.
This is a beginner recipe intended for novice Substrate developers looking to explore ways to create tokens in Substrate. This approach is not recommended best practice. Use this guide to learn how to improve upon your runtime logic's capabilities and code quality. See the Examples section for a practical implementations of this guide.
Create a simple token mint pallet.
- Give any account the ability to create a token supply.
- Create a currency that's native to your application.
This guide will step you through an effective way to mint a token by leveraging the primitive capabilities that
StorageMap gives us. To achieve this, this "primitive" approach uses the blake2_128_concat
hasher to map balances to account IDs, similar to how the Balances pallet makes use of it to keep track of account balances in storage.
1. Setup your pallet's
2. Declare your storage item
This pallet only keeps track of a balance-to-account mapping. Call it
We can now bring our attention to creating the intended capabilities of our pallet by creating the following functions:
mint(): to issue a token supply from any origin.
transfer(): to allow the minting account to transfer a given balance to another account.
Start with writing out the variables, using
get_balance to access the
StorageMap of balances previously
declared in storage:
When performing balance updates, use
checked_add to handle potential errors with overflow:
Once the new balances are calculated, write their values to storage and deposit the event to the current block:
None, the operation caused an overflow and throws an error.
Refer to this guide if you’re not yet familiar with this procedure.
Further learning 💡
- Safety. The
mintfunction takes in an amount to mint which is not good practice because it implies that users have unlimited access to writing to storage. Safer approaches include: using configuring
GenesisConfigor fixing a predetermined maximum value in runtime.
- Weights. All the weights were set to 10_000 in the above code snippets. Learn more about weight configuration in this basic guide on weights.
- Origins. One assumption this guide makes is that the origin will always be the sudo user. Origins are a powerful capability in Substrate. Learn more on how to customize an origin in this guide.