394 lines
11 KiB
Markdown
394 lines
11 KiB
Markdown
# testnet-onboarding-validator
|
|
|
|
## Onboard as a participant / validator on stage0
|
|
|
|
* Visit <https://wallet.laconic.com/> 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 <https://loro-signup.laconic.com/sign-with-nitro-key> 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
|
|
CERC_CHAIN_ID=laconic_9000-1
|
|
|
|
# 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: <https://wallet.laconic.com/>
|
|
|
|
* 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
|
|
|
|
<a name="create-validator-using-cli"></a>
|
|
|
|
* Alternatively, create a validator using the laconicd CLI:
|
|
|
|
* Import a key pair:
|
|
|
|
```bash
|
|
KEY_NAME=alice
|
|
CHAIN_ID=laconic_9000-1
|
|
|
|
# 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 <account-address>"
|
|
```
|
|
|
|
* Create required validator configuration:
|
|
|
|
```bash
|
|
# Note:
|
|
# Edit the staking amount and other fields as required
|
|
# Replace <your-node-moniker> with your node's moniker in command below
|
|
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'cat <<EOF > my-validator.json
|
|
{
|
|
"pubkey": $(laconicd cometbft show-validator),
|
|
"amount": "1000000000000000alnt",
|
|
"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
|
|
laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd tx staking create-validator my-validator.json \
|
|
--fees 500000alnt \
|
|
--chain-id=$CHAIN_ID \
|
|
--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 `<your-node-moniker>` 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 SAPO testnet
|
|
|
|
### Prerequisites
|
|
|
|
* SAPO testnet (testnet2) genesis file and peer node address
|
|
|
|
* A testnet stage1 node
|
|
|
|
* For setting up a fresh testnet2 node, follow [Join as a validator](#join-as-a-validator-on-stage1), but use testnet2 chain id (`laconic-testnet-2`)
|
|
|
|
### 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
|
|
```
|
|
|
|
Note: Make sure the latest `cerc-io/laconicd` changes have been pulled
|
|
|
|
* 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 -
|
|
```
|
|
|
|
### 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-sapo.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](#create-validator-using-cli) to join as a validator using laconicd CLI (use chain id `laconic-testnet-2`)
|
|
|
|
### 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
|