laconicd/testnet/genesis-validators.md

311 lines
7.7 KiB
Markdown
Raw Normal View History

# Validator Guide for laconic_81337-5 Testnet
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
## Hardware Prerequisites
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
### Supported
2022-04-06 01:28:21 +00:00
- **Operating System (OS):** Ubuntu 20.04
- **CPU:** 2 core
- **RAM:** 8GB
2022-04-06 01:28:21 +00:00
- **Storage:** 25GB SSD
2022-08-03 17:51:28 +00:00
### Recommended
2022-04-06 01:28:21 +00:00
- **Operating System (OS):** Ubuntu 20.04
- **CPU:** 2 core
- **RAM:** 8GB
2022-04-06 01:28:21 +00:00
- **Storage:** 50GB SSD
2022-08-03 17:51:28 +00:00
## Network Prerequisites
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
- **TCP 26656** for Peer-to-Peer Network Communication
- **TCP 26660** for Prometheus Metrics (doesn't have to be exposed publicly)
2022-04-06 01:28:21 +00:00
# Blockchain client Setup
There are two options of running a laconicd
1. As a systemd service
2. In a docker container
2022-04-06 01:28:21 +00:00
## Systemd service
Skip this section if you use docker
### Install required software packages
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
# Update Ubuntu
sudo apt update
sudo apt upgrade -y
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Install required software packages
sudo apt install git curl build-essential make jq -y
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
---
2022-04-06 01:28:21 +00:00
### Install Go
2022-08-03 17:51:28 +00:00
```sh
# Remove any existing installation of `go`
sudo rm -rf /usr/local/go
# Install Go version 1.18.8
curl https://dl.google.com/go/go1.18.8.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
2022-08-03 17:51:28 +00:00
# Update env variables to include go
2022-04-06 01:28:21 +00:00
cat <<'EOF' >>$HOME/.profile
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
source $HOME/.profile
```
2022-08-03 17:51:28 +00:00
Check the version of go installed
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
2022-04-06 01:28:21 +00:00
go version
2022-08-03 17:51:28 +00:00
# Should return something like: go version go1.17.2 linux/amd64
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
---
### Install `laconic`
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
git clone https://github.com/cerc-io/laconicd.git
cd laconicd
2022-08-03 17:51:28 +00:00
# Checkout main branch
2022-04-06 01:28:21 +00:00
git fetch --all
git checkout v0.6.0
2022-08-03 17:51:28 +00:00
# Build and install laconic
2022-04-06 01:28:21 +00:00
make install
```
2022-08-03 17:51:28 +00:00
Verify your installation
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
laconicd version --long
2022-04-06 01:28:21 +00:00
```
On running the above command, you should see a similar response like this. Make sure that the _version_ and _commit
hash_ are accurate
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
name: laconic
server_name: laconicd
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
---
2022-04-06 01:28:21 +00:00
## Docker container
2022-04-06 01:28:21 +00:00
There are different commands to initialize a validator and to run a validator node.
See "Docker" section in corresponding chapters.
It is important to mount a host directory (`~/.laconicd` in this documentation) to `/root/.laconicd` directory inside the container, so all blockchain data, configuration and keys persist between container restarts.
For running a validator node it is also required to publish container's port 26656 and (optionally) 26660 to the host.
---
2022-08-04 17:07:56 +00:00
# Initialize Validator Node
2022-08-04 17:07:56 +00:00
**Not required if you have already initialized before**
2022-08-04 17:07:56 +00:00
Make sure the directory `~/.laconicd` does not exist or is empty
2022-08-04 17:07:56 +00:00
---
>**Docker**<br/>
>In order to run the below commands in a docker container:
>```sh
>docker run -ti -v ~/.laconicd:/root/.laconicd \
>git.vdb.to/cerc-io/laconicd/laconicd:v0.6.0 /bin/sh
>```
---
2022-08-03 17:51:28 +00:00
```sh
# Initialize the validator node
laconicd init <your-node-moniker> --chain-id laconic_81337-5
2022-04-06 01:28:21 +00:00
```
Running the above commands will initialize the validator node with default configuration. The config files will be saved in the default location (`~/.laconicd/config`).
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
**NOTE:** Backup your node and validator keys. You will need to use these keys at a later point in time.
2022-04-06 01:28:21 +00:00
---
2022-08-03 17:51:28 +00:00
## Create Account keys
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
If you have participated in a previous testnet and have a mnemonic phrase, use below command to recover your account:
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
laconicd keys add <key-name> --recover
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
To create a new account use:
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
laconicd keys add <key-name>
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
**NOTE:** Save the `mnemonic` and related account details (public key). You will need to use the mnemonic and / or private key to recover accounts at a later point in time.
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
---
## Add Genesis Account
**NOTE:** Don't add more than 12,900 CHK , if you add more than that, your gentx will be ignored.
```sh
laconicd add-genesis-account <key-name> 12900000000000000000000achk --keyring-backend os
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
Create Your `gentx` transaction file
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
laconicd gentx <key-name> 12900000000000000000000achk \
--pubkey=$(laconicd tendermint show-validator) \
--chain-id="laconic_81337-5" \
2022-08-03 17:51:28 +00:00
--moniker="<your-moniker-name>" \
--website="<your-validator-website>" \
--details="<your-validator-description>" \
--identity="<your-keybase-public-key>" \
--ip="<your-node-public-ip-address>" \
2022-04-06 01:28:21 +00:00
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--min-self-delegation="1"
```
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
**NOTE:**
2022-04-06 01:28:21 +00:00
- `<key-name>` and `chain-id` are required. other flags are optional
2022-08-03 17:51:28 +00:00
- Don't change the amount value while creating your gentx
- Genesis transaction file will be saved in `~/.laconicd/config/gentx` folder
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
---
## Submit Your gentx
2022-04-06 01:28:21 +00:00
Submit your `gentx` file to the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository in the following format:
2022-04-06 01:28:21 +00:00
`<validator-moniker>-gentx.json`
2022-08-03 17:51:28 +00:00
**NOTE:** (Do NOT use spaces in the file name)
2022-04-06 01:28:21 +00:00
To submit the gentx file, follow the below process:
2022-11-22 12:55:06 +00:00
- Fork the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository
- Upload your gentx file in the `laconic_81337-5/config/gentxs` folder
2022-11-22 12:55:06 +00:00
- Submit Pull Request to [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) with name `ADD <your-moniker> gentx`
2022-04-06 01:28:21 +00:00
2022-11-22 12:55:06 +00:00
The genesis file will be published in the `laconic_81337-5/config/` folder within the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository.
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# CONTINUE WITH BELOW STEPS ONLY AFTER GENESIS FILE HAS BEEN PUBLISHED
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
## Adjust validator node configuration
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
# Set seed & peers variable
seeds="<seeds node list here>"
peers="<peers node list here>"
external_address="<node public IP address>"
moniker="<your moniker>"
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Update seeds, persistent_peers and prometheus parameters in config.toml
sed -i.bak -e "s/^seeds *=.*/seeds = \"$seeds\"/; s/^persistent_peers *=.*/persistent_peers = \"$peers\"/; s/^prometheus *=.*/prometheus = true/; s/^moniker *=.*/moniker = \"$moniker\"/; s/^external_address *=.*/external_address = \"tcp:\/\/$external_address:26656\"/" $HOME/.laconicd/config/config.toml
```
---
2022-04-06 01:28:21 +00:00
## Create systemd validator service (skip for Docker)
```sh
sudo tee /etc/systemd/system/laconicd.service > /dev/null <<EOF
2022-04-06 01:28:21 +00:00
[Unit]
Description=laconicd Daemon
2022-04-06 01:28:21 +00:00
After=network-online.target
[Service]
User=$USER
ExecStart=$(which laconicd) start --gql-playground --gql-server --log_level=warn
2022-04-06 01:28:21 +00:00
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
2022-08-03 17:51:28 +00:00
#Reload systemd and start the validator node
2022-04-06 01:28:21 +00:00
sudo systemctl daemon-reload
sudo systemctl enable laconicd
sudo systemctl start laconicd
2022-04-06 01:28:21 +00:00
```
2022-08-03 17:51:28 +00:00
Check status of service
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
sudo systemctl status laconicd
2022-04-06 01:28:21 +00:00
```
### Helpful Commands for systemd service
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
```sh
# Check logs
journalctl -u laconicd
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Most recent logs
journalctl -xeu laconicd
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Logs from previous day
journalctl --since "1 day ago" -u laconicd
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Check logs with follow flag
journalctl -f -u laconicd
2022-04-06 01:28:21 +00:00
```
---
## Run validator node in Docker container
### Create docker container
In this example the Tendermint RPC and Prometheus metrics ports are exposed only to localhost. You may want to change 127.0.0.1 to private or public network interface of your host if you need to access these ports remotely.
```sh
docker create --name laconic-testnet-5 -v ~/.laconicd:/root/.laconicd -p 26656:26656 -p 127.0.0.1:26657:26657 -p 127.0.0.1:26660:26660 git.vdb.to/cerc-io/laconicd/laconicd:v0.6.0 laconicd start --gql-playground --gql-server --log_level=warn
```
### Run validator node
```sh
docker start laconic-testnet-5
```
### Check validator node logs
```sh
docker logs laconic-testnet-5
```
### Run shell inside docker container
```sh
docker exec -ti laconic-testnet-5 /bin/sh
```
---
## Helpful commands
```sh
2022-08-03 17:51:28 +00:00
# Check discovered peers
curl http://localhost:26657/net_info
2022-04-06 01:28:21 +00:00
2022-08-03 17:51:28 +00:00
# Check network consensus state
curl http://localhost:26657/consensus_state
2022-04-06 01:28:21 +00:00
# Check the sync status of your validator node (for docker need to run shell inside the container fist)
laconicd status | jq .SyncInfo
```
---