Skip to content

paritytech/polkadot-sdk-minimal-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

40 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Polkadot SDK's Minimal Template

Polkadot SDK Logo Polkadot SDK Logo

This is a minimal template for creating a blockchain based on Polkadot SDK.

This template is automatically updated after releases in the main Polkadot SDK monorepo.

Table of Contents

Intro

  • ๐Ÿค This template is a minimal (in terms of complexity and the number of components) template for building a blockchain node.

  • ๐Ÿ”ง Its runtime is configured with a single custom pallet as a starting point, and a handful of ready-made pallets such as a Balances pallet.

  • ๐Ÿ‘ค The template has no consensus configured - it is best for experimenting with a single node network.

Template Structure

A Polkadot SDK based project such as this one consists of:

  • ๐Ÿงฎ the Runtime - the core logic of the blockchain.
  • ๐ŸŽจ the Pallets - from which the runtime is constructed.
  • ๐Ÿ’ฟ a Node - the binary application (which is not part of the cargo default-members list and is not compiled unless building the entire workspace).

Getting Started

  • ๐Ÿฆ€ The template is using the Rust language.

  • ๐Ÿ‘‰ Check the Rust installation instructions for your system.

  • ๐Ÿ› ๏ธ Depending on your operating system and Rust version, there might be additional packages required to compile this template - please take note of the Rust compiler output.

Fetch minimal template code:

git clone https://github.com/paritytech/polkadot-sdk-minimal-template.git minimal-template

cd minimal-template

Starting a Minimal Template Chain

Omni Node

Omni Node can be used to run the minimal template's runtime. polkadot-omni-node binary crate usage is described at a high-level on crates.io.

Install polkadot-omni-node

Please see installation section on crates.io/omni-node.

Build minimal-template-runtime

cargo build -p minimal-template-runtime --release

Install staging-chain-spec-builder

Please see the installation section at crates.io/staging-chain-spec-builder.

Use chain-spec-builder to generate the chain_spec.json file

chain-spec-builder create --relay-chain "dev" --para-id 1000 --runtime \
    target/release/wbuild/minimal-template-runtime/minimal_template_runtime.wasm named-preset development

Note: the relay-chain and para-id flags are extra bits of information required to configure the node for the case of representing a parachain that is connected to a relay chain. They are not relevant to minimal template business logic, but they are mandatory information for Omni Node, nonetheless.

Run Omni Node

Start Omni Node in development mode (sets up block production and finalization based on manual seal, sealing a new block every 3 seconds), with a minimal template runtime chain spec.

polkadot-omni-node --chain <path/to/chain_spec.json> --dev

Minimal Template Node

Build both node & runtime

cargo build --workspace --release

๐Ÿณ Alternatively, build the docker image which builds all the workspace members, and has as entry point the node binary:

docker build . -t polkadot-sdk-minimal-template

Start the minimal-template-node

The minimal-template-node has dependency on the minimal-template-runtime. It will use the minimal_template_runtime::WASM_BINARY constant (which holds the WASM blob as a byte array) for chain spec building, while starting. This is in contrast to Omni Node which doesn't depend on a specific runtime, but asks for the chain spec at startup.

<target/release/path/to/minimal-template-node> --tmp --consensus manual-seal-3000
# or via docker
docker run --rm polkadot-sdk-minimal-template

Zombienet with Omni Node

Install zombienet

We can install zombienet as described here, and zombienet-omni-node.toml contains the network specification we want to start.

Update zombienet-omni-node.toml with a valid chain spec path

Before starting the network with zombienet we must update the network specification with a valid chain spec path. If we need to generate one, we can look up at the previous section for chain spec creation here.

Then make the changes in the network specification like so:

# ...
chain = "dev"
chain_spec_path = "<TO BE UPDATED WITH A VALID PATH>"
default_args = ["--dev"]
# ..

Start the network

zombienet --provider native spawn zombienet-omni-node.toml

Zombienet with minimal-template-node

For this one we just need to have zombienet installed and run:

zombienet --provider native spawn zombienet-multi-node.toml

Connect with the Polkadot-JS Apps Front-End

  • ๐ŸŒ You can interact with your local node using the hosted version of the Polkadot/Substrate Portal.

  • ๐Ÿช A hosted version is also available on IPFS.

  • ๐Ÿง‘โ€๐Ÿ”ง You can also find the source code and instructions for hosting your own instance in the polkadot-js/apps repository.

Takeaways

Previously minimal template's development chains:

  • โŒ Started in a multi-node setup will produce forks because minimal lacks consensus.
  • ๐Ÿงน Do not persist the state.
  • ๐Ÿ’ฐ Are pre-configured with a genesis state that includes several pre-funded development accounts.
  • ๐Ÿง‘โ€โš–๏ธ One development account (ALICE) is used as sudo accounts.

Contributing

Getting Help

  • ๐Ÿง‘โ€๐Ÿซ To learn about Polkadot in general, Polkadot.network website is a good starting point.

  • ๐Ÿง‘โ€๐Ÿ”ง For technical introduction, here are the Polkadot SDK documentation resources.

  • ๐Ÿ‘ฅ Additionally, there are GitHub issues and Substrate StackExchange.