Chain ID Latest Version Tag Custom Port
umee-1 v6.4.1 162

Setup validator name

Replace YOUR_MONIKER_GOES_HERE with your validator name

MONIKER="YOUR_MONIKER_GOES_HERE"

Install dependencies

Update system and install build tools

sudo apt -q update
sudo apt -qy install curl git jq lz4 build-essential
sudo apt -qy upgrade

Install Go

sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.21.11.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/golang.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | tee -a $HOME/.profile)

Download and build binaries

# Clone project repository
cd $HOME
rm -rf umee
git clone https://github.com/umee-network/umee.git
cd umee
git checkout v6.4.1

# Build binaries
make build

# Prepare binaries for Cosmovisor
mkdir -p $HOME/.umee/cosmovisor/genesis/bin
mv build/umeed $HOME/.umee/cosmovisor/genesis/bin/
rm -rf build

# Create application symlinks
sudo ln -s $HOME/.umee/cosmovisor/genesis $HOME/.umee/cosmovisor/current -f
sudo ln -s $HOME/.umee/cosmovisor/current/bin/umeed /usr/local/bin/umeed -f

Install Cosmovisor and create a service

# Download and install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0

# Create service
sudo tee /etc/systemd/system/umee.service > /dev/null << EOF
[Unit]
Description=umee node service
After=network-online.target

[Service]
User=$USER
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.umee"
Environment="DAEMON_NAME=umeed"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$HOME/.umee/cosmovisor/current/bin"

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable umee.service

Initialize the node

# Set node configuration
umeed config chain-id umee-1
umeed config keyring-backend file
umeed config node tcp://localhost:16257

# Initialize the node
umeed init $MONIKER --chain-id umee-1

# Download genesis and addrbook
curl -Ls https://snapshots.kjnodes.com/umee/genesis.json > $HOME/.umee/config/genesis.json
curl -Ls https://snapshots.kjnodes.com/umee/addrbook.json > $HOME/.umee/config/addrbook.json

# Add seeds
sed -i -e "s|^seeds *=.*|seeds = \"400f3d9e30b69e78a7fb891f60d76fa3c73f0ecc@umee.rpc.kjnodes.com:16259\"|" $HOME/.umee/config/config.toml

# Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.1uumee\"|" $HOME/.umee/config/app.toml

# Set pruning
sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
  $HOME/.umee/config/app.toml

# Set custom ports
sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:16258\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:16257\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:16260\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:16256\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":16266\"%" $HOME/.umee/config/config.toml
sed -i -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:16217\"%; s%^address = \":8080\"%address = \":16280\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:16290\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:16291\"%; s%:8545%:16245%; s%:8546%:16246%; s%:6065%:16265%" $HOME/.umee/config/app.toml

Download latest chain snapshot

curl -L https://snapshots.kjnodes.com/umee/snapshot_latest.tar.lz4 | tar -Ilz4 -xf - -C $HOME/.umee
[[ -f $HOME/.umee/data/upgrade-info.json ]] && cp $HOME/.umee/data/upgrade-info.json $HOME/.umee/cosmovisor/genesis/upgrade-info.json

Start service and check the logs

sudo systemctl start umee.service && sudo journalctl -u umee.service -f --no-hostname -o cat

Set up validator

Set password that will be used for keyring encryption

 KEYRING_PASSWORD="KEY_PASSWORD_GOES_HERE"

Create new keys and save 24 word mnemonic phrases

umeed keys add wallet --keyring-backend os
umeed keys add pricefeeder --keyring-backend os

Set variables

VALOPER_ADDRESS=$(echo -e $KEYRING_PASSWORD | umeed keys show wallet --bech val -a --keyring-backend os)
WALLET_ADDRESS=$(echo -e $KEYRING_PASSWORD | umeed keys show wallet -a --keyring-backend os)
PRICEFEEDER_WALLET_ADDRESS=$(echo -e $KEYRING_PASSWORD | umeed keys show pricefeeder --keyring-backend os -a)

# Check variables
echo VALOPER_ADDRESS=$VALOPER_ADDRESS,WALLET_ADDRESS=$WALLET_ADDRESS,PRICEFEEDER_WALLET_ADDRESS=$PRICEFEEDER_WALLET_ADDRESS | tr "," "\n" 

Top up all wallets with tokens

Mainnet

You can buy tokens at app.osmosis.zone

Testnet

You can get free testnet tokens at faucet.umee.cc

Please make sure you have adjusted moniker, identity, details and website to match your values.

Create validator

umeed tx staking create-validator \
--amount 1000000uumee \
--pubkey $(umeed tendermint show-validator) \
--moniker "YOUR_MONIKER_NAME" \
--identity "YOUR_KEYBASE_ID" \
--details "YOUR_DETAILS" \
--website "YOUR_WEBSITE_URL" \
--chain-id umee-1 \
--commission-rate 0.05 \
--commission-max-rate 0.20 \
--commission-max-change-rate 0.05 \
--min-self-delegation 1 \
--from wallet \
--gas-adjustment 1.4 \
--gas auto \
--gas-prices 0.1uumee \
--keyring-backend os \
-y

