Anatha Validator Guide

Infrastructure

Recommended configuration:

  • Number of CPUs: 2

  • Memory: 8GB

  • Disk: 250GB SSD

  • OS: Ubuntu 18.04 LTS

  • Allow all incoming connections from TCP port 26656 and 26657

  • Static IP address

The recommended configuration from AWS is the equivalent of a t3.large machine with 250GB EBS attached storage.

Prerequisites

Update the system and install dependencies:

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential jq -y

Install Golang:

# Install latest go version https://golang.org/doc/install
wget -q -O - https://raw.githubusercontent.com/canha/golang-tools-install-script/master/goinstall.sh | bash -s -- --version 1.15.3
source ~/.profile

To verify that Golang is installed:

go version
# Should return go version go1.15.3 linux/amd64

Running a Validator Node

Install the executables

git clone https://github.com/anathatech/project-anatha.git
cd project-anatha
git checkout v0.1.1
# install executables
make install

Initialize the validator

# Replace <your-moniker> with the publicly viewable name for your validator.
anathad init --chain-id mainnet <your-moniker>

Set up your keys

# Create a wallet for your node. <your-wallet-name> is just a human-readable name you can use to remember your wallet. It can be the same or different than your moniker.
anathacli keys add <your_wallet_name> --keyring-backend test
# If you have a wallet with a balance assigned to it, you need to import it by. You will be prompted to enter your bip39 mnemonic
anathacli keys add <your_wallet_name> --recover --keyring-backend test

Create the upgrade manager directory structure

mkdir -p ~/.anathad/upgrade_manager/genesis/bin && mkdir -p ~/.anathad/upgrade_manager/upgrades

Copy the genesis binary to the upgrade manager

cp $(which anathad) ~/.anathad/upgrade_manager/genesis/bin

Verify that the binary has been copied

ls -las ~/.anathad/upgrade_manager/genesis/bin
# Should return the anathad binary in the correct location

Fetch the genesis file

# Copy the genesis file to the anathad directory
curl https://guardians.mainnet.anatha.net:26657/genesis | jq ".result.genesis" > ~/.anathad/config/genesis.json

Create the service file with the following content

sudo nano /etc/systemd/system/anathad.service
[Unit]
Description=anathad
Requires=network-online.target
After=network-online.target
[Service]
Restart=on-failure
RestartSec=3
User=ubuntu
Group=ubuntu
Environment=DAEMON_NAME=anathad
Environment=DAEMON_HOME=/home/ubuntu/.anathad
Environment=DAEMON_ALLOW_DOWNLOAD_BINARIES=on
Environment=DAEMON_RESTART_AFTER_UPGRADE=on
PermissionsStartOnly=true
ExecStart=/home/ubuntu/go/bin/anathad-manager start --pruning="nothing"
StandardOutput=file:/var/log/anathad/anathad.log
StandardError=file:/var/log/anathad/anathad_error.log
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGTERM
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target

If you are not logged in as the ubuntu user and/or if your home directory is not /home/ubuntu, please change the User, Group, Environment, and ExecStart variables in the service config above appropriately.

Start the Daemon service

# Create log files for anathad
make log-files
# Enable the anathad service
sudo systemctl enable anathad
# Add seed nodes to ~/.anathad/config/config.toml, replace line 172 with
seeds = "[email protected]net:26656,[email protected]net:26656,[email protected]net:26656"
# Start the node
sudo systemctl start anathad

To check on the status of the node use:

anathacli status
# or
sudo journalctl -u anathad -f

To view the logs use:

# Standard output of anathad
tail -f /var/log/anathad/anathad.log
# Standard error of anathad
tail -f /var/log/anathad/anathad_error.log

Applying for being a validator

# Create the validator
# Be sure to replace <your-wallet-name>, <your-moniker>
anathacli tx astaking create-validator --from <your-wallet-name> --moniker <your-moniker> --pubkey $(anathad tendermint show-validator) --chain-id mainnet --keyring-backend test

Verify the node is in the validator list

# Check all validators
anathacli q astaking validators
# Check current validator
# Be sure to replace <your-wallet-name>
anathacli q astaking validator $(anathacli keys show <your-wallet-name> --keyring-backend test --bech val -a) --chain-id mainnet

Recovering From a Slashing Infraction

First, you need to verify the state of your validator by running:

# Check current validator
# Be sure to replace <your-wallet-name>
anathacli q astaking validator $(anathacli keys show <your-wallet-name> --keyring-backend test --bech val -a) --chain-id mainnet

The response would be similar to the following:

operatoraddress: anathavaloper1q9se95mxzmckc3drtrc4facayn8l408w0avqrk
conspubkey: anathavalconspub1zcjduepqjl5uxahun435923psjzuf8epeuung5gyjs5gtdxkg902qqzlzrvs2xx797
jailed: true
status: 1
tokens: "9900000000000"
delegatorshares: "10000000000000.000000000000000000"
description:
moniker: node1
identity: ""
website: ""
security_contact: ""
details: ""
unbondingheight: 194
unbondingcompletiontime: 2020-05-29T08:28:58.089254769Z
minselfdelegation: "10000000000000"
ticket: 16

As you can see the jailed status is set to true and the delegation tokens are below the needed amount. You need to perform top up your token balance and send an unjail transaction.

To check when is the earliest time the validator can be unjailed run:

anathacli q slashing signing-info $(anathad tendermint show-validator) --chain-id mainnet

The response will return the jailed_until parameter in the UTC time zone:

address: anathavalcons1jw0yhuzpqrqxlnxu44lu3vsu0246md6eeak0eg
start_height: 0
index_offset: 2
jailed_until: 2020-05-29T08:28:58.089254769Z
tombstoned: false
missed_blocks_counter: 2

To top up your validator balance, run:

# Be sure to replace <your-wallet-name>
anathacli tx astaking delegate $(anathacli keys show <your-wallet-name> --keyring-backend test --bech val -a) --from <your-wallet-name> --chain-id mainnet --keyring-backend test

To unjail your validator run:

# Be sure to replace <your-wallet-name>
anathacli tx slashing unjail --from <your-wallet-name> --keyring-backend test --chain-id mainnet

Stopping a Validator Node

To gracefully shutdown a validator node which is in the active validator set, the operator must first unbond their tokens before being able to shut down the node and withdraw their stake.

# Be sure to replace <your-wallet-name>
anathacli tx astaking unbond --from <your-wallet-name> --chain-id mainnet --keyring-backend test

After running the unbonding transaction, you need to check the length of the unbonding time by running:

anathacli q astaking params

After that period of time, your stake will be returned to your account. During the unbounding period, you can be slashed for any infraction that happened before the unbonding transaction.

As soon as you run the unbond transaction, you are free to shut down your validator node.

sudo systemctl stop anathad