Skip to content

Launching a chain with a custom runtime

The main use-case of the Polkadot Host is to create a standalone chain that may be converted to a parachain later. To do this, you need to have a compiled wasm runtime available for your chain. This can be created using FRAME, a domain-specific language used for creating runtimes.

Once you have your runtime ready and compiled into a wasm binary, it is ready to be used with Gossamer.

1. Create chain spec file with custom runtime

You can use the gossamer import-runtime subcommand to create a chain-spec file containing your custom runtime. The rest of the file is based off the gssmr chain-spec.json file.

make gossamer
./bin/gossamer import-runtime <custom-runtime.wasm> > chain-spec.json

This creates a chain spec file chain-spec.json with the contents of your given file as the "system" "code" field.

By default, chain-spec.json will contain the 9 built-in keys as authorities with some preset balance. You can edit the fields as you wish.

Note: the import-runtime subcommand does not validate that the runtime in the given file is valid.

2. Create raw chain-spec file from chain spec

To create the raw genesis file used by the node, you can use the gossamer build-spec subcommand.

./bin/gossamer build-spec --raw --chain chain-spec.json > chain-spec-raw.json
./bin/gossamer build-spec --raw --chain chain-spec.json --output-path chain-spec-raw.json

This creates a chain-spec file chain-spec.json that is usable by the node.

3. Initialise the node with the chain-spec file

Next, you will need to write the state in chain-spec.json to the database by initialising the node.

./bin/gossamer init --chain chain-spec.json

4. Start the node

The final step is to launch the node. This is the same as normal, providing a built-in authority key and the base-path:

./bin/gossamer --key alice --base-path /tmp/gossamer

You now have a chain running a custom runtime!