Step-by-Step Manual Deployment

Deploy each Solo network component individually for maximum control over configuration and debugging. Execute each step manually through the Solo CLI and integrate Solo into bespoke automation pipelines.

Overview

Manual deployment lets you deploy each Solo network component individually, giving you full control over configuration, sequencing, and troubleshooting. Use this approach when you need to customise specific steps, debug a component in isolation, or integrate Solo into a bespoke automation pipeline.


Prerequisites

Before proceeding, ensure you have completed the following:

  • System Readiness — your local environment meets all hardware and software requirements (Docker, kind, kubectl, helm, Solo).
  • Quickstart — you have a running Kind cluster.
  • Set your environment variables if you have not already done so:
export SOLO_CLUSTER_NAME=solo
export SOLO_NAMESPACE=solo-deployment
export SOLO_CLUSTER_SETUP_NAMESPACE=solo-cluster
export SOLO_DEPLOYMENT=solo-deployment
$env:SOLO_CLUSTER_NAME = 'solo'
$env:SOLO_NAMESPACE = 'solo-deployment'
$env:SOLO_CLUSTER_SETUP_NAMESPACE = 'solo-cluster'
$env:SOLO_DEPLOYMENT = 'solo-deployment'

Deployment Steps

Note: The expected output blocks below are fetched from the latest published Solo release at build time and will always reflect the current version.

1. Connect Cluster and Create Deployment

  • Connect Solo to the Kind cluster and create a new deployment configuration:

    # Connect to the Kind cluster
    solo cluster-ref config connect \
      --cluster-ref kind-${SOLO_CLUSTER_NAME} \
      --context kind-${SOLO_CLUSTER_NAME}
    
    # Create a new deployment
    solo deployment config create \
      -n "${SOLO_NAMESPACE}" \
      --deployment "${SOLO_DEPLOYMENT}"
    
  • Expected Output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: cluster-ref config connect --cluster-ref kind-solo --context kind-solo
      **********************************************************************************
      ❯ Initialize
      ✔ Initialize 
      ❯ Validating cluster ref: 
      ✔ Validating cluster ref: kind-solo 
      ❯ Test connection to cluster: 
      ✔ Test connection to cluster: kind-solo 
      ❯ Associate a context with a cluster reference: 
      ✔ Associate a context with a cluster reference: kind-solo 
  • ******************************* Solo *********************************************
    Version			: 0.80.0
    Kubernetes Context	: kind-solo
    Kubernetes Cluster	: kind-solo
    Current Command		: deployment config create --namespace solo --deployment solo-deployment --realm 0 --shard 0
    Kubernetes Namespace	: solo
    **********************************************************************************
    ❯ Initialize
    ✔ Initialize 
    ❯ Add deployment to local config
    ✔ Adding deployment: solo-deployment with namespace: solo to local config 

2. Add Cluster to Deployment

  • Attach the cluster to your deployment and specify the number of consensus nodes:

    1. Single node:

    solo deployment cluster attach \
      --deployment "${SOLO_DEPLOYMENT}" \
      --cluster-ref kind-${SOLO_CLUSTER_NAME} \
      --num-consensus-nodes 1
    

    2. Multiple nodes (e.g., –num-consensus-nodes 3):

    solo deployment cluster attach \
      --deployment "${SOLO_DEPLOYMENT}" \
      --cluster-ref kind-${SOLO_CLUSTER_NAME} \
      --num-consensus-nodes 3
    
  • Expected Output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: deployment cluster attach --deployment solo-deployment --cluster-ref kind-solo --num-consensus-nodes 1
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependencies 
      ❯ Setup chart manager
      ✔ Setup chart manager [0.7s]
      ❯ Initialize
      ✔ Initialize 
      ❯ Verify args
      ✔ Verify args 
      ❯ check ledger phase
      ✔ check ledger phase 
      ❯ Test cluster reference connection
      ✔ Test cluster reference connection: kind-solo, context: kind-solo 
      ❯ Verify prerequisites
      ✔ Verify prerequisites 
      ❯ Check for other deployments
      ✔ Check for other deployments 
      ❯ add cluster-ref in local config deployments
      Adding cluster-ref: kind-solo for deployment: solo-deployment in local config
      ✔ add cluster-ref: kind-solo for deployment: solo-deployment in local config 
      ❯ create remote config for deployment
      ✔ create remote config for deployment: solo-deployment in cluster reference: kind-solo 

