6.9 KiB
Run Validator Node
Prerequisites
Setup Node
-
Run the following steps in the machine where the validator node is to be setup
-
Get your private key from testnet deployment:
laconic-so deployment --dir <testnet-deployment-dir> exec laconicd "laconicd keys export <key-name> --unarmored-hex --unsafe"
NOTE: Store this key securely as it is needed in later steps
-
Stop the node for SAPO testnet:
laconic-so deployment --dir <testnet-deployment-dir> stop
-
Fetch the stack:
laconic-so fetch-stack git.vdb.to/cerc-io/laconicd-stack --git-ssh --pull
This command clones the entire repository into the
~/cerc
folder, which includes the genesis file published by the first validator. -
Copy the example variables file:
cp ~/cerc/laconicd-stack/playbooks/validator/validator-vars.example.yml ~/cerc/laconicd-stack/playbooks/validator/validator-vars.yml
-
Update
~/cerc/laconicd-stack/playbooks/validator/validator-vars.yml
with required values:# Set custom moniker for the node cerc_moniker: "<your-moniker>" # Set persistent peers (comma-separated list of node IDs and addresses) # You can find the list of available peers in https://git.vdb.to/cerc-io/laconicd-stack/src/branch/main/node-addresses.yml cerc_peers: "<node-id>@<node-host>:26656,<node-id>@<node-host>:26656"
-
Export the data directory and mainnet deployment directory as environment variables:
# Parent directory where the deployment directory will live export DATA_DIRECTORY= # Set mainnet deployment directory # for eg: mainnet-laconicd-deployment export MAINNET_DEPLOYMENT_DIR=
-
Run ansible playbook to set up your validator node deployment:
ansible-playbook -i localhost, -c local ~/cerc/laconicd-stack/playbooks/validator/setup-validator.yml
Setup TMKMS (Optional but Recommended)
-
For integrating existing TMKMS with laconicd, follow steps below in the machine where TMKMS is setup
-
Set
$TMKMS_HOME
to the directory path containing TMKMS config files# Contents of tmkms config directory ls -l $TMKMS_HOME drwxrwxr-x 2 ... schema drwx------ 2 ... secrets drwxrwxr-x 2 ... state -rw-rw-r-- 1 ... tmkms.toml
-
Update the TMKMS configuration file
$TMKMS_HOME/tmkms.toml
:[[chain]] id = "laconic-mainnet" key_format = { type = "cosmos-json", account_key_prefix = "laconicpub", consensus_key_prefix = "laconicvalconspub" } # Replace <TMKMS_HOME> with absolute path to tmkms config directory state_file = "<TMKMS_HOME>/state/priv_validator_state.json" [[validator]] chain_id = "laconic-mainnet" # Replace <NODE_IP> with actual IP address of the laconicd node addr = "tcp://<NODE_IP>:26659" # Replace <TMKMS_HOME> with absolute path to tmkms config directory secret_key = "<TMKMS_HOME>/secrets/kms-identity.key" protocol_version = "v0.34" reconnect = true [[providers.softsign]] key_type = "consensus" # Replace <TMKMS_HOME> with absolute path to tmkms config directory path = "<TMKMS_HOME>/secrets/priv_validator_key" chain_ids = ["laconic-mainnet"]
-
Copy your validator key to TMKMS:
-
The validator key in laconicd node deployment is present at
$DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json
-
Place the validator key file in TMKMS config directory at
$TMKMS_HOME/secrets/
-
Import the private validator key into tmkms:
tmkms softsign import $TMKMS_HOME/secrets/priv_validator_key.json $TMKMS_HOME/secrets/priv_validator_key
-
Remove the JSON key file
rm $TMKMS_HOME/secrets/priv_validator_key.json
-
-
Start TMKMS:
tmkms start --config $TMKMS_HOME/tmkms.toml
-
Enable TMKMS in the laconicd node configuration:
# Set TMKMS_ENABLED to true in the node's config.env echo "TMKMS_ENABLED=true" >> $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/config.env
Start Node
-
Start the laconicd node:
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR start
-
Check logs to ensure that node is running:
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR logs laconicd -f
-
Get the public key of your node:
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd "laconicd tendermint show-validator"
NOTE: This public key is required in next step to create validator
Create Validator
-
Run these steps in a secure machine separate from the one where the node is setup
-
Fetch the stack:
laconic-so fetch-stack git.vdb.to/cerc-io/laconicd-stack --git-ssh --pull
This command clones the entire repository into the
~/cerc
folder, which includes the genesis file published by the first validator. -
Copy the example variables file:
cp ~/cerc/laconicd-stack/playbooks/validator/validator-vars.example.yml ~/cerc/laconicd-stack/playbooks/validator/validator-vars.yml
-
Update
~/cerc/laconicd-stack/playbooks/validator/validator-vars.yml
with required values:# Same moniker as set above cerc_moniker: "<your-moniker>" # Use the public key exported in previous step (make sure to wrap it with single quotes ['']) validator_pub_key: '<public-key-of-your-node>' # Set the public IP address of the machine where your node is running node_url: "tcp://NODE_PUBLIC_IP_ADDRESS:26657"
-
Export required env vars:
export DATA_DIRECTORY=<data-directory> export MAINNET_DEPLOYMENT_DIR=<mainnet-deployment-dir>
-
Run ansible playbook to create validator on running chain:
ansible-playbook -i localhost, -c local ~/cerc/laconicd-stack/playbooks/validator/create-validator.yml
- Input private key of the existing account that was exported in previous steps when prompted
-
Run the following commands in the machine where the validator node is setup
-
Check the validator list:
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query staking validators'
-
If TMKMS has been configured, remove the validator key from node deployment as it is no longer required:
rm $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json
NOTE: Store it safely offline in case of an emergency
-
Register Your Node
-
Get your node's address:
laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'echo $(laconicd cometbft show-node-id)@YOUR_PUBLIC_IP_ADDRESS:26656'
-
Add your node's address to the
~/cerc/laconicd-stack/node-addresses.yml
file -
Submit a PR to add your node address to the repository