testnet-laconicd-stack/stack-orchestrator/stacks/laconicd-full-node/README.md
Nabarun 0e0ddaa5ef Add stack for running a laconic testnet full node (#1)
Part of [Create a public laconicd testnet](https://www.notion.so/Create-a-public-laconicd-testnet-896a11bdd8094eff8f1b49c0be0ca3b8)

- To be handled in an upcoming PR:
  - Add laconic-registry-cli and console app to the stack

Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
Reviewed-on: #1
Co-authored-by: Nabarun <nabarun@deepstacksoft.com>
Co-committed-by: Nabarun <nabarun@deepstacksoft.com>
2024-06-19 04:33:56 +00:00

200 lines
5.1 KiB
Markdown

# laconicd-full-node
Instructions for running a laconicd testnet full node and joining as a validator
## Prerequisites
* Minimum hardware requirements:
```bash
RAM: 8-16GB
Disk space: 200GB
CPU: 2 cores
```
* Testnet genesis file (file or an URL) and peer node addresses
## Setup
* Clone the stack repo:
```bash
laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack
```
* Clone required repositories:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconicd-full-node setup-repositories
```
* Build the container images:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconicd-full-node build-containers
```
This should create the following docker images locally:
* `cerc/laconic2d`
## Create a deployment
* Create a spec file for the deployment:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconicd-full-node deploy init --output laconic-full-node-spec.yml
```
* Edit `network` in the spec file to map container ports to host ports as required:
```bash
...
network:
ports:
laconicd:
- '6060:6060'
- '26657:26657'
- '26656:26656'
- '9473:9473'
- '9090:9090'
- '1317:1317'
```
* Create a deployment from the spec file:
```bash
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconicd-full-node deploy create --spec-file laconic-full-node-spec.yml --deployment-dir laconic-full-node-deployment
```
* Copy over the published testnet genesis file (`.json`) to data directory in deployment (`laconic-full-node-deployment/data/laconicd-data/tmp`):
```bash
# Example
mkdir -p laconic-full-node-deployment/data/laconicd-data/tmp
cp genesis.json laconic-full-node-deployment/data/laconicd-data/tmp/genesis.json
```
## Configuration
* Inside the deployment directory, open `config.env` file and set following env variables:
```bash
# Comma separated list of nodes to keep persistent connections to
# Example: "node-1-id@node-1-host:26656,node-2-id@node-2-host:26656"
CERC_PEERS=""
# Optional
# A custom human readable name for this node (default: TestnetNode)
CERC_MONIKER=
# Network chain ID (default: laconic_9000-1)
CERC_CHAIN_ID=
# Output log level (default: info)
CERC_LOGLEVEL=
```
## Start the deployment
```bash
laconic-so deployment --dir laconic-full-node-deployment start
```
## Check status
* To list down and monitor the running containers:
```bash
# With status
docker ps -a
# Follow logs for laconicd container
laconic-so deployment --dir laconic-full-node-deployment logs laconicd -f
```
* Check the sync status of your node:
```bash
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd status | jq .sync_info"
# `catching_up: false` indicates that node is completely synced
```
## Join as testnet validator
* Create / import a new key pair:
```bash
# Create new keypair
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd keys add <key-name>"
# OR
# Restore existing key with mnemonic seed phrase
# You will be prompted to enter mnemonic seed
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd keys add <key-name> --recover"
# Query the keystore for your account's address
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd keys show <key-name> -a"
```
* Request tokens from the testnet faucet for your account if required
* Check balance for your account:
```bash
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd query bank balances <key-name>"
```
* Create required validator configuration:
```bash
# Edit the staking amount and other fields as required
laconic-so deployment --dir laconic-full-node-deployment exec laconicd 'cat <<EOF > <your-node-moniker>-validator.json
{
"pubkey": $(laconicd cometbft show-validator),
"amount": "900000000photon",
"moniker": "<your-node-moniker>",
"commission-rate": "0.1",
"commission-max-rate": "0.2",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}
EOF'
```
* Create a validator:
```bash
laconic-so deployment --dir laconic-full-node-deployment exec laconicd 'laconicd tx staking create-validator <your-node-moniker>-validator.json \
--fees 50photon \
--chain-id=laconic_9000-1 \
--from <key-name>'
```
* View your staking validator details:
```bash
laconic-so deployment --dir laconic-full-node-deployment exec laconicd "laconicd query staking validator <key-name>"
```
## Clean up
* Stop all services running in the background:
```bash
# Stop the docker containers
laconic-so deployment --dir laconic-full-node-deployment stop
```
* To stop all services and also delete data:
```bash
# Stop the docker containers
laconic-so deployment --dir laconic-full-node-deployment stop --delete-volumes
# Remove deployment directory (deployment will have to be recreated for a re-run)
rm -r laconic-full-node-deployment
```