3. Generate Keys

  • Generate the gossip and TLS keys for your consensus nodes:

    solo keys consensus generate \
      --gossip-keys \
      --tls-keys \
      --deployment "${SOLO_DEPLOYMENT}"
    

    PEM key files are written to ~/.solo/cache/keys/.

  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: keys consensus generate --gossip-keys --tls-keys --deployment solo-deployment
      **********************************************************************************
      ❯ Initialize
      ✔ Initialize 
      ❯ Generate gossip keys
      ❯ Backup old files
      ✔ Backup old files 
      ❯ Gossip key for node: node1
      ✔ Gossip key for node: node1 [0.2s]
      ✔ Generate gossip keys [0.2s]
      ❯ Generate gRPC TLS Keys
      ❯ Backup old files
      ❯ TLS key for node: node1
      ✔ Backup old files 
      ✔ TLS key for node: node1 [0.2s]
      ✔ Generate gRPC TLS Keys [0.2s]
      ❯ Finalize
      ✔ Finalize 

4. Set Up Cluster with Shared Components

  • Install shared cluster-level components (MinIO Operator, Prometheus CRDs, etc.) into the cluster setup namespace:

    solo cluster-ref config setup --cluster-setup-namespace "${SOLO_CLUSTER_SETUP_NAMESPACE}"
    
  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: cluster-ref config setup --cluster-setup-namespace solo-cluster
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] [0.1s]
      ✔ Check dependencies [0.1s]
      ❯ Setup chart manager
      ✔ Setup chart manager [0.7s]
      ❯ Initialize
      ✔ Initialize 
      ❯ Install cluster charts
      ❯ Install pod-monitor-role ClusterRole
      ✅ ClusterRole pod-monitor-role installed successfully in context kind-solo
      ✔ Install pod-monitor-role ClusterRole 
      ❯ Install MinIO Operator chart
      ✅ MinIO Operator chart installed successfully on context kind-solo
      ✔ Install MinIO Operator chart [0.7s]
      ✔ Install cluster charts [0.7s]

5. Deploy the Network

  • Deploy the Solo network Helm chart, which provisions the consensus node pods, HAProxy, Envoy, and MinIO:

    solo consensus network deploy --deployment "${SOLO_DEPLOYMENT}"
    

    To provide a custom consensus node application.properties file, pass --application-properties <path>. Solo merges custom files with its generated defaults unless the file includes the overwrite marker. See Custom Application Properties for merge and overwrite examples.

  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: consensus network deploy --deployment solo-deployment --consensus-node-version v0.74.0
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] [0.1s]
      ✔ Check dependencies [0.1s]
      ❯ Setup chart manager
      ✔ Setup chart manager [0.6s]
      ❯ Initialize
      ❯ Acquire lock
      ✔ Acquire lock - lock acquired successfully, attempt: 1/10 
      ✔ Initialize [0.2s]
      ❯ Copy gRPC TLS Certificates
      ↓ Copy gRPC TLS Certificates [SKIPPED: Copy gRPC TLS Certificates]
      ❯ Prepare staging directory
      ❯ Copy Gossip keys to staging
      ✔ Copy Gossip keys to staging 
      ❯ Copy gRPC TLS keys to staging
      ✔ Copy gRPC TLS keys to staging 
      ✔ Prepare staging directory 
      ❯ Copy node keys to secrets
      ❯ Copy TLS keys
      ❯ Node: node1, cluster: kind-solo
      ❯ Copy Gossip keys
      ✔ Copy TLS keys 
      ✔ Copy Gossip keys 
      ✔ Node: node1, cluster: kind-solo 
      ✔ Copy node keys to secrets 
      ❯ Install monitoring CRDs
      ❯ Pod Logs CRDs
      ❯ Prometheus Operator CRDs
      ✔ Pod Logs CRDs 
       - Installed prometheus-operator-crds chart, version: 24.0.2
      ✔ Prometheus Operator CRDs [4s]
      ✔ Install monitoring CRDs [4s]
      ❯ Install chart 'solo-deployment'
       - Installed solo-deployment chart, version: 0.64.0
      ✔ Install chart 'solo-deployment' [2s]
      ❯ Patch ServiceMonitor for Prometheus discovery
      ✔ Patch ServiceMonitor for Prometheus discovery 
      ❯ Check for load balancer
      ↓ Check for load balancer [SKIPPED: Check for load balancer]
      ❯ Redeploy chart with external IP address config
      ↓ Redeploy chart with external IP address config [SKIPPED: Redeploy chart with external IP address config]
      ❯ Check node pods are running
      ❯ Check Node: node1, Cluster: kind-solo
      ✔ Check Node: node1, Cluster: kind-solo [22s]
      ✔ Check node pods are running [22s]
      ❯ Check proxy pods are running
      ❯ Check HAProxy for: node1, cluster: kind-solo
      ❯ Check Envoy Proxy for: node1, cluster: kind-solo
      ✔ Check HAProxy for: node1, cluster: kind-solo 
      ✔ Check Envoy Proxy for: node1, cluster: kind-solo 
      ✔ Check proxy pods are running 
      ❯ Check auxiliary pods are ready
      ❯ Check MinIO
      ↓ Check MinIO [SKIPPED: Check MinIO]
      ✔ Check auxiliary pods are ready 
      ❯ Add node and proxies to remote config
      ✔ Add node and proxies to remote config 
      ❯ Copy wraps lib into consensus node
      ↓ Copy wraps lib into consensus node [SKIPPED: Copy wraps lib into consensus node]
      ❯ Copy block-nodes.json
      ✔ Copy block-nodes.json [0.7s]
      ❯ Copy JFR config file to nodes
      ↓ Copy JFR config file to nodes [SKIPPED: Copy JFR config file to nodes]

