Operators

Join as Validator

Create a validator on the BitSong Crescendo-1 testnet and start signing blocks.

This guide shows you how to create a validator on the Crescendo-1 testnet. You need a running and synced node before proceeding.

Make sure your node is fully synced before creating a validator. Check with curl -s http://localhost:26657/status | jq '.result.sync_info.catching_up' — it should return false.

Create a Key

If you haven't already created a wallet, see the Create a Wallet guide. For a quick CLI setup, generate a new key pair:

bitsongd keys add <your-key-name> --keyring-backend test
The --keyring-backend test flag stores keys unencrypted on disk. This is acceptable for testnets but never use this on mainnet. Save your mnemonic phrase — it is the only way to recover your account.

To recover an existing key from a mnemonic:

bitsongd keys add <your-key-name> \
    --recover \
    --keyring-backend test

You will be prompted to enter your mnemonic.

Fund Your Account

You need testnet BTSG tokens to create a validator. Check your balance:

bitsongd query bank balances $(bitsongd keys show <your-key-name> -a --keyring-backend test)
If you don't have tokens, request them from the testnet faucet or ask in the BitSong community channels.

Create the Validator

Retrieve your validator public key

bitsongd tendermint show-validator

This outputs your node's consensus public key, needed for the next step.

Submit the create-validator transaction

bitsongd tx staking create-validator \
    --amount 1000000000000ubtsg \
    --pubkey $(bitsongd tendermint show-validator) \
    --moniker "<your-validator-name>" \
    --chain-id crescendo-1 \
    --commission-rate 0.10 \
    --commission-max-rate 0.20 \
    --commission-max-change-rate 0.01 \
    --min-self-delegation 1 \
    --from <your-key-name> \
    --keyring-backend test \
    --gas auto \
    --gas-adjustment 1.5 \
    -y

Verify your validator

Check that your validator is in the active set:

bitsongd query staking validators --output json | \
    jq '.validators[] | select(.description.moniker == "<your-validator-name>")'

Parameter Reference

--amount
string required
Amount of ubtsg to self-delegate. 1000000 ubtsg = 1 BTSG.
--pubkey
string required
Your node's consensus public key from bitsongd tendermint show-validator.
--moniker
string required
Public display name for your validator on the network.
--commission-rate
decimal required
Initial commission rate charged to delegators. 0.10 = 10%.
--commission-max-rate
decimal required
Maximum commission rate the validator can ever set. Cannot be changed after creation.
--commission-max-change-rate
decimal required
Maximum daily commission rate change. Cannot be changed after creation.
--min-self-delegation
integer required
Minimum amount of BTSG the validator must keep self-delegated.

Validator Operations

Delegate More Tokens

bitsongd tx staking delegate <validator-operator-address> 1000000ubtsg \
  --from <your-key-name> \
  --keyring-backend test \
  --chain-id crescendo-1 \
  -y

Unjail Your Validator

If your validator gets jailed for downtime:

bitsongd tx slashing unjail \
  --from <your-key-name> \
  --keyring-backend test \
  --chain-id crescendo-1 \
  -y
Validators can be jailed for missing too many blocks. Make sure your node stays online and synced to avoid this.

Edit Validator Details

bitsongd tx staking edit-validator \
    --moniker "<new-name>" \
    --details "Your validator description" \
    --website "https://your-website.com" \
    --from <your-key-name> \
    --keyring-backend test \
    --chain-id crescendo-1 \
    -y

Troubleshooting

Copyright © 2026