- Replace tree/master with tree/main in all documentation and code comments - Fix issues/168 -> pull/168 reference (issue was converted to PR)
Pezkuwi SDK's Teyrchain Template
This is a template for creating a teyrchain based on Pezkuwi SDK.
This template is automatically updated after releases in the main Pezkuwi SDK monorepo.
Table of Contents
Intro
-
⏫ This template provides a starting point to build a teyrchain.
-
☁️ It is based on the Pezcumulus framework.
-
🔧 Its runtime is configured with a single custom pezpallet as a starting point, and a handful of ready-made pallets such as a Balances pezpallet.
-
👉 Learn more about teyrchains in the Pezkuwi Wiki
Template Structure
A Pezkuwi SDK based project such as this one consists of:
- 🧮 the Runtime - the core logic of the teyrchain.
- 🎨 the Pallets - from which the runtime is constructed.
- 💿 a Node - the binary application, not part of the project default-members list and not compiled unless
building the project with
--workspaceflag, which builds all workspace members, and is an alternative to Omni Node.
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 teyrchain template code:
git clone https://github.com/pezkuwichain/pezkuwi-sdk-teyrchain-template.git teyrchain-template
cd teyrchain-template
Starting a Development Chain
The teyrchain template relies on a hardcoded teyrchain id which is defined in the runtime code
and referenced throughout the contents of this file as {{TEYRCHAIN_ID}}. Please replace
any command or file referencing this placeholder with the value of the TEYRCHAIN_ID constant:
pub const TEYRCHAIN_ID: u32 = 1000;
Omni Node Prerequisites
Omni Node can
be used to run the teyrchain template's runtime. pezkuwi-omni-node binary crate usage is described at a high-level
on crates.io.
Install pezkuwi-omni-node
cargo install pezkuwi-omni-node
For more advanced options, please see the installation section at
crates.io/omni-node.
Build teyrchain-template-runtime
cargo build --profile production
Install pezstaging-chain-spec-builder
cargo install pezstaging-chain-spec-builder
For more advanced options, please see the installation section at
crates.io/pezstaging-chain-spec-builder.
Use chain-spec-builder to generate the chain_spec.json file
chain-spec-builder create --relay-chain "pezkuwichain-local" --runtime \
target/release/wbuild/teyrchain-template-runtime/teyrchain_template_runtime.wasm named-preset development
Note: the relay-chain flag is required by Omni Node. The relay-chain value is set in accordance
with the relay chain ID where this instantiation of teyrchain-template will connect to.
Run Omni Node
Start Omni Node with the generated chain spec. We'll start it in development mode (without a relay chain config), producing and finalizing blocks based on manual seal, configured below to seal a block with each second.
pezkuwi-omni-node --chain <path/to/chain_spec.json> --dev --dev-block-time 1000
However, such a setup is not close to what would run in production, and for that we need to setup a local relay chain network that will help with the block finalization. In this guide we'll setup a local relay chain as well. We'll not do it manually, by starting one node at a time, but we'll use zombienet.
Follow through the next section for more details on how to do it.
Zombienet setup with Omni Node
Assuming we continue from the last step of the previous section, we have a chain spec and we need to setup a relay chain.
We can install zombienet as described in the Zombienet installation guide, and
zombienet-omni-node.toml contains the network specification we want to start.
Relay chain prerequisites
Download the pezkuwi (and the accompanying pezkuwi-prepare-worker and pezkuwi-execute-worker) binaries from
Pezkuwi SDK releases. Then expose them on PATH like so:
export PATH="$PATH:<path/to/binaries>"
Update zombienet-omni-node.toml with a valid chain spec path
To simplify the process of using the teyrchain-template with zombienet and Omni Node, we've added a pre-configured development chain spec (dev_chain_spec.json) to the teyrchain template. The zombienet-omni-node.toml file of this template points to it, but you can update it to an updated chain spec generated on your machine. To generate a chain spec refer to pezstaging-chain-spec-builder
Then make the changes in the network specification like so:
# ...
[[teyrchains]]
id = "<TEYRCHAIN_ID>"
chain_spec_path = "<TO BE UPDATED WITH A VALID PATH>"
# ...
Start the network
zombienet --provider native spawn zombienet-omni-node.toml
Teyrchain Template Node
As mentioned in the Template Structure section, the node crate is optionally compiled and it is an alternative
to Omni Node. Similarly, it requires setting up a relay chain, and we'll use zombienet once more.
Install the teyrchain-template-node
cargo install --path node --locked
Setup and start the network
For setup, please consider the Zombienet installation guide and relay chain prerequisites.
We're left just with starting the network:
zombienet --provider native spawn zombienet.toml
Connect with the Pezkuwi-JS Apps Front-End
-
🌐 You can interact with your local node using the hosted version of the Pezkuwi/Bizinikiwi Portal: relay chain and teyrchain.
-
🪐 A hosted version is also available on IPFS.
-
🧑🔧 You can also find the source code and instructions for hosting your own instance in the
pezkuwi-js/appsrepository.
Takeaways
Development teyrchains:
- 🔗 Connect to relay chains, and we showcased how to connect to a local one.
- 🧹 Do not persist the state.
- 💰 Are preconfigured with a genesis state that includes several prefunded development accounts.
- 🧑⚖️ Development accounts are used as validators, collators, and
sudoaccounts.
Runtime development
We recommend using chopsticks when the focus is more on the runtime
development and OmniNode is enough as is.
Install chopsticks
To use chopsticks, please install the latest version according to the installation guide.
Build a raw chain spec
Build the teyrchain-template-runtime as mentioned before in this guide and use chain-spec-builder
again but this time by passing --raw-storage flag:
chain-spec-builder create --raw-storage --relay-chain "pezkuwichain-local" --runtime \
target/release/wbuild/teyrchain-template-runtime/teyrchain_template_runtime.wasm named-preset development
Start chopsticks with the chain spec
npx @acala-network/chopsticks@latest --chain-spec <path/to/chain_spec.json>
Alternatives
OmniNode can be still used for runtime development if using the --dev flag, while teyrchain-template-node doesn't
support it at this moment. It can still be used to test a runtime in a full setup where it is started alongside a
relay chain network (see Teyrchain Template node setup).
Contributing
-
🔄 This template is automatically updated after releases in the main Pezkuwi SDK monorepo.
-
➡️ Any pull requests should be directed to this source.
-
😇 Please refer to the monorepo's contribution guidelines and Code of Conduct.
Getting Help
-
🧑🏫 To learn about Pezkuwi in general, docs.Pezkuwi.com website is a good starting point.
-
🧑🔧 For technical introduction, see the Pezkuwi SDK documentation.
-
👥 Additionally, there are GitHub issues and Bizinikiwi StackExchange.
-
👥You can also reach out on the Official Pezkuwi discord server
-
🧑Reach out on Telegram for more questions and discussions