6. Set Up Consensus Nodes

  • Download the consensus node platform software and configure each node:

    export CONSENSUS_NODE_VERSION=v0.66.0
    
    solo consensus node setup \
      --deployment "${SOLO_DEPLOYMENT}" \
      --release-tag "${CONSENSUS_NODE_VERSION}"
    

    On native Windows (PowerShell), set the version with $env:CONSENSUS_NODE_VERSION = 'v0.66.0' and reference variables as $env:SOLO_DEPLOYMENT / $env:CONSENSUS_NODE_VERSION.

  • Example output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: consensus node setup --deployment solo-deployment --consensus-node-version v0.74.0
      **********************************************************************************
      ❯ Load configuration
      ✔ Load configuration [0.2s]
      ❯ Initialize
      ✔ Initialize [0.2s]
      ❯ Validate nodes states
      ❯ Validating state for node node1
      ✔ Validating state for node node1 - valid state: requested 
      ✔ Validate nodes states 
      ❯ Identify network pods
      ❯ Check network pod: node1
      ✔ Check network pod: node1 
      ✔ Identify network pods 
      ❯ Fetch platform software into network nodes
      ❯ Update node: node1 [ platformVersion = v0.74.0, context = kind-solo ]
      ✔ Update node: node1 [ platformVersion = v0.74.0, context = kind-solo ] [2s]
      ✔ Fetch platform software into network nodes [4s]
      ❯ Setup network nodes
      ❯ Node: node1
      ❯ Copy configuration files
      ✔ Copy configuration files [0.5s]
      ❯ Set file permissions
      ✔ Set file permissions [0.4s]
      ✔ Node: node1 [1s]
      ✔ Setup network nodes [1s]
      ❯ Update block-nodes.json
      ✔ Update block-nodes.json [0.7s]
      ❯ setup network node folders
      ✔ setup network node folders [0.1s]
      ❯ Change node state to configured in remote config
      ✔ Change node state to configured in remote config 

7. Start Consensus Nodes

  • Start all configured nodes and wait for them to reach ACTIVE status:

    solo consensus node start --deployment "${SOLO_DEPLOYMENT}"
    
  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: consensus node start --deployment solo-deployment
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependencies 
      ❯ Setup chart manager
      ✔ Setup chart manager [0.7s]
      ❯ Load configuration
      ✔ Load configuration [0.3s]
      ❯ Initialize
      ✔ Initialize 
      ❯ Validate nodes states
      ❯ Validating state for node node1
      ✔ Validating state for node node1 - valid state: configured 
      ✔ Validate nodes states 
      ❯ Identify existing network nodes
      ❯ Check network pod: node1
      ✔ Check network pod: node1 
      ✔ Identify existing network nodes 
      ❯ Upload state files network nodes
      ↓ Upload state files network nodes [SKIPPED: Upload state files network nodes]
      ❯ Starting nodes
      ❯ Start node: node1
      ✔ Start node: node1 [1s]
      ✔ Starting nodes [1s]
      ❯ Enable port forwarding for debug port and/or GRPC port
      Using requested port 35211
      ✔ Enable port forwarding for debug port and/or GRPC port 
      ❯ Check nodes are ACTIVE and proxies are ready
      ❯ Check all nodes are ACTIVE
      ❯ Check node proxies are ACTIVE
      ❯ Check proxy for node: node1
      ❯ Check network pod: node1 
      ✔ Check proxy for node: node1 
      ✔ Check node proxies are ACTIVE 
      Using requested port 30212
      Stopping port-forward for port [30212]
      Using requested port 30212
      Stopping port-forward for port [30212]
      Using requested port 30212
      ✔ Check network pod: node1  - gRPC readiness 3/3, attempt: 2/20 [40s]
      ✔ Check all nodes are ACTIVE [40s]
      ✔ Check nodes are ACTIVE and proxies are ready [40s]
      ❯ Wait for TSS
      ❯ Waiting for node: node1
      ✔ Waiting for node: node1, attempt 1/60 [10s]
      ✔ Wait for TSS [10s]
      set gRPC Web endpoint
      Stopping port-forward for port [30212]
      Using requested port 30212
      set gRPC Web endpoint [4s]
      ❯ Change node state to started in remote config
      ✔ Change node state to started in remote config 
      ❯ Add node stakes
      ❯ Adding stake for node: node1
      ✔ Adding stake for node: node1 [2s]
      ✔ Add node stakes [2s]
      ❯ Emit node started event
      ✔ Emit node started event 
      Stopping port-forward for port [30212]

