๐ŸงกBabylon

Preparations

To continue, we can update the packages by running the following commands in the terminal. The first part of the command (sudo apt update) updates the package lists for upgrades, and the second part (sudo apt upgrade -y) actually performs the upgrades with the โ€œ-yโ€ flag allowing for automatic confirmation of prompts during the upgrade process:

sudo apt update && sudo apt upgrade -y

Setup Validator Name

First change โ€œYOUR_MONIKER_GOES_HEREโ€ to your chosen validator moniker and enter this command:

MONIKER="YOUR_MONIKER_GOES_HERE"

Install Dependencies & Install GO

# Install Build Tools
sudo apt -qy install curl git jq lz4 build-essential

# Install GO
ver="1.22.0"
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source $HOME/.bash_profile

Download And Build Binaries

# Clone project repository
cd $HOME
rm -rf babylon
git clone https://github.com/babylonchain/babylon.git
cd babylon
git checkout v0.8.3

# Build binaries
make build

# Prepare binaries for Cosmovisor
mkdir -p ~/.babylond
mkdir -p ~/.babylond/cosmovisor
mkdir -p ~/.babylond/cosmovisor/genesis
mkdir -p ~/.babylond/cosmovisor/genesis/bin
mkdir -p ~/.babylond/cosmovisor/upgrades

mv build/babylond $HOME/.babylond/cosmovisor/genesis/bin/
rm -rf build

# Create application symlinks
sudo ln -s $HOME/.babylond/cosmovisor/genesis $HOME/.babylond/cosmovisor/current -f
sudo ln -s $HOME/.babylond/cosmovisor/current/bin/babylond /usr/local/bin/babylond -f

Set Up Cosmovisor And Create The Corresponding Service

# Download and install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest

# Create and start service
sudo tee /etc/systemd/system/babylond.service > /dev/null <<EOF
[Unit]
Description=Babylon daemon
After=network-online.target

[Service]
User=$USER
ExecStart=$(which cosmovisor) run start --x-crisis-skip-assert-invariants
Restart=always
RestartSec=3
LimitNOFILE=infinity

Environment="DAEMON_NAME=babylond"
Environment="DAEMON_HOME=${HOME}/.babylond"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable babylond.service

Initialize The Node

# Initialize the node
babylond init $MONIKER --chain-id bbn-test-3

# Add seeds
sed -i -e "s|^seeds *=.*|seeds = \"49b4685f16670e784a0fe78f37cd37d56c7aff0e@3.14.89.82:26656,9cb1974618ddd541c9a4f4562b842b96ffaf1446@3.16.63.237:26656\"|" $HOME/.babylond/config/config.toml

# Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.00001ubbn\"|" $HOME/.babylond/config/app.toml

# Switch to signet
sed -i -e "s|^network *=.*|network = \"signet\"|" $HOME/.babylond/config/app.toml

# Set pruning
sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
  $HOME/.babylond/config/app.toml

Retrieve The Genesis File:

wget https://github.com/babylonchain/networks/raw/main/bbn-test-3/genesis.tar.bz2
tar -xjf genesis.tar.bz2 && rm genesis.tar.bz2
mv genesis.json ~/.babylond/config/genesis.json

Start Service And Check The Logs

sudo systemctl start babylond.service && sudo journalctl -u babylond.service -f --no-hostname -o cat

Becoming a Validator

  1. Keyring creation and getting funds: Validators are required to have funds for two reasons:

  • Self-delegation: Validators must stake their own funds as a commitment to the network.

  • Transaction fees: Funds are necessary to cover the costs of submitting BLS signature transactions.

Presently, validators are limited to using the test keyring backend. However, Babylon plans to expand support to include various encrypted backends offered by the Cosmos SDK in the future.

Create a New Key

babylond keys add wallet

Obtain Funds from the Babylon Testnet Faucet

