Running the Node

Instructions to start the node and productionize it are provided below.

After completing the installation steps , it is time to run the node. The first step is to obtain the genesis file. It can be downloaded from Exocore’s testnets repository.

wget -O $HOMEDIR/config/genesis.json https://raw.githubusercontent.com/ExocoreNetwork/testnets/main/genesis/$CHAIN_ID.json

It is also recommended to verify that the genesis file generated from the bootstrap contract matches the one above; however, that is out of scope for this document.

Starting the Node

Start your node and test it out. Validators must also set up and run the oracle price feeder tool as described on the previous page.

# As a validator using the embedded oracle price feeder
exocored --home $HOMEDIR start --oracle
# Other cases
exocored --home $HOMEDIR start

If you get any errors while starting the node, refer to the Common Issues & Solutions section.

Checking Node Status

You can check the status of your node at anytime. However, the output you should expect will change depending on whether your node is started before the network launch or after it.

Before the Network Launches

Exocore's bootstrap contract provides an offset duration (of 24 hours) before the network’s spawn time to provide enough time for the initial validator set to come online. If you’re one of them and you’re on time, you should see something like this in the logs.

4:29AM INF Genesis time is in the future. Sleeping until then... genTime=2024-08-31T22:58:52Z module=server server=node

You should also be able to see if you’re in the initial validator set.

4:29AM INF This node is a validator addr=38A21AA8D3386568C4FC0B041F16B77A9D7F06AB module=consensus pubKey=PubKeyEd25519{F0F6919E522C5B97DB2C8255BFF743F9DFDDD7AD9FC37CB0C1670B480D0F9914} server=node

If you have both of those lines, it means that everything is working and you simply need to launch Exocore as a systemd service.

After the Network has Launched

It may take some time for the node to establish connection with the seeds and obtain peers; however, once that is done, you will see multiple lines containing executed block

4:02AM INF executed block height=6447467 module=state num_invalid_txs=0 num_valid_txs=0 server=node

You can query the block height and see it increasing.

exocored query block | jq .block.header.height

To check if the node is fully synced, use the following. If true is reported, it means that the node is behind the network

exocored status | jq .SyncInfo.catching_up

Next, terminate the process (Ctrl + C) before productionizing it.

Systemd service

First, create a user for added security and give it ownership of the home directory. This walk-through uses exocoreuser to demonstrate.

adduser --shell /usr/sbin/nologin exocoreuser
chown -R exocoreuser:exocoreuser $HOMEDIR

Then, create the service file in /etc/systemd/system/exocore.service.

/etc/systemd/system/exocore.service
[Unit]
Description=Exocore node
After=network.target

[Service]
Type=simple
# This is set to HOME=/root on most systems which causes Cosmos SDK to complain
Environment="HOME=/home/exocoreuser"
User=exocoreuser
Group=exocoreuser
# If you are a validator using the embedded price feeder, include `--oracle`.
# Otherwise, exclude it.
ExecStart=/usr/bin/exocored start --oracle --home <HOMEDIR> # replace with actual value

[Install]
WantedBy=default.target

Finally, run the service

systemctl daemon-reload
systemctl enable --now exocore

Then again check that the block height is increasing.

exocored query block | jq .block.header.height

Last updated