Skip to main content

Genesis Ceremony

This guide outlines the essential steps for conducting a Genesis Ceremony in the 0L Network.

The Purpose of the Genesis Ceremony

A Genesis Ceremony is a pivotal event marking the creation of the network's genesis block — the foundational block that underpins the entire blockchain. The genesis of a network can begin with a blank state (0 balances) or with preserving the state of an earlier chain and migrate to the new chain during the genesis ceremony. The latter approach is also known as a fork. It is a crucial process that not only initiates the network but also involves migrating the network's state from an earlier version to the next version.

Follow this document to navigate the process effectively, ensuring a smooth and successful launch or upgrade of the 0L Network.

High Level Ceremony Steps

  1. Operator Name & Cleanup
  2. Static IP & Open Ports
  3. Fetch Source & Verify Commit Hash
  4. Build libra-framework Packages
  5. Account Preparation and Adding GitHub PAT
  6. Pre-Genesis Registration
    • Stop: Wait for the coordinator to merge all PR's. Step 8 can be done while you wait
  7. PR Received
  8. PR Merged
  9. Build JSON_Legacy
  10. All Nodes Added to layout.yaml Users Key
    • Wait for the Coordinator: Wait for the coordinator post-pre-genesis set closure and to add all genesis participants.
  11. Pull from Genesis Repo and Build
    • Wait for the Coordinator: Wait for the coordinator's signal to start.
  12. Start Nodes!

Coordination happens via the 0L Discord server voice channels, and a Google Sheet will track participants at each. Each step requires careful attention to the coordinator's instructions.

note

Only proceed with asynchronous steps after the coordinator confirms the previous sequential blocking steps as completed.

Genesis Ceremony Steps

1. Operator name and cleanup of previous binaries or testnet data

Provide your operator name (handle) in the Genesis Worksheet.

If you have participated in testnets, delete any previous forks of testnet repos (such as release-v6.9.0-rc.0-genesis-2) from your GitHub repositories.

Previous clones and testnets leave data in the .libra directory, clean those up by removing these directories

rm -rf ~/libra-framework && rm -rf ~/.libra/libra-legacy-v6
rm -rf ~/.libra/data && rm -rf ~/.libra/genesis && rm -rf ~/.libra/secure-data.json
rm -f /usr/bin/libra && rm -rf /usr/local/bin/libra && rm -f ~/.cargo/bin/libra

2. Get your static IP and open necessary ports

Fetch your external Static IP and set it aside

curl -s ipinfo.io | jq .ip

The validator should have the following ports open: 6180, 6181

  • 6180 should be open on all interfacess 0.0.0.0/0, it's for consensus and uses noise encryption.
  • 6181 is for the private validator fullnode network ("VFN"), the firewall should only allow the IP of the fullnode to access this port.

3. Fetch source & verify commit hash

We suggest you start a new tmux session

sudo apt install tmux -y
tmux new -t libra-node

Clone the libra-framework repository and make sure you are on the correct branch

cd ~
git clone https://github.com/0LNetworkCommunity/libra-framework
cd ~/libra-framework
git fetch --all && git checkout release-6.9.0-rc.10

Ensure the commit hash matches your peers and the coordinator

git log -n 1 --pretty=format:"%H"

4. Build and install the libra binaries

To use many of our genesis CLI tooling, we have to switch to its directory

cd ~/libra-framework/tools/genesis

If your directory structure setup is different from the default, you can override the defaults by exporting the following environment variables: SOURCE_PATH, BINS_PATH, DATA_PATH. See the Makefile for more details.

Install the source and reload bash

sudo apt install make -y
EPOCH=692 make install && source ~/.bashrc

5. Account Preparation and Adding GitHub PAT (use classic with repo privileges)

Acquire GitHub Personal Access Token (PAT) with repo privileges. Paste it aside.

If you are new and do not have an account, create one, carefully record your seed phrase, and keep it aside for later

libra wallet keygen

Setup the validator configs and data directory ~/.libra (it is OK to refresh your configs)

libra config validator-init

Retrieve Validator address and paste it aside

grep 'account_address' ~/.libra/public-keys.yaml

Paste your GitHub PAT in the ~/.libra/github_token.txt file

nano ~/.libra/github_token.txt

6. Export genesis ceremony repository and register for genesis

Export the genesis ceremony repository as an environment variable

export GIT_REPO=release-v6.9.0-genesis-registration

Register for genesis

make register
warning

Please wait for the coordinator at this step.

7. PR Received

(coordinator confirms)

8. PR Merged

(coordinator merges your PR)

9. Build JSON_Legacy from snapshot and ancestry

Build the legacy json

make legacy

10. All nodes added to layout.yaml users key

warning

Please wait for the coordinator. Pre-genesis set closes here.

11. Make Genesis

Pull from the genesis repo and build genesis

make genesis
warning

Please wait for the coordinator.

12. Start nodes!

Wait for the coordinator, say a prayer, then start!

libra node

To disconnect from your tmux session CTRL + b and then d to disconnect. To reconnect you can use tmux a -t libra-node.

You could also consider running libra node as a service which is detailed here.


End Of The Genesis Ceremony Steps.