Managing The Validator
This page describes the regular tasks that you may need to do, as a node runner.
Handling Upgrades
Depending on the type of upgrade being undertaken by the wider network, one of the options below should be used to perform the upgrade. Automatic upgrades via the x/upgrade
module and/or Cosmovisor are not yet supported.
The type of upgrade required by the network impacts which options you may select.
Option 1: Upgrade with chain-id change. Without coordination.
This type of upgrade is the most commonly used on the Exocore testnet. For example, the testnet was upgraded from exocoretestnet_233-5
to exocoretestnet_233-6
with this option.
Stop the node.
Remove the existing data
rm -rf $HOMEDIR/config/genesis.json $HOMEDIR/data/*.db $HOMEDIR/data/snapshots $HOMEDIR/data/cs.wal
Overwrite the validator's signature history, if any
jq -n '{"height": "0", "round": 0, "step": 0}' > $HOMEDIR/data/priv_validator_state.json
Download the newer binary, overwriting the previous one
/usr/bin/exocored
. Verify that the version of this binary is correct by runningexocored version
Store the new
CHAIN_ID
in the environment withCHAIN_ID=<new-chain-id>
Set the new
CHAIN_ID
in the configuration withexocored --home $HOMEDIR config chain-id $CHAIN_ID
and make other configuration changes, if anyDownload the genesis file
wget -O $HOMEDIR/config/genesis.json https://raw.githubusercontent.com/ExocoreNetwork/testnets/main/genesis/$CHAIN_ID.json
Start the node
Option 2: Upgrade with chain-id change. With coordination.
Initialize a new node with the increased chain-id at a new location (for example
exocoretestnet_233-3
becomesexocoretestnet_233-4
) and configure it. Make sure to re-use the same validator private key ($HOMEDIR/config/priv_validator_key.json
) or provide the mnemonic via--recover
during the initialization.Modify the
systemd
service to use the provided--halt-height
or--halt-time
so that all v3 nodes stop at the same time.Once the network is halted, obtain the new genesis file and add it to the new
$HOMEDIR
Additionally, upgrade the binary by overwriting the existing one.Edit the
systemd
service to point to the new$HOMEDIR
and remove the--halt
parameters.Restart the service.
Option 3: No chain-id change. With coordination.
Edit the
systemd
service with the specified--halt-height
or--halt-time
.Once the network is halted, remove the
--halt
parameters from thesystemd
file and upgrade the binary.Restart the service.
Upgrading from Testnet v6 to v7
This upgrade was performed using Option 2. The genesis file retained all of the information in the previous version. Validators can use the following steps to upgrade.
Rename the older binary with
mv $(which exocored) $(dirname $(which exocored))/exocored_v1.0.6
.Download the newer binary 1.0.7 as instructed previously.
Create a new home directory
$NEW_HOMEDIR
for testnet v7 and copy the configuration + private keys from the old directory. You will needrsync
installed.
After the above step, the names are swapped to say OLD_HOMEDIR
and HOMEDIR
for the old and the new directories, respectively.
Update the price feeder configuration as documented on its page.
Create a new service file with
$OLD_HOMEDIR
, but don't start it yet.
Create a systemd timer to start the new binary on a schedule.
Modify the
exocore.service
to point to the new home directory; replacing the path with the actual value.
Set up the services
Verify that the timer is running via
systemctl list-timers --all | grep -i exocore
. Your output will look like the line below.
The oracle price feeder configuration files have had some edits as part of this upgrade, which are documented on its page.
Once your testnet v7 validator is up and running, the older directory $OLD_HOMEDIR
and the old service file /etc/systemd/system/old_exocore.service
may be deleted.
If you're running the price feeder as an independent binary, please create a similar service for it to be triggered at 05:10 UTC. Note that the name of the timer should match the name of the service exactly for this to work. Additionally, adding a
Restart=yes
to the service file will be helpful.
Enable the timer.
If you edited the price feeder service file within this step, restart that as well.
Monitoring Uptime
Enable Prometheus metrics in the configuration by editing the configuration files.
Set up a Prometheus instance to scrape the metrics exposed by your node.
Visualize these with Grafana by using its dashboards. Metrics include:
cometbft_consensus_latest_block_height
: The latest block heightcometbft_consensus_block_syncing
: Whether the node is synced or still catching up.cometbft_consensus_block_interval_seconds
: Time between blocks, useful for monitoring block production delays.
In addition, system level information can be loaded with prometheus-node-exporter
into Grafana to complement the metrics exposed by exocored
.
Lastly, third-party monitoring services such as ping.pub may be used when they add support for Exocore.
Useful Commands
Stop the node
systemctl stop exocore
Start the node
systemctl start exocore
Restart the node
systemctl restart exocore
Find my exo1...
(account) address
exocored --home $HOMEDIR keys show -a $ACCOUNT_KEY_NAME
Get current height
exocored query block | jq .block.header.height
Check sync status
exocored status | jq
Get current validator set
exocored query tendermint-validator-set
Get own validator address
exocored --home $HOMEDIR tendermint show-address
Convert address formats
exocored debug addr <VALUE>
Get bytes32 val pub key
exocored --home $HOMEDIR --output json keys consensus-pubkey-to-bytes | jq -r .bytes32
Get bytes32 val pub key (another method)
exocored debug pubkey $(exocored --home $HOMEDIR tendermint show-validator)
Get JSON val pub key
exocored --home $HOMEDIR tendermint show-validator
Check node logs
journalctl -u exocore -f
Get the number of peers
curl -s http://localhost:26657/net_info
Check transaction status
exocored query tx <hash>
Find my consensus address
exocored --home $HOMEDIR tendermint show-address
Find my P2P ID
exocored --home $HOMEDIR tendermint show-node-id
(assuming the node port hasn't changed; if it has, it may be supplied with --node
)
Last updated