From e682e4a91ce1ec23ce8a7cbba718b7b79584926f Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Wed, 7 Aug 2024 19:01:04 +0530 Subject: [PATCH] Add instructions for testnet validator onboarding --- .../stacks/testnet-laconicd/README.md | 167 ++++++++---- testnet-onboarding-validator.md | 245 ++++++++++++++++++ 2 files changed, 362 insertions(+), 50 deletions(-) create mode 100644 testnet-onboarding-validator.md diff --git a/stack-orchestrator/stacks/testnet-laconicd/README.md b/stack-orchestrator/stacks/testnet-laconicd/README.md index a29b273..78e7560 100644 --- a/stack-orchestrator/stacks/testnet-laconicd/README.md +++ b/stack-orchestrator/stacks/testnet-laconicd/README.md @@ -12,40 +12,7 @@ Instructions for running a laconicd testnet full node and joining as a validator CPU: 2 cores ``` -* Testnet genesis file and peer node address - -* Mnemonic from the [wallet](https://wallet.laconic.com) - -### Participant Onboarded - -* Visit and click on `Create wallet` - * Save the mnemonic for further usage - -* Register your laconic address as a participant using the [Onboarding App](https://loro-signup.laconic.com/) - - * Read and accept the `Terms and Conditions` - - * Connect testnet-onboarding app to the wallet: - - * Click on `CONNECT WALLET` button on the testnet-onboarding app - - * Click on the WalletConnect icon on the top right corner in the wallet - - * If using the wallet website, enter WalletConnect URI for pairing - - * In the onboarding app, choose your nitro and laconicd account to onboard - - * Sign using the nitro key - - * Approve sign request on Wallet - - * Select the desired participant role (`Validator` or `Participant`) and accept the onboarding terms and conditions - - * In the next step, fund your laconic account by clicking on the `REQUEST TOKENS FROM FAUCET` button; ensure that the displayed balance is updated - - * Send transaction request to the wallet - - * From wallet, approve and send transaction to laconicd chain +* Testnet genesis file (file or an URL) and peer node addresses ## Setup @@ -58,20 +25,31 @@ Instructions for running a laconicd testnet full node and joining as a validator * Clone required repositories: ```bash + # laconicd laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd setup-repositories --pull + # laconic cli and console + 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 ``` * Build the container images: ```bash + # laconicd laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd build-containers + + # laconic cli and console + laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console build-containers ``` This should create the following docker images locally: * `cerc/laconicd` + * `cerc/laconic-registry-cli` + * `cerc/webapp-base` + * `cerc/laconic-console-host` ## Create a deployment @@ -79,9 +57,11 @@ Instructions for running a laconicd testnet full node and joining as a validator ```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 the spec file to map container ports to host ports as required: +* Edit `network` in both the spec files to map container ports to host ports as required: ```bash # testnet-laconicd-spec.yml @@ -95,12 +75,24 @@ Instructions for running a laconicd testnet full node and joining as a validator - '9473:9473' - '9090:9090' - '1317:1317' + + # laconic-console-spec.yml + ... + network: + ports: + console: + - '8080:80' ``` -* Create the deployment from the spec file: +* 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`): @@ -117,18 +109,56 @@ Instructions for running a laconicd testnet full node and joining as a validator ```bash # Comma separated list of nodes to keep persistent connections to - # Example: "node-1-id@laconicd.laconic.com:26656" - # Use the provided node id + # 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 +* 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= + + # Max fees for txs (default: 200000alnt) + CERC_LACONICD_FEES= + + # 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 @@ -151,21 +181,34 @@ laconic-so deployment --dir testnet-laconicd-deployment start # `catching_up: false` indicates that node is completely synced ``` -## Join as testnet validator +* View the laconic console at -* Import a key pair: +* Use the cli service for registry CLI operations: ```bash - KEY_NAME=alice + # 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 " + + # 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" + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys add --recover" # Query the keystore for your account's address - laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys show $KEY_NAME -a" + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys show -a" ``` +* Request tokens from the testnet faucet for your account if required + * Check balance for your account: ```bash @@ -179,10 +222,10 @@ laconic-so deployment --dir testnet-laconicd-deployment start # Edit the staking amount and other fields as required # Replace with your node's moniker in command below - laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'cat < -validator.json + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'cat < my-validator.json { "pubkey": $(laconicd cometbft show-validator), - "amount": "1000000000000000alnt", + "amount": "900000000alnt", "moniker": "", "commission-rate": "0.1", "commission-max-rate": "0.2", @@ -195,10 +238,10 @@ laconic-so deployment --dir testnet-laconicd-deployment start * Create a validator: ```bash - laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd tx staking create-validator -validator.json \ + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'laconicd tx staking create-validator my-validator.json \ --fees 500000alnt \ --chain-id=laconic_9000-1 \ - --from $KEY_NAME" + --from ' ``` * View staking validators: @@ -209,10 +252,32 @@ laconic-so deployment --dir testnet-laconicd-deployment start * Check that in the list of validators `` exists -* View validator set: +## Perform operations + +* To perform txs against the chain using registry CLI, set your private key in config in the CLI container: ```bash - laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query consensus comet validator-set" + # (Optional) Get the PK from your node + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys export --unarmored-hex --unsafe" + + # Set your PK as 'userKey' in the config file + laconic-so deployment --dir laconic-console-deployment exec cli "nano config.yml" + + # services: + # registry: + # ... + # userKey: + # ... + + # 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 + laconic-so deployment --dir laconic-console-deployment exec cli "laconic registry bond create --type photon --quantity 1000000000000" ``` ## Clean up @@ -233,3 +298,5 @@ laconic-so deployment --dir testnet-laconicd-deployment start # 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) diff --git a/testnet-onboarding-validator.md b/testnet-onboarding-validator.md new file mode 100644 index 0000000..50a0b60 --- /dev/null +++ b/testnet-onboarding-validator.md @@ -0,0 +1,245 @@ +# testnet-onboarding-validator + +## Onboard as a participant / validator on stage0 + +* Visit and click on `Create wallet` + * Save the mnemonic for further usage + +* Register your laconic address as a participant using the [Onboarding App](https://loro-signup.laconic.com/) + + * Read and accept the `Terms and Conditions` + + * Connect testnet-onboarding app to the wallet: + + * Click on `CONNECT WALLET` button on the testnet-onboarding app + + * Click on the WalletConnect icon on the top right corner in the wallet + + * If using the wallet website, enter WalletConnect URI for pairing + + * In the onboarding app, choose your nitro and laconicd account to onboard + + * Sign using the nitro key + + * Approve sign request on Wallet + + * Select the desired participant role (`Validator` or `Participant`) and accept the onboarding terms and conditions + + * In the next step, fund your laconic account by clicking on the `REQUEST TOKENS FROM FAUCET` button; ensure that the displayed balance is updated + + * Send transaction request to the wallet + + * From wallet, approve and send transaction to laconicd chain + +## Join as a validator on stage1 + +### Prerequisites + +* Minimum hardware requirements: + + ```bash + RAM: 8-16GB + Disk space: 200GB + CPU: 2 cores + ``` + +* Testnet genesis file and peer node address + +* Mnemonic from the [wallet](https://wallet.laconic.com) + +* Participant onboarded on stage0 + +### 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/testnet-laconicd 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 + ``` + +* Build the container images: + + ```bash + laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd build-containers + ``` + + This should create the following docker images locally: + + * `cerc/laconicd` + +### 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 + ``` + +* Edit `network` in the spec file 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' + ``` + +* Create the deployment from the spec file: + + ```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 + ``` + +* 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@laconicd.laconic.com:26656" + # Use the provided node id + CERC_PEERS="" + + # A custom human readable name for this node (default: TestnetNode) + CERC_MONIKER= + ``` + +### Start the deployment + +```bash +laconic-so deployment --dir testnet-laconicd-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 + ``` + +* After the node has caught up, view current list of staking validators: + + ```bash + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query staking validators" + ``` + + * Confirm that in the list of validators, your node moniker does not exist + +### Join as testnet validator + +* Import a key pair: + + ```bash + KEY_NAME=alice + + # 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" + ``` + +* Check balance for your account: + + ```bash + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query bank balances " + ``` + +* Create required validator configuration: + + ```bash + # Note: + # Edit the staking amount and other fields as required + # Replace with your node's moniker in command below + + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'cat < my-validator.json + { + "pubkey": $(laconicd cometbft show-validator), + "amount": "1000000000000000alnt", + "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 testnet-laconicd-deployment exec laconicd "laconicd tx staking create-validator my-validator.json \ + --fees 500000alnt \ + --chain-id=laconic_9000-1 \ + --from $KEY_NAME" + ``` + +* View staking validators: + + ```bash + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query staking validators" + ``` + + * Check that in the list of validators `` exists + +* View validator set: + + ```bash + laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query consensus comet validator-set" + ``` + +### 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 + ```