8. Deploy Mirror Node

  • Deploy the Hedera Mirror Node, which indexes all transaction data and exposes a REST API and gRPC endpoint:

    solo mirror node add \
      --deployment "${SOLO_DEPLOYMENT}" \
      --cluster-ref kind-${SOLO_CLUSTER_NAME} \
      --enable-ingress \
      --pinger
    

    The --pinger flag keeps the mirror node’s importer active by regularly submitting record files. The --enable-ingress flag installs the HAProxy ingress controller for the mirror node REST API.

  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: mirror node add --deployment solo-deployment --cluster-ref kind-solo --enable-ingress --quiet-mode
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependencies 
      ❯ Setup chart manager
      ✔ Setup chart manager [0.7s]
      ❯ Initialize
      ❯ Acquire lock
      ✔ Acquire lock - lock acquired successfully, attempt: 1/10 
      ✔ Initialize [0.4s]
      ❯ Add mirror node to remote config
      ✔ Add mirror node to remote config 
      ❯ load node client
      Using requested port 30212
      ✔ load node client [1s]
      ❯ Deploy charts
      ❯ Enable shared resources
      ❯ Install Shared Resources chart
      ✔ Install Shared Resources chart [3s]
      ❯ Load redis credentials
      ✔ Load redis credentials 
      ❯ Initialize Postgres pod
      ❯ Wait for Postgres pod to be ready
      ✔ Wait for Postgres pod to be ready [11s]
      ✔ Initialize Postgres pod [11s]
      ❯ Add shared resource components to remote config
      ✔ Add shared resource components to remote config 
      ✔ Enable shared resources [14s]
      ❯ Prime mirror-node postgres secret
      ✔ Prime mirror-node postgres secret [0.7s]
      ❯ Delete stale mirror redis secret
      ✔ Delete stale mirror redis secret 
      ❯ Run database initialization script
      ✔ Run database initialization script [1s]
      ❯ Enable mirror-node
      ❯ Prepare address book
      ✔ Prepare address book 
      ❯ Install mirror ingress controller
       - Installed haproxy-ingress-1 chart, version: 0.14.5
      ✔ Install mirror ingress controller [0.7s]
      ❯ Deploy mirror-node
       - Installed mirror chart, version: v0.157.0
      ✔ Deploy mirror-node [2s]
      ✔ Enable mirror-node [3s]
      ✔ Deploy charts [20s]
      ❯ Check pods are ready
      ❯ Check Grpc
      ❯ Check Importer
      ❯ Check Rest
      ❯ Check Rest Java
      ❯ Check Web3
      ✔ Check Rest Java [10s]
      ✔ Check Web3 [14s]
      ✔ Check Grpc [18s]
      ✔ Check Importer [18s]
      ✔ Check Rest [20s]
      ✔ Check pods are ready [20s]
      ❯ Enable port forwarding for mirror ingress controller
      Using requested port 38081
      ✔ Enable port forwarding for mirror ingress controller 
      ❯ Show user messages
      
       *** Port forwarding enabled: ***
      -------------------------------------------------------------------------------
       - Mirror ingress controller port forward enabled on 127.0.0.1:38081
      -------------------------------------------------------------------------------
      ✔ Show user messages 
      Stopping port-forward for port [30212]

