# Testnet Full Node & Validator

# SECTION 0: Requirements

  • Ubuntu 20.04 LTS

Minimum

  • 2 CPUs
  • 4GB RAM
  • 200GB SSD

Recommended

  • 4 CPUs
  • 8GB RAM
  • 1TB SSD

# SECTION 1: System preparation

NOTE:

All tasks in SECTION 1 have to be performed as root

# Add dedicated user

sudo adduser testvidulum

# Go deployment

# Download and extract repository

GOVER=$(curl https://go.dev/VERSION?m=text)
wget https://golang.org/dl/${GOVER}.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf ${GOVER}.linux-amd64.tar.gz

NOTE: That will install latest version of Go

# Firewall Configuration

ufw limit ssh/tcp comment 'Rate limit for openssh server'
ufw default deny incoming
ufw default allow outgoing
ufw allow 26656/tcp comment 'Cosmos SDK/Tendermint P2P (Vidulum Testnet Validator)'
ufw enable

# systemd Service Configuration

Create service file /lib/systemd/system/testvidulum.service for Vidulum Testnet Validator with following content:

[Unit]
Description=Vidulum Testnet Validator
After=network.target

[Service]
Group=testvidulum
User=testvidulum
WorkingDirectory=/home/testvidulum
ExecStart=/home/testvidulum/.local/bin/testvidulumd start
Restart=on-failure
RestartSec=3
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target

Once file is created you can reload systemd configuration and enable service.

systemctl daemon-reload && systemctl enable testvidulum.service

# SECTION 2: Build and Initiate Vidulum Testnet Node

NOTE:

All tasks in SECTION 2 have to be performed as testvidulum user created in SECTION 1

# Add Go environmental variables

Set of variables, which should be set for user(s) with need to build Go apps.

Add Golang specific variables to ${HOME}/.profile

# add environmental variables for Go
if [ -f "/usr/local/go/bin/go" ] ; then
    export GOROOT=/usr/local/go
    export GOPATH=${HOME}/go
    export GOBIN=$GOPATH/bin
    export PATH=${PATH}:${GOROOT}/bin:${GOBIN}
fi

Once modified and saved, reload ${HOME}/.profile to set variables in current user session

. ~/.profile

# Build Vidulum binaries

Before we build binaries for Vidulum testnet node/validator we create folder where binaries will be stored. Ubuntu adds this folder to search path, when it exists, so we can easily run binaries in future when needed.

mkdir -p ${HOME}/.local/bin
. ~/.profile

Now clone GitHub repository with Vidulum source code, build binaries and place in correct folder.

git clone https://github.com/vidulum/testvidulum && cd testvidulum && make install
mv ${HOME}/go/bin/testvidulumd ${HOME}/.local/bin

# Vidulum Node Init

testvidulumd init NODE_NAME --chain-id testvidulum-1

NOTE:

Replace NODE_NAME with name you want to assign to your validator.

In ${HOME}/.testvidulum/config/config.toml fine line which starts with persistent_peers = and replace with following content

persistent_peers =[email protected]:26656,[email protected]:26656”

Now it is time to download genesis.json file, which will allow node synchronization

wget https://github.com/vidulum/testvidulum/releases/download/v1.0/genesis.json -O ${HOME}/.testvidulum/config/genesis.json

# Start node

Once node is configured you can start it and synchronize chain database.

sudo systemctl start testvidulum.service

To keep watching logs generated by Vidulum node use command below.

journalctl -u testvidulum -f

To check, if node is synchronized.

curl http://localhost:26657/status

You will see JSON output where you need to locate catching_up field. When it will have value true means node is still synchronizing. When value is false means node is fully synchronized. Then you can move on to creating validator.

........
    },
    "sync_info": {
      "latest_block_hash": "39B4F3361E27EEC32605DA2F554FE2C64EAB41A78B593531CC5E11EEDE9AD67C",
      "latest_app_hash": "05E9931EAF0284B4024D5393B8878146C1CFE0329183EE6084BD4EF48507FA29",
      "latest_block_height": "544241",
      "latest_block_time": "2021-11-29T20:26:22.352845323Z",
      "earliest_block_hash": "5614A5F7D398CCAC49EFB255D1F92421891B725808E31421317BDD519D35F7CA",
      "earliest_app_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
      "earliest_block_height": "1",
      "earliest_block_time": "2021-10-23T00:00:00Z",
      "catching_up": false
    },
........

# SECTION 3: Promote Full Node to Validator Role

NOTE:

All tasks in SECTION 3 have to be performed as testvidulum user created in SECTION 1. Steps in this section will allow to promote full node to validator role. If you need full node only, skip this section.

In order to create validator you need to have Vidulum account and some funds, whcih can be delegated to validator.

# Create Wallet

In order to create Vidulum wallet we use binaries we compiled earlier.

testvidulumd keys add WALLET_NAME --keyring-backend os

You will be asked to provide password, which will protect keyring.

Output of this command will be similar to presented below

- name: WALLET_NAME
  type: local
  address: testvdl1u9a5u30svfrhajq7jgquc02956lxgezwx2lnkx
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AwCmb1H3nLx9uPqrcAqKQPRYe/chlkK8BWCJh3P3Kkry"}'
  mnemonic: ""


**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.

some words forming mnemonic seed will be placed here you have to write them down and keep them safe

NOTE:

When you generate wallet in last line you will have line full of random words. This is mnemonic seed (allows to restore wallet). Write that down and keep safe. Using mnemonic you will be able to restore your account on another machine and access your funds. Lost of mnemonic might drive to inability to access your funds stored on Vidulum testnet chain.

In order to get some initial funds for your test node/validator you can visit faucet.

Once you request funds from faucet check balance on your account:

testvidulumd query bank balances testvdl1u9a5u30svfrhajq7jgquc02956lxgezwx2lnkx

Output will be similar to this:

balances:
- amount: "20000000"
  denom: utvdl
pagination:
  next_key: null
  total: "0"

NOTE:

Denomiation presented by command is in uvdl. For your information 1vdl = 1000000uvdl.

# Create Validator

Now we can turn full node into validator using account and funds created in previous steps.

testvidulumd tx staking create-validator \
    --commission-max-change-rate="0.05" \
    --commission-max-rate="0.3" \
    --commission-rate="0.1" \
    --amount="10000000uvdl" \
    --pubkey=$(testvidulumd tendermint show-validator) \
    --website="https://your.website" \
    --details="Description of your validator." \
    --security-contact="[email protected]" \
    --moniker=NODE_NAME \
    --chain-id=vidulum-1 \
    --min-self-delegation="1" \
    --gas auto \
    --gas-adjustment=1.2 \
    --fees 200000uvdl \
    --from=WALLET_NAME \
    --keyring-backend os

Once that is done you should see your node listed in Vidulum Explorer