# 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` * On next page, enter your email to register to join the LORO testnet * Visit the confirmation link sent on the registered email (email delivery might take a few minutes) * It should take you to the `Testnet Onboarding` app * Note: The confirmation link will only work the first time, visit for further attempts if required * 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 stage0 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 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 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 * Open the wallet: * Create a validator from the onboarding app: * Visit the [validator creation](https://loro-signup.laconic.com/validator) page * If required, connect testnet-onboarding app to the wallet with which onboarding was done on stage0 * Select the Laconic account (same as the one used while onboarding) using which you wish to send the create validator request * This should display the details of your onboarded participant * You can proceed if the participant has `validator` role * Enter your node's moniker (use the same one used while [configuring](#configuration) the `testnet-laconicd-deployment`) * Fetch and enter your validator's pubkey: ```bash laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd cometbft show-validator" | jq -r .key ``` * Send the transaction request to wallet * From wallet, approve and send transaction to stage1 laconicd chain * Alternatively, create a validator using the laconicd CLI: * 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 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) sudo rm -r testnet-laconicd-deployment ``` ## Upgrade to testnet2 ### Prerequisites * testnet2 genesis file and peer node address * A testnet stage1 node ### Setup * Stop the stage1 node: ```bash # In dir where stage1 node deployment (`testnet-laconicd-deployment`) exists TESTNET_DEPLOYMENT=$(pwd)/testnet-laconicd-deployment laconic-so deployment --dir testnet-laconicd-deployment stop --delete-volumes ``` * Clone / pull the stack repo: ```bash laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack --pull ``` * Clone / pull the 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 --force-rebuild ``` This should create the following docker images locally with latest changes: * `cerc/laconicd` ### Create a deployment * The existing stage1 deployment can be used for testnet2 * Copy over the published testnet2 genesis file (`.json`) to data directory in deployment (`testnet-laconicd-deployment/data/laconicd-data/tmp-testnet2`): ```bash # Example mkdir -p $TESTNET_DEPLOYMENT/data/laconicd-data/tmp-testnet2 cp genesis.json $TESTNET_DEPLOYMENT/data/laconicd-data/tmp-testnet2/genesis.json ``` * Run script to reset node data and upgrade for testnet2: ```bash cd ~/cerc/testnet-laconicd-stack docker run -it \ -v $TESTNET_DEPLOYMENT/data/laconicd-data:/root/.laconicd \ -v ./ops/stage2:/scripts \ cerc/laconicd:local bash -c "/scripts/upgrade-node-to-testnet2.sh" cd $TESTNET_DEPLOYMENT ``` ### Configuration * Inside the `testnet-laconicd-deployment` deployment directory, open `config.env` file and set following env variables: ```bash CERC_CHAIN_ID=laconic-testnet-2 # Comma separated list of nodes to keep persistent connections to # Example: "node-1-id@laconicd-testnet2.laconic.com:36656" # Use the provided node id CERC_PEERS="" # A custom human readable name for this node CERC_MONIKER= ``` ### Start the deployment ```bash laconic-so deployment --dir testnet-laconicd-deployment start ``` See [Check status](#check-status) to follow sync status of your node See [Join as testnet validator](#join-as-testnet-validator) to join as a validator using laconicd CLI ### Clean up * Same as [Clean up](#clean-up) ## Troubleshooting * If you face any issues in the onboarding app or the web-wallet, clear your browser cache and reload