Set up Price Feeder

To run pricefeeder you validator should be in active set. Otherwise price feeder will not vote on periods.

Install the pricefeeder binary and create directory for pricefeeder configuration

cd $HOME && rm umee-price-feeder -rf
git clone https://github.com/ojo-network/price-feeder umee-price-feeder
cd umee-price-feeder
git checkout umee/v2.4.3
make build
sudo mv ./build/price-feeder /usr/local/bin/umee-price-feeder
rm $HOME/.umee-price-feeder -rf
mkdir $HOME/.umee-price-feeder
(curl -s https://raw.githubusercontent.com/ojo-network/price-feeder/umee/price-feeder.example.toml; echo;\
curl -s https://raw.githubusercontent.com/ojo-network/price-feeder/umee/umee-provider-config/currency-pairs.toml; echo;\
curl -s https://raw.githubusercontent.com/ojo-network/price-feeder/umee/umee-provider-config/deviation-thresholds.toml; echo;\
curl -s https://raw.githubusercontent.com/ojo-network/price-feeder/umee/umee-provider-config/endpoints.toml; echo;\
) > $HOME/.umee-price-feeder/config.toml

Delegate pricefeeder responsibility

As a validator, if you’d like another account to post prices on your behalf (i.e. you don’t want your validator mnemonic sending txs), you can delegate pricefeeder responsibilities to another address.

umeed tx oracle delegate-feed-consent $WALLET_ADDRESS $PRICEFEEDER_WALLET_ADDRESS --from wallet --chain-id umee-1  --gas-adjustment 1.4 --gas auto --gas-prices 0.1uumee --keyring-backend os -y

Check linked pricefeeder address

umeed q oracle feeder-delegation $VALOPER_ADDRESS

Set pricefeeder configuration values

sed -i "s/^listen_addr *=.*/listen_addr = \"0.0.0.0:7173\"/;\
s/^address *=.*/address = \"$PRICEFEEDER_WALLET_ADDRESS\"/;\
s/^chain_id *=.*/chain_id = \"umee-1\"/;\
s/^validator *=.*/validator = \"$VALOPER_ADDRESS\"/;\
s/^backend *=.*/backend = \"os\"/;\
s|^dir *=.*|dir = \"$HOME/.umee\"|;\
s|^grpc_endpoint *=.*|grpc_endpoint = \"localhost:16290\"|;\
s|^tmrpc_endpoint *=.*|tmrpc_endpoint = \"http://localhost:16257\"|;\
s|^global-labels *=.*|global-labels = [[\"chain_id\", \"umee-1\"]]|;\
s|^service-name *=.*|service-name = \"umee-price-feeder\"|;" $HOME/.umee-price-feeder/config.toml

Setup the systemd service

sudo tee /etc/systemd/system/umee-price-feeder.service > /dev/null <<EOF
[Unit]
Description=Umee Price Feeder
After=network-online.target

[Service]
User=$USER
ExecStart=$(which umee-price-feeder) $HOME/.umee-price-feeder/config.toml --skip-provider-check
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="PRICE_FEEDER_PASS=$KEYRING_PASSWORD"

[Install]
WantedBy=multi-user.target
EOF

Register and start the systemd service

sudo systemctl daemon-reload
sudo systemctl enable umee-price-feeder.service
sudo systemctl restart umee-price-feeder.service

View pricefeeder logs

journalctl -fu umee-price-feeder.service -o cat

Successfull Log examples:

7:44AM INF broadcasting vote exchange_rates=AKT:0.632477588300087586,ATOM:8.591490618553537965,BNB:243.252713494212930704,CBETH:1792.599999999970127864,CMST:0.999185734558637436,CRO:0.053629553506297260,DAI:0.999569070166267878,DOT:4.544437895344887995,ETH:1724.773151486244206211,IST:0.999384188114831391,JUNO:0.259821458085642918,LUNA:0.578108199020789095,MARS:0.064858062976693934,MATIC:0.599571270188518918,OSMO:0.493834708042865655,UMEE:0.004402062318991282,USDC:0.999944581565716618,USDT:0.999684418289508992,WAXL:0.396607248244127972,WBTC:26414.542206458596892482,qATOM:8.883589379536654343,stATOM:9.821303693813542246,stOSMO:0.545307005347711889,stkATOM:9.212703995756135715 feeder=umee18paa370ju8c8qddqw9plvdzdtxkpvlczu95mtn module=oracle validator=umeevaloper1da5dttrjz7fqruvz9y9a40w5gjcc4rgk9lk8v4
7:44AM INF successfully broadcasted tx module=oracle_client tx_code=0 tx_hash=76386BFCED51D280F26767D9A9D000F70D055F6A66B89D55187E74B60AEBA8CC tx_height=0

Also you can check that your pricefeeder-wallet is doing transactions on chain at Chain Explorer

Price Feeder Transactions

Useful commands

Check current voting windows progress

umeed q oracle slash-window

Check missed oracle votes per slashing window

umeed q oracle miss-counter $VALOPER_ADDRESS

Special thanks to mzonder#5844