diff --git a/playbooks/cosmos-multisig-app/README.md b/playbooks/cosmos-multisig-app/README.md new file mode 100644 index 0000000..d065197 --- /dev/null +++ b/playbooks/cosmos-multisig-app/README.md @@ -0,0 +1,62 @@ +# Cosmos Multisig App Setup + +This playbook sets up the Cosmos Multisig application for managing multisig wallets on the Laconic chain. + +## Prerequisites + +- [ansible](../README.md#ansible-installation) +- [laconic-so](https://github.com/cerc-io/stack-orchestrator/?tab=readme-ov-file#install) +- Running Laconic validator node +- Keplr wallet extension installed in browser + +## Configuration + +* Copy the example variables file: + ```bash + cp cosmos-multisig-vars.example.yml cosmos-multisig-vars.yml + ``` + +* Update `cosmos-multisig-vars.yml` with your node configuration: + ```yaml + next_public_node_addresses: + node_rest_endpoint: + ``` + +## Setup Steps + +* Set environment variables: + ```bash + export CWD=$(pwd) + export DATA_DIRECTORY=$CWD + export MULTISIG_DEPLOYMENT_DIR=cosmos-multisig-deployment + export NETWORK_JSON_PATH=~/cerc/laconicd-stack/config/network.json + export USE_HOST_NETWORK=host + ``` + +* Setup and start the multisig app: + ```bash + ansible-playbook -v -i localhost, -c local cosmos-multisig-app-start.yml + ``` + +* Access the app at `http://localhost:3000/laconic` + + +## Check Status + +* Check app logs: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR logs laconicd -f + ``` + +## Clean up + +- To stop the deployment: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR stop + ``` + +- To stop and delete all data: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR stop --delete-volumes + sudo rm -rf $DATA_DIRECTORY/$MULTISIG_DEPLOYMENT_DIR + ``` diff --git a/playbooks/first-validator/README.md b/playbooks/first-validator/README.md new file mode 100644 index 0000000..01ffdc3 --- /dev/null +++ b/playbooks/first-validator/README.md @@ -0,0 +1,125 @@ +# First Validator Setup + +This playbook sets up the first validator node for the Laconic mainnet chain. + +## Prerequisites + +- [ansible](../README.md#ansible-installation) +- [laconic-so](https://github.com/cerc-io/stack-orchestrator/?tab=readme-ov-file#install) +- [tmkms](https://github.com/iqlusioninc/tmkms?tab=readme-ov-file#installation) + - Install with `softsign` feature + ```bash + cargo install tmkms --features=softsign --version=0.14.0 + ``` +- testnet-state.json (exported testnet state) +- distribution.json (JSON containing the `lps_lockup` distribution) + +## Setup Steps + +1. Copy the example variables file: + ```bash + cp first-validator-vars.example.yml first-validator-vars.yml + ``` + +2. Set environment variables: + ```bash + export CWD=$(pwd) + export DATA_DIRECTORY=$CWD + export MAINNET_DEPLOYMENT_DIR=mainnet-laconicd-deployment + export EXPORTED_STATE_PATH=$CWD/testnet-state.json + export LPS_DISTRIBUTION_PATH=$CWD/distribution.json + export EARLY_SUPPORTS_ACC_ADDR=laconic1gwytamfk3m5n0gsawh5vpwxkwd3vapmvzpp6nz + ``` + +3. Generate genesis file: + ```bash + ansible-playbook -v -i localhost, -c local generate-genesis.yml \ + -e "exported_state_path=$EXPORTED_STATE_PATH" \ + -e "lps_distribution_path=$LPS_DISTRIBUTION_PATH" \ + -e "early_supports_acc_address=$EARLY_SUPPORTS_ACC_ADDR" + ``` + +4. Update `first-validator-vars.yml` with your configuration: + ```yaml + pvt_key: + genesis_file: "$CWD/output/genesis.json" + staking_amount_file: "$CWD/output/staking-amount.json" + cerc_moniker: "LaconicMainnet" + key_name: "laconic-validator" + cerc_chain_id: "laconic-mainnet" + min_gas_price: 0.001 + cerc_loglevel: "info" + ``` + +5. Setup the first validator node: + ```bash + ansible-playbook -v -i localhost, -c local setup-first-validator.yml + ``` + +6. Setup TMKMS: + ```bash + # Initialize TMKMS + tmkms init ./tmkms-first-node + + # Create TMKMS config + cat > ./tmkms-first-node/tmkms.toml << EOL + [[chain]] + id = "laconic-mainnet" + key_format = { type = "cosmos-json", account_key_prefix = "laconicpub", consensus_key_prefix = "laconicvalconspub" } + state_file = "$CWD/tmkms-first-node/state/priv_validator_state.json" + + [[validator]] + chain_id = "laconic-mainnet" + addr = "tcp://localhost:26659" + secret_key = "$CWD/tmkms-first-node/secrets/kms-identity.key" + protocol_version = "v0.34" + reconnect = true + + [[providers.softsign]] + key_type = "consensus" + path = "$CWD/tmkms-first-node/secrets/priv_validator_key" + chain_ids = ["laconic-mainnet"] + EOL + + # Import validator key + tmkms softsign import $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json $CWD/tmkms-first-node/secrets/priv_validator_key + ``` + +7. Start TMKMS: + ```bash + tmkms start --config $CWD/tmkms-first-node/tmkms.toml + ``` + +8. Enable TMKMS and start the node: + ```bash + echo "TMKMS_ENABLED=true" >> $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/config.env + rm $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR start + ``` + +## Verification + +1. Check node logs: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR logs laconicd -f + ``` + +2. Verify validator and TMKMS pubkeys match: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query staking validators -o json | jq .validators' + ``` + +3. Check bonds list: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query bond list' + ``` + +4. Check token supply: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query bank total-supply' + ``` + +5. Check LPS lockup account: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query auth module-account lps_lockup' + ``` \ No newline at end of file diff --git a/playbooks/validator/README.md b/playbooks/validator/README.md new file mode 100644 index 0000000..c8553b5 --- /dev/null +++ b/playbooks/validator/README.md @@ -0,0 +1,135 @@ +# Validator Setup + +This playbook sets up additional validator nodes for the Laconic mainnet chain. + +## Prerequisites + +- [ansible](../README.md#ansible-installation) +- [laconic-so](https://github.com/cerc-io/stack-orchestrator/?tab=readme-ov-file#install) +- [tmkms](https://github.com/iqlusioninc/tmkms?tab=readme-ov-file#installation) + - Install with `softsign` feature + ```bash + cargo install tmkms --features=softsign --version=0.14.0 + ``` +- Running first validator node +- Private key of an account with balance + +## Configuration + +1. Copy the example variables file: + ```bash + cp validator-vars.example.yml validator-vars.yml + ``` + +2. Update `validator-vars.yml` with your configuration: + ```yaml + cerc_moniker: "LaconicMainnetNode-2" + cerc_peers: "@host.docker.internal:26656" # First validator node address + ``` + +3. Update port mappings in `templates/specs/spec-template.yml.j2` to avoid port conflicts: + ```yaml + network: + ports: + laconicd: + - '3060:6060' + - '36659:26659' + - '36657:26657' + - '36656:26656' + - '3473:9473' + - '3090:9090' + - '3317:1317' + ``` + +## Setup Steps + +1. Set environment variables: + ```bash + export CWD=$(pwd) + export DATA_DIRECTORY=$CWD + export MAINNET_DEPLOYMENT_DIR=mainnet-validator-deployment + ``` + +2. Setup validator node: + ```bash + ansible-playbook -v -i localhost, -c local setup-validator.yml + ``` + +3. Setup TMKMS: + ```bash + # Initialize TMKMS + tmkms init ./tmkms-second-node + + # Create TMKMS config + cat > ./tmkms-second-node/tmkms.toml << EOL + [[chain]] + id = "laconic-mainnet" + key_format = { type = "cosmos-json", account_key_prefix = "laconicpub", consensus_key_prefix = "laconicvalconspub" } + state_file = "$CWD/tmkms-second-node/state/priv_validator_state.json" + + [[validator]] + chain_id = "laconic-mainnet" + addr = "tcp://localhost:36659" + secret_key = "$CWD/tmkms-second-node/secrets/kms-identity.key" + protocol_version = "v0.34" + reconnect = true + + [[providers.softsign]] + key_type = "consensus" + path = "$CWD/tmkms-second-node/secrets/priv_validator_key" + chain_ids = ["laconic-mainnet"] + EOL + + # Import validator key + tmkms softsign import $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json $CWD/tmkms-second-node/secrets/priv_validator_key + ``` + +4. Start TMKMS: + ```bash + tmkms start --config $CWD/tmkms-second-node/tmkms.toml + ``` + +5. Enable TMKMS and start the node: + ```bash + echo "TMKMS_ENABLED=true" >> $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/config.env + rm $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR/data/laconicd-data/config/priv_validator_key.json + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR start + ``` + +## Create Validator + +1. Set required environment variables: + ```bash + export PVT_KEY= + export KEY_NAME=validator-2 + ``` + +2. Create validator on running chain: + ```bash + ansible-playbook -v -i localhost, -c local create-validator.yml + ``` + +## Verification + +1. Check node logs: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR logs laconicd -f + ``` + +2. Check validator list: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR exec laconicd 'laconicd query staking validators' + ``` + +## Clean up + +- To stop the deployment: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR stop + ``` + +- To stop and delete all data: + ```bash + laconic-so deployment --dir $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR stop --delete-volumes + sudo rm -rf $DATA_DIRECTORY/$MAINNET_DEPLOYMENT_DIR + ``` \ No newline at end of file