testnet-laconicd-stack/stack-orchestrator/stacks/testnet-laconicd
Nabarun e84827e1fc Update readme to run testnet node and join as validator (#10)
Part of [Create a public laconicd testnet](https://www.notion.so/Create-a-public-laconicd-testnet-896a11bdd8094eff8f1b49c0be0ca3b8)

Co-authored-by: Adw8 <adwaitgharpure@gmail.com>
Reviewed-on: cerc-io/testnet-laconicd-stack#10
Co-authored-by: Nabarun <nabarun@deepstacksoft.com>
Co-committed-by: Nabarun <nabarun@deepstacksoft.com>
2024-07-23 15:55:48 +00:00
..
README.md Update readme to run testnet node and join as validator (#10) 2024-07-23 15:55:48 +00:00
stack.yml Rename laconic2d container and services to laconicd (#8) 2024-07-23 12:55:38 +00:00

testnet-laconicd

Instructions for running a laconicd testnet full node and joining as a validator

Prerequisites

  • Minimum hardware requirements:

    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:

    laconic-so fetch-stack git.vdb.to/cerc-io/testnet-laconicd-stack
    
  • Clone required repositories:

    # 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:

    # 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:

    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:

    # 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:

    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):

    # 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:

    # 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=
    
  • Inside the laconic-console-deployment deployment directory, open config.env file and set following env variables:

    # 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: 200000photon)
    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

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:

    # 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:

    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 http://localhost:8080

  • Use the cli service for registry CLI operations:

    # Example
    laconic-so deployment --dir laconic-console-deployment exec cli "laconic registry status"
    

Join as testnet validator

  • Create / import a new key pair:

    # Create new keypair
    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys add <key-name>"
    
    # 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"
    
    # Query the keystore for your account's address
    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys show <key-name> -a"
    
  • Request tokens from the testnet faucet for your account if required

  • Check balance for your account:

    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query bank balances <account-address>"
    
  • Create required validator configuration:

    # 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 > <your-node-moniker>-validator.json
    {
      "pubkey": $(laconicd cometbft show-validator),
      "amount": "900000000photon",
      "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:

    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd 'laconicd tx staking create-validator <your-node-moniker>-validator.json \
    --fees 50photon \
    --chain-id=laconic_9000-1 \
    --from <key-name>'
    
  • View staking validators:

    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd query staking validators"
    
    • Check that in the list of validators <your-node-moniker> exists

Perform operations

  • To perform txs against the chain using registry CLI, set your private key in config in the CLI container:

    # (Optional) Get the PK from your node
    laconic-so deployment --dir testnet-laconicd-deployment exec laconicd "laconicd keys export <key-name> --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: <your-private-key>
    #   ...
    
    # 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:

    # Example
    laconic-so deployment --dir laconic-console-deployment exec cli "laconic registry bond create --type photon --quantity 100000000000"
    

Clean up

  • Stop all testnet-laconicd services running in the background:

    # Stop the docker containers
    laconic-so deployment --dir testnet-laconicd-deployment stop
    
  • To stop all services and also delete data:

    # 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