Skip to content
Snippets Groups Projects
  • christopher k's avatar
    Add development chain-spec file for minimal/parachain templates for Omni Node compatibility (#6529) · d85147d0
    christopher k authored
    
    # Description
    
    This PR adds development chain specs for the minimal and parachain
    templates.
    [#6334](https://github.com/paritytech/polkadot-sdk/issues/6334)
    
    
    ## Integration
    
    This PR adds development chain specs for the minimal and para chain
    template runtimes, ensuring synchronization with runtime code. It
    updates zombienet-omni-node.toml, zombinet.toml files to include valid
    chain spec paths, simplifying configuration for zombienet in the
    parachain and minimal template.
    
    ## Review Notes
    
    1. Overview of Changes:
    - Added development chain specs for use in the minimal and parachain
    template.
    - Updated zombienet-omni-node.toml and zombinet.toml files in the
    minimal and parachain templates to include paths to the new dev chain
    specs.
    
    2. Integration Guidance:
    **NB: Follow the templates' READMEs from the polkadot-SDK master branch.
    Please build the binaries and runtimes based on the polkadot-SDK master
    branch.**
    - Ensure you have set up your runtimes `parachain-template-runtime` and
    `minimal-template-runtime`
    - Ensure you have installed the nodes required ie
    `parachain-template-node` and `minimal-template-node`
    - Set up [Zombinet](https://paritytech.github.io/zombienet/intro.html)
    - For running the parachains, you will need to install the polkadot
    `cargo install --path polkadot` remember from the polkadot-SDK master
    branch.
    - Inside the template folders minimal or parachain, run the command to
    start with `Zombienet with Omni Node`, `Zombienet with
    minimal-template-node` or `Zombienet with parachain-template-node`
    
    *Include your leftover TODOs, if any, here.*
    * [ ] Test the syncing of chain specs with runtime's code.
    
    ---------
    
    Signed-off-by: default avatarEleisonC <ckalule7@gmail.com>
    Co-authored-by: default avatarIulian Barbu <14218860+iulianbarbu@users.noreply.github.com>
    Co-authored-by: default avatarAlexander Samusev <41779041+alvicsam@users.noreply.github.com>
    Unverified
    d85147d0
Code owners
Assign users and groups as approvers for specific file changes. Learn more.

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

To simplify the process of starting the minimal template with ZombieNet and Omni Node, we've included a pre-configured development chain spec (dev_chain_spec.json) in the minimal template. The zombienet-omni-node.toml file in this template points to it, but you can update it to a new path for the chain spec generated on your machine. To generate a chain spec refer to staging-chain-spec-builder

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