Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • network/gdev-800 protected
  • cgeek/issue-297-cpu
  • gdev-800-tests
  • update-docker-compose-rpc-squid-names
  • fix-252
  • 1000i100-test
  • hugo/tmp-0.9.1
  • network/gdev-803 protected
  • hugo/endpoint-gossip
  • network/gdev-802 protected
  • hugo/distance-precompute
  • network/gdev-900 protected
  • tuxmain/anonymous-tx
  • debug/podman
  • hugo/195-doc
  • hugo/195-graphql-schema
  • hugo-tmp-dockerfile-cache
  • release/client-800.2 protected
  • release/runtime-800 protected
  • gdev-900-0.10.1 protected
  • gdev-900-0.10.0 protected
  • gdev-900-0.9.2 protected
  • gdev-800-0.8.0 protected
  • gdev-900-0.9.1 protected
  • gdev-900-0.9.0 protected
  • gdev-803 protected
  • gdev-802 protected
  • runtime-801 protected
  • gdev-800 protected
  • runtime-800-bis protected
  • runtime-800 protected
  • runtime-800-backup protected
  • runtime-701 protected
  • runtime-700 protected
  • runtime-600 protected
  • runtime-500 protected
  • v0.4.1 protected
  • runtime-401 protected
  • v0.4.0 protected
40 results

launch-a-live-network.md

Blame
    • Hugo Trentesaux's avatar
      5d8ba754
      prepare gtest runtime (!171) · 5d8ba754
      Hugo Trentesaux authored
      * fix gtest runtime type name
      
      * add embeded client spec and genesis in binary
      
      (this re-buids chainspecs at each run)
      
      * refac chainspecs generation
      
      * add what is needed to build gtest chainspecs
      5d8ba754
      History
      prepare gtest runtime (!171)
      Hugo Trentesaux authored
      * fix gtest runtime type name
      
      * add embeded client spec and genesis in binary
      
      (this re-buids chainspecs at each run)
      
      * refac chainspecs generation
      
      * add what is needed to build gtest chainspecs

    How to launch a live network

    Launching a new live network is more difficult than spawning a local blockchain. Follow this process if you know what you are doing and you already experimented a bit with local blockchains. Part of this process is automated with Rust scripts, including interaction with GitLab's GraphQL API. Do not hesitate to improve and complete it (see TODOs inside xtask/**/*.rs files).

    Requirements

    In order to build in a standardized environment, you need Docker.

    • see docker docs to install docker
    • make sure you can run docker as non-root user with docker info or so

    Preparation

    When launching a new network, you're likely to use a new runtime. See how to release a new runtime.

    Inject runtime in chainspec

    ĞDev runtime is automatically embeded in the raw chainspec with the include_bytes! macro. An other way to inject the runtime is to use "inject-runtime-code" xtask:

    cargo xtask inject-runtime-code --runtime runtime/gdev/target/srtool/release/wbuild/gdev-runtime/gdev_runtime.compact.compressed.wasm --raw-spec resources/gdev-raw.json 

    Bootstraping

    Choose the currency type

    For now, only gdev is supported.

    In the commands that will be indicated afterwards, you will have to replace CURRENCY by the currency type you have chosen.

    Choose the docker image

    Choose the docker image that contains the version of the code that you want to use.

    In the commands that will be indicated afterwards, you will have to replace TAG by the tag of the docker image that you have chosen (example : runtime-400).

    Generate the session keys of genesis authority

    Generate a random secret phrase:

    $ docker run --rm duniter/duniter-v2s:TAG -- key generate
    Secret phrase:       noble stay fury mean poverty delay stadium organ evil east vague can
      Secret seed:       0xb39c31fb10c5080721738880c2ea45412cb3df33df022bf8d9a51483b3a9b7a6
      Public key (hex):  0x90a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62
      Account ID:        0x90a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62
      Public key (SS58): 5FLLWRsxdLKfXH9VQH6Yv73hN1oc9KoFkZ5LEHEz1uTR1Qt3
      SS58 Address:      5FLLWRsxdLKfXH9VQH6Yv73hN1oc9KoFkZ5LEHEz1uTR1Qt3

    Keep this secret phrase carefully, it will be used several times later.

    Then, generate the session keys:

    $ docker run --rm duniter/duniter-v2s:TAG -- key generate-session-keys --chain CURRENCY_local --suri "<your secret phrase>"
    Session Keys: 0x87189d723e1b2826c243bc433c718ac26ba60526932216a09102a254d54462b890a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62

    Paste sessions keys in the genesis configuration file

    An example of genesis configuration file: resources/gdev.json. Paste your session keys in your smith identity with key session_keys.

    Generate raw spec

    docker run -v $HOME/dev/duniter-v2s/resources:/var/lib/duniter/resources -e DUNITER_GENESIS_CONFIG=/var/lib/duniter/resources/gdev.json --rm duniter/duniter-v2s:TAG -- build-spec -lerror --chain=gdev_live --raw > name-raw.json
    ./scripts/gen-live-network-raw-spec.sh CURRENCY "<path/to/your/genesis/config/file>"

    This builds the specs using debug version of Duniter.

    Generate the docker compose and prepare nodes keys

    ./scripts/create-live-network.sh "<your secret phrase>" CURRENCY "<path/to/dist/folder>"

    The new distribution folder can be copied to a server

    scp -r "<path/to/dist/folder>" <server>:/remote/dist/path

    then on the server, launch the compose file from the the distribution folder's root:

    ssh <server>
    cd "<path/to/dist/folder>"
    docker compose up -d

    This is the first node of the new live network.

    Finalization

    The following steps should be completed once you are satisfied with the new live network.

    Rotate session keys

    You should rotate session keys for more secured keys produced on the server (the one you used before are still in your develop machine bash history and clipboard).

    Publish image

    With these new session keys in the chainspec and the runtime build with srtool, you can release the new runtime again with:

    cargo xtask release-runtime 400

    Tell the other smith

    Once you completed all these steps, the other smith can pull the docker image with a genesis containing your bootnode with the correct session keys. They can base their docker-compose.yml on the duniter-validator template.