# testnet-laconicd Instructions for running a laconicd testnet full node and joining as a validator ## Prerequisites * Minimum hardware requirements: ```bash RAM: 8-16GB Disk space: 200GB CPU: 2 cores ``` * Testnet genesis file (file or an URL) and peer node addresses ## Setup * Clone the stack repo: ```bash laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack ``` * 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 * 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 laconic-so --stack ~/cerc/testnet-laconicd-stack/stack-orchestrator/stacks/laconic-console deploy init --output laconic-console-spec.yml ``` * Edit `network` in both the spec files 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' # laconic-console-spec.yml ... network: ports: console: - '8080:80' ``` * 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`): ```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@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= # Minimum gas price in alnt to accept for transactions (default: "0.001") MIN_GAS_PRICE ``` * 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: 200alnt) CERC_LACONICD_FEES= # Gas price to use for txs (default: 0.001alnt) # Use for auto fees calculation, gas and fees not required to be set in that case # Reference: https://git.vdb.to/cerc-io/laconic-registry-cli#gas-and-fees CERC_LACONICD_GASPRICE= # 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 * 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 ``` * View the laconic console at * Use the cli service for registry CLI operations: ```bash # 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 --recover" # Query the keystore for your account's address 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 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": "900000000alnt", "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 ' ``` * View validators: ```bash laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query staking validators" ``` * Check that in the list of validators `` exists ## Perform operations * To perform txs against the chain using registry CLI, set your private key in config in the CLI container: ```bash # (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 alnt --quantity 1000000000000" ``` ## 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 ``` * For `laconic-console`, see [laconic-console clean up](../laconic-console/README.md#clean-up)