General instructions to join the Juno mainnet after network genesis.
The Juno Network has undergone several upgrades since the network inception on October 1st 2021. There was a hard fork after the network was attaked with a smart contract vulnerability on July 28th 2022.
The second is the current mainnet "Juno Phoenix 2" which raised Juno from the ashes on July 28th 2022.
The correct version of the binary for mainnet at genesis (Phoenix) was
Releases after genesis can be found in the mainnet repo.
The minimum recommended hardware requirements for running a validator for the Juno mainnet are:
For this guide, we will be using shell variables. This will enable the use of the client commands verbatim. It is important to remember that shell commands are only valid for the current shell session, and if the shell session is closed, the shell variables will need to be re-defined.
If you want variables to persist for multiple sessions, then set them explicitly in your shell .profile, as you did for the Go environment variables.
To clear a variable binding, use
unset $VARIABLE_NAME. Shell variables should be named with ALL CAPS.
The current Juno Network
juno-1. Set the
<moniker-name>, this can be any name of your choosing and will identify your validator in the explorer. Set the
These instructions will direct you on how to initialize your node, synchronize to the network and upgrade your node to a validator.
junod init "$MONIKER_NAME" --chain-id $CHAIN_ID
This will generate the following files in
# Download genesis.json file
tar -xvf juno-phoenix2-genesis.tar.gz
mv juno-phoenix2-genesis.json $HOME/.juno/config/genesis.json
This will replace the genesis file created using
junod initcommand with the mainnet
We can set the
seedsby retrieving the list of seeds from the cosmoscontracts/mainnet repo and using
sedto inject into
# Set the base repo URL for mainnet & retrieve seeds
CHAIN_REPO="https://raw.githubusercontent.com/CosmosContracts/mainnet/main/$CHAIN_ID" && \
export SEEDS="$(curl -sL "$CHAIN_REPO/seeds.txt")"
# Add seeds to config.toml
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/" ~/.juno/config/config.toml
For RPC nodes and Validator nodes we recommend setting the following
minimum-gas-prices. As we are a permissionless wasm chain, this setting will help protect against contract spam and potential wasm contract attack vectors.
$HOME/.juno/config/app.toml, set minimum gas prices:
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ujuno,0.001ibc\/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9\"/" ~/.juno/config/app.toml
Either create a new key pair, or restore an existing wallet for your validator:
# Create new keypair
junod keys add <key-name>
# Restore existing juno wallet with mnemonic seed phrase.
# You will be prompted to enter mnemonic seed.
junod keys add <key-name> --recover
# Query the keystore for your public address
junod keys show <key-name> -a
<key-name>with a key name of your choosing.
You will require some Juno tokens to bond to your validator. To be in the active set you will need to have enough tokens to be in the top 150 validators by delegation weight.
There are methods to sync a node to the network:
After starting the
junoddaemon, the chain will begin to sync to the network. The time to sync to the network will vary depending on your setup and the current size of the blockchain, but could take a very long time. To query the status of your node:
# Query via the RPC (default port: 26657)
curl http://localhost:26657/status | jq .result.sync_info.catching_up
If this command returns
truethen your node is still catching up. If it returns
falsethen your node has caught up to the network current block and you are safe to proceed to upgrade to a validator node.
To upgrade the node to a validator, you will need to submit a
junod tx staking create-validator \
--amount 1000000ujuno \
--commission-max-change-rate "0.1" \
--commission-max-rate "0.20" \
--commission-rate "0.1" \
--min-self-delegation "1" \
--details "validators write bios too" \
--pubkey=$(junod tendermint show-validator) \
--moniker "$MONIKER_NAME" \
--chain-id $CHAIN_ID \
--gas-prices 0.025ujuno \
There are certain files that you need to backup to be able to restore your validator if, for some reason, it damaged or lost in some way. Please make a secure backup of the following files located in
It is recommended that you encrypt the backup of these files.