2024-06-24 07:26:38 +00:00
|
|
|
# testnet-laconicd
|
|
|
|
|
|
|
|
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
|
|
|
|
# laconicd
|
2024-07-23 12:46:18 +00:00
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd setup-repositories --pull
|
2024-06-24 07:26:38 +00:00
|
|
|
|
2024-07-18 14:45:01 +00:00
|
|
|
# laconic cli and console
|
2024-07-23 12:46:18 +00:00
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console setup-repositories --pull
|
|
|
|
|
|
|
|
# If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories and re-run the command
|
2024-06-24 07:26:38 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
* Build the container images:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# laconicd
|
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd build-containers
|
|
|
|
|
2024-07-23 12:46:18 +00:00
|
|
|
# laconic cli and console
|
2024-06-24 07:26:38 +00:00
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console build-containers
|
|
|
|
```
|
|
|
|
|
|
|
|
This should create the following docker images locally:
|
|
|
|
|
2024-07-23 12:55:38 +00:00
|
|
|
* `cerc/laconicd`
|
|
|
|
* `cerc/laconic-registry-cli`
|
2024-06-24 07:26:38 +00:00
|
|
|
* `cerc/webapp-base`
|
2024-07-23 12:55:38 +00:00
|
|
|
* `cerc/laconic-console-host`
|
2024-06-24 07:26:38 +00:00
|
|
|
|
|
|
|
## Create a deployment
|
|
|
|
|
|
|
|
* Create a spec file for the deployment:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd deploy init --output testnet-laconicd-spec.yml
|
|
|
|
|
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console deploy init --output laconic-console-spec.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
* Edit `network` in both the spec files to map container ports to host ports as required:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# testnet-laconicd-spec.yml
|
|
|
|
...
|
|
|
|
network:
|
|
|
|
ports:
|
|
|
|
laconicd:
|
|
|
|
- '6060:6060'
|
|
|
|
- '26657:26657'
|
|
|
|
- '26656:26656'
|
|
|
|
- '9473:9473'
|
|
|
|
- '9090:9090'
|
|
|
|
- '1317:1317'
|
|
|
|
|
|
|
|
# laconic-console-spec.yml
|
|
|
|
...
|
|
|
|
network:
|
|
|
|
ports:
|
|
|
|
console:
|
|
|
|
- '8080:80'
|
|
|
|
```
|
|
|
|
|
|
|
|
* Create deployments from the spec files:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd deploy create --spec-file testnet-laconicd-spec.yml --deployment-dir testnet-laconicd-deployment
|
|
|
|
|
|
|
|
laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console deploy create --spec-file laconic-console-spec.yml --deployment-dir laconic-console-deployment
|
|
|
|
|
|
|
|
# Place them both in the same namespace (cluster)
|
|
|
|
cp testnet-laconicd-deployment/deployment.yml laconic-console-deployment/deployment.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
* Copy over the published testnet genesis file (`.json`) to data directory in deployment (`testnet-laconicd-deployment/data/laconicd-data/tmp`):
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Example
|
|
|
|
mkdir -p testnet-laconicd-deployment/data/laconicd-data/tmp
|
|
|
|
cp genesis.json testnet-laconicd-deployment/data/laconicd-data/tmp/genesis.json
|
|
|
|
```
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
* Inside the `testnet-laconicd-deployment` 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=
|
2024-10-30 12:05:54 +00:00
|
|
|
|
|
|
|
# Minimum gas price in alnt to accept for transactions (default: "0.001")
|
|
|
|
MIN_GAS_PRICE
|
2024-06-24 07:26:38 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
* Inside the `laconic-console-deployment` deployment directory, open `config.env` file and set following env variables:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# All optional
|
|
|
|
|
|
|
|
# CLI configuration
|
|
|
|
|
|
|
|
# laconicd chain id (default: laconic_9000-1)
|
|
|
|
CERC_LACONICD_CHAIN_ID=
|
|
|
|
|
|
|
|
# laconicd user private key for txs
|
|
|
|
CERC_LACONICD_USER_KEY=
|
|
|
|
|
|
|
|
# laconicd bond id for txs
|
|
|
|
CERC_LACONICD_BOND_ID=
|
|
|
|
|
|
|
|
# Gas limit for txs (default: 200000)
|
|
|
|
CERC_LACONICD_GAS=
|
|
|
|
|
2024-10-30 12:05:54 +00:00
|
|
|
# Max fees for txs (default: 200alnt)
|
2024-06-24 07:26:38 +00:00
|
|
|
CERC_LACONICD_FEES=
|
|
|
|
|
2024-10-30 12:05:54 +00:00
|
|
|
# Gas price to use for txs (default: 0.001alnt)
|
|
|
|
# Use for auto fees calculation, gas and fees not required to be set in that case
|
|
|
|
# Reference: https://git.vdb.to/cerc-io/laconic-registry-cli#gas-and-fees
|
|
|
|
CERC_LACONICD_GASPRICE=
|
|
|
|
|
2024-06-24 07:26:38 +00:00
|
|
|
# Console configuration
|
|
|
|
|
|
|
|
# Laconicd (hosted) GQL endpoint (default: http://localhost:9473)
|
|
|
|
LACONIC_HOSTED_ENDPOINT=
|
|
|
|
```
|
|
|
|
|
|
|
|
Note: Use `host.docker.internal` as host to access ports on the host machine
|
|
|
|
|
|
|
|
## Start the deployments
|
|
|
|
|
|
|
|
```bash
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment start
|
|
|
|
laconic-so deployment --dir laconic-console-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 testnet-laconicd-deployment logs laconicd -f
|
|
|
|
```
|
|
|
|
|
|
|
|
* Check the sync status of your node:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd status | jq .sync_info"
|
|
|
|
|
|
|
|
# `catching_up: false` indicates that node is completely synced
|
|
|
|
```
|
|
|
|
|
|
|
|
* View the laconic console at <http://localhost:8080>
|
|
|
|
|
|
|
|
* Use the cli service for registry CLI operations:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Example
|
|
|
|
laconic-so deployment --dir laconic-console-deployment exec cli "laconic registry status"
|
|
|
|
```
|
|
|
|
|
|
|
|
## Join as testnet validator
|
|
|
|
|
|
|
|
* Create / import a new key pair:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Create new keypair
|
|
|
|
laconic-so deployment --dir testnet-laconicd-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 testnet-laconicd-deployment exec laconicd "laconicd keys add <key-name> --recover"
|
|
|
|
|
|
|
|
# Query the keystore for your account's address
|
|
|
|
laconic-so deployment --dir testnet-laconicd-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
|
2024-07-23 15:55:48 +00:00
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query bank balances <account-address>"
|
2024-06-24 07:26:38 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
* Create required validator configuration:
|
|
|
|
|
|
|
|
```bash
|
2024-07-23 12:46:18 +00:00
|
|
|
# Note:
|
2024-06-24 07:26:38 +00:00
|
|
|
# Edit the staking amount and other fields as required
|
2024-07-23 12:46:18 +00:00
|
|
|
# Replace <your-node-moniker> with your node's moniker in command below
|
|
|
|
|
2024-08-07 13:35:17 +00:00
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'cat <<EOF > my-validator.json
|
2024-06-24 07:26:38 +00:00
|
|
|
{
|
|
|
|
"pubkey": $(laconicd cometbft show-validator),
|
2024-07-30 11:58:25 +00:00
|
|
|
"amount": "900000000alnt",
|
2024-06-24 07:26:38 +00:00
|
|
|
"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
|
2024-08-07 13:35:17 +00:00
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'laconicd tx staking create-validator my-validator.json \
|
2024-07-30 11:58:25 +00:00
|
|
|
--fees 500000alnt \
|
2024-06-24 07:26:38 +00:00
|
|
|
--chain-id=laconic_9000-1 \
|
|
|
|
--from <key-name>'
|
|
|
|
```
|
|
|
|
|
2024-08-09 10:18:11 +00:00
|
|
|
* View validators:
|
2024-06-24 07:26:38 +00:00
|
|
|
|
|
|
|
```bash
|
2024-07-23 15:55:48 +00:00
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query staking validators"
|
2024-06-24 07:26:38 +00:00
|
|
|
```
|
|
|
|
|
2024-07-23 15:55:48 +00:00
|
|
|
* Check that in the list of validators `<your-node-moniker>` exists
|
|
|
|
|
2024-06-24 07:26:38 +00:00
|
|
|
## Perform operations
|
|
|
|
|
|
|
|
* To perform txs against the chain using registry CLI, set your private key in config in the CLI container:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# (Optional) Get the PK from your node
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys export <key-name> --unarmored-hex --unsafe"
|
|
|
|
|
|
|
|
# Set your PK as 'userKey' in the config file
|
|
|
|
laconic-so deployment --dir laconic-console-deployment exec cli "nano config.yml"
|
|
|
|
|
2024-07-23 12:46:18 +00:00
|
|
|
# services:
|
|
|
|
# registry:
|
|
|
|
# ...
|
2024-08-19 10:12:29 +00:00
|
|
|
# userKey: "<your-private-key>"
|
2024-07-23 12:46:18 +00:00
|
|
|
# ...
|
|
|
|
|
2024-06-24 07:26:38 +00:00
|
|
|
# Note: any changes made to the config will be lost when the cli Docker container is brought down
|
|
|
|
# So set / update the values in 'laconic-console-deployment/config.env' accordingly before restarting
|
|
|
|
```
|
|
|
|
|
|
|
|
* Adjust / set other config values (`bondId`, `gas`, `fees`) as required and perform txs:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Example
|
2024-08-19 10:12:29 +00:00
|
|
|
laconic-so deployment --dir laconic-console-deployment exec cli "laconic registry bond create --type alnt --quantity 1000000000000"
|
2024-06-24 07:26:38 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## Clean up
|
|
|
|
|
|
|
|
* Stop all `testnet-laconicd` services running in the background:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Stop the docker containers
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment stop
|
|
|
|
```
|
|
|
|
|
|
|
|
* To stop all services and also delete data:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Stop the docker containers
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment stop --delete-volumes
|
|
|
|
|
|
|
|
# Remove deployment directory (deployment will have to be recreated for a re-run)
|
|
|
|
rm -r testnet-laconicd-deployment
|
|
|
|
```
|
|
|
|
|
|
|
|
* For `laconic-console`, see [laconic-console clean up](../laconic-console/README.md#clean-up)
|