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: Umeed, Peggo and Price-Feeder

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.


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
tar xf geth-linux-amd64-1.10.8-26675454.tar.gz
chmod +x geth-linux-amd64-1.10.8-26675454/geth
sudo mv geth-linux-amd64-1.10.8-26675454/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


5. Install Peggo gravity bridge orchestrator release for your architectureopen in new window, the client for cross-chain interaction, eg. on Linux/x86:

sudo mv peggo /usr/local/bin/

6. 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

7. 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 \
  --eth-priv-key="..." \
  --chain-id="..." \
  --fees="..." \
  --keyring-backend=... \
  --keyring-dir=... \

8. 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=... \

9. 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

10. 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'

11. 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)

12. If the node was synced and you have tokens you can now create a validator using the following commands

umeed tx staking create-validator \
--amount 990000000uumee \
--pubkey $(umeed tendermint show-validator) \
--chain-id umee-betanet-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

13. 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-betanet-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"

Repeat last 3 commands from step 12.

14. 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

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

Full Umee release notes are hereopen in new window

Umeed official release, v3.0.1open in new window

Peggo official release, v1.1.0open in new window

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

Make sure to configure app.toml to include set minimum-gas-prices = "0uumee" at thet top level

peggo version
> version: v1.1.0
> commit: 36d872d46a9c43c88f4ee00d37703954e72108c1
> sdk: v0.46.0-umee.0.20220812010629-4d5bb2e3f73c
> go: go1.18.6 linux/amd64

umeed version
> v3.0.1
> (also could be) HEAD-ae43ccbd25c382cdfc5bcde26f21bc2002be5bf3 if built from `Makefile`

price-feeder version
> version: v1.0.0
> commit: ae66523e0521fe2e2f37175973d09033097a5a91
> sdk: v0.46.1-umee
> go: go1.19.1 linux/amd64

Release Compatibility Matrix

Please click hereopen in new window to see what versions are compatible.


Ensure that your version of Peggo is compatible above. If not, the latest version 1.0.1 is available as an official releaseopen in new window or from sourceopen 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

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

tar xf price-feeder-v1.0.0-linux-amd64.tar.gz
chmod +x price-feeder-v1.0.0-linux-amd64/price-feeder
sudo mv price-feeder-v1.0.0-linux-amd64/price-feeder /usr/local/bin/
  1. Download the example config file, also on Githubopen in new window
cd /usr/local/bin/
  1. 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"

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
  1. 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
  1. Start your service
sudo systemctl daemon-reload
sudo systemctl enable price-feeder
sudo systemctl start price-feeder

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