To receive funds, visit the #faucet channel on the official Babylon Discord server. Here, you can request funds by sharing the address you previously created. Please note, in order to access the #faucet channel, you first need to visit the โ€œget-a-roleโ€ channel and react with the โ€œComputerโ€ emoji. This action will grant you the necessary permissions to view the #faucet channel. Once in the channel, submit your request by typing !faucet followed by your address. For instance, you would type this to request funds for that specific address:

!faucet bbn16yzx3zfucs6fxu4hw3ack6ht4hgsp9wqrly2c9

You can check your wallet balance using this command:

babylond q bank balances $(babylond keys show wallet -a)

Ensure that you have successfully received 1,100,000 ubbn. Please be aware that you can only claim 1 BBN from the faucet every 24 hours.

Generate a BLS Key Pair

As a validator, you are required to provide a BLS signature at the conclusion of each epoch. For this purpose, itโ€™s essential to possess a BLS key pair, which will be used for signing information. This should be done using the address that was established in the preceding step.

babylond create-bls-key $(babylond keys show wallet -a)

Executing this command will generate a BLS key, which will then be stored in the $HOME/.babylond/config/priv_validator_key.json file. This file also contains the private key used by the validator for block signing. It's crucial to secure this file adequately to maintain the integrity and security of your validator operations. After creating a BLS key, you need to restart your node to load this key into memory.

Update the Configuration Settings

Additionally, itโ€™s necessary to define the name of the key your validator will utilize for submitting BLS signature transactions. This is done in the $HOME/.babylond/config/app.toml file. You should edit this file to assign the key name to the one associated with the funds in your keyring.

sed -i -e "s|^key-name *=.*|key-name = \"wallet\"|" $HOME/.babylond/config/app.toml

Lastly, it is highly advisable to adjust the timeout_commit parameter in the $HOME/.babylond/config/config.toml file. This setting determines the duration a validator waits before committing a block and proceeding to a new height. In alignment with Babylon's goal of maintaining a 10-second interval between blocks, you should configure this value accordingly.

sed -i -e "s|^timeout_commit *=.*|timeout_commit = \"10s\"|" $HOME/.babylond/config/config.toml

Create the Validator

Unlike traditional Cosmos SDK chains, establishing a validator on Babylon requires using the babylond tx checkpointing create-validator command. This process assumes the presence of a BLS validator key in the $HOME/.babylond/config/priv_validator_key.json file.

Babylon validators have the responsibility to submit a BLS signature transaction at the end of each epoch, which currently occurs approximately every 30 minutes. These transactions incur a fixed gas fee of 100ubbn. Consequently, itโ€™s crucial for validators to ensure they have sufficient unbonded funds in their keyring to cover these recurring transaction fees.

Check the network synchronization status with the command:

babylond status | jq .SyncInfo

As soon as the value of catching_up becomes โ€œfalseโ€, you can proceed to the final step.

# Make sure you have adjusted **moniker**, **details** and **website** to match your values.

babylond tx checkpointing create-validator \
--amount 1000000ubbn \
--pubkey $(babylond tendermint show-validator) \
--moniker "YOUR_MONIKER_NAME" \
--details "YOUR_DETAILS" \
--website "YOUR_WEBSITE_URL" \
--chain-id bbn-test-3 \
--commission-rate 0.05 \
--commission-max-rate 0.20 \
--commission-max-change-rate 0.01 \
--min-self-delegation 1 \
--from wallet \
--gas-adjustment 1.4 \
--gas auto \
--gas-prices 0.00001ubbn \
-y

To achieve active validator status, itโ€™s essential to bond more ubbn tokens than the current lowest-bonded validator in the ranking (unless the validator set isnโ€™t full). Additionally, you must have a minimum of 10,000,000 ubbn tokens bonded.

Congratulations! Youโ€™ve successfully become a validator on the Babylon network. Usually it within 30 minutes, the validator should appear in the list at https://babylon.explorers.guru/validators.

However, due to network congestion, there might be delays sometimes. You can find your validator by searching for the wallet address or your Moniker, and then see it in the delegations to your validator on this wallet.

Last updated