Mainnet Validator

Turn a current node into a validator on the mainnet.

This guide contains instructions on how to setup and run an Umee validator. First, be sure to check out the full node instructions on how to install and configure the umeed binary as this guide assumes you already have it installed and configured.

There are three (3) crucial processes required for a healthy validator node:

In order to become an active validator, you must have more stake than the bottom validatoropen in new window. You may still execute the following steps, but you will not be active and therefore won't receive staking rewards.

Release Compatibility Matrix

Please consult release compatibility matrixopen in new window to make sure you install the right version.


Prior to creating your validator, you must first create your "operator" key. Note, this is not your consensus key and will not be used for signing. Instead, it is used to identify you validator in the Umee network.

umeed keys add <key-name> [flags]

By default, umeed will store keys in your OS-backed keyring. You can change this behavior by specifying the --keyring-backend flag.

If you already have a key that you'd like to import via a mnemonic, you can provide a --recover flag and the keys add command will prompt you for the BIP39 mnemonic.

Visit the Cosmos SDK's keyring documentationopen in new window for more information

Ethereum Node

The Gravity Bridge requires that validators also run a peggo orchestrator in addition to the umeed process. The orchestrator requires access to a geth node's RPC instance. A geth light client can be used, but a full node is preferable.

You may choose to operate your own geth node or use a publicly available one. However, in production environments, it is recommended that you run your own. Depending on what network you're running your Umee validator on, you'll want to connect to or setup your geth node to the appropriate Ethereum network. See the geth CLI documentationopen in new window for more information on how to connect to different Ethereum networks.

Follow these steps to install a GETH node and turn your Umee node into a validator

  1. First install the go-ethereum binary;

    • Download the latest binary from
    • unpack: tar xf <archive name>
    • chmod +x geth-*/geth
    • sudo mv geth-*/geth /usr/local/bin
  2. Create a new ethereum wallet. Copy the wallet address and be sure to store the private keys.

    geth account new

    Or you can see the key store using this command

    geth account list
  3. Create a systemdopen in new window service file for your GETH client

    sudo tee /etc/systemd/system/geth.service > /dev/null <<EOF
    Description=Geth node
    ExecStart=/usr/local/bin/geth --syncmode light --http --http.addr= --http.port=8545 --goerli
  4. Run the service

    sudo systemctl daemon-reload
    sudo systemctl enable geth
    sudo systemctl start geth


Start by consulting the latest Peggo release notesopen in new window, to make sure you are aware about the update instructions.

  1. Download Peggo: the gravity bridge orchestrator latest release for your architectureopen in new window. You can build from source. Move the binary to /usr/local/bin.

  2. Let’s export some additional variables. In all commands below in the first command you will receive the value you need to replace part of the next command

    Validator address:

    umeed keys show UMEE_WALLET_NAME --bech val -a
    echo 'export VAL_ADDRESS=VALIDATOR_ADDRESS' >> ~/.profile

    Umee wallet address:

    umeed keys show UMEE_WALLET_NAME -a
    echo 'export PEGGO_UMEE_KEY=UMEE_WALLET_ADDRESS' >> ~/.profile

    Ethereum wallet address:

    peggo keys eth show ETH_WALLET_NAME
    echo 'export PEGGO_ETH_KEY=ETH_WALLET_ADDRESS' >> ~/.profile
    source ~/.profile
  3. Register the validator's Ethereum key. This key will be used to sign claims going from Ethereum to Umee and to sign any transactions sent to Ethereum (batches or validator set updates).

    Note: do not include the enclosing {} when filling out those variables

    $ umeed tx gravity set-orchestrator-address \
      {VAL_ADDRESS} \
      {PEGGO_ETH_KEY} \
      --eth-priv-key="..." \
      --chain-id="..." \
      --fees="..." \
      --keyring-backend=... \
      --keyring-dir=... \
  4. Run the Orchestrator

    $ /usr/local/bin/peggo orchestrator {GRAVITY_ADDRESS} \
      --eth-rpc=$ETH_RPC \
      --relay-batches=true \
      --valset-relay-mode=minimum \
      --cosmos-chain-id=... \
      --cosmos-grpc="tcp://..." \
      --tendermint-rpc="http://..." \
      --cosmos-keyring=... \
      --cosmos-keyring-dir=... \
  5. Optionally create a service file to automatically start the orchestrator

    sudo tee /etc/systemd/system/peggo.service > /dev/null <<EOF
    Description=Gravity Bridge Orchestrator

