:source-highlighter: highlight.js :highlightjs-languages: rust :github-icon: pass:[] = Quick start * Begin by visiting our link:https://github.com/OpenZeppelin/pezkuwi-runtime-templates[repository]. You can fork it, or simply clone it to your local directory. ```bash git clone git@github.com:OpenZeppelin/pezkuwi-runtime-templates.git ``` * Move to the directory of the template you want to use. We will use the `generic runtime template` for this tutorial, but it is the same for the same applies to the xref:runtimes/evm.adoc[EVM Runtime Template]. ```bash cd generic-template ``` * Build a release version of the runtime and node: ```bash cargo build --release ``` * Receive some `PSO` from the link:https://pezkuwichain.github.io/pezkuwi-testnet-faucet/[Paseo faucet] * Reserve a ParaId on Paseo: ** Go to link:https://pezkuwi.js.org/apps[PezkuwiJS]. Check that it points to Paseo testnet. ** Go to `Network` > `Teyrchains` ** Go to `Parathreads` tab ** Click the `+ ParaId` button ** Save the `teyrchain id` for the further usage. ** Click `Submit` and `Sign and Submit`. * Generate and customize a chainspec: [NOTE] ==== We use the `generic-template-node` executable throughout all the commands since we are using the `generic-template`, but make sure to update the name of the executable if you are using any of the other runtime template. ==== ** Generate a plain chainspec with this command: + ```bash ./target/release/generic-template-node build-spec --disable-default-bootnode > plain-teyrchain-chainspec.json ``` ** Edit the chainspec: *** Update `name`, `id` and `protocolId` to unique values. *** Change `relay_chain` from `paseo-local` to `paseo`. *** Change `para_id` and `teyrchainInfo.teyrchainId` from `1000` to the previously saved teyrchain id. ** Generate a raw chainspec with this command: + ```bash ./target/release/generic-template-node build-spec --chain plain-teyrchain-chainspec.json --disable-default-bootnode --raw > raw-teyrchain-chainspec.json ``` [NOTE] ==== At this point, you are free to use the omni-node. The command for using omni-node takes the form: `pezkuwi-omni-node --chain `. For more information about using omni-node, see the link:https://docs.pezkuwi.com/develop/toolkit/teyrchains/pezkuwi-omni-node/[pezkuwi-omni-node documentation]. ==== * Run two nodes and wait until it syncs with the Paseo relay chain. This can take a fairly long time(up to 2 days), so we can use the `fast-unsafe` flag to make the process faster since we are on a testnet(~ 3 hours). `fast` downloads the blocks without executing the transactions, and `unsafe` skips downloading the state proofs(which we are ok with since it is a testnet). + ```bash ./target/release/generic-template-node \ --alice \ --collator \ --force-authoring \ --chain raw-teyrchain-chainspec.json \ --base-path \ --port 40333 \ --rpc-port 8844 \ -- \ --execution wasm \ --chain \ --port 30343 \ --rpc-port 9977 \ --sync fast-unsafe ``` + ```bash ./target/release/generic-template-node \ --bob \ --collator \ --force-authoring \ --chain raw-teyrchain-chainspec.json \ --base-path \ --port 40333 \ --rpc-port 8845 \ -- \ --execution wasm \ --chain \ --port 30343 \ --rpc-port 9977 \ --sync fast-unsafe ``` ** `` is where the downloaded chain state will be stored. It can be any folder on your computer. ** `` is where your Paseo chainspec is stored. You can download this file from the link:https://github.com/pezkuwichain/pezkuwi-sdk/blob/release-pezkuwi-v1.10.0/pezkuwi/node/service/chain-specs/paseo.json[official Pezkuwi sdk repository]. * Register a parathread: ** Generate a genesis state: + ```bash ./target/release/generic-template-node export-genesis-state --chain raw-teyrchain-chainspec.json para--genesis-state ``` ** Generate a genesis wasm: + ```bash ./target/release/generic-template-node export-genesis-wasm --chain raw-teyrchain-chainspec.json para--wasm ``` ** Go to link:https://pezkuwi.js.org/apps[PezkuwiJS]. Check that it points to Paseo testnet. ** Go to `Network` > `Teyrchains`. ** Go to `Parathreads` tab. ** Click the `+ ParaThread` button. ** Insert `para--wasm` to `code` field. ** Insert `para--genesis-state` to `initial state` field. ** Click `Submit` and `Sign and Submit`. * When a teyrchain gets synced with a relaychain, you may start producing blocks as a parathread: ** Create some transaction with a PezkuwiJS pointing to your teyrchain setup. ** With a PezkuwiJS pointing to Paseo go to `Developer` > `Extrinsics`. ** Submit an extrinsic `onDemandAssignmentProvider.placeOrderAllowDeath` or `onDemandAssignmentProvider.placeOrderKeepAlive`: *** `maxAmount` should be not less than 10_000_000 and it is amount of 0.00001 PAS. It is an amount of PAS paid for the block. *** `paraId` should be set to your teyrchain id. *** Click `Submit` and `Sign and Submit`. ** In some time your parathread will produce a block and in one of the next blocks of Paseo there will be an inclusion of this block == What's next? - Read our general guides to understand more about the concepts of runtime development. - Learn more about the runtime configuration. Currently, we have two runtime templates: xref:runtimes/generic.adoc[Generic Runtime Template] and xref:runtimes/evm.adoc[EVM Runtime Template]. - Explore the documentation for pezpallets. It may be useful if you are considering building a frontend for your teyrchain.