9. Deploy Explorer

  • Deploy the Hiero Explorer, a web UI for browsing transactions and accounts:

    solo explorer node add \
      --deployment "${SOLO_DEPLOYMENT}" \
      --cluster-ref kind-${SOLO_CLUSTER_NAME}
    
  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: explorer node add --deployment solo-deployment --cluster-ref kind-solo --quiet-mode
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependencies 
      ❯ Setup chart manager
      ✔ Setup chart manager [0.7s]
      ❯ Initialize
      ❯ Acquire lock
      ✔ Acquire lock - lock acquired successfully, attempt: 1/10 
      ✔ Initialize [0.4s]
      ❯ Load remote config
      ✔ Load remote config [0.1s]
      ❯ Add explorer to remote config
      ✔ Add explorer to remote config 
      ❯ Install cert manager
      ↓ Install cert manager [SKIPPED: Install cert manager]
      ❯ Install explorer
       - Installed hiero-explorer-1 chart, version: 26.1.0
      ✔ Install explorer [0.7s]
      ❯ Install explorer ingress controller
      ↓ Install explorer ingress controller [SKIPPED: Install explorer ingress controller]
      ❯ Check explorer pod is ready
      ✔ Check explorer pod is ready [4s]
      ❯ Check haproxy ingress controller pod is ready
      ↓ Check haproxy ingress controller pod is ready [SKIPPED: Check haproxy ingress controller pod is ready]
      ❯ Enable port forwarding for explorer
      No port forward config found for Explorer
      Using requested port 38080
      ✔ Enable port forwarding for explorer 
      ❯ Show user messages
      
       *** Port forwarding enabled: ***
      -------------------------------------------------------------------------------
       - Explorer port forward enabled on 127.0.0.1:38080
      -------------------------------------------------------------------------------
      ✔ Show user messages 

10. Deploy JSON-RPC Relay

  • Deploy the Hiero JSON-RPC Relay to expose an Ethereum-compatible JSON-RPC endpoint for EVM tooling (MetaMask, Hardhat, Foundry, etc.):

    solo relay node add \
      -i node1 \
      --deployment "${SOLO_DEPLOYMENT}"
    

TODO: double check these, and update in solo repo if needed to match, also double check the exported variables match

  • Expected output:

    ******************************* Solo *********************************************
      Version			: 0.80.0
      Kubernetes Context	: kind-solo
      Kubernetes Cluster	: kind-solo
      Current Command		: relay node add --node-aliases node1 --deployment solo-deployment --cluster-ref kind-solo --relay-version 0.77.0
      **********************************************************************************
      ❯ Pre-flight: check Docker Desktop containerd setting
      ✔ Pre-flight: check Docker Desktop containerd setting 
      ❯ Check dependencies
      ❯ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ❯ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64]
      ✔ Check dependency: kind [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: helm [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependency: kubectl [OS: linux, Release: 6.8.0-117-generic, Arch: x64] 
      ✔ Check dependencies 
      ❯ Setup chart manager
      ✔ Setup chart manager [0.8s]
      ❯ Initialize
      ❯ Acquire lock
      ✔ Acquire lock - lock acquired successfully, attempt: 1/10 
      ✔ Initialize [0.4s]
      ❯ Add relay component in remote config
      ✔ Add relay component in remote config 
      ❯ Check chart is installed
      ✔ Check chart is installed [0.1s]
      ❯ Prepare chart values
      ✔ Prepare chart values 
      ❯ Deploy JSON RPC Relay
       - Installed relay-1 chart, version: 0.77.0
      ✔ Deploy JSON RPC Relay [0.6s]
      ❯ Check relay is running
      ✔ Check relay is running [4s]
      ❯ Check relay is ready
      ✔ Check relay is ready [3s]
      ❯ Enable port forwarding for relay node
      No port forward config found for JSON RPC Relay
      Using requested port 37546
      ✔ Enable port forwarding for relay node 
      ❯ Show user messages
      
       *** Port forwarding enabled: ***
      -------------------------------------------------------------------------------
       - JSON RPC Relay port forward enabled on 127.0.0.1:37546
      -------------------------------------------------------------------------------
      ✔ Show user messages 

Cleanup

When you are done, destroy components in the reverse order of deployment.

Important: Always destroy components before destroying the network. Skipping this order can leave orphaned Helm releases and PVCs in your cluster.

1. Destroy JSON-RPC Relay

solo relay node destroy \
  -i node1 \
  --deployment "${SOLO_DEPLOYMENT}" \
  --cluster-ref kind-${SOLO_CLUSTER_NAME}

2. Destroy Explorer

solo explorer node destroy \
  --deployment "${SOLO_DEPLOYMENT}" \
  --force

3. Destroy Mirror Node

solo mirror node destroy \
  --deployment "${SOLO_DEPLOYMENT}" \
  --force

4. Destroy the Network

solo consensus network destroy \
  --deployment "${SOLO_DEPLOYMENT}" \
  --force