Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: testnet 5 documentation for Babylon validators #369

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
283 changes: 283 additions & 0 deletions bbn-test-5/babylon-node/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
# Babylon Node Setup

## Table of Contents

1. [Install Babylon Binary](#install-babylon-binary)
2. [Setup Node Home Directory and Configure](#setup-your-node-home-directory-and-configure)
4. [Setup Required Keys](#setup-the-required-keys-for-operating-a-validator)
5. [Sync Node](#sync-node)
6. [Get Funds](#get-funds)


## Install Babylon Binary

1. Install [Golang 1.21+](https://go.dev/dl)
samricotta marked this conversation as resolved.
Show resolved Hide resolved
2. Verify installation:

```shell
go version
```

3. Clone and build Babylon:
```shell
git clone [email protected]:babylonlabs-io/babylon.git
cd babylon
git checkout bbn-test-5 # TODO: testnet tag to be defined
make install
```
This command does the following:
- Builds the daemon
- Compiles all the Go packages in the project
- Installs the binary
- Makes the `babylond` command globally accessible from your terminal

You should expect to see the following output:

```shell
# Build output will show:
go install -mod=readonly -tags "netgo ledger mainnet" \
-ldflags '\
-X github.com/cosmos/cosmos-sdk/version.Name=babylon \
-X github.com/cosmos/cosmos-sdk/version.AppName=babylond \
-X github.com/cosmos/cosmos-sdk/version.Version=v0.13.0 \
-X github.com/cosmos/cosmos-sdk/version.
Commit=976e94b926dcf287cb487e8f35dbf400c7d930cc \
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger" \
-w -s' \
-trimpath ./...
```
samricotta marked this conversation as resolved.
Show resolved Hide resolved

Now it has successfully compiled, lets check the available actions
samricotta marked this conversation as resolved.
Show resolved Hide resolved
through the `babylond` command:

```shell
babylond
```

Which will give us a list of available actions.

```shell
Available Commands:
add-genesis-account Add a genesis account to genesis.json
collect-gentxs Collect genesis txs and output a genesis.json file
comet CometBFT subcommands
config Utilities for managing application configuration
...
```
samricotta marked this conversation as resolved.
Show resolved Hide resolved

If the babylond command isn't found, ensure `$GOPATH/bin` is in your shell's
samricotta marked this conversation as resolved.
Show resolved Hide resolved
`$PATH`. Add it with:

```shell
export PATH=$HOME/go/bin:$PATHecho 'export PATH=$HOME/go/bin:$PATH' >>
~/.profile
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```

## Setup your node, home directory and configure
samricotta marked this conversation as resolved.
Show resolved Hide resolved

Initialize your node and create the necessary configuration directory.
This command will generate several important configuration files
including `app.toml`, `client.toml`, and `genesis.json`:

```shell
babylond init <moniker> --chain-id bbn-test-5 --home <path>
```

The `<moniker>` is a unique identifier for your node. So for example `node0`.
samricotta marked this conversation as resolved.
Show resolved Hide resolved
The `<path>` is the directory where the node files will be stored
samricotta marked this conversation as resolved.
Show resolved Hide resolved
(e.g. `--home ./nodeDir`).

After initialization, you'll need to modify two important configuration files:
samricotta marked this conversation as resolved.
Show resolved Hide resolved

1. First, open `app.toml` and update these essential settings:

```shell
Base configuration
samricotta marked this conversation as resolved.
Show resolved Hide resolved
minimum-gas-prices = "0.005ubbn"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here, we should explain that these settings will disable IAVL cache to make the node utilize less memory.
In case of a node that will serve heavy RPC query load, these settings shouldn't be used.

iavl-cache-size = 0
iavl-disable-fastnode=true
samricotta marked this conversation as resolved.
Show resolved Hide resolved

[btc-config]

# Configures which bitcoin network should be used for checkpointing
# valid values are: [mainnet, testnet, simnet, signet, regtest]
network = "signet" # Bitcoin network for checkpointing
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```

In `app.toml` under `[btc-network]`change network to `signet` and under
samricotta marked this conversation as resolved.
Show resolved Hide resolved
`Base Configuration` set `iavl-cache-size = 0` and `iavl-disable-fastnode=true`
instead of what is listed in the automatically generated template.
Additionally, add `minimum-gas-prices = "0.005ubbn"`

Navigate to `config.toml`. Add in your seed that should look something like
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be step 2 given that the modifications on app.toml are step 1?

We should point the user to the location where they are to find the seed node. This should be in the same repository, e.g. ../README.md (see what we have for bbn-test-3)

this `[email protected]:26656`

```shell
P2P Configuration Options

# Comma separated list of seed nodes to connect to
seeds = "[email protected]:26656"
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```

Next, you'll need to obtain the network's genesis file. This file contains
the initial state of the blockchain and is crucial for starting from the
correct point. You have two options:
samricotta marked this conversation as resolved.
Show resolved Hide resolved

1. Download directly from the RPC endpoint: `https://rpc.devnet.babylonlabs.io/genesis`
samricotta marked this conversation as resolved.
Show resolved Hide resolved

2. Or use these commands in your terminal:
samricotta marked this conversation as resolved.
Show resolved Hide resolved

```shell
wget https://github.com/babylonlabs-io/networks/raw/main/bbn-test-5/genesis.tar.bz2 # TODO: update this file name if necessary
tar -xjf genesis.tar.bz2 && rm genesis.tar.bz2
mv genesis.json ~/.babylond/config/genesis.json
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```

>Note: Verify that the `chain-id` in the genesis file matches the one used in
your initialization command (`bbn-test-5`). This ensures your node connects
to the correct network.

## Setup the required keys for operating a validator
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this go to the validator guide?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm this should indeed be moved but I think we should include a modified version here to teach users how to create and manage keys, as its important for basic key management. Let's rename it from "Setup the required keys for operating a validator" to something more general like "Create Keys". ??


### Keys for a CometBFT validator

The validator key is a fundamental component of your validator's identity
within the Babylon network. This cryptographic key-pair serves multiple critical
functions: it signs blocks during the consensus process, validates transactions,
and manages your validator's operations on the network. Creating and securing this
key is one of the most important steps in setting up your validator.

To generate your validator key, use the following command:

```shell
babylond --keyring-backend test keys add <name> --home <path>
```
We use `--keyring-backend test`, which specifies which backend to use for the
keyring, `test` stores keys unencrypted on disk.

There are three options for the keyring backend:
samricotta marked this conversation as resolved.
Show resolved Hide resolved

`test`: Stores keys unencrypted on disk. It’s meant for testing purposes and
should never be used in production.
`file`: Stores encrypted keys on disk, which is a more secure option than test but
less secure than using the OS keyring.
`os`: Uses the operating system's native keyring, providing the highest level of
security by relying on OS-managed encryption and access controls.

The `<name>` specifies a unique identifier for the key.

The execution result displays the address of the newly generated key and its
public key. Following is a sample output for the command:

```shell
- address: bbn1kvajzzn6gtfn2x6ujfvd6q54etzxnqg7pkylk9
name: <name>
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey",
key: "Ayau+8f945c1iQp9tfTVaCT5lzhD8n4MRkZNqpoL6Tpo"}'
type: local
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```

Make sure to securely store this information, particularly your address and
private key details. Losing access to these credentials would mean losing
control of your validator and any staked funds.

### Keys for a BLS Voting
#### What is BLS Voting

BLS (Boneh-Lynn-Shacham) voting is used to create compact checkpoints at the
end of each epoch. An epoch is a fixed period within the blockchain, defined or
set by a number of blocks, during which a validator set remains consistent.
This stability allows Babylon to create and submit checkpoints only once per
epoch, reducing the overhead of interacting with the Bitcoin blockchain.
samricotta marked this conversation as resolved.
Show resolved Hide resolved

To read more on BLS Voting please see [here](#) # TODO: add link when it is ready
samricotta marked this conversation as resolved.
Show resolved Hide resolved

#### Create BLS Key

The Babylon network uses BLS (Boneh-Lynn-Shacham) signatures as an efficient
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this paragraph given that we have the above one?

way to create consensus checkpoints at the conclusion of each epoch. As a validator,
samricotta marked this conversation as resolved.
Show resolved Hide resolved
you'll need to participate in this process by submitting BLS signatures.
This requires a special BLS key pair that's separate from your validator key.

To generate your BLS key, you'll use your validator address from the previous step.
samricotta marked this conversation as resolved.
Show resolved Hide resolved
Run this command:

```shell
babylond create-bls-key <address>
```

Replace `<address>` with your validator address from the earlier keyring
generation (it should look similar to `bbn1kvajzzn6gtfn2x6ujfvd6q54etzxnqg7pkylk9`).

The system will automatically:
1. Generate a new BLS key pair
2. Associate it with your validator address
3. Store it in your node's configuration file at
`~/.<path>/config/priv_validator_key.json`

This key will be used automatically by your validator software when it needs
to participate in epoch-end signature collection. The BLS signatures help
create compact, efficient proofs of consensus that can be verified by other
blockchain networks, particularly Bitcoin.
samricotta marked this conversation as resolved.
Show resolved Hide resolved

Important: The `priv_validator_key.json` file contains sensitive key material.
Make sure to backup this file and store it securely, as it's essential for your
validator's operation and cannot be recovered if lost.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's have a Security section at the bottom in which we provide important tips for security (in the validator document in which these paragraphs should be moved). You can consult @filippos47 for help on that.


## Sync Node

We are now ready to sync the node.
samricotta marked this conversation as resolved.
Show resolved Hide resolved

```shell
babylond start --chain-id bbn-test-5 --home <path> --x-crisis-skip-assert-invariants
```

Lets go through the flags of the above command:

- `start`: This is the command to start the Babylon node.
- `--chain-id`: Specifies the ID of the blockchain network you're connecting to.
- `--home`: Sets the directory for the node's data and configuration files and
is dependant on where the files were generated for you from the initialization.
In this case, it's using a directory named "nodeDir" in the current path.
samricotta marked this conversation as resolved.
Show resolved Hide resolved
- `--minimum-gas-prices`: This flag sets the minimum gas price for transactions
samricotta marked this conversation as resolved.
Show resolved Hide resolved
the node will accept. This can also be manually set in the `app.toml`

#### Connect to Nodes
samricotta marked this conversation as resolved.
Show resolved Hide resolved

To connect your node to the network, you'll need peer addresses.
<!-- insert links when we have them -->

As mentioned in the configuration step, add these to your `config.toml`
under `persistent_peers` or `seeds`.

#### Use a Snapshot

For faster syncing, you can use a snapshot instead of syncing from genesis.
Snapshots are periodic backups of the chain state. Find them at:
<!-- - add link here -->

Note: Always verify snapshot sources and checksums before using them to ensure security.

## Get Funds
samricotta marked this conversation as resolved.
Show resolved Hide resolved

To create a validator, you'll need some BBN tokens to:
samricotta marked this conversation as resolved.
Show resolved Hide resolved
1. Pay for transaction fees (gas)
2. Meet the minimum self-delegation requirement
3. Stake as your initial validator bond

You can obtain testnet tokens through two methods:

1. Request funds from the Babylon Testnet Faucet
[here](https://faucet.devnet.babylonlabs.io/)
samricotta marked this conversation as resolved.
Show resolved Hide resolved

2. Join our Discord server and visit the #faucet channel:
samricotta marked this conversation as resolved.
Show resolved Hide resolved
[Discord Server](https://discord.com/channels/1046686458070700112/1075371070493831259)

Note: These are testnet tokens with no real value, used only for testing
and development purposes. The tokens help you experiment with validator
operations without risking real assets.

## Next Steps

For information about becoming a Finality Provider in the Babylon network,
samricotta marked this conversation as resolved.
Show resolved Hide resolved
see our [Finality Provider Guide](../babylon-validators/README.md).
92 changes: 92 additions & 0 deletions bbn-test-5/babylon-validators/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Babylon Validator Setup

Before setting up a validator, you'll need:
1. A fully synced Babylon node. For node setup instructions, see our
[Node Setup Guide](../babylon-node/README.md)
2. Sufficient BBN tokens, which are included in the funding section in the
[Node Setup Guide](../babylon-node/README.md)

## System Requirements

Recommended specifications for running a Babylon validator node:
samricotta marked this conversation as resolved.
Show resolved Hide resolved
- CPU: Quad Core AMD/Intel (amd64)
- RAM: 32GB
- Storage: 2TB NVMe
- Network: 100MBps bidirectional

>Note: These are reference specifications for a production validator.
>Requirements may vary based on network activity and your operational needs.

## Creating Validator

Unlike traditional Cosmos SDK chains, Babylon uses a specialized validator
creation process that integrates with its checkpointing system. The creation
process requires your previously generated BLS key, which should be located at
`~/.babylond/config/priv_validator_key.json`.
samricotta marked this conversation as resolved.
Show resolved Hide resolved

To create your validator, run the following command:

```shell
babylond tx checkpointing create-validator \
samricotta marked this conversation as resolved.
Show resolved Hide resolved
./dir/<path>/babylond/config/priv_validator_key.json \
--chain-id bbn-test-5 \
--gas "auto" \
--gas-adjustment 1.5 \
--gas-prices "0.005ubbn" \
--from <your-key-name>
samricotta marked this conversation as resolved.
Show resolved Hide resolved
```
samricotta marked this conversation as resolved.
Show resolved Hide resolved

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to add the --keyring-backend test here?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maiquanghiep we would if we are using keys no?


Upon successful creation, you'll receive a transaction hash and your validator
operator address
(e.g., `bbnvaloper12k7w0mtdqp5yff8hr9gj6xe3uq7hnfhguqyqjg`).

### Verifying Validator Setup

1. First, confirm your validator operator address:

```shell
babylond keys show <address or name> -a --bech val
```
samricotta marked this conversation as resolved.
Show resolved Hide resolved

2. Then, inspect your validator's details:

```shell
babylond query staking validator <validator-operator-address>
```

You should see your validator's configuration, including:
samricotta marked this conversation as resolved.
Show resolved Hide resolved

```yaml
validator:
commission:
rates:
current: "100000000000000000"
max: "1000000000000000000"
max_change: "10000000000000000"
description:
moniker: "node0"
website: "https://myweb.site"
security_contact: "[email protected]"
status: 1 tokens: "100"
```

### Understanding Validator Status

Your validator enters the active set based on two conditions: 1. The completion
of the current epoch (a network-wide time period for coordinating activities) 2.
Having sufficient stake to qualify for the active set
samricotta marked this conversation as resolved.
Show resolved Hide resolved

When active, your status will show as `BOND_STATUS_BONDED`.

### Managing Your Validator

For delegation operations (`delegate`, `redelegate`, `unbond`, `cancel-unbond`),
you must use the wrapped messages in the checkpointing and epoching modules.
samricotta marked this conversation as resolved.
Show resolved Hide resolved
This is because standard staking module messages are disabled in Babylon.

For detailed information about these operations, visit our
[documentation](https://docs.babylonlabs.io/docs/developer-guides/modules/epoching#delaying-wrapped-messages-to-the-end-of-epochs).

Congratulations! Your validator is now part of the Babylon network. Remember to
monitor your validator's performance and maintain good uptime to avoid
penalties.