Building a Custom Blockchain Application with Substrate
Getting Started with Substrate
In our previous article, we explored the core concepts behind the Substrate blockchain framework. Now, let’s dive deeper and implement a basic custom blockchain application in Rust using Substrate. Our application will be a simple blogging platform where users can submit blog posts, comment on others’ posts, and send tips to the authors.
Setup
To set up our node template, we’ll use Kickstart, a CLI tool for setting up projects based on premade templates. We’ll use the Substrate template to create a fully wired-up pallet. Run the following command to set up the project:
kickstart new --template substrate-node-template blogchain
This will prompt you for a name; enter “blogchain”. The template will be downloaded and set up with a fully wired-up pallet.
File Structure
Let’s take a look at the file structure of our project:
blogchain/
pallets/
blogchain/
lib.rs
runtime/
src/
lib.rs
...
node/
...
...
We’ll focus on modifying the pallets/blogchain/lib.rs
and runtime/src/lib.rs
files.
Customizing the Pallet
First, let’s change the pallet name to “blogchain” in runtime/src/lib.rs
. We’ll also add the Currency trait to our pallet to enable currency transfers.
Data Structures and Storage
Next, we’ll define data structures for blog posts and comments in pallets/blogchain/lib.rs
. We’ll use Substrate’s scale_info
macro to derive helper traits for serialization and deserialization.
We’ll also define two StorageMap instances to hold the blog posts and comments. The pallet::storage
macro tells the system that this is a piece of persistent storage, and the pallet::getter
macro allows us to query this storage later on.
Events
We’ll add events for each of our actions: creating a blog post, commenting on a post, and sending a tip. These events will inform clients and users of changes to the blockchain state.
Error Handling
We’ll add error types to handle cases where the blog post or comment is too short or too long. We’ll also define constants for the maximum and minimum lengths of blog posts and comments.
Functions and Extrinsic
Now, let’s implement our extrinsic functions for creating a blog post, commenting on a post, and sending a tip. We’ll use the pallet::weight
macro to define the computational weight of each extrinsic.
Testing
Finally, let’s test our application using the Substrate Front End Template. We’ll build our application for release and start a local node in development mode. Then, we’ll use the Pallet Interactor to create a blog post, comment on it, and send a tip to the author.
Conclusion
In this tutorial, we’ve built a simple custom blockchain application using Substrate. While this is just the beginning, we’ve demonstrated how to extend the Substrate template to build custom logic on top of the framework. With Substrate’s robust documentation, examples, and community support, the possibilities for building decentralized applications are endless.