:source-highlighter: highlight.js :highlightjs-languages: rust :github-icon: pass:[] = Quick start * Begin by visiting our link:https://github.com/OpenZeppelin/polkadot-runtime-templates[repository]. You can fork it, or simply clone it to your local directory. ```bash git clone git@github.com:OpenZeppelin/polkadot-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://paritytech.github.io/polkadot-testnet-faucet/[Paseo faucet] * Reserve a ParaId on Paseo: ** Go to link:https://polkadot.js.org/apps[PolkadotJS]. Check that it points to Paseo testnet. ** Go to `Network` > `Parachains` ** Go to `Parathreads` tab ** Click the `+ ParaId` button ** Save the `parachain 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-parachain-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 `parachainInfo.parachainId` from `1000` to the previously saved parachain id. ** Generate a raw chainspec with this command: + ```bash ./target/release/generic-template-node build-spec --chain plain-parachain-chainspec.json --disable-default-bootnode --raw > raw-parachain-chainspec.json ``` * 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-parachain-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-parachain-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/paritytech/polkadot-sdk/blob/release-polkadot-v1.10.0/polkadot/node/service/chain-specs/paseo.json[official Polkadot sdk repository]. * Register a parathread: ** Generate a genesis state: + ```bash ./target/release/generic-template-node export-genesis-state --chain raw-parachain-chainspec.json para--genesis-state ``` ** Generate a genesis wasm: + ```bash ./target/release/generic-template-node export-genesis-wasm --chain raw-parachain-chainspec.json para--wasm ``` ** Go to link:https://polkadot.js.org/apps[PolkadotJS]. Check that it points to Paseo testnet. ** Go to `Network` > `Parachains`. ** 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 parachain gets synced with a relaychain, you may start producing blocks as a parathread: ** Create some transaction with a PolkadotJS pointing to your parachain setup. ** With a PolkadotJS 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 parachain 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 pallets. It may be useful if you are considering building a frontend for your parachain.