Umee
Search…
Validator
A detailed step-by-step guide on how to run an Umee validator
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.

Keyring

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.
1
$ umeed keys add <val-oper-key-name> [flags]
Copied!
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 documentation for more information.

Ethereum Node

The Gravity Bridge requires that validators also run an 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 documentation for more information on how to connect to different Ethereum networks.
To setup a geth node, first install the binary from go-ethereum's download page. Then, create a systemd service:
/etc/systemd/system/geth.service
1
[Unit]
2
Description=Geth node
3
After=online.target
4
5
[Service]
6
Type=root
7
User=root
8
ExecStart=/usr/bin/geth --syncmode "light" --http ...
9
Restart=on-failure
10
RestartSec=3
11
LimitNOFILE=4096
12
13
[Install]
14
WantedBy=multi-user.target
Copied!
If you need to access the geth instance externally, be sure to set --http.addr=0.0.0.0.
Reload systemd and start the geth service:
1
$ sudo systemctl daemon-reload
2
$ sudo systemctl start geth
Copied!
Finally, verify the geth service is running and healthy. If so, and enable it:
1
$ sudo systemctl status geth
2
$ sudo systemctl enable geth
Copied!

Gravity Bridge

Validators are also required to run a critical component of the Gravity Bridge known as an orchestrator (gorc). The orchestrator serves multiple purposes, but it mainly acts as an off-chain relayer and oracle between the Umee network and Ethereum.
The orchestrator requires a few components in order to run successfully:
  • Umee gRPC instance
  • Ethereum RPC instance
  • Signing key on the Umee chain with funds to relay transactions to Umee
  • Signing key on the Ethereum chain with funds to relay transactions to Ethereum
The Umee network uses the PeggyJV version of the Gravity Bridge. Visit the releases page to download the corresponding version of gorc. Note, gorc is currently only built for Linux, so you may need to build gorc from source if you're using a different OS or unsupported architecture.
1
$ GORC_VERSION=<check version from releases pages>
2
$ wget https://github.com/PeggyJV/gravity-bridge/releases/download/$GORC_VERSION/gorc
3
$ chmod +x ./gorc
4
$ mv ./gorc /usr/local/bin
Copied!
Assuming you already have umeed and geth instances running, next we configure the Gravity Bridge orchestrator:
1
# Create the configuration directory for the orchestrator
2
$ mkdir $HOME/gorc && cd $HOME/gorc
3
$ vim config.toml
Copied!
$HOME/gorc/config.toml
1
keystore = "<$HOME>/gorc/keystore/"
2
3
[gravity]
4
contract = "<gravity-contract-address>"
5
fees_denom = "uumee"
6
7
[ethereum]
8
key_derivation_path = "m/44'/60'/0'/0/0"
9
rpc = "http://localhost:8545"
10
gas_price_multiplier = 1.0
11
12
[cosmos]
13
key_derivation_path = "m/44'/118'/0'/0/0"
14
grpc = "http://localhost:9090"
15
prefix = "umee"
16
# For networks with a large validator set size, you might
17
# have to adjust the following configurations:
18
#
19
# gas_limit = 500000
20
# msg_batch_size = 5
21
22
[cosmos.gas_price]
23
amount = 0.00001
24
denom = "uumee"
25
26
[metrics]
27
listen_addr = "127.0.0.1:3000"
Copied!
Replace the Umee gRPC and Ethereum RPC endpoints with the correct values if your instances are not running locally.
The Gravity Bridge contract must be deployed prior to configuring and starting the orchestrator process. Please see the Umee repository for more information.
Next, we must import the two signing keys into the gorc key store:
1
# Import the Umee signing key via the mnemonic
2
# Note, this is the mnumonic from an Umee account, e.g. umee1...
3
$ gorc --config $HOME/gorc/config.toml keys cosmos recover <orch-umee-key-name> "<mnemonic>"
4
# Import the Ethereum signing key via the mnemonic
5
$ gorc --config $HOME/gorc/config.toml keys eth recover <orch-eth-key-name> "<mnemonic>"
6
# Or, import the Ethereum signing key via the private key
7
$ gorc --config $HOME/gorc/config.toml keys eth import <orch-eth-key-name> "0x..."
Copied!
Next, create a gorc systemd service:
/etc/systemd/system/gorc.service
1
[Unit]
2
Description=Gravity Bridge Orchestrator
3
After=online.target
4
5
[Service]
6
Type=root
7
User=root
8
Environment="RUST_LOG=INFO"
9
ExecStart=/usr/local/bin/gorc --config <$HOME>/gorc/config.toml orchestrator start --cosmos-key <orch-umee-key-name> --ethereum-key <orch-eth-key-name>
10
Restart=on-failure
11
RestartSec=3
12
LimitNOFILE=4096
13
14
[Install]
15
WantedBy=multi-user.target
Copied!

Create Validator

Once you have umeed and geth running, you can finally create your validator on the Umee network via a MsgCreateValidator transaction:
1
# Validator's consensus public key
2
# e.g. {"@type":"/cosmos.crypto.ed25519.PubKey","key":"..."}
3
$ UMEE_VAL_CONS_KEY=$(umeed tendermint show-validator)
4
$ umeed tx staking create-validator \
5
--amount=<amount> \
6
--pubkey=$UMEE_VAL_CONS_KEY \
7
--moniker="<moniker>" \
8
--chain-id="<chain-id>" \
9
--commission-rate="<commission>" \
10
--commission-max-rate="<max-commission>" \
11
--commission-max-change-rate="<max-commission-rate-change>" \
12
--min-self-delegation="<min-self-delegation>" \
13
--fees=<fees> \
14
--from=<val-oper-key-name>
Copied!
Note, you must use the chain-id that corresponds to the network you're joining. The keyval-oper-key-name corresponds to the validator operator key you created earlier.
Finally, you must register your validator's "delegate keys" within the Gravity Bridge via a MsgDelegateKeys transaction. This process allows a validator to associate or "link" their orchestrator's Umee and Ethereum addresses with their validator's operator address:
1
# Validator's operator address
2
$ VAL_ADDR=$(umeed keys show <val-oper-key-name> --bech val -a)
3
# Orchestrator's Umee key
4
$ GORC_UMEE_KEY=$(umeed keys show <orch-umee-key-name> -a)
5
# Orchestrator's Ethereum key
6
$ GORC_ETH_KEY=$(gorc --config $HOME/gorc/config.toml keys eth show <orch-eth-key-name>)
7
# Generate an Ethereum signature over the delegate keys message
8
$ GORC_ETH_SIG=$(gorc --config $HOME/gorc/config.toml sign-delegate-keys -a <orch-eth-key-name> $VAL_ADDR)
9
$ umeed tx gravity set-delegate-keys $VAL_ADDR $GORC_UMEE_KEY $GORC_ETH_KEY $GORC_ETH_SIG \
10
--chain-id="<chain-id>" \
11
--from=<val-oper-key-name> \
12
--fees=<fees>
Copied!
Currently, the set-delegate-keys command does not support Ledger hardware signing.
Once you have verified that both MsgCreateValidator and MsgDelegateKeys transactions have been committed to the Umee network, you can finally start the gorc orchestrator.
Reload systemd and start the gorc service:
1
$ sudo systemctl daemon-reload
2
$ sudo systemctl start gorc
Copied!
Finally, verify the gorc service is running and healthy. If so, and enable it:
1
$ sudo systemctl status gorc
2
$ sudo systemctl enable gorc
Copied!
Last modified 1mo ago