Baedeker - Tool for running relay+paras setup locally and above

The purpose of this post is to collect community feedback on Baedeker tool created by Unique Network. Please make your comments here or feel free to DM me on this forum (or telegram if we’re connected) for more details.

Summary

Baedeker is the CI tool created by Unique Network after Polka Launch support was discontinued. This tool facilitates running a Substrate network consisting of a relay and a number of parachains. It can be used both for local developer testing and in production environments and surpasses the competing solutions by feature set, flexibility, and ease of use. Below is a brief overview of its features and a use example, as well as a comparison with other available solutions (Chopsticks and Zombienet).

Features

  • Launches fully functional live substrate (relay and parachain) nodes (no emulation, etc.)
    • Executes the node binaries as configured for the relay and parachains
    • Automatically registers all parachains as needed
    • Networks may contain as many nodes as needed
    • Single nodes may be restarted without the loss of state or network integrity
    • Configures the validator/collator keys and writes them into nodes properly (can either generate keys or use a preset keys for fast insecure setup for local testing)
  • Does not require any 3rd party dependencies. Automatically generates launch configuration.
  • Generates configuration files for a number of orchestrators:
    • Docker compose
    • Kubernetes
    • Systemd
  • Does not run any additional processes, completes its job at configuration stage only.
  • Can copy a live network state (at the moment of the current block or at any block in the past) into genesis by means of integration with ChainQL (another open source tool developed by Unique Network).
  • Supports dynamic configuration for networks with jsonnet capabilities.

Usage Example

  1. Install direnv: Installation | direnv
  2. In order to run the chain in a new environment, clone baedeker-library into .baedeker/vendor folder:
mkdir -p .baedeker/vendor && git clone git@github.com:uniquenetwork/baedeker-library.git .baedeker/vendor/baedeker-library
  1. Create a rewrite file from the provided template. This template currently reads all software versions from .envrc file and downloads all chain binaries (except Unique Network) from dockerhub. The Unique Network binary is used from target/release/ folder.
cp .baedeker/rewrites.example.jsonnet .baedeker/rewrites.jsonnet
  1. Execute the desired configuration, for example, Quartz XCM (the rewrite file should match to the needed chain, by default it is configured for Quartz by Unique):
.baedeker/up.sh .baedeker/xcm-quartz.jsonnet
  1. After the configuration is compiled, the docker compose is automatically launched, and it generates discover.env, which will be automatically included by .envrc, and the following message will be printed:

  1. The link in this message will provide a very basic UI containing the Polkadot AppsUI links for the relay chain and all registered parachains.

  1. Also, many useful environment variables such as para IDs and Apps UI links to all networks will be made available. Same environment variables will be available in the CI:

Other Polkadot devnet launchers comparison

Polka-Launch

Unfortunately, discontinued. :frowning:

Chopsticks

  • Emulates substrate node
  • Consists of node server for emulation some of substrate RPC and wasm calls via smalldot
  • Needs additional development (added emulation) to support all RPC calls of the emulated node.
  • Can get the state from a live network at a given block
  • Can emulate extrinsic emulation via wasm
  • Cannot emulate XCM (but it is planned to support)
  • Does not allow single nodes to be restarted without loss of block history or network integrity

Zombienet

  • Launches live substrate nodes
  • Requires k8s (Kubernetes) or similar environment
  • Requires additional dependencies for the network liveness (all nodes must provide prometheus connection. Health checks are implemented via prometheus)
  • Does not create any additional system processes, just facilitates the configuration of network nodes
  • Cannot copy the state of a live network, always creates a clean start
  • Running additional parachain networks may require more development
3 Likes