Go more in-depth with Peggo hereopen in new window

  1. Check the sync status. If catching_up is equal to true, wait until it is false. This process may take a minute.

    umeed status 2>&1 | jq -r '.SyncInfo.catching_up'
  2. Check to see if you have received tokens from the faucet or that you have tokens in your new Umee wallet.

    umeed q bank balances $(umeed keys show UMEE_WALLET_NAME -a)
  3. If the node was synced and you have tokens you can now create a validator using the following commands

    umeed tx staking create-validator \
    --from UMEE_WALLET_NAME \
    --amount 990000000uumee \
    --pubkey $(umeed tendermint show-validator) \
    --chain-id umee-1 \
    --moniker=YOUR-MONIKER \
    --commission-max-change-rate=0.10 \
    --commission-max-rate=1.0 \
    --commission-rate=0.08 \
    --min-self-delegation="1" \
    #--amount can be different just keep on the wallet 10000000uumee
  4. Link all keys on the bridge

    umeed tx gravity set-delegate-keys $VAL_ADDRESS $PEGGO_UMEE_KEY $PEGGO_ETH_KEY $PEGGO_ETH_SIG \
      --chain-id="umee-1" --from=UMEE_WALLET_NAME --fees=200uumee --gas auto

    Carefully check if that transaction failed. It requires a lot of gas that can be a source of the issue. Also, if you got a "signing validation error" then repeat last 3 commands.

  5. After a successful transaction from step 13 — run the orchestrator.

    sudo systemctl daemon-reload
    sudo systemctl enable peggo
    sudo systemctl start peggo

    To check logs and confirm that everything is in order use the following commands

    journalctl -u umeed -f
    journalctl -u peggo -f
    journalctl -u geth -f

Price Feeder

The x/oracle moduleopen in new window requires that all validators vote on the price of assets which governance has decided to add. In order to vote on these prices, the umee team has built the price feederopen in new window.

Please click hereopen in new window to see what version of the price feeder is compatible with your version of the umeed binary. It is not necessary for umeed v1.0.x.

If the calypso (V3) upgrade has happened successfully, you absolutely must vote on prices to avoid being jailed and slashed.

  1. First, install the most recent price-feeder binary: Releasesopen in new window
  • Replace the tar with the correct architecture of the most recent price feeder version
  • make the binary executable: chmod +x price-feeder-v*/price-feeder*
  • move the binary to /usr/local/bin
  1. Download the example config file, also on Githubopen in new window

    cd /usr/local/bin/
  2. Replace the example values in your config Set up your keyring using the description hereopen in new window.

    Update the [account] information with the correct chain-id (umee-1 for mainnet), address, and validator address from your keyring.

    address = "umee15nejfgcaanqpw25ru4arvfd0fwy6j8clccvwx4"
    chain_id = "umee-1"
    validator = "umeevaloper12tysz6mzrawenca2t3t7ltym4hfjj8a5upsn2k"
  3. In order to get your address & validator address, given a key with the name alice, you can run:

    umeed keys show alice -a --bech=acc
    umeed keys show alice -a --bech=val
  4. Create a systemdopen in new window service file

    sudo tee /etc/systemd/system/price-feeder.service > /dev/null <<EOF
    Description=Umee Price Feeder[Service]
    ExecStart=bash -c 'echo "\n" | price-feeder .price-feeder/config.toml --log-level debug'

    Note: The price feeder hits a lot of endpoints to get prices for assets. Sometimes the websocket connections disconnect and cannot reconnect. If this is happening, set up the service file to restart the process after a few hours:

    RuntimeMaxSec=14400s # 4h
  5. Start your service

    sudo systemctl daemon-reload
    sudo systemctl enable price-feeder
    sudo systemctl start price-feeder
  6. Please check to make sure your price feeder is running successfully

    sudo journalctl -u price-feeder.service -f

If it's not, please check your config. Common problems are:

  • Wrong address
  • Wrong Chain ID
  • Wrong keyring info
  • Invalid providers / token pairs - check coingeckoopen in new window to see the available providers for a given coin
  • Not voting on all required tokens
  1. When ready to delegate feed consent, the price-feeder_address argument is the same as the address = from your price-feeder.toml, eg.

    umeed tx oracle delegate-feed-consent <validator_adress> <price-feeder_address> --chain-id umee-1 --fees 2000uumee

Calypso - v3 Upgrade Instructions


Calypso - v3 is Umee Network's latest blockchain technology release. In addition to Peggo, v3 validators must also run our Price Feeder process or will be jailed and slashed! Price Feeder fetches and aggregates exchange rate price data from various providers, then supplies them to the main oracle process.

Release Notes

Price Feeder official release, v1.0.0open in new window


If cosmovisor is already installed to automatically swap binaries, skip to installing Price Feeder below.

If this upgrade is to an existing validator, first choose the correct Umee release for your architecture hereopen in new window, manually swap the binaries, and install Price Feeder. If you would like to setup a new mainnet validator, follow those instructions first, before proceeding to install Price Feeder.

Validators must set a mempool version before the update version = "v1"open in new window