# Solo — Full Documentation
# Generated: 2026-09-24
# Source: https://solo.hiero.org/
# This file contains the complete Solo documentation in Markdown format for AI consumption.
# Concise index: https://solo.hiero.org/llms.txt
---
# One-shot Falcon Deployment
URL: https://solo.hiero.org/docs/advanced-solo-setup/network-deployments/falcon-deployment/
Description: Deploy a complete Solo network from a single YAML file for repeatable advanced setups, CI pipelines, and custom component configuration. Falcon combines simplicity with full customization using the Solo values file format.
## Overview
One-shot Falcon deployment is Solo's YAML-driven one-shot workflow. It uses the same core
deployment pipeline as `solo one-shot single deploy`, but lets you inject
component-specific flags through a single values file.
Use One-shot Falcon deployment when you need a repeatable advanced setup, want to check a complete deployment into source control, or need to customise component flags without running every Solo command manually.
Falcon is especially useful for:
- CI/CD pipelines and automated test environments.
- Reproducible local developer setups.
- Advanced deployments that need custom chart paths, image versions, ingress,
storage, TLS, or node startup options.
> **Important:** Falcon is an orchestration layer over Solo's standard commands.
> It does not introduce a separate deployment model. Solo still creates a
> deployment, attaches clusters, deploys the network, configures nodes, and then
> adds optional components such as mirror node, explorer, and relay.
## Prerequisites
Before proceeding, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness) - your local environment meets the hardware and software requirements for Solo, Kubernetes, Docker, Kind, kubectl, and Helm.
- [**Quickstart**](/docs/simple-solo-setup/quickstart) -you are already familiar with the standard one-shot deployment workflow.
## How Falcon Works
When you run Falcon deployment, Solo executes the same end-to-end deployment
sequence used by its one-shot workflows:
1. Connect to the Kubernetes cluster.
2. Create a deployment and attach the cluster reference.
3. Set up shared cluster components.
4. Generate gossip and TLS keys.
5. Deploy the consensus network and, if enabled, the block node (in parallel).
6. Set up and start consensus nodes.
7. Optionally, deploy mirror node, explorer, and relay in parallel for faster
startup.
8. Create predefined test accounts.
9. Write deployment notes, versions, port-forward details, and account data to a local output directory.
The difference is that Falcon reads a YAML file and maps its top-level sections
to the underlying Solo subcommands.
| Values file section | Solo subcommand invoked |
| ------------------- | ----------------------- |
| `network` | `solo consensus network deploy` |
| `setup` | `solo consensus node setup` |
| `consensusNode` | `solo consensus node start` |
| `mirrorNode` | `solo mirror node add` |
| `explorerNode` | `solo explorer node add` |
| `relayNode` | `solo relay node add` |
| `blockNode` | `solo block node add` (when `ONE_SHOT_WITH_BLOCK_NODE=true`) |
For the full list of supported CLI flags per section, see the
[**Falcon Values File Reference**](/docs/advanced-solo-setup/network-deployments/falcon-flags-reference).
If you set `network.--application-properties`, see
[Custom Application Properties](/docs/advanced-solo-setup/network-deployments/custom-application-properties)
for the difference between Solo's default merge mode and full overwrite mode.
## Prepare a Falcon values file
Instead of authoring a values file by hand, you can use the interactive `prepare` wizard to generate one:
```bash
solo one-shot falcon prepare
```
The wizard prompts for component toggles (mirror node, explorer, relay), consensus node count, component versions, ingress, storage type, developer options, and port forwarding. All prompts have sensible defaults, so you can press Enter to accept them.
To generate a values file with all defaults (no prompts):
```bash
solo one-shot falcon prepare --quiet-mode
```
To specify a custom output path:
```bash
solo one-shot falcon prepare --output-values-file ./my-values.yaml
```
### Output file location
By default, the generated file is written to `~/.solo/cache/falcon-values.yaml` — a deterministic absolute path regardless of how or where Solo is invoked. You can override this with `--output-values-file`. The success message always prints the fully resolved path so there is no ambiguity.
- **Default**: `~/.solo/cache/falcon-values.yaml` — always the same location.
- **Relative path**: `--output-values-file ./configs/my-values.yaml` — resolved against the current working directory (so `/tmp/configs/my-values.yaml` if invoked from `/tmp`).
- **Absolute path**: `--output-values-file /tmp/falcon-values.yaml` — written to that exact location regardless of the current working directory.
The generated file is ready to use with `solo one-shot falcon deploy --values-file`. For the full list of flags the wizard sets, see the [Falcon Values File Reference](/docs/advanced-solo-setup/network-deployments/falcon-flags-reference).
## Create a Falcon Values File
Create a YAML file to control every component of your Solo deployment. The file can have any name -`falcon-values.yaml` is used throughout this guide as a convention.
> **Note:** Keys within each section must be the full CLI flag name including the `--` prefix - for example, `--release-tag`, not `release-tag` or `-r`. Any section you omit
> from the file is skipped, and Solo uses the built-in defaults for that component.
### Example: Single-Node Falcon Deployment
The following `falcon-values.yaml` example deploys a standard single-node network with mirror node,
explorer, and relay enabled:
```yaml
network:
--release-tag: "v0.71.0"
--pvcs: false
setup:
--release-tag: "v0.71.0"
consensusNode:
--force-port-forward: true
mirrorNode:
--enable-ingress: true
--pinger: true
--force-port-forward: true
explorerNode:
--enable-ingress: true
--force-port-forward: true
relayNode:
--node-aliases: "node1"
--force-port-forward: true
```
## Deploy with Falcon one-shot
Run Falcon deployment by pointing Solo at the values file:
```bash
solo one-shot falcon deploy --values-file falcon-values.yaml
```
Solo creates a one-shot deployment, applies the values from the YAML file to the
appropriate subcommands, and then deploys the full environment.
### Command-Line Flags (Not in YAML File)
The following flags are passed on the command line and cannot be set in the YAML file:
- `--deployment`, `--namespace`, `--cluster-ref`, `--num-consensus-nodes`
Note: `--values-file` specifies which YAML file to load.
- `--values-file` selects the YAML file to load.
- `--deployment`, `--namespace`, `--cluster-ref`, and `--num-consensus-nodes`
are top-level one-shot inputs.
> **Important:** Do not rely on `--deployment` inside `falcon-values.yaml`.
> Solo intentionally ignores `--deployment` values from section content during
> Falcon argument expansion. Set the deployment name on the command line if you
> need a specific name.
> **Tip:** When not specified, Falcon uses these defaults: `--deployment one-shot`,
> `--namespace one-shot`, `--cluster-ref one-shot`, and `--num-consensus-nodes 1`.
> Pass any of these explicitly on the command line to override them.
**Example:**
```bash
solo one-shot falcon deploy \
--deployment falcon-demo \
--cluster-ref one-shot \
--values-file falcon-values.yaml
```
## Multi-Node Falcon Deployment
For multiple consensus nodes, set the node count on the Falcon command and then
provide matching per-node settings where required.
- **Example:**
```bash
solo one-shot falcon deploy \
--deployment falcon-multi \
--num-consensus-nodes 3 \
--values-file falcon-values.yaml
```
- **Example multi-node values file:**
```yaml
network:
--release-tag: "v0.71.0"
--pvcs: true
setup:
--release-tag: "v0.71.0"
consensusNode:
--force-port-forward: true
--stake-amounts: "100,100,100"
mirrorNode:
--enable-ingress: true
--pinger: true
explorerNode:
--enable-ingress: true
relayNode:
--node-aliases: "node1,node2,node3"
```
- The `--node-aliases` value in the `relayNode` section must match the node aliases
generated by `--num-consensus-nodes`. Nodes are auto-named `node1`, `node2`,
`node3`, and so on. Setting this to only `node1` is valid if you want the relay
to serve a single node, but specifying all aliases is typical for full coverage.
- Use this pattern when you need a repeatable multi-node deployment but do not
want to manage each step manually.
> **Note:** Multi-node deployments require more host resources than single-node
> deployments. Follow the resource guidance in
> [**System Readiness**](/docs/simple-solo-setup/system-readiness), and increase Docker
> memory and CPU allocation before deploying.
## Common Falcon Customisations
Because each YAML section maps directly to the corresponding Solo subcommand,
you can use Falcon to centralise advanced options such as:
- Custom release tags for the consensus node platform.
- Local chart directories for mirror node, relay, explorer, or block node.
- Local consensus node build paths for development workflows.
- Ingress and domain settings.
- Mirror node external database settings.
- Node startup settings such as state files, port forwarding, and stake amounts.
- Storage backends and credentials for stream file handling.
### Example: Local Development with Local Chart Directories
```yaml
setup:
--local-build-path: "/path/to/hiero-consensus-node/hedera-node/data"
mirrorNode:
--mirror-node-chart-dir: "/path/to/hiero-mirror-node/charts"
relayNode:
--relay-chart-dir: "/path/to/hiero-json-rpc-relay/charts"
explorerNode:
--explorer-chart-dir: "/path/to/hiero-mirror-node-explorer/charts"
```
This pattern is useful for local integration testing against unpublished
component builds.
## Falcon with Block Node
Falcon can also include block node configuration.
> **Note:** Block node workflows are advanced and require higher resource
> allocation and version compatibility across consensus node, block node, and
> related components.
> Docker memory must be set to at least 16 GB before deploying with block node enabled.
>
> Block node support also requires the
> `ONE_SHOT_WITH_BLOCK_NODE=true` environment variable to be set before
> running `falcon deploy`. Without it, Solo skips the block node add step even
> if a `blockNode` section is present in the values file.
Block node deployment is subject to version compatibility requirements. Minimum
versions are consensus node ≥ v0.72.0 and block node ≥ 0.29.0. Mixing
incompatible versions will cause the deployment to fail. Check the
[Version Compatibility Reference](/docs/simple-solo-setup/system-readiness#version-compatibility-reference)
before enabling block node.
Example:
```yaml
network:
--release-tag: "v0.72.0"
setup:
--release-tag: "v0.72.0"
consensusNode:
--force-port-forward: true
blockNode:
--release-tag: "v0.29.0"
--enable-ingress: false
mirrorNode:
--enable-ingress: true
--pinger: true
explorerNode:
--enable-ingress: true
relayNode:
--node-aliases: "node1"
--force-port-forward: true
```
Use block node settings only when your target Solo and component versions are
known to be compatible.
## Deployment Output
After a successful Falcon deployment, Solo writes deployment metadata to
`~/.solo/one-shot-/` where `` is the value of the
`--deployment` flag (default: `one-shot`).
This directory typically contains:
- `notes` - human-readable deployment summary
- `versions` - component versions recorded at deploy time
- `forwards` - port-forward configuration
- `accounts.json` - predefined test account keys and IDs. All accounts are
ECDSA Alias accounts (EVM-compatible) and include a `publicAddress` field.
The file also includes the system operator account.
This makes Falcon especially useful for automation, because the deployment
artifacts are written to a predictable path after each run.
To inspect deployment output, check the `~/.solo/one-shot-/` directory directly.
If port-forwards are interrupted after deployment, restore them by rerunning the component commands (such as `solo consensus node start`, `solo mirror node add`, etc.)
## Destroy a Falcon Deployment
- Destroy the Falcon deployment with:
```bash
solo one-shot falcon destroy
```
- Solo removes deployed extensions first, then destroys the mirror node, network,
cluster references, and local deployment metadata.
- If multiple deployments exist locally, Solo prompts you to choose which one to
destroy unless you pass `--deployment` explicitly.
```bash
solo one-shot falcon destroy --deployment falcon-demo
```
## When to Use Falcon vs. Manual Deployment
Use Falcon deployment when you want a single, repeatable command backed by a
versioned YAML file.
Use [**Step-by-Step Manual Deployment**](/docs/advanced-solo-setup/network-deployments/manual-deployment)
when you need to pause between steps, inspect intermediate state, or debug a
specific deployment phase in isolation.
In practice:
- Falcon is better for automation and repeatability.
- Manual deployment is better for debugging and low-level control.
## Reference
- [**Falcon Values File Reference**](/docs/advanced-solo-setup/network-deployments/falcon-flags-reference) - full list of supported CLI flags, types, and defaults for every section.
- [**Upstream example values file**](https://github.com/hiero-ledger/solo/tree/main/examples/one-shot-falcon) - working reference from the Solo repository.
> **Tip:** If you are creating a values file for the first time, start from the
> annotated template in the Solo repository rather than writing one from scratch:
>
> **[`examples/one-shot-falcon/falcon-values.yaml`](https://github.com/hiero-ledger/solo/blob/main/examples/one-shot-falcon/falcon-values.yaml)**
>
> This file includes all supported sections and flags with inline comments
> explaining each option. Copy it, remove what you do not need, and adjust the
> values for your environment.
---
# Service Endpoints
URL: https://solo.hiero.org/docs/using-solo/endpoints/
Description: Default service endpoints for a Solo one-shot deployment. Quick reference for the Hiero consensus gRPC address, Mirror Node REST URL, JSON-RPC Relay port, and Explorer URL — for both Solo 0.63+ and Solo 0.62 and earlier.
## Overview
After a successful `solo one-shot single deploy`, Solo sets up port-forwards to
the following local services. Use these endpoints to connect your application,
SDK, or tooling to the running network.
> **Note:** The ports below are Solo's default targets. If a port is already in
> use on your machine, Solo automatically selects the next available port and
> logs `Using available port `. See [Port availability](#port-availability)
> for how to look up the ports your deployment is actually using.
## Solo 0.63 and later (current defaults)
| Service | Endpoint | Description |
|-----------------------|--------------------------|--------------------------------------------------|
| Explorer UI | `http://localhost:38080` | Web UI for inspecting accounts and transactions. |
| Consensus node (gRPC) | `localhost:35211` | gRPC endpoint for submitting transactions. |
| Mirror node REST API | `http://localhost:38081` | REST API for querying historical data. |
| JSON-RPC relay | `http://localhost:37546` | Ethereum-compatible JSON-RPC endpoint. |
### Verify the endpoints
{{< tabpane text=true >}}
{{% tab header="Bash" lang="bash" %}}
```bash
# Consensus node (gRPC)
nc -zv localhost 35211
# Mirror node REST API
curl http://localhost:38081/api/v1/transactions
# JSON-RPC relay
curl -X POST http://localhost:37546 \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
# Consensus node (gRPC)
Test-NetConnection localhost -Port 35211
# Mirror node REST API
Invoke-RestMethod http://localhost:38081/api/v1/transactions
# JSON-RPC relay
Invoke-RestMethod -Method Post -Uri 'http://localhost:37546' `
-ContentType 'application/json' `
-Body '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
```
{{% /tab %}}
{{< /tabpane >}}
> **macOS note:** Running `nc -zv localhost 35211` may print two lines:
> ```text
> nc: connectx to localhost port 35211 (tcp) failed: Connection refused
> Connection to localhost port 35211 [tcp/*] succeeded!
> ```
> The first line is a failed IPv6 attempt — this is expected on macOS.
> The second line confirms the IPv4 connection succeeded. The port is reachable.
> **Note:** In PowerShell, `curl` is an alias for `Invoke-WebRequest`, so bash
> `curl` flags will not work. Use `curl.exe` explicitly if you prefer the
> bash-style syntax.
## Solo 0.62 and earlier
If you are using Solo 0.62 or earlier, the default port-forward targets differ:
| Service | Endpoint | Description |
|-----------------------|-------------------------|-------------------------------------------------------|
| Explorer UI | `http://localhost:8080` | Web UI for inspecting accounts and transactions. |
| Consensus node (gRPC) | `localhost:50211` | gRPC endpoint for submitting transactions. |
| Mirror node REST API | `http://localhost:8081` | REST API for querying historical data (via mirror-ingress). |
| JSON-RPC relay | `http://localhost:7546` | Ethereum-compatible JSON-RPC endpoint. |
> **Note:** `localhost:5551` is the direct Mirror Node REST service, accessible
> only via manual `kubectl port-forward`, and is being phased out. Always use
> the ingress-based port (`8081` for Solo 0.62 and earlier, `38081` for
> Solo 0.63+).
## Connecting your application
Quick reference for SDK and tooling configuration (Solo 0.63 and later):
- **Hiero SDK (gRPC)**: `localhost:35211`, node account ID `0.0.3`
- **EVM tools (JSON-RPC)**: `http://localhost:37546`
- **Mirror Node REST**: `http://localhost:38081/api/v1/`
For SDK-specific connection examples, see:
- [Using Solo with Hiero SDKs](/docs/using-solo/using-solo-with-hiero-sdks)
- [Using Solo with EVM Tools](/docs/using-solo/using-solo-with-evm-tools)
- [Accessing Solo Services](/docs/using-solo/accessing-solo-services/)
## Port availability
Solo uses `kubectl port-forward` to tunnel traffic from your machine to services
running inside Kubernetes. Before opening each tunnel, Solo tries the configured
port:
- If the port is free, Solo logs: `Using requested port `.
- If the port is already occupied (by another process, or by a previous Solo
session that did not clean up its port-forwards), Solo finds the next
available port and logs: `Using available port `.
The actual ports used are printed at the end of `solo one-shot single deploy`.
You can also look them up at any time with the Solo CLI, using your deployment
name (see [Capture your deployment name](/docs/simple-solo-setup/quickstart#capture-your-deployment-name)).
To view the active port assignments:
```bash
solo deployment config ports --deployment
```
The output directory is `one-shot-`, and the default deployment
name is `one-shot`. So the default output directory is `~/.solo/one-shot-one-shot/`.
{{< tabpane text=true >}}
{{% tab header="Bash" lang="bash" %}}
```bash
cat ~/.solo/one-shot-one-shot/forwards
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
Get-Content "$env:USERPROFILE\.solo\one-shot-one-shot\forwards"
```
{{% /tab %}}
{{< /tabpane >}}
```text
*** Consensus node gRPC ***
-------------------------------------------------------------------------------
- component 1: localhost:35211 -> pod:50211
```
```bash
solo deployment config info --deployment one-shot
```
To restore port-forwards after a system restart without redeploying:
```bash
solo deployment port-forwards refresh --deployment one-shot
```
> **Note:** `solo deployment refresh port-forwards` still works but is
> deprecated in favor of `solo deployment port-forwards refresh` and will be
> removed in a future release.
To stop all port-forwards for a deployment (for example, before shutting down
your machine):
```bash
solo deployment port-forwards stop --deployment one-shot
```
This closes the underlying `kubectl port-forward` processes and removes them
from the deployment's remote config, so they are not restored automatically.
Run `solo deployment port-forwards refresh --deployment one-shot` afterward to
re-establish them.
---
# Solo CLI Reference
URL: https://solo.hiero.org/docs/advanced-solo-setup/cli/solo-cli/
Description: Canonical Solo CLI command and flag reference for end users.
## Overview
This page is the canonical command reference for the Solo CLI.
- Use it to look up command paths, subcommands, and flags.
- Use `solo --help` and `solo --help` for runtime help on your installed version.
- For legacy command mappings, see [CLI Migration Reference](/docs/advanced-solo-setup/cli/cli-migrations).
## Output Formats (`--output`, `-o`)
Solo supports machine-readable output for version output and for command execution flows that honor the output format flag.
```text
solo --version -o json
solo --version -o yaml
solo --version -o wide
```
Expected formats:
- `json`: JSON object output.
- `yaml`: YAML output.
- `wide`: plain text value-oriented output.
## Global Flags
Global flags shown in root help:
- `--dev`: enable developer mode.
- `--force-port-forward`: force port forwarding for network services.
- `-v`, `--version`: print Solo version.
## Deprecated Features
Deprecated flags are also marked inline in the help output below as `[deprecated]`, and deprecated commands as `[DEPRECATED: ...]`. The version window and replacement for each are listed in the table.
| Feature | Type | Deprecated since | Planned removal | Replacement |
| ------- | ---- | ---------------- | --------------- | ----------- |
| `--image-tag` | flag | v0.85.0 | v0.91.0 | `--component-image` |
| `--relay-release` | flag | v0.85.0 | v0.91.0 | `--relay-version` |
| `--release-tag` | flag | v0.85.0 | v0.91.0 | `--consensus-node-version` |
| `--chart-version` | flag | v0.85.0 | v0.91.0 | `--block-node-version` |
| `init` | command | v0.85.0 | v0.91.0 | — |
## Command and Flag Reference
The sections below are generated from Solo CLI help output using the implementation on `hiero-ledger/solo`.
## Version Output
```
******************************* Solo *********************************************
Version : 0.90.0
**********************************************************************************
```
## Root Help Output
```
Usage:
solo [options]
Commands:
config Backup and restore component configurations for Solo deployments. These commands display what would be backed up or restored without performing actual operations.
block Block Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
cluster-ref Manages the relationship between Kubernetes context names and Solo cluster references which are an alias for a kubernetes context.
consensus Consensus Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
deployment Create, modify, and delete deployment configurations. Deployments are required for most of the other commands.
explorer Explorer Node operations for creating, modifying, and destroying resources.These commands require the presence of an existing deployment.
init Initialize local environment [DEPRECATED: since v0.85.0, removal v0.91.0]
keys Consensus key generation operations
ledger System, Account, and Crypto ledger-based management operations. These commands require an operational set of consensus nodes and may require an operational mirror node.
mirror Mirror Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
relay RPC Relay Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
cache Manage solo cached items.
one-shot One Shot commands for new and returning users who need a preset environment type. These commands use reasonable defaults to provide a single command out of box experience.
rapid-fire Commands for performing load tests a Solo deployment
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
## config
```
config
Backup and restore component configurations for Solo deployments. These commands display what would be backed up or restored without performing actual operations.
Commands:
config ops Configuration backup and restore operations
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### config ops
```
config ops
Configuration backup and restore operations
Commands:
config ops backup Create a backup for all component configurations of a deployment. Create a zip file with configuration and log data.Export states, configmaps and secrets
config ops restore-config Restore component configurations from backup. Imports ConfigMaps, Secrets, logs, and state files for a running deployment.
config ops restore-clusters Restore Kind clusters from backup directory structure. Creates clusters, sets up Docker network, installs MetalLB, and initializes cluster configurations. Does not deploy network components.
config ops restore-network Deploy network components to existing clusters from backup. Deploys consensus nodes, block nodes, mirror nodes, explorers, and relay nodes. Requires clusters to be already created (use restore-clusters first).
config ops restore-db Restore the external database dump independently of restore-config. Run this before restore-network so mirror, relay, and explorer deploy against an already-populated database.
config ops bridge-import-gap Bridge a mirror importer record_file gap after restore and restart the importer.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### config ops backup
```
config ops backup
Create a backup for all component configurations of a deployment. Create a zip file with configuration and log data.Export states, configmaps and secrets
Options:
--backup-external-database Export external Mirror Node [boolean] [default: false]
database dump during backup
and save connection/credential
parameters to JSON
--debug , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--external-db-params-file Path to external database [string]
parameters JSON. Backup writes
it; restore reads it to avoid
passing many DB flags
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--output-dir Path to the directory where [string]
the command context will be
saved to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
--zip-file Path to the encrypted backup [string]
ZIP archive used during
restore
--zip-password Password to encrypt generated [string]
backup ZIP archives
```
#### config ops restore-config
```
config ops restore-config
Restore component configurations from backup. Imports ConfigMaps, Secrets, logs, and state files for a running deployment.
Options:
--debug , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--external-db-params-file Path to external database [string]
parameters JSON. Backup writes
it; restore reads it to avoid
passing many DB flags
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--input-dir Path to the directory where [string]
the command context will be
loaded from
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### config ops restore-clusters
```
config ops restore-clusters
Restore Kind clusters from backup directory structure. Creates clusters, sets up Docker network, installs MetalLB, and initializes cluster configurations. Does not deploy network components.
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--metallb-config Path pattern for MetalLB [string] [default: "metallb-cluster-{index}.yaml"]
configuration YAML files
(supports {index} placeholder
for cluster number)
--options-file Path to YAML file containing [string]
component-specific deployment
options (consensus, block,
mirror, relay, explorer)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
--zip-file Path to the encrypted backup [string]
ZIP archive used during
restore
--zip-password Password to encrypt generated [string]
backup ZIP archives
```
#### config ops restore-network
```
config ops restore-network
Deploy network components to existing clusters from backup. Deploys consensus nodes, block nodes, mirror nodes, explorers, and relay nodes. Requires clusters to be already created (use restore-clusters first).
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--debug , --dev Enable [boolean] [default: false]
debug mode
--expected-lb-ips-file Path to KEY=VALUE file with [string]
expected LoadBalancer IP
mappings, for example
KIND__NETWORK_NODE1_SVC=172.x.x.x
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--options-file Path to YAML file containing [string]
component-specific deployment
options (consensus, block,
mirror, relay, explorer)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--realm Realm number. Requires [number] [default: 0]
network-node > v61.0 for
non-zero values
--shard Shard number. Requires [number] [default: 0]
network-node > v61.0 for
non-zero values
--skip-ip-tracking Skip LoadBalancer IP tracking [boolean] [default: true]
and enforcement during
restore-network
-v, --version Show version number [boolean]
```
#### config ops restore-db
```
config ops restore-db
Restore the external database dump independently of restore-config. Run this before restore-network so mirror, relay, and explorer deploy against an already-populated database.
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--debug , --dev Enable [boolean] [default: false]
debug mode
--external-db-params-file Path to external database [string]
parameters JSON. Backup writes
it; restore reads it to avoid
passing many DB flags
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### config ops bridge-import-gap
```
config ops bridge-import-gap
Bridge a mirror importer record_file gap after restore and restart the importer.
Options:
--debug , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--external-db-params-file Path to external database [string]
parameters JSON. Backup writes
it; restore reads it to avoid
passing many DB flags
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## block
```
block
Block Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
Commands:
block node Create, manage, or destroy block node instances. Operates on a single block node instance at a time.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### block node
```
block node
Create, manage, or destroy block node instances. Operates on a single block node instance at a time.
Commands:
block node add Creates and configures a new block node instance for the specified deployment using the specified Kubernetes cluster. The cluster must be accessible and attached to the specified deployment.
block node destroy Destroys a single block node instance in the specified deployment. Requires access to all Kubernetes clusters attached to the deployment.
block node upgrade Upgrades a single block node instance in the specified deployment. Requires access to all Kubernetes clusters attached to the deployment.
block node add-external Add an external block node for the specified deployment. You can specify the priority and consensus nodes to which to connect or use the default settings.
block node delete-external Deletes an external block node from the specified deployment.
block node collect-jfr Downloads the Java Flight Recorder recording from a block node instance in the specified deployment to the local solo logs directory. Requires the block node to have been deployed with Java Flight Recorder enabled.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### block node add
```
block node add
Creates and configures a new block node instance for the specified deployment using the specified Kubernetes cluster. The cluster must be accessible and attached to the specified deployment.
Options:
--block-node-chart-dir Block node local chart [string]
directory path (e.g.
~/hiero-block-node/charts)
--block-node-message-size-hard-limit-bytes Hard limit, in bytes, for [number]
block node connection message
size in block-nodes.json
--block-node-message-size-soft-limit-bytes Soft limit, in bytes, for [number]
block node connection message
size in block-nodes.json
--block-node-tss-overlay Force-apply block-node TSS [boolean] [default: false]
values overlay when deploying
block nodes before consensus
deployment sets tssEnabled in
remote config.
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--chart-version Block node chart version [deprecated] [string] [default: "0.40.1"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--component-image , --relay-image [string]
Docker image override.
Supports a published registry
reference (e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--enable-ingress enable ingress on the [boolean] [default: false]
component/pod
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--image-tag Overrides the Docker image tag [deprecated] [string]
(e.g. 0.36.0-SNAPSHOT).
--priority-mapping Configure block node priority [string]
mapping. Unlisted nodes will
not be routed to a block node
Default: all consensus nodes
included, first node priority
is 2. Example:
"priority-mapping
node1=2,node2=1"
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### block node destroy
```
block node destroy
Destroys a single block node instance in the specified deployment. Requires access to all Kubernetes clusters attached to the deployment.
Options:
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### block node upgrade
```
block node upgrade
Upgrades a single block node instance in the specified deployment. Requires access to all Kubernetes clusters attached to the deployment.
Options:
--block-node-chart-dir Block node local chart [string]
directory path (e.g.
~/hiero-block-node/charts)
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--upgrade-version Version to be used for the [string]
upgrade
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### block node add-external
```
block node add-external
Add an external block node for the specified deployment. You can specify the priority and consensus nodes to which to connect or use the default settings.
Options:
--address Provide external block node [string] [required]
address (IP or domain), with
optional port (Default port:
40840) Examples: " --address
localhost:8080", " --address
192.0.0.1"
--block-node-message-size-hard-limit-bytes Hard limit, in bytes, for [number]
block node connection message
size in block-nodes.json
--block-node-message-size-soft-limit-bytes Soft limit, in bytes, for [number]
block node connection message
size in block-nodes.json
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--priority-mapping Configure block node priority [string]
mapping. Unlisted nodes will
not be routed to a block node
Default: all consensus nodes
included, first node priority
is 2. Example:
"priority-mapping
node1=2,node2=1"
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### block node delete-external
```
block node delete-external
Deletes an external block node from the specified deployment.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### block node collect-jfr
```
block node collect-jfr
Downloads the Java Flight Recorder recording from a block node instance in the specified deployment to the local solo logs directory. Requires the block node to have been deployed with Java Flight Recorder enabled.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## cluster-ref
```
cluster-ref
Manages the relationship between Kubernetes context names and Solo cluster references which are an alias for a kubernetes context.
Commands:
cluster-ref config List, create, manage, and remove associations between Kubernetes contexts and Solo cluster references.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### cluster-ref config
```
cluster-ref config
List, create, manage, and remove associations between Kubernetes contexts and Solo cluster references.
Commands:
cluster-ref config connect Creates a new internal Solo cluster name to a Kubernetes context or maps a Kubernetes context to an existing internal Solo cluster reference
cluster-ref config disconnect Removes the Kubernetes context associated with an internal Solo cluster reference.
cluster-ref config list Lists the configured Kubernetes context to Solo cluster reference mappings.
cluster-ref config info Displays the status information and attached deployments for a given Solo cluster reference mapping.
cluster-ref config setup Setup cluster with shared components
cluster-ref config reset Uninstall shared components from cluster
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### cluster-ref config connect
```
cluster-ref config connect
Creates a new internal Solo cluster name to a Kubernetes context or maps a Kubernetes context to an existing internal Solo cluster reference
Options:
-c, --cluster-ref The cluster reference that [string] [required]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--context The Kubernetes context name to [string] [required]
be used
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cluster-ref config disconnect
```
cluster-ref config disconnect
Removes the Kubernetes context associated with an internal Solo cluster reference.
Options:
-c, --cluster-ref The cluster reference that [string] [required]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cluster-ref config list
```
cluster-ref config list
Lists the configured Kubernetes context to Solo cluster reference mappings.
Options:
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cluster-ref config info
```
cluster-ref config info
Displays the status information and attached deployments for a given Solo cluster reference mapping.
Options:
-c, --cluster-ref The cluster reference that [string] [required]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cluster-ref config setup
```
cluster-ref config setup
Setup cluster with shared components
Options:
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
-s, --cluster-setup-namespace Cluster Setup Namespace [string] [default: "solo-setup"]
--debug , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--metrics-server Deploy metrics server to [boolean] [default: false]
enable kubectl top for CPU and
memory usage monitoring
--minio Deploy minio operator [boolean] [default: true]
--prometheus-stack Deploy prometheus stack [boolean] [default: false]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
#### cluster-ref config reset
```
cluster-ref config reset
Uninstall shared components from cluster
Options:
-c, --cluster-ref The cluster reference that [string] [required]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
-s, --cluster-setup-namespace Cluster Setup Namespace [string] [default: "solo-setup"]
--debug , --dev Enable [boolean] [default: false]
debug mode
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## consensus
```
consensus
Consensus Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
Commands:
consensus network Ledger/network wide consensus operations such as freeze, upgrade, and deploy. Operates on the entire ledger and all consensus node instances.
consensus node List, create, manage, or destroy consensus node instances. Operates on a single consensus node instance at a time.
consensus state List, download, and upload consensus node state backups to/from individual consensus node instances.
consensus dev-node-add Dev operations for adding consensus nodes.
consensus dev-node-update Dev operations for updating consensus nodes
consensus dev-node-upgrade Dev operations for upgrading consensus nodes
consensus dev-node-delete Dev operations for delete consensus nodes
consensus dev-freeze Dev operations for freezing consensus nodes
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### consensus network
```
consensus network
Ledger/network wide consensus operations such as freeze, upgrade, and deploy. Operates on the entire ledger and all consensus node instances.
Commands:
consensus network deploy Installs and configures all consensus nodes for the deployment.
consensus network destroy Removes all consensus network components from the deployment.
consensus network freeze Initiates a network freeze for scheduled maintenance or upgrades
consensus network upgrade Upgrades the software version running on all consensus nodes.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus network deploy
```
consensus network deploy
Installs and configures all consensus nodes for the deployment.
Options:
--api-permission-properties api-permission.properties file [string] [default: "templates/api-permission.properties"]
for node
--app Testing app name [string] [default: "HederaNode.jar"]
--application-env the application.env file for [string] [default: "templates/application.env"]
the node provides environment
variables to the
solo-container to be used when
the hedera platform is started
--application-properties application.properties file [string] [default: "templates/application.properties"]
for node (default merges with
Solo defaults; add comment
'SOLO_ENABLE_OVERWRITE=true'
in the file to use overwrite
mode)
--aws-bucket name of aws storage bucket [string]
--aws-bucket-prefix path prefix of aws storage [string]
bucket
--aws-bucket-region name of aws bucket region [string]
--aws-endpoint aws storage endpoint URL [string]
--aws-write-access-key aws storage access key for [string]
write access
--aws-write-secrets aws storage secret key for [string]
write access
--backup-bucket name of bucket for backing up [string]
state files
--backup-endpoint backup storage endpoint URL [string]
--backup-provider backup storage service [string] [default: "GCS"]
provider, GCS or AWS
--backup-region backup storage region [string] [default: "us-central1"]
--backup-write-access-key backup storage access key for [string]
write access
--backup-write-secrets backup storage secret key for [string]
write access
--block-node-message-size-hard-limit-bytes Hard limit, in bytes, for [number]
block node connection message
size in block-nodes.json
--block-node-message-size-soft-limit-bytes Soft limit, in bytes, for [number]
block node connection message
size in block-nodes.json
--bootstrap-properties bootstrap.properties file for [string] [default: "templates/bootstrap.properties"]
node
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-s, --cluster-setup-namespace Cluster Setup Namespace [string] [default: "solo-setup"]
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--enable-monitoring-support Enables CRDs for Prometheus [boolean] [default: true]
and Grafana.
--envoy-ips IP mapping where key = value [string]
is node alias and static ip
for envoy proxy, (e.g.:
--envoy-ips
node1=127.0.0.1,node2=127.0.0.1)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gcs-bucket name of gcs storage bucket [string]
--gcs-bucket-prefix path prefix of google storage [string]
bucket
--gcs-endpoint gcs storage endpoint URL [string]
--gcs-write-access-key gcs storage access key for [string]
write access
--gcs-write-secrets gcs storage secret key for [string]
write access
--genesis-throttles-file throttles.json file used [string]
during network genesis
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--grpc-tls-cert TLS Certificate path for the [string]
gRPC (e.g.
"node1=/Users/username/node1-grpc.cert" with multiple nodes comma separated)
--grpc-tls-key TLS Certificate key path for [string]
the gRPC (e.g.
"node1=/Users/username/node1-grpc.key" with multiple nodes comma separated)
--grpc-web-tls-cert TLS Certificate path for gRPC [string]
Web (e.g.
"node1=/Users/username/node1-grpc-web.cert" with multiple nodes comma separated)
--grpc-web-tls-key TLC Certificate key path for [string]
gRPC Web (e.g.
"node1=/Users/username/node1-grpc-web.key" with multiple nodes comma separated)
--haproxy-ips IP mapping where key = value [string]
is node alias and static ip
for haproxy, (e.g.:
--haproxy-ips
node1=127.0.0.1,node2=127.0.0.1)
--jfr-config Java Flight Recorder [string]
configuration file path
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--log4j2-xml log4j2.xml file for node [string] [default: "templates/log4j2.xml"]
--network-node-ips IP mapping where key = value [string]
is node alias and static ip
for the network-node
LoadBalancer service, (e.g.:
--network-node-ips
node1=127.0.0.1,node2=127.0.0.2)
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
--pod-log Install PodLog custom resource [boolean] [default: false]
for monitoring Network Node
pod logs
--pvcs Enable persistent volume [boolean] [default: false]
claims to store data outside
the pod, required for
consensus node add
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--service-monitor Install ServiceMonitor custom [boolean] [default: false]
resource for monitoring
Network Node metrics
--settings-txt settings.txt file for node [string] [default: "templates/settings.txt"]
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--storage-type storage type for saving stream [default: "minio_only"]
files, available options are
minio_only, aws_only,
gcs_only, aws_and_gcs
--tss Enable hinTS/TSS (CN >= [boolean] [default: true]
v0.74).
-f, --values-file Comma separated chart values [string]
file paths for each cluster
(e.g.
values.yaml,cluster-1=./a/b/values1.yaml,cluster-2=./a/b/values2.yaml)
--verify-pvc-mounts Fail the deployment when a [boolean] [default: false]
persistent volume claim is
mounted on storage smaller
than it requested; requires
--pvcs
-v, --version Show version number [boolean]
--wraps Enable recursive WRAPs [boolean] [default: false]
aggregation for hinTS/TSS (CN
>= v0.72).
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus network destroy
```
consensus network destroy
Removes all consensus network components from the deployment.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--delete-pvcs Delete the persistent volume [boolean] [default: false]
claims. If both --delete-pvcs
and --delete-secrets are
set to true, the namespace
will be deleted.
--delete-secrets Delete the network secrets. If [boolean] [default: false]
both --delete-pvcs and
--delete-secrets are set to
true, the namespace will be
deleted.
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--enable-timeout enable time out for running a [boolean] [default: false]
command
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### consensus network freeze
```
consensus network freeze
Initiates a network freeze for scheduled maintenance or upgrades
Options:
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--freeze-block-drain-seconds Seconds to wait after [number] [default: 20]
consensus nodes reach
FREEZE_COMPLETE before
stopping them, allowing the
block stream to drain to the
block node
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### consensus network upgrade
```
consensus network upgrade
Upgrades the software version running on all consensus nodes.
Options:
--api-permission-properties api-permission.properties file [string] [default: "templates/api-permission.properties"]
for node
--app Testing app name [string] [default: "HederaNode.jar"]
--application-env the application.env file for [string] [default: "templates/application.env"]
the node provides environment
variables to the
solo-container to be used when
the hedera platform is started
--application-properties application.properties file [string] [default: "templates/application.properties"]
for node (default merges with
Solo defaults; add comment
'SOLO_ENABLE_OVERWRITE=true'
in the file to use overwrite
mode)
--bootstrap-properties bootstrap.properties file for [string] [default: "templates/bootstrap.properties"]
node
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--freeze-block-drain-seconds Seconds to wait after [number] [default: 20]
consensus nodes reach
FREEZE_COMPLETE before
stopping them, allowing the
block stream to drain to the
block node
--local-build-path path of hedera local repo [string]
--log4j2-xml log4j2.xml file for node [string] [default: "templates/log4j2.xml"]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--settings-txt settings.txt file for node [string] [default: "templates/settings.txt"]
--skip-node-start Skip starting consensus nodes [boolean] [default: false]
after staging a freeze upgrade
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--upgrade-version Version to be used for the [string]
upgrade
--upgrade-zip-file A zipped file used for network [string]
upgrade
-f, --values-file Comma separated chart values [string]
file paths for each cluster
(e.g.
values.yaml,cluster-1=./a/b/values1.yaml,cluster-2=./a/b/values2.yaml)
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
### consensus node
```
consensus node
List, create, manage, or destroy consensus node instances. Operates on a single consensus node instance at a time.
Commands:
consensus node setup Setup node with a specific version of Hedera platform
consensus node start Start a node
consensus node stop Stop a node
consensus node restart Restart all nodes of the network
consensus node refresh Reset and restart a node
consensus node add Adds a node with a specific version of Hedera platform
consensus node update Update a node with a specific version of Hedera platform
consensus node destroy Delete a node with a specific version of Hedera platform
consensus node collect-jfr Collect Java Flight Recorder (JFR) files from a node for diagnostics and performance analysis. Requires the node to be running with Java Flight Recorder enabled.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus node setup
```
consensus node setup
Setup node with a specific version of Hedera platform
Options:
--admin-public-keys Comma separated list of DER [string]
encoded ED25519 public keys
and must match the order of
the node aliases
--app Testing app name [string] [default: "HederaNode.jar"]
--app-config json config file of testing [string]
app
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
-v, --version Show version number [boolean]
```
#### consensus node start
```
consensus node start
Start a node
Options:
--app Testing app name [string] [default: "HederaNode.jar"]
--debug , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--grpc-web-endpoints Configure gRPC Web endpoints [Format: =[:][,=[:]]][string]
mapping, comma separated
(Default port: 8080) (Aliases
can be provided explicitly, or
inferred by node id order)
Examples:
node1=127.0.0.1:8080,node2=127.0.0.1:8081 node1=localhost,node2=localhost:8081 localhost,127.0.0.2:8081
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--skip-grpc-web-endpoint Skip submitting the [boolean] [default: false]
NodeUpdateTransaction that
sets the gRPC web proxy
endpoint. Use during restore
when the endpoint is already
correct in the restored state
to avoid triggering TSS
re-evaluation.
--stake-amounts The amount to be staked in the [string]
same order you list the node
aliases with multiple node
staked values comma separated
--state-file A zipped state file to be used [string]
for the network
--transplant Treat the supplied state file [boolean] [default: false]
as captured on a different
network. Installs this
network's address book as
override-network.json so the
consensus node adopts it
instead of the roster carried
by the state. Leave unset when
restoring a network's own
state.
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus node stop
```
consensus node stop
Stop a node
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### consensus node restart
```
consensus node restart
Restart all nodes of the network
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus node refresh
```
consensus node refresh
Reset and restart a node
Options:
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
-v, --version Show version number [boolean]
```
#### consensus node add
```
consensus node add
Adds a node with a specific version of Hedera platform
Options:
--admin-key Admin key [string] [default: "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"]
--app Testing app name [string] [default: "HederaNode.jar"]
--block-node-mapping Configure block-node priority [string]
mapping. Default: all
block-node included, first's
priority is 2. Unlisted
block-node will not routed to
the consensus node node.
Example: --block-node-mapping
1=2,2=1
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--envoy-ips IP mapping where key = value [string]
is node alias and static ip
for envoy proxy, (e.g.:
--envoy-ips
node1=127.0.0.1,node2=127.0.0.1)
--external-block-node-mapping Configure external-block-node [string]
priority mapping. Default: all
external-block-node included,
first's priority is 2.
Unlisted external-block-node
will not routed to the
consensus node node. Example:
--external-block-node-mapping
1=2,2=1
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-keys Generate gossip keys for nodes [boolean] [default: false]
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--grpc-tls-cert TLS Certificate path for the [string]
gRPC (e.g.
"node1=/Users/username/node1-grpc.cert" with multiple nodes comma separated)
--grpc-tls-key TLS Certificate key path for [string]
the gRPC (e.g.
"node1=/Users/username/node1-grpc.key" with multiple nodes comma separated)
--grpc-web-endpoint Configure gRPC Web endpoint [Format: [:]] [string]
(Default port: 8080)
--grpc-web-tls-cert TLS Certificate path for gRPC [string]
Web (e.g.
"node1=/Users/username/node1-grpc-web.cert" with multiple nodes comma separated)
--grpc-web-tls-key TLC Certificate key path for [string]
gRPC Web (e.g.
"node1=/Users/username/node1-grpc-web.key" with multiple nodes comma separated)
--haproxy-ips IP mapping where key = value [string]
is node alias and static ip
for haproxy, (e.g.:
--haproxy-ips
node1=127.0.0.1,node2=127.0.0.1)
--local-build-path path of hedera local repo [string]
--pvcs Enable persistent volume [boolean] [default: false]
claims to store data outside
the pod, required for
consensus node add
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-keys Generate gRPC TLS keys for [boolean] [default: false]
nodes
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus node update
```
consensus node update
Update a node with a specific version of Hedera platform
Options:
--node-alias Node alias (e.g. node99) [string] [required]
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-private-key path and file name of the [string]
private key for signing gossip
in PEM key format to be used
--gossip-public-key path and file name of the [string]
public key for signing gossip
in PEM key format to be used
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--local-build-path path of hedera local repo [string]
--new-account-number new account number for node [string]
update transaction
--new-admin-key new admin key for the Hedera [string]
account
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-private-key path and file name of the [string]
private TLS key to be used
--tls-public-key path and file name of the [string]
public TLS key to be used
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus node destroy
```
consensus node destroy
Delete a node with a specific version of Hedera platform
Options:
--node-alias Node alias (e.g. node99) [string] [required]
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
#### consensus node collect-jfr
```
consensus node collect-jfr
Collect Java Flight Recorder (JFR) files from a node for diagnostics and performance analysis. Requires the node to be running with Java Flight Recorder enabled.
Options:
--node-alias Node alias (e.g. node99) [string] [required]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### consensus state
```
consensus state
List, download, and upload consensus node state backups to/from individual consensus node instances.
Commands:
consensus state download Downloads a signed state from consensus node/nodes.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus state download
```
consensus state download
Downloads a signed state from consensus node/nodes.
Options:
-i, --node-aliases Comma separated node aliases [string] [required]
(empty means all nodes)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### consensus dev-node-add
```
consensus dev-node-add
Dev operations for adding consensus nodes.
Commands:
consensus dev-node-add prepare Prepares the addition of a node with a specific version of Hedera platform
consensus dev-node-add submit-transactions Submits NodeCreateTransaction and Upgrade transactions to the network nodes
consensus dev-node-add execute Executes the addition of a previously prepared node
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus dev-node-add prepare
```
consensus dev-node-add prepare
Prepares the addition of a node with a specific version of Hedera platform
Options:
--output-dir Path to the directory where [string] [required]
the command context will be
saved to
--admin-key Admin key [string] [default: "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"]
--app Testing app name [string] [default: "HederaNode.jar"]
--block-node-mapping Configure block-node priority [string]
mapping. Default: all
block-node included, first's
priority is 2. Unlisted
block-node will not routed to
the consensus node node.
Example: --block-node-mapping
1=2,2=1
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--external-block-node-mapping Configure external-block-node [string]
priority mapping. Default: all
external-block-node included,
first's priority is 2.
Unlisted external-block-node
will not routed to the
consensus node node. Example:
--external-block-node-mapping
1=2,2=1
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-keys Generate gossip keys for nodes [boolean] [default: false]
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--grpc-tls-cert TLS Certificate path for the [string]
gRPC (e.g.
"node1=/Users/username/node1-grpc.cert" with multiple nodes comma separated)
--grpc-tls-key TLS Certificate key path for [string]
the gRPC (e.g.
"node1=/Users/username/node1-grpc.key" with multiple nodes comma separated)
--grpc-web-endpoint Configure gRPC Web endpoint [Format: [:]] [string]
(Default port: 8080)
--grpc-web-tls-cert TLS Certificate path for gRPC [string]
Web (e.g.
"node1=/Users/username/node1-grpc-web.cert" with multiple nodes comma separated)
--grpc-web-tls-key TLC Certificate key path for [string]
gRPC Web (e.g.
"node1=/Users/username/node1-grpc-web.key" with multiple nodes comma separated)
--local-build-path path of hedera local repo [string]
--pvcs Enable persistent volume [boolean] [default: false]
claims to store data outside
the pod, required for
consensus node add
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-keys Generate gRPC TLS keys for [boolean] [default: false]
nodes
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus dev-node-add submit-transactions
```
consensus dev-node-add submit-transactions
Submits NodeCreateTransaction and Upgrade transactions to the network nodes
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--app Testing app name [string] [default: "HederaNode.jar"]
--block-node-mapping Configure block-node priority [string]
mapping. Default: all
block-node included, first's
priority is 2. Unlisted
block-node will not routed to
the consensus node node.
Example: --block-node-mapping
1=2,2=1
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--external-block-node-mapping Configure external-block-node [string]
priority mapping. Default: all
external-block-node included,
first's priority is 2.
Unlisted external-block-node
will not routed to the
consensus node node. Example:
--external-block-node-mapping
1=2,2=1
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-keys Generate gossip keys for nodes [boolean] [default: false]
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--grpc-tls-cert TLS Certificate path for the [string]
gRPC (e.g.
"node1=/Users/username/node1-grpc.cert" with multiple nodes comma separated)
--grpc-tls-key TLS Certificate key path for [string]
the gRPC (e.g.
"node1=/Users/username/node1-grpc.key" with multiple nodes comma separated)
--grpc-web-endpoint Configure gRPC Web endpoint [Format: [:]] [string]
(Default port: 8080)
--grpc-web-tls-cert TLS Certificate path for gRPC [string]
Web (e.g.
"node1=/Users/username/node1-grpc-web.cert" with multiple nodes comma separated)
--grpc-web-tls-key TLC Certificate key path for [string]
gRPC Web (e.g.
"node1=/Users/username/node1-grpc-web.key" with multiple nodes comma separated)
--local-build-path path of hedera local repo [string]
--pvcs Enable persistent volume [boolean] [default: false]
claims to store data outside
the pod, required for
consensus node add
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-keys Generate gRPC TLS keys for [boolean] [default: false]
nodes
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus dev-node-add execute
```
consensus dev-node-add execute
Executes the addition of a previously prepared node
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--admin-key Admin key [string] [default: "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"]
--app Testing app name [string] [default: "HederaNode.jar"]
--block-node-mapping Configure block-node priority [string]
mapping. Default: all
block-node included, first's
priority is 2. Unlisted
block-node will not routed to
the consensus node node.
Example: --block-node-mapping
1=2,2=1
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--envoy-ips IP mapping where key = value [string]
is node alias and static ip
for envoy proxy, (e.g.:
--envoy-ips
node1=127.0.0.1,node2=127.0.0.1)
--external-block-node-mapping Configure external-block-node [string]
priority mapping. Default: all
external-block-node included,
first's priority is 2.
Unlisted external-block-node
will not routed to the
consensus node node. Example:
--external-block-node-mapping
1=2,2=1
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-keys Generate gossip keys for nodes [boolean] [default: false]
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--grpc-tls-cert TLS Certificate path for the [string]
gRPC (e.g.
"node1=/Users/username/node1-grpc.cert" with multiple nodes comma separated)
--grpc-tls-key TLS Certificate key path for [string]
the gRPC (e.g.
"node1=/Users/username/node1-grpc.key" with multiple nodes comma separated)
--grpc-web-endpoint Configure gRPC Web endpoint [Format: [:]] [string]
(Default port: 8080)
--grpc-web-tls-cert TLS Certificate path for gRPC [string]
Web (e.g.
"node1=/Users/username/node1-grpc-web.cert" with multiple nodes comma separated)
--grpc-web-tls-key TLC Certificate key path for [string]
gRPC Web (e.g.
"node1=/Users/username/node1-grpc-web.key" with multiple nodes comma separated)
--haproxy-ips IP mapping where key = value [string]
is node alias and static ip
for haproxy, (e.g.:
--haproxy-ips
node1=127.0.0.1,node2=127.0.0.1)
--local-build-path path of hedera local repo [string]
--pvcs Enable persistent volume [boolean] [default: false]
claims to store data outside
the pod, required for
consensus node add
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-keys Generate gRPC TLS keys for [boolean] [default: false]
nodes
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
### consensus dev-node-update
```
consensus dev-node-update
Dev operations for updating consensus nodes
Commands:
consensus dev-node-update prepare Prepare the deployment to update a node with a specific version of Hedera platform
consensus dev-node-update submit-transactions Submit transactions for updating a node with a specific version of Hedera platform
consensus dev-node-update execute Executes the updating of a node with a specific version of Hedera platform
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus dev-node-update prepare
```
consensus dev-node-update prepare
Prepare the deployment to update a node with a specific version of Hedera platform
Options:
--node-alias Node alias (e.g. node99) [string] [required]
--output-dir Path to the directory where [string] [required]
the command context will be
saved to
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--gossip-private-key path and file name of the [string]
private key for signing gossip
in PEM key format to be used
--gossip-public-key path and file name of the [string]
public key for signing gossip
in PEM key format to be used
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--local-build-path path of hedera local repo [string]
--new-account-number new account number for node [string]
update transaction
--new-admin-key new admin key for the Hedera [string]
account
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-private-key path and file name of the [string]
private TLS key to be used
--tls-public-key path and file name of the [string]
public TLS key to be used
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus dev-node-update submit-transactions
```
consensus dev-node-update submit-transactions
Submit transactions for updating a node with a specific version of Hedera platform
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--local-build-path path of hedera local repo [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
#### consensus dev-node-update execute
```
consensus dev-node-update execute
Executes the updating of a node with a specific version of Hedera platform
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--admin-key Admin key [string] [default: "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"]
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--gossip-endpoints Comma separated gossip [string]
endpoints of the node(e.g.
first one is internal, second
one is external)
--grpc-endpoints Comma separated gRPC endpoints [string]
of the node (at most 8)
--local-build-path path of hedera local repo [string]
--new-account-number new account number for node [string]
update transaction
--new-admin-key new admin key for the Hedera [string]
account
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
--wraps-key-path Path to a local directory [string]
containing pre-existing WRAPs
proving key files (.bin)
```
### consensus dev-node-upgrade
```
consensus dev-node-upgrade
Dev operations for upgrading consensus nodes
Commands:
consensus dev-node-upgrade prepare Prepare for upgrading network
consensus dev-node-upgrade submit-transactions Submit transactions for upgrading network
consensus dev-node-upgrade execute Executes the upgrading the network
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus dev-node-upgrade prepare
```
consensus dev-node-upgrade prepare
Prepare for upgrading network
Options:
--output-dir Path to the directory where [string] [required]
the command context will be
saved to
--api-permission-properties api-permission.properties file [string] [default: "templates/api-permission.properties"]
for node
--app Testing app name [string] [default: "HederaNode.jar"]
--application-env the application.env file for [string] [default: "templates/application.env"]
the node provides environment
variables to the
solo-container to be used when
the hedera platform is started
--application-properties application.properties file [string] [default: "templates/application.properties"]
for node (default merges with
Solo defaults; add comment
'SOLO_ENABLE_OVERWRITE=true'
in the file to use overwrite
mode)
--bootstrap-properties bootstrap.properties file for [string] [default: "templates/bootstrap.properties"]
node
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--freeze-block-drain-seconds Seconds to wait after [number] [default: 20]
consensus nodes reach
FREEZE_COMPLETE before
stopping them, allowing the
block stream to drain to the
block node
--local-build-path path of hedera local repo [string]
--log4j2-xml log4j2.xml file for node [string] [default: "templates/log4j2.xml"]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--settings-txt settings.txt file for node [string] [default: "templates/settings.txt"]
--skip-node-start Skip starting consensus nodes [boolean] [default: false]
after staging a freeze upgrade
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--upgrade-version Version to be used for the [string]
upgrade
--upgrade-zip-file A zipped file used for network [string]
upgrade
-f, --values-file Comma separated chart values [string]
file paths for each cluster
(e.g.
values.yaml,cluster-1=./a/b/values1.yaml,cluster-2=./a/b/values2.yaml)
-v, --version Show version number [boolean]
```
#### consensus dev-node-upgrade submit-transactions
```
consensus dev-node-upgrade submit-transactions
Submit transactions for upgrading network
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--freeze-block-drain-seconds Seconds to wait after [number] [default: 20]
consensus nodes reach
FREEZE_COMPLETE before
stopping them, allowing the
block stream to drain to the
block node
--local-build-path path of hedera local repo [string]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--skip-node-start Skip starting consensus nodes [boolean] [default: false]
after staging a freeze upgrade
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--upgrade-version Version to be used for the [string]
upgrade
--upgrade-zip-file A zipped file used for network [string]
upgrade
-v, --version Show version number [boolean]
```
#### consensus dev-node-upgrade execute
```
consensus dev-node-upgrade execute
Executes the upgrading the network
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--api-permission-properties api-permission.properties file [string] [default: "templates/api-permission.properties"]
for node
--app Testing app name [string] [default: "HederaNode.jar"]
--application-env the application.env file for [string] [default: "templates/application.env"]
the node provides environment
variables to the
solo-container to be used when
the hedera platform is started
--application-properties application.properties file [string] [default: "templates/application.properties"]
for node (default merges with
Solo defaults; add comment
'SOLO_ENABLE_OVERWRITE=true'
in the file to use overwrite
mode)
--bootstrap-properties bootstrap.properties file for [string] [default: "templates/bootstrap.properties"]
node
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--freeze-block-drain-seconds Seconds to wait after [number] [default: 20]
consensus nodes reach
FREEZE_COMPLETE before
stopping them, allowing the
block stream to drain to the
block node
--local-build-path path of hedera local repo [string]
--log4j2-xml log4j2.xml file for node [string] [default: "templates/log4j2.xml"]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--settings-txt settings.txt file for node [string] [default: "templates/settings.txt"]
--skip-node-start Skip starting consensus nodes [boolean] [default: false]
after staging a freeze upgrade
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--upgrade-version Version to be used for the [string]
upgrade
--upgrade-zip-file A zipped file used for network [string]
upgrade
-f, --values-file Comma separated chart values [string]
file paths for each cluster
(e.g.
values.yaml,cluster-1=./a/b/values1.yaml,cluster-2=./a/b/values2.yaml)
-v, --version Show version number [boolean]
```
### consensus dev-node-delete
```
consensus dev-node-delete
Dev operations for delete consensus nodes
Commands:
consensus dev-node-delete prepare Prepares the deletion of a node with a specific version of Hedera platform
consensus dev-node-delete submit-transactions Submits transactions to the network nodes for deleting a node
consensus dev-node-delete execute Executes the deletion of a previously prepared node
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus dev-node-delete prepare
```
consensus dev-node-delete prepare
Prepares the deletion of a node with a specific version of Hedera platform
Options:
--node-alias Node alias (e.g. node99) [string] [required]
--output-dir Path to the directory where [string] [required]
the command context will be
saved to
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
#### consensus dev-node-delete submit-transactions
```
consensus dev-node-delete submit-transactions
Submits transactions to the network nodes for deleting a node
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--node-alias Node alias (e.g. node99) [string] [required]
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
#### consensus dev-node-delete execute
```
consensus dev-node-delete execute
Executes the deletion of a previously prepared node
Options:
--input-dir Path to the directory where [string] [required]
the command context will be
loaded from
--node-alias Node alias (e.g. node99) [string] [required]
--app Testing app name [string] [default: "HederaNode.jar"]
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-names Custom domain names for [string]
consensus nodes mapping for
the(e.g. node0=domain.name
where key is node alias and
value is domain name)with
multiple nodes comma separated
--endpoint-type Endpoint type (IP or FQDN) [string] [default: "FQDN"]
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gossip
endpoints published to the
network (Default port: 50111)
--local-build-path path of hedera local repo [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--service-endpoint-port Port used when building the [Format: to apply the same port to every node, or =[,=] per node] [string]
consensus node gRPC service
endpoints published to the
network (Default port: 50211)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
### consensus dev-freeze
```
consensus dev-freeze
Dev operations for freezing consensus nodes
Commands:
consensus dev-freeze prepare-upgrade Prepare the network for a Freeze Upgrade operation
consensus dev-freeze freeze-upgrade Performs a Freeze Upgrade operation with on the network after it has been prepared with prepare-upgrade
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### consensus dev-freeze prepare-upgrade
```
consensus dev-freeze prepare-upgrade
Prepare the network for a Freeze Upgrade operation
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--skip-node-alias The node alias to skip, [string]
because of a
NodeUpdateTransaction or it is
down (e.g. node99)
-v, --version Show version number [boolean]
```
#### consensus dev-freeze freeze-upgrade
```
consensus dev-freeze freeze-upgrade
Performs a Freeze Upgrade operation with on the network after it has been prepared with prepare-upgrade
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--skip-node-alias The node alias to skip, [string]
because of a
NodeUpdateTransaction or it is
down (e.g. node99)
-v, --version Show version number [boolean]
```
## deployment
```
deployment
Create, modify, and delete deployment configurations. Deployments are required for most of the other commands.
Commands:
deployment cluster View and manage Solo cluster references used by a deployment.
deployment config List, view, create, delete, and import deployments. These commands affect the local configuration only.
deployment state View the actual state of the deployment on the Kubernetes clusters or teardown/destroy all remote and local configuration for a given deployment.
deployment refresh [DEPRECATED] Use 'solo deployment port-forwards refresh' instead. Refresh port-forward processes for all components in the deployment.
deployment port-forwards Manage the port-forward processes for all components in the deployment.
deployment diagnostics Capture diagnostic information such as logs, signed states, and ledger/network/node configurations.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### deployment cluster
```
deployment cluster
View and manage Solo cluster references used by a deployment.
Commands:
deployment cluster attach Attaches a cluster reference to a deployment.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment cluster attach
```
deployment cluster attach
Attaches a cluster reference to a deployment.
Options:
-c, --cluster-ref The cluster reference that [string] [required]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--dns-base-domain Base domain for the DNS is the [string] [default: "cluster.local"]
suffix used to construct the
fully qualified domain name
(FQDN)
--dns-consensus-node-pattern Pattern to construct the [string] [default: "network-{nodeAlias}-svc.{namespace}.svc"]
prefix for the fully qualified
domain name (FQDN) for the
consensus node, the suffix is
provided by the
--dns-base-domain option (ex.
network-{nodeAlias}-svc.{namespace}.svc)
--enable-cert-manager Pass the flag to enable cert [boolean] [default: false]
manager
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--num-consensus-nodes Used to specify desired number [number]
of consensus nodes for
pre-genesis deployments
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### deployment config
```
deployment config
List, view, create, delete, and import deployments. These commands affect the local configuration only.
Commands:
deployment config list Lists all local deployment configurations or deployments in a specific cluster.
deployment config create Creates a new local deployment configuration.
deployment config delete Removes a local deployment configuration.
deployment config info Displays the full status of a deployment including components, versions, and port-forward status.
deployment config ports List all port-forwards for a deployment. JSON and YAMl output formats, create files containing the data
deployment config import Imports a deployment into the local configuration from an existing cluster's remote config.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment config list
```
deployment config list
Lists all local deployment configurations or deployments in a specific cluster.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment config create
```
deployment config create
Creates a new local deployment configuration.
Options:
-d, --deployment The name the user will [string] [required]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
-n, --namespace Namespace [string] [required]
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--realm Realm number. Requires [number] [default: 0]
network-node > v61.0 for
non-zero values
--shard Shard number. Requires [number] [default: 0]
network-node > v61.0 for
non-zero values
-v, --version Show version number [boolean]
```
#### deployment config delete
```
deployment config delete
Removes a local deployment configuration.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment config info
```
deployment config info
Displays the full status of a deployment including components, versions, and port-forward status.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment config ports
```
deployment config ports
List all port-forwards for a deployment. JSON and YAMl output formats, create files containing the data
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-o, --output Output format. One of: "json", [string]
"yaml", "wide"
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment config import
```
deployment config import
Imports a deployment into the local configuration from an existing cluster's remote config.
Options:
--context The Kubernetes context name to [string]
be used
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-n, --namespace Namespace [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### deployment state
```
deployment state
View the actual state of the deployment on the Kubernetes clusters or teardown/destroy all remote and local configuration for a given deployment.
Commands:
deployment state images Lists every pod in the deployment namespace and shows its running container image. Useful to verify that a locally-built image was loaded correctly.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment state images
```
deployment state images
Lists every pod in the deployment namespace and shows its running container image. Useful to verify that a locally-built image was loaded correctly.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### deployment refresh
```
deployment refresh
[DEPRECATED] Use 'solo deployment port-forwards refresh' instead. Refresh port-forward processes for all components in the deployment.
Commands:
deployment refresh port-forwards [DEPRECATED] Use 'solo deployment port-forwards refresh' instead. Refresh and restore killed port-forward processes.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment refresh port-forwards
```
deployment refresh port-forwards
[DEPRECATED] Use 'solo deployment port-forwards refresh' instead. Refresh and restore killed port-forward processes.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### deployment port-forwards
```
deployment port-forwards
Manage the port-forward processes for all components in the deployment.
Commands:
deployment port-forwards refresh Refresh and restore killed port-forward processes.
deployment port-forwards stop Stop (close down) all port-forwards for a deployment and remove them from the remote config.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment port-forwards refresh
```
deployment port-forwards refresh
Refresh and restore killed port-forward processes.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment port-forwards stop
```
deployment port-forwards stop
Stop (close down) all port-forwards for a deployment and remove them from the remote config.
Options:
-d, --deployment The name the user will [string] [required]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### deployment diagnostics
```
deployment diagnostics
Capture diagnostic information such as logs, signed states, and ledger/network/node configurations.
Commands:
deployment diagnostics all Captures logs, configs, and diagnostics artifacts for all deployments by default, or only the selected deployment when --deployment is provided.
deployment diagnostics debug Same scope as diagnostics all, but creates a zip archive for easy sharing.
deployment diagnostics connections Tests connections to Consensus, Relay, Explorer, Mirror and Block nodes for all deployments by default, or only the selected deployment when --deployment is provided.
deployment diagnostics logs Gets logs and configuration files for all deployments by default, or only the selected deployment when --deployment is provided.
deployment diagnostics analyze Analyze a previously collected diagnostics logs directory for common failure signatures.
deployment diagnostics report Collects diagnostics (scoped by --deployment when provided) and creates a GitHub issue using the gh CLI.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### deployment diagnostics all
```
deployment diagnostics all
Captures logs, configs, and diagnostics artifacts for all deployments by default, or only the selected deployment when --deployment is provided.
Options:
--check Fail if any configured remote [boolean] [default: false]
port-forward is not reachable
locally
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment diagnostics debug
```
deployment diagnostics debug
Same scope as diagnostics all, but creates a zip archive for easy sharing.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--output-dir Path to the directory where [string]
the command context will be
saved to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment diagnostics connections
```
deployment diagnostics connections
Tests connections to Consensus, Relay, Explorer, Mirror and Block nodes for all deployments by default, or only the selected deployment when --deployment is provided.
Options:
--check Fail if any configured remote [boolean] [default: false]
port-forward is not reachable
locally
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment diagnostics logs
```
deployment diagnostics logs
Gets logs and configuration files for all deployments by default, or only the selected deployment when --deployment is provided.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--output-dir Path to the directory where [string]
the command context will be
saved to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment diagnostics analyze
```
deployment diagnostics analyze
Analyze a previously collected diagnostics logs directory for common failure signatures.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--input-dir Path to the directory where [string]
the command context will be
loaded from
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### deployment diagnostics report
```
deployment diagnostics report
Collects diagnostics (scoped by --deployment when provided) and creates a GitHub issue using the gh CLI.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--output-dir Path to the directory where [string]
the command context will be
saved to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## explorer
```
explorer
Explorer Node operations for creating, modifying, and destroying resources.These commands require the presence of an existing deployment.
Commands:
explorer node List, create, manage, or destroy explorer node instances. Operates on a single explorer node instance at a time.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### explorer node
```
explorer node
List, create, manage, or destroy explorer node instances. Operates on a single explorer node instance at a time.
Commands:
explorer node add Adds and configures a new node instance.
explorer node destroy Deletes the specified node from the deployment.
explorer node upgrade Upgrades the specified node in the deployment.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### explorer node add
```
explorer node add
Adds and configures a new node instance.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
-s, --cluster-setup-namespace Cluster Setup Namespace [string] [default: "solo-setup"]
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--enable-explorer-tls Enable Explorer TLS, defaults [boolean] [default: false]
to false, requires certManager
and certManagerCrds, which can
be deployed through
solo-cluster-setup chart or
standalone
--enable-ingress enable ingress on the [boolean] [default: false]
component/pod
--explorer-chart-dir Explorer local chart directory [string]
path (e.g.
~/hiero-mirror-node-explorer/charts)
--explorer-static-ip The static IP address to use [string]
for the Explorer load
balancer, defaults to ""
--explorer-tls-host-name The host name to use for the [string] [default: "explorer.solo.local"]
Explorer TLS, defaults to
"explorer.solo.local"
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--ingress-controller-value-file The value file to use for [string]
ingress controller, defaults
to ""
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--mirror-namespace Namespace to use for the [string]
Mirror Node deployment, a new
one will be created if it does
not exist
--mirror-node-id The id of the mirror node [number]
which to connect
-n, --namespace Namespace [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-cluster-issuer-type The TLS cluster issuer type to [string] [default: "self-signed"]
use for hedera explorer,
defaults to "self-signed", the
available options are:
"acme-staging", "acme-prod",
or "self-signed"
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### explorer node destroy
```
explorer node destroy
Deletes the specified node from the deployment.
Options:
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### explorer node upgrade
```
explorer node upgrade
Upgrades the specified node in the deployment.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
-s, --cluster-setup-namespace Cluster Setup Namespace [string] [default: "solo-setup"]
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--enable-explorer-tls Enable Explorer TLS, defaults [boolean] [default: false]
to false, requires certManager
and certManagerCrds, which can
be deployed through
solo-cluster-setup chart or
standalone
--enable-ingress enable ingress on the [boolean] [default: false]
component/pod
--explorer-chart-dir Explorer local chart directory [string]
path (e.g.
~/hiero-mirror-node-explorer/charts)
--explorer-static-ip The static IP address to use [string]
for the Explorer load
balancer, defaults to ""
--explorer-tls-host-name The host name to use for the [string] [default: "explorer.solo.local"]
Explorer TLS, defaults to
"explorer.solo.local"
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
--ingress-controller-value-file The value file to use for [string]
ingress controller, defaults
to ""
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--mirror-namespace Namespace to use for the [string]
Mirror Node deployment, a new
one will be created if it does
not exist
--mirror-node-id The id of the mirror node [number]
which to connect
-n, --namespace Namespace [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--tls-cluster-issuer-type The TLS cluster issuer type to [string] [default: "self-signed"]
use for hedera explorer,
defaults to "self-signed", the
available options are:
"acme-staging", "acme-prod",
or "self-signed"
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
## init
```
init
Initialize local environment [DEPRECATED: since v0.85.0, removal v0.91.0]
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## keys
```
keys
Consensus key generation operations
Commands:
keys consensus Generate unique cryptographic keys (gossip or grpc TLS keys) for the Consensus Node instances.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### keys consensus
```
keys consensus
Generate unique cryptographic keys (gossip or grpc TLS keys) for the Consensus Node instances.
Commands:
keys consensus generate Generates TLS keys required for consensus node communication.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### keys consensus generate
```
keys consensus generate
Generates TLS keys required for consensus node communication.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--gossip-keys Generate gossip keys for nodes [boolean] [default: false]
-n, --namespace Namespace [string]
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--tls-keys Generate gRPC TLS keys for [boolean] [default: false]
nodes
-v, --version Show version number [boolean]
```
## ledger
```
ledger
System, Account, and Crypto ledger-based management operations. These commands require an operational set of consensus nodes and may require an operational mirror node.
Commands:
ledger system Perform a full ledger initialization on a new deployment, rekey privileged/system accounts, or setup network staking parameters.
ledger account View, list, create, update, delete, and import ledger accounts.
ledger file Upload or update files on the Hiero network.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### ledger system
```
ledger system
Perform a full ledger initialization on a new deployment, rekey privileged/system accounts, or setup network staking parameters.
Commands:
ledger system init Re-keys ledger system accounts and consensus node admin keys with uniquely generated ED25519 private keys and will stake consensus nodes.
ledger system reset Resets the ledger system to genesis by clearing saved states and ledger-related secrets.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### ledger system init
```
ledger system init
Re-keys ledger system accounts and consensus node admin keys with uniquely generated ED25519 private keys and will stake consensus nodes.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-v, --version Show version number [boolean]
```
#### ledger system reset
```
ledger system reset
Resets the ledger system to genesis by clearing saved states and ledger-related secrets.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-v, --version Show version number [boolean]
```
### ledger account
```
ledger account
View, list, create, update, delete, and import ledger accounts.
Commands:
ledger account update Updates an existing ledger account.
ledger account create Creates a new ledger account.
ledger account info Gets the account info including the current amount of HBAR
ledger account predefined Creates predefined accounts used by one-shot deployments.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### ledger account update
```
ledger account update
Updates an existing ledger account.
Options:
--account-id The Hedera account id, e.g.: [string] [required]
0.0.1001
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--ecdsa-private-key Specify a hex-encoded ECDSA [string]
private key for the Hedera
account
--ed25519-private-key Specify a hex-encoded ED25519 [string]
private key for the Hedera
account
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--hbar-amount Amount of HBAR to add [number] [default: 100]
-v, --version Show version number [boolean]
```
#### ledger account create
```
ledger account create
Creates a new ledger account.
Options:
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--create-amount Amount of new account to [number] [default: 1]
create
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--ecdsa-private-key Specify a hex-encoded ECDSA [string]
private key for the Hedera
account
--ed25519-private-key Specify a hex-encoded ED25519 [string]
private key for the Hedera
account
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--generate-ecdsa-key Generate ECDSA private key for [boolean] [default: false]
the Hedera account
--hbar-amount Amount of HBAR to add [number] [default: 100]
--private-key Show private key information [boolean] [default: false]
--set-alias Sets the alias for the Hedera [boolean] [default: false]
account when it is created,
requires --ecdsa-private-key
-v, --version Show version number [boolean]
```
#### ledger account info
```
ledger account info
Gets the account info including the current amount of HBAR
Options:
--account-id The Hedera account id, e.g.: [string] [required]
0.0.1001
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--private-key Show private key information [boolean] [default: false]
-v, --version Show version number [boolean]
```
#### ledger account predefined
```
ledger account predefined
Creates predefined accounts used by one-shot deployments.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### ledger file
```
ledger file
Upload or update files on the Hiero network.
Commands:
ledger file create Create a new file on the Hiero network
ledger file update Update an existing file on the Hiero network
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### ledger file create
```
ledger file create
Create a new file on the Hiero network
Options:
--file-path Local path to the file to [string] [required]
upload
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### ledger file update
```
ledger file update
Update an existing file on the Hiero network
Options:
--file-id The network file id, e.g.: [string] [required]
0.0.150
--file-path Local path to the file to [string] [required]
upload
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
## mirror
```
mirror
Mirror Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
Commands:
mirror node List, create, manage, or destroy mirror node instances. Operates on a single mirror node instance at a time.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### mirror node
```
mirror node
List, create, manage, or destroy mirror node instances. Operates on a single mirror node instance at a time.
Commands:
mirror node add Adds and configures a new node instance.
mirror node destroy Deletes the specified node from the deployment.
mirror node upgrade Upgrades the specified node from the deployment.
mirror node collect-jfr Downloads the Java Flight Recorder recording from a mirror node importer instance in the specified deployment to the local solo logs directory. Requires the mirror node to have been deployed with Java Flight Recorder enabled.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### mirror node add
```
mirror node add
Adds and configures a new node instance.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--enable-ingress enable ingress on the [boolean] [default: false]
component/pod
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--external-database-host Use to provide the external [string]
database host if the '
--use-external-database ' is
passed
--external-database-owner-password Use to provide the external [string]
database owner's password if
the ' --use-external-database
' is passed
--external-database-owner-username Use to provide the external [string]
database owner's username if
the ' --use-external-database
' is passed
--external-database-read-password Use to provide the external [string]
database readonly user's
password if the '
--use-external-database ' is
passed
--external-database-read-username Use to provide the external [string]
database readonly user's
username if the '
--use-external-database ' is
passed
--force Force enable block node [boolean] [default: false]
integration bypassing the
version requirements CN >=
v0.72.0, BN >= 0.29.0, CN >=
0.150.0
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--ingress-controller-value-file The value file to use for [string]
ingress controller, defaults
to ""
--mirror-node-chart-dir Mirror node local chart [string]
directory path (e.g.
~/hiero-mirror-node/charts).
NOTE: This only provides the
Helm chart templates — it does
NOT make the chart images
available to the cluster. All
container images referenced by
the chart must already be
pullable (e.g. published to a
registry or loaded into the
cluster with `kind load
docker-image`). Using a local
branch chart with SNAPSHOT
image tags will cause pods to
fail with ImagePullBackOff
unless those images have been
built and pushed to a registry
or loaded into the cluster.
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
--mirror-static-ip static IP address for the [string]
mirror node
--operator-id Operator ID [string]
--operator-key Operator Key [string]
--parallel-deploy Run independent one-shot [boolean] [default: true]
deploy stages in parallel
(consensus+block,
mirror+accounts,
explorer+relay). Disable with
--no-parallel-deploy for
sequential execution (useful
for debugging or
resource-constrained
environments).
--pinger Enable Pinger service in the [boolean] [default: false]
Mirror node monitor
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--storage-bucket name of storage bucket for [string]
mirror node importer
--storage-bucket-prefix path prefix of storage bucket [string]
mirror node importer
--storage-bucket-region region of storage bucket [string]
mirror node importer
--storage-endpoint storage endpoint URL for [string]
mirror node importer
--storage-read-access-key storage read access key for [string]
mirror node importer
--storage-read-secrets storage read-secret key for [string]
mirror node importer
--storage-type storage type for saving stream [default: "minio_only"]
files, available options are
minio_only, aws_only,
gcs_only, aws_and_gcs
--use-external-database Set to true if you have an [boolean] [default: false]
external database to use
instead of the database that
the Mirror Node Helm chart
supplies
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### mirror node destroy
```
mirror node destroy
Deletes the specified node from the deployment.
Options:
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### mirror node upgrade
```
mirror node upgrade
Upgrades the specified node from the deployment.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--enable-ingress enable ingress on the [boolean] [default: false]
component/pod
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--external-database-host Use to provide the external [string]
database host if the '
--use-external-database ' is
passed
--external-database-owner-password Use to provide the external [string]
database owner's password if
the ' --use-external-database
' is passed
--external-database-owner-username Use to provide the external [string]
database owner's username if
the ' --use-external-database
' is passed
--external-database-read-password Use to provide the external [string]
database readonly user's
password if the '
--use-external-database ' is
passed
--external-database-read-username Use to provide the external [string]
database readonly user's
username if the '
--use-external-database ' is
passed
--force Force enable block node [boolean] [default: false]
integration bypassing the
version requirements CN >=
v0.72.0, BN >= 0.29.0, CN >=
0.150.0
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
--ingress-controller-value-file The value file to use for [string]
ingress controller, defaults
to ""
--mirror-node-chart-dir Mirror node local chart [string]
directory path (e.g.
~/hiero-mirror-node/charts).
NOTE: This only provides the
Helm chart templates — it does
NOT make the chart images
available to the cluster. All
container images referenced by
the chart must already be
pullable (e.g. published to a
registry or loaded into the
cluster with `kind load
docker-image`). Using a local
branch chart with SNAPSHOT
image tags will cause pods to
fail with ImagePullBackOff
unless those images have been
built and pushed to a registry
or loaded into the cluster.
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
--mirror-static-ip static IP address for the [string]
mirror node
--operator-id Operator ID [string]
--operator-key Operator Key [string]
--pinger Enable Pinger service in the [boolean] [default: false]
Mirror node monitor
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
--storage-bucket name of storage bucket for [string]
mirror node importer
--storage-bucket-prefix path prefix of storage bucket [string]
mirror node importer
--storage-bucket-region region of storage bucket [string]
mirror node importer
--storage-endpoint storage endpoint URL for [string]
mirror node importer
--storage-read-access-key storage read access key for [string]
mirror node importer
--storage-read-secrets storage read-secret key for [string]
mirror node importer
--storage-type storage type for saving stream [default: "minio_only"]
files, available options are
minio_only, aws_only,
gcs_only, aws_and_gcs
--use-external-database Set to true if you have an [boolean] [default: false]
external database to use
instead of the database that
the Mirror Node Helm chart
supplies
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### mirror node collect-jfr
```
mirror node collect-jfr
Downloads the Java Flight Recorder recording from a mirror node importer instance in the specified deployment to the local solo logs directory. Requires the mirror node to have been deployed with Java Flight Recorder enabled.
Options:
-d, --deployment The name the user will [string] [required]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## relay
```
relay
RPC Relay Node operations for creating, modifying, and destroying resources. These commands require the presence of an existing deployment.
Commands:
relay node List, create, manage, or destroy relay node instances. Operates on a single relay node instance at a time.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### relay node
```
relay node
List, create, manage, or destroy relay node instances. Operates on a single relay node instance at a time.
Commands:
relay node add Adds and configures a new node instance.
relay node destroy Deletes the specified node from the deployment.
relay node upgrade Upgrades the specified node from the deployment.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### relay node add
```
relay node add
Adds and configures a new node instance.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--mirror-namespace Namespace to use for the [string]
Mirror Node deployment, a new
one will be created if it does
not exist
--mirror-node-id The id of the mirror node [number]
which to connect
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
--operator-id Operator ID [string]
--operator-key Operator Key [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-chart-dir Relay local chart directory [string]
path (e.g.
~/hiero-json-rpc-relay/charts)
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
--replica-count Replica count [number] [default: 1]
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### relay node destroy
```
relay node destroy
Deletes the specified node from the deployment.
Options:
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### relay node upgrade
```
relay node upgrade
Upgrades the specified node from the deployment.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-l, --chain-id Chain ID [string] [default: "298"]
--chart-dir Local chart directory path [string]
(e.g. ~/solo-charts/charts)
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--component-image , --relay-image Docker [string]
image override. Supports a
published registry reference
(e.g.
ghcr.io/hiero-ledger/component:1.2.3), a locally built image (e.g. component:1.2.3), or a Kind-attached local registry (e.g. localhost:5001/component:1.2.3). Locally available images are loaded into every target Kind cluster and use pullPolicy: Never. For non-Kind targets, publish the image to a registry reachable by the cluster.
--component-image-archive Path to a docker save image [string]
archive. Requires
--component-image to identify
the archived image. The
archive is loaded into every
target Kind cluster and uses
pullPolicy: Never.
--debug , --dev , --dev [boolean] [default: false]
Enable debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--domain-name Custom domain name [string]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--id The numeric identifier for the [number]
component
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--mirror-namespace Namespace to use for the [string]
Mirror Node deployment, a new
one will be created if it does
not exist
--mirror-node-id The id of the mirror node [number]
which to connect
-i, --node-aliases Comma separated node aliases [string]
(empty means all nodes)
--operator-id Operator ID [string]
--operator-key Operator Key [string]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-chart-dir Relay local chart directory [string]
path (e.g.
~/hiero-json-rpc-relay/charts)
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
--replica-count Replica count [number] [default: 1]
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
## cache
```
cache
Manage solo cached items.
Commands:
cache image Manage image archives used by solo.
cache chart Manage helm chart archives used by solo.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### cache image
```
cache image
Manage image archives used by solo.
Commands:
cache image pull Pull and caches docker images used by solo, prerequisite for `solo cache image load`.
cache image load Loads the images archive into a cluster. Pulling the images with `solo cache images pull` is a prerequisite.
cache image list Lists all cached image archives.
cache image clear Clears the image archives.
cache image prune Prune the image archives.
cache image status Lists all images, displays data about them and all missing images.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### cache image pull
```
cache image pull
Pull and caches docker images used by solo, prerequisite for `solo cache image load`.
Options:
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--edge Use edge component versions [boolean] [default: false]
(newer than defaults). Also
supports version overrides
from solo.config.yaml and
solo.config.json, for example:
`consensus-node-version:
v0.73.0` (YAML) or
`{"consensusNodeVersion":"v0.73.0"}` (JSON).
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
-v, --version Show version number [boolean]
```
#### cache image load
```
cache image load
Loads the images archive into a cluster. Pulling the images with `solo cache images pull` is a prerequisite.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache image list
```
cache image list
Lists all cached image archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache image clear
```
cache image clear
Clears the image archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache image prune
```
cache image prune
Prune the image archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache image status
```
cache image status
Lists all images, displays data about them and all missing images.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### cache chart
```
cache chart
Manage helm chart archives used by solo.
Commands:
cache chart pull Pulls and caches the helm charts used by solo so deploys can install them from the local cache.
cache chart list Lists all cached helm chart archives.
cache chart clear Clears the cached helm chart archives.
cache chart prune Prunes the cached helm chart archives.
cache chart status Lists all cached helm charts, their total size, and any missing chart archives.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### cache chart pull
```
cache chart pull
Pulls and caches the helm charts used by solo so deploys can install them from the local cache.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache chart list
```
cache chart list
Lists all cached helm chart archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache chart clear
```
cache chart clear
Clears the cached helm chart archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache chart prune
```
cache chart prune
Prunes the cached helm chart archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### cache chart status
```
cache chart status
Lists all cached helm charts, their total size, and any missing chart archives.
Options:
--cache-dir Local cache directory [string] [default: "/home/runner/.solo/cache"]
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## one-shot
```
one-shot
One Shot commands for new and returning users who need a preset environment type. These commands use reasonable defaults to provide a single command out of box experience.
Commands:
one-shot single Creates a uniquely named deployment with a single consensus node, mirror node, block node, relay node, and explorer node.
one-shot multi Creates a uniquely named deployment with multiple consensus nodes, mirror node, block node, relay node, and explorer node.
one-shot falcon Creates a uniquely named deployment with optional chart values override using --values-file.
one-shot show Display information about one-shot deployments.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### one-shot single
```
one-shot single
Creates a uniquely named deployment with a single consensus node, mirror node, block node, relay node, and explorer node.
Commands:
one-shot single deploy Deploys all required components for the selected one shot configuration.
one-shot single destroy Removes the deployed resources for the selected one shot configuration.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### one-shot single deploy
```
one-shot single deploy
Deploys all required components for the selected one shot configuration.
Options:
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--chart-version Block node chart version [deprecated] [string] [default: "0.40.1"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--edge Use edge component versions [boolean] [default: false]
(newer than defaults). Also
supports version overrides
from solo.config.yaml and
solo.config.json, for example:
`consensus-node-version:
v0.73.0` (YAML) or
`{"consensusNodeVersion":"v0.73.0"}` (JSON).
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--metrics-server Deploy metrics server to [boolean] [default: false]
enable kubectl top for CPU and
memory usage monitoring
--minimal-setup Create a deployment with [boolean] [default: false]
minimal setup. Only includes a
single consensus node and
mirror node
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
-n, --namespace Namespace [string]
--parallel-deploy Run independent one-shot [boolean] [default: true]
deploy stages in parallel
(consensus+block,
mirror+accounts,
explorer+relay). Disable with
--no-parallel-deploy for
sequential execution (useful
for debugging or
resource-constrained
environments).
--pinger Enable Pinger service in the [boolean] [default: false]
Mirror node monitor
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
--rollback Opt in to automatic cleanup [boolean] [default: false]
when deploy fails. By default,
failed one-shot deploys keep
partial resources so you can
inspect the failure and re-run
the same command.
-v, --version Show version number [boolean]
```
#### one-shot single destroy
```
one-shot single destroy
Removes the deployed resources for the selected one shot configuration.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### one-shot multi
```
one-shot multi
Creates a uniquely named deployment with multiple consensus nodes, mirror node, block node, relay node, and explorer node.
Commands:
one-shot multi deploy Deploys all required components for the selected multiple node one shot configuration.
one-shot multi destroy Removes the deployed resources for the selected multiple node one shot configuration.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### one-shot multi deploy
```
one-shot multi deploy
Deploys all required components for the selected multiple node one shot configuration.
Options:
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--chart-version Block node chart version [deprecated] [string] [default: "0.40.1"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--edge Use edge component versions [boolean] [default: false]
(newer than defaults). Also
supports version overrides
from solo.config.yaml and
solo.config.json, for example:
`consensus-node-version:
v0.73.0` (YAML) or
`{"consensusNodeVersion":"v0.73.0"}` (JSON).
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--metrics-server Deploy metrics server to [boolean] [default: false]
enable kubectl top for CPU and
memory usage monitoring
--minimal-setup Create a deployment with [boolean] [default: false]
minimal setup. Only includes a
single consensus node and
mirror node
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
-n, --namespace Namespace [string]
--num-consensus-nodes Used to specify desired number [number]
of consensus nodes for
pre-genesis deployments
--parallel-deploy Run independent one-shot [boolean] [default: true]
deploy stages in parallel
(consensus+block,
mirror+accounts,
explorer+relay). Disable with
--no-parallel-deploy for
sequential execution (useful
for debugging or
resource-constrained
environments).
--pinger Enable Pinger service in the [boolean] [default: false]
Mirror node monitor
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
--rollback Opt in to automatic cleanup [boolean] [default: false]
when deploy fails. By default,
failed one-shot deploys keep
partial resources so you can
inspect the failure and re-run
the same command.
-v, --version Show version number [boolean]
```
#### one-shot multi destroy
```
one-shot multi destroy
Removes the deployed resources for the selected multiple node one shot configuration.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### one-shot falcon
```
one-shot falcon
Creates a uniquely named deployment with optional chart values override using --values-file.
Commands:
one-shot falcon deploy Deploys all required components for the selected one shot configuration (with optional values file).
one-shot falcon destroy Removes the deployed resources for the selected one shot configuration (with optional values file).
one-shot falcon prepare Generates a falcon values file for use with one-shot falcon deploy. Writes to /home/runner/.solo/cache/falcon-values.yaml by default.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### one-shot falcon deploy
```
one-shot falcon deploy
Deploys all required components for the selected one shot configuration (with optional values file).
Options:
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--chart-version Block node chart version [deprecated] [string] [default: "0.40.1"]
-c, --cluster-ref The cluster reference that [string]
will be used for referencing
the Kubernetes cluster and
stored in the local and remote
configuration for the
deployment. For commands that
take multiple clusters they
can be separated by commas.
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev Enable [boolean] [default: false]
debug mode
--deploy-explorer Deploy explorer as part of [boolean] [default: true]
one-shot falcon deployment
--deploy-mirror-node Deploy mirror node as part of [boolean] [default: true]
one-shot falcon deployment
--deploy-relay Deploy relay as part of [boolean] [default: true]
one-shot falcon deployment
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--edge Use edge component versions [boolean] [default: false]
(newer than defaults). Also
supports version overrides
from solo.config.yaml and
solo.config.json, for example:
`consensus-node-version:
v0.73.0` (YAML) or
`{"consensusNodeVersion":"v0.73.0"}` (JSON).
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--external-address Bind address for kubectl [string]
port-forward (for example
127.0.0.1 or 0.0.0.0)
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--metrics-server Deploy metrics server to [boolean] [default: false]
enable kubectl top for CPU and
memory usage monitoring
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
-n, --namespace Namespace [string]
--num-consensus-nodes Used to specify desired number [number]
of consensus nodes for
pre-genesis deployments
--parallel-deploy Run independent one-shot [boolean] [default: true]
deploy stages in parallel
(consensus+block,
mirror+accounts,
explorer+relay). Disable with
--no-parallel-deploy for
sequential execution (useful
for debugging or
resource-constrained
environments).
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
--rollback Opt in to automatic cleanup [boolean] [default: false]
when deploy fails. By default,
failed one-shot deploys keep
partial resources so you can
inspect the failure and re-run
the same command.
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### one-shot falcon destroy
```
one-shot falcon destroy
Removes the deployed resources for the selected one shot configuration (with optional values file).
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### one-shot falcon prepare
```
one-shot falcon prepare
Generates a falcon values file for use with one-shot falcon deploy. Writes to /home/runner/.solo/cache/falcon-values.yaml by default.
Options:
--block-node-version Block node version to deploy [string]
for (e.g. v0.31.0 or 0.31.0).
--chart-version Block node chart version [deprecated] [string] [default: "0.40.1"]
--consensus-node-version Consensus node version to [string]
deploy (e.g. v0.73.0 or
0.73.0).
--debug , --dev Enable [boolean] [default: false]
debug mode
--debug-node-alias Enable default jvm debug port [string]
(5005) for the given node id
--explorer-version Explorer chart version [string] [default: "26.2.0"]
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--load-balancer Expose the deployed services [boolean] [default: false]
via a LoadBalancer service
type
--local-build-path path of hedera local repo [string]
--mirror-node-version Mirror node chart version [string] [default: "v0.161.0"]
--num-consensus-nodes Used to specify desired number [number]
of consensus nodes for
pre-genesis deployments
--output-values-file Output path for the generated [string] [default: "/home/runner/.solo/cache/falcon-values.yaml"]
falcon values YAML file.
Defaults to
~/.solo/cache/falcon-values.yaml. Relative paths are resolved against the current working directory.
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
--relay-release Relay release tag (e.g. [deprecated] [string] [default: "0.78.1"]
v0.48.0)
--relay-version JSON-RPC relay version to [string]
deploy (e.g. v0.76.2 or
0.76.2).
-t, --release-tag Consensus node release tag [deprecated] [string] [default: "v0.76.4"]
(e.g. v0.76.4)
--solo-chart-version Solo testing chart version [string] [default: "0.66.1"]
-v, --version Show version number [boolean]
```
### one-shot show
```
one-shot show
Display information about one-shot deployments.
Commands:
one-shot show deployment Display information about the last one-shot deployment including name, versions, and deployed components.
one-shot show accounts Display the contents of the one-shot deployment accounts.json file (supports --output json|yaml|wide).
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### one-shot show deployment
```
one-shot show deployment
Display information about the last one-shot deployment including name, versions, and deployed components.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
#### one-shot show accounts
```
one-shot show accounts
Display the contents of the one-shot deployment accounts.json file (supports --output json|yaml|wide).
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-o, --output Output format. One of: "json", [string]
"yaml", "wide"
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
## rapid-fire
```
rapid-fire
Commands for performing load tests a Solo deployment
Commands:
rapid-fire load Run load tests using the network load generator with the selected class.
rapid-fire destroy Uninstall the Network Load Generator Helm chart and clean up resources.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
### rapid-fire load
```
rapid-fire load
Run load tests using the network load generator with the selected class.
Commands:
rapid-fire load start Start a rapid-fire load test using the selected class.
rapid-fire load stop Stop any running processes using the selected class.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### rapid-fire load start
```
rapid-fire load start
Start a rapid-fire load test using the selected class.
Options:
--args All arguments to be passed to [string] [required]
the NLG load test class. Value
MUST be wrapped in 2 sets of
different quotes. Example:
'"-c 100 -a 40 -t 3600"'
--test The class name of the [string] [required]
Performance Test to run
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--javaHeap Max Java heap size in GB for [number] [default: 8]
the NLG load test class,
defaults to 8
--max-rtt Maximum allowed end-to-end [number] [default: 0]
round-trip time in
milliseconds, from transaction
submission to mirror node
availability
--max-tps The maximum transactions per [number] [default: 0]
second to be generated by the
NLG load test
--mirror-namespace Namespace to use for the [string]
Mirror Node deployment, a new
one will be created if it does
not exist
--package The package name of the [string] [default: "com.hedera.benchmark"]
Performance Test to run.
Defaults to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-f, --values-file Comma separated chart values [string]
files, each in YAML or JSON
format
-v, --version Show version number [boolean]
```
#### rapid-fire load stop
```
rapid-fire load stop
Stop any running processes using the selected class.
Options:
--test The class name of the [string] [required]
Performance Test to run
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
--package The package name of the [string] [default: "com.hedera.benchmark"]
Performance Test to run.
Defaults to
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
### rapid-fire destroy
```
rapid-fire destroy
Uninstall the Network Load Generator Helm chart and clean up resources.
Commands:
rapid-fire destroy all Uninstall the Network Load Generator Helm chart and remove all related resources.
Options:
--debug , --dev Enable debug [boolean] [default: false]
mode
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-v, --version Show version number [boolean]
```
#### rapid-fire destroy all
```
rapid-fire destroy all
Uninstall the Network Load Generator Helm chart and remove all related resources.
Options:
--debug , --dev , --dev Enable [boolean] [default: false]
debug mode
-d, --deployment The name the user will [string]
reference locally to link to a
deployment. Falls back to the
SOLO_DEPLOYMENT environment
variable, or is selected
automatically when the local
configuration contains exactly
one deployment
--force Force actions even if those [boolean] [default: false]
can be skipped
--force-port-forward Force port forward to access [boolean] [default: true]
the network services
-q, --quiet-mode Quiet mode, do not prompt for [boolean] [default: false]
confirmation
-v, --version Show version number [boolean]
```
---
# System Readiness
URL: https://solo.hiero.org/docs/simple-solo-setup/system-readiness/
Description: Verify hardware and software requirements before deploying a local Hiero test network with Solo. Check system prerequisites, install Docker/Podman, configure platform-specific settings, and ensure your machine is ready.
## Overview
Before you deploy a local Hiero test network with `solo one-shot single deploy`, your machine must meet specific hardware, operating system, and tooling requirements.
This page covers the minimum and recommended memory, CPU, and storage; supported platforms (macOS, Linux, and Windows — natively with PowerShell, or via WSL2); and the required versions of Docker/Podman, Node.js, and Kubernetes tooling.
By the end of this page, your container runtime will be installed and your platform environment configured. Then proceed to [Quickstart](/docs/simple-solo-setup/quickstart) to install Solo and deploy.
## Hardware Requirements
Solo's resource requirements depend on your deployment size:
| Configuration | Minimum RAM | Recommended RAM | Minimum CPU | Minimum Storage |
| --- | --- | --- | --- | --- |
| Single-node | 12 GB | 16 GB | 4 cores | 20 GB free |
| Multi-node (3+ nodes) | 16 GB | 24 GB | 8 cores | 20 GB free |
> **Note:** If you are using Docker Desktop, ensure the resource limits under
> **Settings → Resources** are set to at least these values - Docker caps usage
> independently of your machine's total available memory.
## Software Requirements
Solo sets up most of the tools it needs for you. The table below shows what each
install method provides, what Solo provisions automatically, and what you must
install yourself.
| Tool | Required version | How it is installed |
| --- | --- | --- |
| [Solo](https://github.com/hiero-ledger/solo) | latest | `npm install -g @hiero-ledger/solo@latest` (recommended); `brew install hiero-ledger/tools/solo` (deprecated - Homebrew support ends August 31, 2026) |
| [Node.js](https://nodejs.org/en/download) | >= 22.0.0 (lts/jod) | **You install it** (required for npm); Homebrew installs it automatically (deprecated) |
| Container runtime ([Docker](https://www.docker.com/products/docker-desktop) / [Podman](https://podman.io)) | See [Docker](#docker) below | **You install it** — Docker Desktop (macOS/Windows) or Docker Engine (Linux). Solo auto-installs Podman on Linux/macOS/WSL2 if Docker Engine is not found. Not supported on native Windows. |
| [kubectl](https://kubernetes.io/docs/reference/kubectl/) | >= v1.32.2 | **Solo provisions it** at deploy time - reuses a compatible copy already on your system, or downloads one into `~/.solo/bin` |
| [Helm](https://helm.sh) | v3.14.2 | **Solo provisions it** at deploy time |
| [Kind](https://kind.sigs.k8s.io) | >= v0.29.0 | **Solo provisions it** at deploy time |
| [Kubernetes](https://kubernetes.io) | >= v1.32.2 | Installed automatically by Kind |
| [k9s](https://k9scli.io/topics/install/) (optional) | >= v0.27.4 | You install it |
> **Note:** Solo's provisioned copies of kubectl, Kind, and Helm live in `~/.solo/bin`,
> which is not necessarily on your `PATH`. If you want to run `kubectl`, `kind`, or `helm`
> commands yourself (some guides do), install [kubectl](https://kubernetes.io/docs/tasks/tools/),
> [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation), and
> [Helm](https://helm.sh/docs/intro/install/) on your `PATH` separately.
### Windows (WSL2) prerequisite
Kind (which Solo provisions automatically) requires WSL2 to be enabled on
Windows, but you do not need a WSL2 Linux distro installed — only the WSL2
feature itself. Enable it with:
```powershell
wsl --install --no-distribution
```
WSL2 requires hardware virtualization and the Virtual Machine Platform Windows
feature. If virtualization is unavailable (for example, `wsl --install` reports
`HCS_E_HYPERV_NOT_INSTALLED`), use the native **Windows (PowerShell)** path
instead, which does not require WSL2.
## Docker
Solo requires Docker Desktop (macOS, Windows) or Docker Engine / Podman (Linux) with sufficient resources:
- **Memory**: at least 12 GB available for containers.
- **CPU**: at least 6 cores available for containers.
### Configure Resources by Platform
#### macOS and Windows (Docker Desktop)
To allocate the required resources in Docker Desktop:
1. Open **Docker Desktop**.
2. Go to **Settings > Resources > Memory** and set it to at least **12 GB**.
3. Go to **Settings > Resources > CPU** and set it to at least **6 cores**.
4. Click **Apply & Restart**.

> **Note:** If Docker Desktop does not have enough memory or CPU allocated, the one-shot deployment will fail or produce unhealthy pods.
#### Linux
Docker Engine on Linux uses system memory directly and does not have a resource allocation interface like Docker Desktop.
**Resource Check:**
- Ensure your machine has **at least 12 GB of free RAM** available before running `solo one-shot single deploy`.
- Check available memory with: `free -h`
- If you have insufficient RAM, the deployment may fail or pods may become unhealthy.
**Podman on Linux:**
If using Podman instead of Docker Engine, ensure your system has at least 12 GB of free RAM available.
## Platform Setup
Solo supports **macOS**, **Linux**, and **Windows** (natively with PowerShell, or via WSL2). Select your platform below to install the required container runtime and configure your environment, before proceeding to Quickstart:
> ⚠️ **Homebrew support is being deprecated.** Solo will stop publishing updates to Homebrew after August 31, 2026. New users should install via npm. Existing Homebrew users should migrate before August 31.
{{< tabpane text=true >}}
{{% tab header="macOS" lang="macos" %}}
1. Install Node.js (>= 22.0.0):
Download from [nodejs.org](https://nodejs.org/en/download), or install via [nvm](https://github.com/nvm-sh/nvm#installing-and-updating):
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm install --lts
```
2. Install Docker Desktop:
- Download from: [https://www.docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop)
- Start Docker Desktop and configure resources:
- **Settings → Resources → Memory**: set to at least **12 GB**
- **Settings → Resources → CPU**: set to at least **6 cores**
- Click **Apply & Restart**
> **macOS prerequisite:** Docker Desktop must be open before running `solo one-shot single deploy`. The Docker daemon is not started automatically on macOS, so confirm Docker Desktop is running from your menu bar before you begin.
3. Install Solo:
```sh
npm install -g @hiero-ledger/solo@latest
```
4. Verify the installation:
```sh
solo --version
```
{{% /tab %}}
{{% tab header="Linux" lang="linux" %}}
1. Install Node.js (>= 22.0.0):
Using [nvm](https://github.com/nvm-sh/nvm#installing-and-updating) (recommended):
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm install --lts
```
Or download from [nodejs.org](https://nodejs.org/en/download).
2. Install Docker Engine (Ubuntu/Debian):
```sh
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker ${USER}
```
Log out and back in for the group changes to take effect.
> **Fedora/RHEL:** Replace the `apt-get` commands above with your distro's
> package manager. For example, on Fedora: `sudo dnf install -y docker-ce
> docker-ce-cli containerd.io` (after adding Docker's dnf repo — see
> [Docker's Fedora guide](https://docs.docker.com/engine/install/fedora/)).
> Then run `sudo systemctl enable --now docker` and
> `sudo usermod -aG docker ${USER}`.
3. Install Solo:
```sh
npm install -g @hiero-ledger/solo@latest
```
4. Verify the installation:
```sh
solo --version
```
{{% /tab %}}
{{% tab header="Windows" lang="windows" %}}
Run Solo natively from **Windows PowerShell**. Run every command below in a PowerShell terminal.
1. Install Docker Desktop for Windows:
- Download from: [https://www.docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop).
- Start Docker Desktop and configure resources:
- **Settings → Resources → Memory**: set to at least **12 GB**
- **Settings → Resources → CPU**: set to at least **6 cores**
- Click **Apply & Restart**
> **Windows prerequisite:** Docker Desktop must be running before you run `solo one-shot single deploy`.
2. Install Node.js (>= 22.0.0):
```powershell
winget install OpenJS.NodeJS.LTS
```
Or download the installer from [nodejs.org](https://nodejs.org/en/download).
> **Note:** Open a new PowerShell window after installing tools so updated PATH entries take effect.
Your environment is ready. Proceed to [Quickstart](/docs/simple-solo-setup/quickstart) to install Solo and deploy.
{{% /tab %}}
{{% tab header="Windows (WSL2)" lang="wsl2" %}}
> **Note:** Make sure your machine meets the
> [Windows (WSL2) prerequisite](#windows-wsl2-prerequisite) first. If WSL
> and a Linux distribution are already installed, skip step 1 (and you may use a
> distribution other than Ubuntu).
1. Run the following command in Windows PowerShell (as Administrator), then reboot and open the Ubuntu terminal. All subsequent commands must be run inside the Ubuntu (WSL2) terminal.
```sh
wsl --install Ubuntu
```
2. Install Node.js (>= 22.0.0) inside the Ubuntu terminal:
Using [nvm](https://github.com/nvm-sh/nvm#installing-and-updating):
```sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm install --lts
```
3. Install Docker Desktop for Windows:
- Download from: [https://www.docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop)
- Enable WSL2 integration: **Settings → Resources → WSL Integration**
- Configure resources:
- **Settings → Resources → Memory**: set to at least **12 GB**
- **Settings → Resources → CPU**: set to at least **6 cores**
- Click **Apply & Restart**
4. Install Solo:
```sh
npm install -g @hiero-ledger/solo@latest
```
5. Verify the installation:
```sh
solo --version
```
{{% /tab %}}
{{< /tabpane >}}
## Optional Tools
The following tools are not required but are recommended for monitoring and managing your local network:
- **k9s** (`>= v0.27.4`): A terminal-based UI for managing Kubernetes clusters. Install it with:
```bash
brew install k9s
```
Run `k9s` to launch the cluster viewer.
## Version Compatibility Reference
{{< solo-releases-table >}}
## Troubleshooting Installation
If you experience issues installing or upgrading Solo - for example, conflicts
with a previous installation - clean up your environment and reinstall:
- To **remove a legacy npm install** or perform a **full environment reset**
(delete Solo-managed Kind clusters and your `~/.solo` directory), see the
[Cleanup guide](/docs/simple-solo-setup/cleanup).
- To **upgrade an existing install**, install a **specific version**, or switch
between Homebrew and npm, see
[Upgrading an existing Solo installation](/docs/simple-solo-setup/upgrading-solo).
- **macOS "mounts denied" error on Apple Silicon**: If `solo one-shot single deploy`
fails immediately with a **"mounts denied"** or **"path is not shared from the host"**
error, add `/opt/homebrew` to Docker Desktop's File Sharing list:
**Settings → Resources → File Sharing → +** → add `/opt/homebrew` → **Apply & Restart**.
This can occur on Apple Silicon Macs (M1/M2/M3/M4) when Homebrew's install path
(`/opt/homebrew`) is not included in Docker Desktop's shared directories.
Intel Mac users (Homebrew path `/usr/local`) are not affected.
- **WSL2 fails to install** (for example, `wsl --install` reports
`HCS_E_HYPERV_NOT_INSTALLED`): WSL2 requires hardware virtualization and the
Virtual Machine Platform feature. See Microsoft's
[Install WSL](https://learn.microsoft.com/en-us/windows/wsl/install) guide, or
use the native **Windows (PowerShell)** path, which does not require WSL2.
- **First deploy fails with a PostgreSQL startup timeout**: If
`solo one-shot single deploy` fails during mirror node setup with a
PostgreSQL startup timeout, this is a known intermittent issue on first
deploy. Destroy the deployment and retry:
```sh
solo one-shot single destroy
solo one-shot single deploy
```
---
# Using Environment Variables
URL: https://solo.hiero.org/docs/advanced-solo-setup/using-environment-variables/
Description: A comprehensive reference of all environment variables supported by Solo, including their purposes, default values, and expected formats. Configure Solo deployments through environment variable tuning.
## Overview
Solo supports a set of environment variables that let you customize its
behaviour without modifying command-line flags on every run. Variables set
in your shell environment take effect automatically for all subsequent Solo
commands.
The variables on this page configure **Solo itself**. They are not the same as the
variables Solo passes on to the external tools it runs (`helm`, `kubectl`, `kind`).
Those are filtered by an allowlist — see
[Subprocess Environment Filtering]({{< relref "subprocess-environment-filtering.md" >}})
if a variable you set is not reaching one of those tools.
### Setting environment variables
How you set a variable depends on your shell. Use the tab for your platform:
{{< tabpane text=true >}}
{{% tab header="Bash / Zsh" lang="bash" %}}
```bash
# For a single command only
CONSENSUS_NODE_VERSION=v0.73.0 solo one-shot single deploy
# For the current session
export CONSENSUS_NODE_VERSION=v0.73.0
# Persist across sessions (add to ~/.bashrc or ~/.zshrc)
echo 'export CONSENSUS_NODE_VERSION=v0.73.0' >> ~/.zshrc
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
# For the current session
$env:CONSENSUS_NODE_VERSION = 'v0.73.0'
# Persist for your user (all future sessions)
[System.Environment]::SetEnvironmentVariable('CONSENSUS_NODE_VERSION', 'v0.73.0', 'User')
# Or add it to your PowerShell profile
Add-Content $PROFILE '$env:CONSENSUS_NODE_VERSION = "v0.73.0"'
```
{{% /tab %}}
{{< /tabpane >}}
> **Tip:** Variables set in your shell environment (or persisted as shown above) take effect automatically for all subsequent Solo commands.
## General
| Environment Variable | Description | Default Value
| --- | --- | ---
| `SOLO_HOME` | Path to the Solo cache and log files | `~/.solo`
| `SOLO_CACHE_DIR` | Path to the Solo cache directory | `~/.solo/cache`
| `SOLO_LOG_LEVEL` | Logging level for Solo operations. Accepted values: `trace`, `debug`, `info`, `warn`, `error` | `info`
| `SOLO_DEV_OUTPUT` | Treat all commands as if the `--debug` flag were specified (`--debug` was formerly `--dev`) | `false`
| `SOLO_CHAIN_ID` | Chain ID of the Solo network | `298`
| `FORCE_PODMAN` | Force the use of Podman as the container engine when creating a new local cluster. Accepted values: `true`, `false` | `false`
---
## Network and Node Identity
| Environment Variable | Description | Default Value
| --- | --- | ---
| `DEFAULT_START_ID_NUMBER` | Raw node ID number for the first consensus node. The first node account ID is resolved as `0.0.` | `3`
| `SOLO_NODE_INTERNAL_GOSSIP_PORT` | Internal gossip port used by the Hiero network | `50111`
| `SOLO_NODE_EXTERNAL_GOSSIP_PORT` | External gossip port used by the Hiero network | `50111`
| `SOLO_NODE_DEFAULT_STAKE_AMOUNT` | Default stake amount for a node | `500`
| `GRPC_PORT` | Local port-forward for consensus node gRPC. Default is `35211` for Solo 0.63+ (changed from `50211` to avoid Windows ephemeral-port conflicts). See [Port availability](/docs/using-solo/endpoints#port-availability). | `35211`
| `LOCAL_NODE_START_PORT` | Local node start port for the Solo network | `30212`
---
## Operator and Key Configuration
| Environment Variable | Description | Default Value
| --- | --- | ---
| `SOLO_OPERATOR_ID` | Operator account ID for the Solo network | `0.0.2`
| `SOLO_OPERATOR_KEY` | Operator private key for the Solo network | `302e020100...`
| `SOLO_OPERATOR_PUBLIC_KEY` | Operator public key for the Solo network | `302a300506...`
| `FREEZE_ADMIN_ACCOUNT` | Freeze admin account ID for the Solo network | `0.0.58`
| `GENESIS_KEY` | Genesis private key for the Solo network | `302e020100...`
> **Note:** Full key values are omitted above for readability. Refer to the
> [source defaults](https://github.com/hiero-ledger/solo) for complete key strings.
---
## Node Client Behaviour
| Environment Variable | Description | Default Value
| --- | --- | ---
| `NODE_CLIENT_MIN_BACKOFF` | Minimum wait time between retries, in milliseconds | `1000`
| `NODE_CLIENT_MAX_BACKOFF` | Maximum wait time between retries, in milliseconds | `1000`
| `NODE_CLIENT_REQUEST_TIMEOUT` | Time a transaction or query retries on a "busy" network response, in milliseconds | `600000`
| `NODE_CLIENT_MAX_ATTEMPTS` | Maximum number of attempts for node client operations | `600`
| `NODE_CLIENT_SDK_PING_MAX_RETRIES` | Maximum number of retries for node health pings | `5`
| `NODE_CLIENT_SDK_PING_RETRY_INTERVAL` | Interval between node health ping retries, in milliseconds | `10000`
| `NODE_COPY_CONCURRENT` | Number of concurrent threads used when copying files to a node | `4`
| `EXPERIMENTAL_COPY_WRAPS_LIB_IN_PARALLEL` | Copy the WRAPS proving-key library to every consensus node concurrently during `solo network deploy`, instead of one node at a time. Concurrent copies finish faster on a network deploy with many nodes and ample bandwidth, but can saturate a constrained connection when several multi-hundred-megabyte copies run at once. Accepted values: `true`, `false` | `false`
| `LOCAL_BUILD_COPY_RETRY` | Number of retries for local build copy operations | `3`
| `ACCOUNT_UPDATE_BATCH_SIZE` | Number of accounts to update in a single batch operation | `10`
---
## Pod and Network Readiness
| Environment Variable | Description | Default Value
| --- | --- | ---
| `PODS_RUNNING_MAX_ATTEMPTS` | Maximum number of attempts to check if pods are running | `900`
| `PODS_RUNNING_DELAY` | Interval between pod running checks, in milliseconds | `1000`
| `PODS_READY_MAX_ATTEMPTS` | Maximum number of attempts to check if pods are ready | `300`
| `PODS_READY_DELAY` | Interval between pod ready checks, in milliseconds | `2000`
| `NETWORK_NODE_ACTIVE_MAX_ATTEMPTS` | Maximum number of attempts to check if network nodes are active | `300`
| `NETWORK_NODE_ACTIVE_DELAY` | Interval between network node active checks, in milliseconds | `1000`
| `NETWORK_NODE_ACTIVE_TIMEOUT` | Maximum wait time for network nodes to become active, in milliseconds | `1000`
| `NETWORK_PROXY_MAX_ATTEMPTS` | Maximum number of attempts to check if the network proxy is running | `300`
| `NETWORK_PROXY_DELAY` | Interval between network proxy checks, in milliseconds | `2000`
| `NETWORK_DESTROY_WAIT_TIMEOUT` | Maximum wait time for network teardown to complete, in milliseconds | `120`
| `STATE_DOWNLOAD_STABLE_MAX_ATTEMPTS` | Maximum number of attempts to check whether a consensus node's saved state has stopped changing on disk, before `solo consensus state download` archives it and before `solo consensus network freeze` stops the nodes | `180`
| `STATE_DOWNLOAD_STABLE_DELAY` | Interval between saved state stability checks, in milliseconds | `2000`
| `STATE_DOWNLOAD_STABLE_POLLS_REQUIRED` | Number of consecutive checks that must report an unchanged saved state before it is treated as stable | `3`
---
## Block Node
| Environment Variable | Description | Default Value
| --- | --- | ---
| `BLOCK_NODE_PODS_RUNNING_MAX_ATTEMPTS` | Maximum number of attempts to check if block node pods are running | `900`
| `BLOCK_NODE_PODS_RUNNING_DELAY` | Interval between block node pod running checks, in milliseconds | `1000`
| `BLOCK_NODE_ACTIVE_MAX_ATTEMPTS` | Maximum number of attempts to check if block nodes are active | `100`
| `BLOCK_NODE_ACTIVE_DELAY` | Interval between block node active checks, in milliseconds | `60`
| `BLOCK_NODE_ACTIVE_TIMEOUT` | Maximum wait time for block nodes to become active, in milliseconds | `60`
| `BLOCK_STREAM_STREAM_MODE` | The `blockStream.streamMode` value in consensus node application properties. Only applies when a Block Node is deployed | `BOTH`
| `BLOCK_STREAM_WRITER_MODE` | The `blockStream.writerMode` value in consensus node application properties. Only applies when a Block Node is deployed | `FILE_AND_GRPC`
---
## Relay Node
| Environment Variable | Description | Default Value
| --- | --- | ---
| `RELAY_PODS_RUNNING_MAX_ATTEMPTS` | Maximum number of attempts to check if relay pods are running | `900`
| `RELAY_PODS_RUNNING_DELAY` | Interval between relay pod running checks, in milliseconds | `1000`
| `RELAY_PODS_READY_MAX_ATTEMPTS` | Maximum number of attempts to check if relay pods are ready | `100`
| `RELAY_PODS_READY_DELAY` | Interval between relay pod ready checks, in milliseconds | `1000`
## Mirror Node
| Environment Variable | Description | Default Value
| --- | --- | ---
| `DISABLE_IMPORTER_SPRING_PROFILES` | Disable automatic configuration of Mirror Node importer Spring profiles for block-node integration. | `false` |
| `SPRING_PROFILES_ACTIVE` | Spring profiles to use for the Mirror Node importer when automatic importer profile configuration is enabled. | `blocknode` |
| `MIRROR_NODE_SCHEMA_READY_MAX_ATTEMPTS` | Maximum number of attempts to check if the Mirror Node database schema has been built (signalled by importer pod readiness) | `900`
| `MIRROR_NODE_SCHEMA_READY_DELAY` | Interval between Mirror Node database schema checks, in milliseconds | `2000`
| `MIRROR_NODE_IMPORTER_DETECT_MAX_ATTEMPTS` | Maximum number of attempts to detect a running Mirror Node importer pod. If no importer pod is found, the database schema wait is skipped | `15`
| `MIRROR_NODE_IMPORTER_DETECT_DELAY` | Interval between Mirror Node importer pod detection attempts, in milliseconds | `2000`
| `MIRROR_NODE_CHART_UPGRADE_MAX_ATTEMPTS` | Maximum number of attempts to install or upgrade the Mirror Node Helm chart before failing. Retries ride out transient Kubernetes API server outages | `3`
| `MIRROR_NODE_CHART_UPGRADE_RETRY_DELAY_SECS` | Delay between Mirror Node Helm chart install/upgrade attempts, in seconds | `15`
---
## Load Balancer
| Environment Variable | Description | Default Value
| --- | --- | ---
| `LOAD_BALANCER_CHECK_DELAY_SECS` | Delay between load balancer status checks, in seconds | `5`
| `LOAD_BALANCER_CHECK_MAX_ATTEMPTS` | Maximum number of attempts to check load balancer status | `60`
---
## Lease Management
| Environment Variable | Description | Default Value
| --- | --- | ---
| `SOLO_LEASE_ACQUIRE_ATTEMPTS` | Number of attempts to acquire a lock before failing | `10`
| `SOLO_LEASE_DURATION` | Duration in seconds for which a lock is held before expiration | `20`
---
## Component Versions
| Environment Variable | Description
| --- | ---
| `CONSENSUS_NODE_VERSION` | [Release version](https://github.com/hiero-ledger/hiero-consensus-node/releases) of the Consensus Node to use
| `BLOCK_NODE_VERSION` | [Release version](https://github.com/hiero-ledger/hiero-block-node/releases) of the Block Node to use
| `MIRROR_NODE_VERSION` | [Release version](https://github.com/hiero-ledger/hiero-mirror-node/releases) of the Mirror Node to use
| `EXPLORER_VERSION` | [Release version](https://github.com/hiero-ledger/hiero-mirror-node-explorer/releases) of the Explorer to use
| `RELAY_VERSION` | [Release version](https://github.com/hiero-ledger/hiero-json-rpc-relay/releases) of the JSON-RPC Relay to use
| `INGRESS_CONTROLLER_VERSION` | [Release version](https://haproxy-ingress.github.io/) of the HAProxy Ingress Controller to use
| `SOLO_CHART_VERSION` | Release version of the Solo Helm charts to use
| `SOLO_CHEETAH_VERSION` | Image version for the solo-deployment chart's Cheetah component
| `SOLO_CONTAINERS_VERSION` | Image version for the solo-deployment chart's Solo containers component
| `MINIO_OPERATOR_VERSION` | Release version of the MinIO Operator to use
| `PROMETHEUS_STACK_VERSION` | Release version of the Prometheus Stack to use
| `GRAFANA_ALLOY_VERSION` | [Helm chart version](https://github.com/grafana/helm-charts/releases?q=alloy) of Grafana Alloy installed by `solo cluster-ref config setup --grafana-alloy`
| `LOKI_VERSION` | [Helm chart version](https://github.com/grafana/loki/releases?q=helm-loki) of the Loki log store installed by `solo cluster-ref config setup --grafana-alloy`
| `GRAFANA_PODLOGS_CRD_VERSION` | [Grafana Alloy release tag](https://github.com/grafana/alloy/releases) the PodLogs custom resource definition is fetched from during `solo network deploy --enable-monitoring-support`
> **Tip:** To pin component versions for a `solo one-shot single deploy`, prefix
> the command with these variables. See the
> [One-Shot Deployment](#one-shot-deployment) section below for an example.
---
## Edge Component Versions
These variables only take effect when `solo one-shot single deploy` or
`solo one-shot multi deploy` is invoked with the `--edge` flag (`solo one-shot
falcon deploy` does not accept `--edge` in v0.72.0). They let you point a
one-shot deploy at arbitrary component tags — release candidates,
pre-releases, or any other tag the component's registry exposes — without
rebuilding Solo.
| Component | Environment Variable | Falls back to |
| --------------- | ------------------------------ | -------------------------- |
| Consensus Node | `CONSENSUS_NODE_EDGE_VERSION` | `CONSENSUS_NODE_VERSION` |
| Mirror Node | `MIRROR_NODE_EDGE_VERSION` | `MIRROR_NODE_VERSION` |
| JSON-RPC Relay | `RELAY_EDGE_VERSION` | `RELAY_VERSION` |
| Explorer | `EXPLORER_EDGE_VERSION` | `EXPLORER_VERSION` |
| Block Node | `BLOCK_NODE_EDGE_VERSION` | `BLOCK_NODE_VERSION` |
| Solo Chart | `SOLO_CHART_EDGE_VERSION` | `SOLO_CHART_VERSION` |
Set only the variables for components you want to override; the rest use their
compiled-in edge defaults. Without `--edge`, every `*_EDGE_VERSION` variable is
ignored.
For full usage, examples, version-format rules, and troubleshooting, see
[One-Shot Deploy with Custom Component Versions](/docs/advanced-solo-setup/one-shot-deploy-with-custom-versions).
---
## Helm Chart URLs
| Environment Variable | Description | Default Value
| --- | --- | ---
| `JSON_RPC_RELAY_CHART_URL` | Helm chart repository URL for the JSON-RPC Relay | `https://hiero-ledger.github.io/hiero-json-rpc-relay/charts`
| `MIRROR_NODE_CHART_URL` | Helm chart repository URL for the Mirror Node | `https://hashgraph.github.io/hedera-mirror-node/charts`
| `EXPLORER_CHART_URL` | Helm chart repository URL for the Explorer | `oci://ghcr.io/hiero-ledger/hiero-mirror-node-explorer/hiero-explorer-chart`
| `INGRESS_CONTROLLER_CHART_URL` | Helm chart repository URL for the ingress controller | `https://haproxy-ingress.github.io/charts`
| `PROMETHEUS_OPERATOR_CRDS_CHART_URL` | Helm chart repository URL for the Prometheus Operator CRDs | `https://prometheus-community.github.io/helm-charts`
| `GRAFANA_ALLOY_CHART_URL` | Helm chart repository URL for Grafana Alloy | `https://grafana.github.io/helm-charts`
| `LOKI_CHART_URL` | Helm chart repository URL for Loki | `https://grafana.github.io/helm-charts`
| `NETWORK_LOAD_GENERATOR_CHART_URL` | Helm chart repository URL for the Network Load Generator | `oci://swirldslabs.jfrog.io/load-generator-helm-release-local`
---
## Network Load Generator
| Environment Variable | Description | Default Value
| --- | --- | ---
| `NETWORK_LOAD_GENERATOR_CHART_VERSION` | Release version of the Network Load Generator Helm chart to use | `v0.7.0`
| `NETWORK_LOAD_GENERATOR_PODS_RUNNING_MAX_ATTEMPTS` | Maximum number of attempts to check if Network Load Generator pods are running | `900`
| `NETWORK_LOAD_GENERATOR_POD_RUNNING_DELAY` | Interval between Network Load Generator pod running checks, in milliseconds | `1000`
---
## One-Shot Deployment
| Environment Variable | Description | Default Value
| --- | --- | ---
| `ONE_SHOT_WITH_BLOCK_NODE` | Deploy Block Node as part of a one-shot deployment | `false`
| `MIRROR_NODE_PINGER_TPS` | Transactions per second for the Mirror Node monitor pinger. Set to `0` to disable | `5`
| `CONSENSUS_NODE_EDGE_VERSION` | Edge (newer-than-default) consensus node version used by `--edge` in one-shot deploys. Falls back to `CONSENSUS_NODE_VERSION`. | `v0.74.0-rc.1`
| `MIRROR_NODE_EDGE_VERSION` | Edge mirror node version used by `--edge` in one-shot deploys. Falls back to `MIRROR_NODE_VERSION`. | `v0.153.1`
| `EXPLORER_EDGE_VERSION` | Edge explorer version used by `--edge` in one-shot deploys. Falls back to `EXPLORER_VERSION`. | `26.0.0`
| `RELAY_EDGE_VERSION` | Edge relay version used by `--edge` in one-shot deploys. Falls back to `RELAY_VERSION`. | `0.76.2`
| `BLOCK_NODE_EDGE_VERSION` | Edge block node version used by `--edge` in one-shot deploys. Falls back to `BLOCK_NODE_VERSION`. | `0.31.0`
### Pinning Component Versions
`solo one-shot single deploy` does not yet expose CLI flags for pinning
individual component versions. To run a one-shot deployment against specific
releases, prefix the command with the
[Component Versions](#component-versions) environment variables:
```bash
CONSENSUS_NODE_VERSION=v0.73.0 MIRROR_NODE_VERSION=v0.153.1 solo one-shot single deploy
```
Any of the `*_VERSION` variables listed in
[Component Versions](#component-versions) can be combined in the same command
to pin multiple components at once.
> **Note:**
>
> - This is the current recommended approach for version pinning in one-shot
> deployments.
> - CLI flags for version overrides on `one-shot` are planned for Q2 — tracked
> in [hiero-ledger/solo#4242](https://github.com/hiero-ledger/solo/issues/4242).
> - Environment variables will remain valid for one-off overrides after the
> CLI flags land, so the form above will continue to work.
## Image Cache
Solo caches the container images it deploys as local archives to speed up
repeat deployments. The cache is enabled by default; these variables disable it
per context. See [Solo Image Cache](/docs/advanced-solo-setup/image-cache) for
the full feature and the `solo cache image` commands.
| Environment Variable | Description | Default
| --- | --- | ---
| `ENABLE_IMAGE_CACHE` | Set to `false` to disable the image cache during `solo one-shot` deploys. **Requires Solo v0.78.0 or later** (earlier releases have an inverted-logic bug in this flag). | enabled
| `SOLO_NO_CACHE` | Set to `true` to skip the image pull during an npm global install. | enabled
| `HOMEBREW_NO_SOLO_CACHE` | Set to any value to skip the image pull during a Homebrew install. | enabled
| `CACHE_IMAGE_MAX_CONCURRENCY` | Max concurrent image cache pull/load operations | 12
> **Note:** The cached component versions follow the same environment-variable
> mechanism as [Pinning Component Versions](#pinning-component-versions) above -
> the `*_VERSION` environment variables affect the images the cache pulls, but
> the `--*-version` CLI flags do not.
---
# Using Solo with Hiero SDKs
URL: https://solo.hiero.org/docs/using-solo/using-solo-with-hiero-sdks/
Description: Walk through submitting your first transaction to a local Solo network using the Hiero JavaScript, Java, or Go SDK.
## Overview
The Hiero SDKs let you build and test applications on the Hiero network using
[JavaScript / TypeScript](https://github.com/hiero-ledger/hiero-sdk-js),
[Java](https://github.com/hiero-ledger/hiero-sdk-java), or
[Go](https://github.com/hiero-ledger/hiero-sdk-go). This guide walks you
through launching a local Solo network, locating its bootstrap operator
account, setting up a project for your chosen SDK, and running example
transactions. The Solo-side steps are identical across all three SDKs;
the language-specific steps appear in tabs you can switch between.
---
## Prerequisites
Before proceeding, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness):
- Your local environment meets all hardware and software requirements, including Docker, kubectl, and Solo.
- The shared baseline tools:
| Requirement | Version | Purpose |
| --- | --- | --- |
| [Docker Desktop](https://www.docker.com/products/docker-desktop/) | Latest | Runs the Solo cluster containers |
| [Solo](/docs/simple-solo-setup/system-readiness) | Latest stable | Deploys and manages the local network |
- Plus the SDK-specific toolchain for the language you'll use:
{{< tabpane text=true >}}
{{% tab header="JavaScript" lang="javascript" %}}
| Requirement | Version | Purpose |
| --- | --- | --- |
| [Node.js](https://nodejs.org/) | v22 or higher | Runs your application against the SDK |
{{% /tab %}}
{{% tab header="Java" lang="java" %}}
| Requirement | Version | Purpose |
| --- | --- | --- |
| [JDK](https://adoptium.net/) | **v21 or higher** (Eclipse Temurin recommended) | Required by the Hiero Java SDK |
| [Gradle](https://gradle.org/install/) | v8.5 or later | Builds and runs the Java project |
{{% /tab %}}
{{% tab header="Go" lang="go" %}}
| Requirement | Version | Purpose |
| --- | --- | --- |
| [Go](https://go.dev/dl/) | **v1.25 or higher** | Required by the Hiero Go SDK |
{{% /tab %}}
{{< /tabpane >}}
> **Note:** Solo uses Docker Desktop to spin up local Hiero consensus and mirror nodes.
> Ensure Docker Desktop is running before deploying the local network.
---
## Step 1: Launch a Local Solo Network
Deploy a local Solo network by following the [Solo Quickstart](/docs/simple-solo-setup/quickstart). Once it's running, retrieve your deployment name with [`solo one-shot show deployment`](/docs/simple-solo-setup/quickstart#capture-your-deployment-name) - the rest of this guide refers to it as ``.
---
## Step 2: Install the SDK
Install the Hiero SDK for your language.
{{< tabpane text=true >}}
{{% tab header="JavaScript" lang="javascript" %}}
Initialize a Node.js project and install the SDK from npm:
```bash
mkdir solo-js-demo && cd solo-js-demo
npm init -y
npm install @hiero-ledger/sdk
```
For the full SDK source tree (with the bundled `examples/` directory), follow the [Hiero JavaScript SDK README](https://github.com/hiero-ledger/hiero-sdk-js#installation). The repository uses pnpm workspaces + go-task to build.
{{% /tab %}}
{{% tab header="Java" lang="java" %}}
Follow the [Hiero Java SDK quickstart](https://github.com/hiero-ledger/hiero-sdk-java/blob/v2.72.0/docs/java-app/java-app-quickstart.md) to set up a Gradle (or Maven) project. The minimum dependency set:
```kotlin
implementation("com.hedera.hashgraph:sdk:2.72.0")
implementation("io.grpc:grpc-netty-shaded:1.64.0")
implementation("org.slf4j:slf4j-nop:2.0.9")
```
{{% /tab %}}
{{% tab header="Go" lang="go" %}}
Initialize a Go module and add the Hiero Go SDK:
```bash
mkdir solo-go-demo && cd solo-go-demo
go mod init solo-go-demo
go get github.com/hiero-ledger/hiero-sdk-go/v2@v2.80.0
```
Go 1.25 or higher is required (per `go.mod` in the SDK). See the [Hiero Go SDK README](https://github.com/hiero-ledger/hiero-sdk-go) for the full setup walkthrough.
{{% /tab %}}
{{< /tabpane >}}
---
## Step 3: Locate Your Operator Credentials
`solo one-shot single deploy` provisions pre-funded accounts and writes their
credentials to `accounts.json`. Any account from this file can
serve as your SDK operator — `0.0.2` is used as the example throughout this
guide, but it is not required. You do **not** need to call
`solo ledger account create` for the examples in this guide.
> **Tip:** Account credentials are also printed to the terminal at the end of
> `solo one-shot single deploy`. If you missed the output, use the steps below
> to retrieve them from disk.
- Print the operator credentials:
```bash
cat ~/.solo/one-shot-/accounts.json
```
> **Tip:** If you are unsure of your deployment name, run `solo one-shot show deployment` — it prints the deployment name and the full path to `accounts.json`.
- **Expected output:**
```json
{
"systemAccounts": [
{
"name": "Operator",
"accountId": "0.0.2",
"publicKey": "302a300506032b65700321000aa8e21064c61eab86e2a9c164565b4e7a9a4146106e0a6cd03a8c395a110e92",
"privateKey": "302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"
}
],
"createdAccounts": [
{ "accountId": "0.0.1002", "privateKey": "0x105d050185...", "balance": "1000000 ℏ", "group": "ecdsa-alias" },
...
]
}
```
The `systemAccounts[0]` entry (`0.0.2`) holds an Ed25519 key in DER format
and is used as the operator example in this guide. The `createdAccounts` array
contains additional pre-funded ECDSA accounts (`0.0.1002`–`0.0.1011`) useful
for EVM workflows — any of these can also be used as an operator.
- Save the `accountId` and `privateKey` values from `systemAccounts[0]` — you will configure the SDK with them in the next step.
> **EVM tooling note:** For ethers.js, Hardhat, or Foundry, use one of the
> `createdAccounts` entries; their `privateKey` values are already in
> 0x-prefixed hex form. See
> [Using Solo with EVM Tools](/docs/using-solo/using-solo-with-evm-tools) for
> the full EVM-side workflow.
---
## Step 4: Configure the SDK to Connect to Solo
Each SDK reads operator credentials and the network endpoint differently.
Pick your language tab below.
{{< tabpane text=true >}}
{{% tab header="JavaScript" lang="javascript" %}}
The Hiero JavaScript SDK uses environment variables to authenticate the operator account. Create a `.env` file at the root of the `hiero-sdk-js` directory:
```bash
cd hiero-sdk-js
cat > .env < **Important:** `OPERATOR_KEY` must be set to the `privateKey` value, not the `publicKey`. The private key is the longer DER-encoded string beginning with `302e...`. The example scripts also require `HEDERA_NETWORK` - they throw "LocalProvider requires the `HEDERA_NETWORK` environment variable to be set" if it is missing.
> **Security:** Never commit `.env` to source control - the file holds the operator's private key. Add `.env` to your repository's `.gitignore`.
Configure the client with the **Solo 0.63+** port-forwards using `Client.fromConfig()`. The SDK's built-in `Client.forLocalNode()` preset is hardcoded to `localhost:50211`, which does not match Solo 0.63+ defaults (`localhost:35211` for consensus gRPC, `localhost:38081` for the mirror node ingress). Use the explicit network map shown below instead:
```typescript
import { Client, AccountId } from "@hiero-ledger/sdk";
const network = { "127.0.0.1:35211": AccountId.fromString("0.0.3") };
const mirrorNetwork = "127.0.0.1:38081";
const client = Client.fromConfig({
network,
mirrorNetwork,
// Required: the SDK's address-book refresh otherwise pulls in the
// hardcoded 50211/50212 ports, which Solo 0.63+ does not expose.
scheduleNetworkUpdate: false,
});
client.setOperator(process.env.OPERATOR_ID!, process.env.OPERATOR_KEY!);
```
{{% /tab %}}
{{% tab header="Java" lang="java" %}}
Create a `.env` file at the project root to hold your operator credentials:
```bash
cat > .env < **Important:** `OPERATOR_KEY` must be the `privateKey` value, not the `publicKey`. The private key is the longer DER-encoded string beginning with `302e...`.
> **Security:** Never commit `.env` to source control - the file holds the operator's private key. Add `.env` to your repository's `.gitignore`.
Load the env variables:
```bash
set -a; source .env; set +a
```
Configure the client in `src/main/java/Main.java`. Unlike the JavaScript SDK (which ships a `LocalProvider` / `Client.forName("local-node")` preset), the Hiero Java SDK has no local-node preset - `Client.forName(...)` only accepts `"mainnet"`, `"testnet"`, or `"previewnet"` and throws `IllegalArgumentException` otherwise. Build the network map explicitly using `Client.forNetwork(Map)` against Solo's auto-forwarded ports:
```java
import com.hedera.hashgraph.sdk.AccountId;
import com.hedera.hashgraph.sdk.AccountInfoQuery;
import com.hedera.hashgraph.sdk.Client;
import com.hedera.hashgraph.sdk.PrivateKey;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
String operatorId = System.getenv("OPERATOR_ID");
String operatorKey = System.getenv("OPERATOR_KEY");
if (operatorId == null || operatorKey == null) {
throw new IllegalStateException(
"Set OPERATOR_ID and OPERATOR_KEY env vars before running.");
}
Map network = new HashMap<>();
network.put("127.0.0.1:35211", AccountId.fromString("0.0.3"));
Client client = Client.forNetwork(network);
client.setMirrorNetwork(List.of("127.0.0.1:38081"));
client.setOperator(
AccountId.fromString(operatorId),
PrivateKey.fromString(operatorKey));
// ... transactions and queries go here ...
client.close();
}
}
```
> `Client.setMirrorNetwork(List)` declares `throws InterruptedException`, and queries/transactions throw `TimeoutException` / `PrecheckStatusException`. Declaring `throws Exception` on `main` keeps the example readable; wrap with explicit try/catch in production code.
{{% /tab %}}
{{% tab header="Go" lang="go" %}}
The Hiero Go SDK reads operator credentials and the target network from environment variables.
Create a `.env` file at the project root:
```bash
cat > .env <<'EOF'
# Operator account ID (systemAccounts[0].accountId from Step 3)
export OPERATOR_ID="0.0.2"
# Operator private key (systemAccounts[0].privateKey from Step 3)
export OPERATOR_KEY="302e020100300506032b65700422042091132178e72057a1d7528025956fe39b0b847f200ab59b2fdd367017f3087137"
# Network name. "localhost" is the SDK's local-node preset; only used by
# ClientForName(...) - the explicit ClientForNetworkV2 path below ignores it.
export HEDERA_NETWORK="localhost"
EOF
source .env
```
> **Important:** `OPERATOR_KEY` must be the `privateKey` value, not the `publicKey`. The private key is the longer DER-encoded string beginning with `302e...`.
> **Security:** Never commit `.env` to source control. Add it to `.gitignore`.
Configure the client in `main.go`. The Hiero Go SDK ships a `ClientForName` preset that recognizes `"local"` and `"localhost"`, but the preset is **hardcoded to `127.0.0.1:50211` (consensus gRPC) and `127.0.0.1:5600` (mirror gRPC)** - ports Solo does not expose by default (Solo's auto-port-forwards use `35211` and `38081`). The simplest path that works out of the box is to build the network map explicitly with `ClientForNetworkV2`:
```go
package main
import (
"fmt"
"os"
hiero "github.com/hiero-ledger/hiero-sdk-go/v2/sdk"
)
func main() {
operatorID := os.Getenv("OPERATOR_ID")
operatorKey := os.Getenv("OPERATOR_KEY")
if operatorID == "" || operatorKey == "" {
fmt.Fprintln(os.Stderr, "Set OPERATOR_ID and OPERATOR_KEY env vars before running.")
os.Exit(1)
}
network := map[string]hiero.AccountID{
"127.0.0.1:35211": {Account: 3},
}
client, err := hiero.ClientForNetworkV2(network)
if err != nil {
panic(err)
}
defer client.Close()
client.SetMirrorNetwork([]string{"127.0.0.1:38081"})
opAccID, err := hiero.AccountIDFromString(operatorID)
if err != nil {
panic(err)
}
opKey, err := hiero.PrivateKeyFromString(operatorKey)
if err != nil {
panic(err)
}
client.SetOperator(opAccID, opKey)
// ... transactions and queries go here ...
}
```
> The network map's value uses the struct literal `hiero.AccountID{Account: 3}` (matches `network-node1`'s `0.0.3`). This is shorter than `hiero.AccountIDFromString("0.0.3")` and matches the form upstream examples use.
{{% /tab %}}
{{< /tabpane >}}
### Verify your configuration
Add an `AccountInfoQuery` for the operator and run it to confirm the client reaches Solo.
{{< tabpane text=true >}}
{{% tab header="JavaScript" lang="javascript" %}}
In your TypeScript/JavaScript code, after building `client`:
```typescript
const info = await new AccountInfoQuery()
.setAccountId(AccountId.fromString(process.env.OPERATOR_ID!))
.execute(client);
console.log("Account ID :", info.accountId.toString());
console.log("Balance :", info.balance.toString());
```
{{% /tab %}}
{{% tab header="Java" lang="java" %}}
In `Main.java`, after `setOperator(...)`:
```java
var info = new AccountInfoQuery()
.setAccountId(AccountId.fromString(operatorId))
.execute(client);
System.out.println("Account ID : " + info.accountId);
System.out.println("Balance : " + info.balance);
```
Then run `gradle run`.
**Expected output:**
```
Account ID : 0.0.2
Balance : 49989999499.9946 ℏ
```
{{% /tab %}}
{{% tab header="Go" lang="go" %}}
In `main.go`, after `SetOperator(...)`:
```go
info, err := hiero.NewAccountInfoQuery().
SetAccountID(opAccID).
Execute(client)
if err != nil {
panic(err)
}
fmt.Printf("Account ID : %s\n", info.AccountID)
fmt.Printf("Balance : %s\n", info.Balance)
```
Then run `go run .`.
**Expected output:**
```
Account ID : 0.0.2
Balance : 4.99899994792001e+10 ℏ
```
The Hbar value is printed in scientific notation by default; format it with `info.Balance.As(hiero.HbarUnits.Hbar)` or `info.Balance.AsTinybar()` for decimal HBAR or tinybars.
{{% /tab %}}
{{< /tabpane >}}
The exact balance differs slightly between deployments; what matters is that an `AccountInfo` returns at all - that proves the gRPC pipe to the consensus node is alive and the operator credentials are valid.
---
## Step 5: Run Transactions Against Solo
> **Heads up (JavaScript and Go only):** The SDK example programs use the
> SDK's local-node preset (`LocalProvider` in JS, `ClientForName("localhost")`
> in Go), which is hardcoded to `127.0.0.1:50211` (consensus gRPC) and
> `127.0.0.1:5600` (mirror gRPC). Solo doesn't expose those ports by default,
> so the upstream example programs cannot reach the network out of the box.
> Either follow [Make the examples reachable](#make-the-examples-reachable)
> below, or rewrite the example to use the `Client.fromConfig` (JS) /
> `ClientForNetworkV2` (Go) pattern from
> [Step 4](#step-4-configure-the-sdk-to-connect-to-solo). The Java SDK has no
> local-node preset, so this caveat does not apply there.
### Make the examples reachable
{{< tabpane text=true >}}
{{% tab header="JavaScript" lang="javascript" %}}
Pick one:
**Option A - forward Solo's services to the SDK's legacy ports** (run examples unchanged):
```bash
kubectl port-forward svc/haproxy-node1-svc -n 50211:50211 &
kubectl port-forward svc/mirror-1-grpc -n 5600:5600 &
```
The kubectl namespace matches `` for default one-shot deploys.
**Option B - edit the example** to use the `Client.fromConfig({ ..., scheduleNetworkUpdate: false })` pattern from [Step 4](#step-4-configure-the-sdk-to-connect-to-solo). No port-forwarding needed.
{{% /tab %}}
{{% tab header="Java" lang="java" %}}
No additional setup required. The `Client.forNetwork(Map)` pattern from
[Step 4](#step-4-configure-the-sdk-to-connect-to-solo) hits Solo's auto-forwarded
ports (`35211` consensus, `38081` mirror) directly.
{{% /tab %}}
{{% tab header="Go" lang="go" %}}
Pick one:
**Option A - forward Solo's services to the SDK's legacy ports** (run upstream examples with `HEDERA_NETWORK="localhost"` unchanged):
```bash
kubectl port-forward svc/haproxy-node1-svc -n 50211:50211 &
kubectl port-forward svc/mirror-1-grpc -n 5600:5600 &
```
**Option B - use `ClientForNetworkV2` directly** (the pattern shown in [Step 4](#step-4-configure-the-sdk-to-connect-to-solo)). No port-forwarding needed.
{{% /tab %}}
{{< /tabpane >}}
### Try a tutorial against your Solo network
Once your client is configured (Step 4), the canonical Hiero / Hedera SDK
tutorials run against Solo the same way they run against testnet or mainnet -
only the network endpoint changes. Pick a tutorial and follow it as written:
- [Create an account](https://docs.hedera.com/hedera/getting-started-hedera-native-developers/create-an-account)
- [Create a topic](https://docs.hedera.com/hedera/getting-started-hedera-native-developers/create-a-topic)
- [Transfer cryptocurrency](https://docs.hedera.com/hedera/sdks-and-apis/sdks/cryptocurrency/transfer-cryptocurrency)
- Full tutorial index: [Hiero / Hedera SDK guides](https://docs.hedera.com/hedera/sdks-and-apis/sdks)
Each SDK also ships a runnable [`examples/`](#resources) directory with
dozens of additional patterns - token creation, smart contract deployment,
HCS pub/sub, scheduled transactions, and more.
Verify transactions you submit in the Hiero Explorer:
[http://localhost:38080/localnet/dashboard](http://localhost:38080/localnet/dashboard).
---
## Step 6: Tear Down the Network
When you are finished, remove the local consensus node, mirror node, block
node, relay, explorer, and all data volumes:
```bash
solo one-shot single destroy \
--deployment
```
---
## Optional: Manage Files on the Network
Solo provides CLI commands to create and update files stored on the Hiero File Service.
### Create a New File
```bash
solo ledger file create \
--deployment \
--file-path ./config.json
```
This command:
- Creates a new file on the network and returns a system-assigned file ID.
- Automatically splits files larger than 4 KB into chunks using `FileAppendTransaction`.
- Verifies that the uploaded content matches the local file.
### Update an Existing File
```bash
solo ledger file update \
--deployment \
--file-id 0.0.1234 \
--file-path ./updated-config.json
```
This command:
- Verifies the file exists on the network (errors if not found).
- Replaces the file content and re-verifies the upload.
- Automatically handles chunking for large files (>4 KB).
> **Note:** For files larger than 4 KB, both commands split content into 4 KB chunks and display per-chunk progress during the append phase.
---
## Inspect Transactions in Hiero Explorer
Open the Hiero Explorer to visually inspect submitted transactions, accounts, topics, and files. The Solo Quickstart's [Access your local network](/docs/simple-solo-setup/quickstart#access-your-local-network) section lists the Explorer URL and port-availability behavior. Once it's open, search by account ID, transaction ID, or topic ID to confirm that your transactions reached consensus.
---
## Retrieving Logs
Solo writes logs to `~/.solo/logs/`:
| Log File | Contents |
| --- | --- |
| `solo.log` | Human-readable Solo CLI output and lifecycle events |
| `solo.ndjson` | Newline-delimited JSON of the same events (authoritative, machine-readable) |
The Solo log is useful for debugging connectivity issues between the SDK and your local Solo network.
### SDK logging
For SDK-side logs (which logger each SDK uses and how to configure it), see the upstream docs:
- **JavaScript:** [Hiero JS SDK README](https://github.com/hiero-ledger/hiero-sdk-js#logging)
- **Java:** [Hiero Java SDK logging guide](https://github.com/hiero-ledger/hiero-sdk-java#logging)
- **Go:** [Hiero Go SDK README](https://github.com/hiero-ledger/hiero-sdk-go#logging)
---
## Troubleshooting
| Symptom | Likely Cause | Fix |
| --- | --- | --- |
| `LocalProvider requires the HEDERA_NETWORK environment variable to be set` *(JS)* | `HEDERA_NETWORK` missing from `.env`, or `.env` not sourced in this shell | Add `HEDERA_NETWORK="local-node"` to `.env`; then `source .env` |
| `Dependency resolution is looking for a library compatible with JVM runtime version 17, but 'com.hedera.hashgraph:sdk:2.72.0' is only compatible with JVM runtime version 21 or newer` *(Java)* | JDK 17 target in `build.gradle.kts` | Set `sourceCompatibility = JavaVersion.VERSION_21` and ensure the JDK on `PATH` is v21+ |
| `IllegalArgumentException: Name must be one-of 'mainnet', 'testnet', or 'previewnet'` *(Java)* | Called `Client.forName("local-node")` | Use `Client.forNetwork(Map)` + `setMirrorNetwork(List)`; Java SDK has no local-node preset |
| `go: module ... requires go >= 1.25` *(Go)* | Local Go is older than the SDK's `go.mod` floor | Upgrade Go to v1.25+; on macOS, `brew install go` |
| `TimeoutException` from query or transaction *(all SDKs)* | Consensus node not actually serving (deploy reported a `NodesStarted` timeout even though the pod is `Running`) | Run `solo one-shot single destroy --deployment ` then `solo one-shot single deploy`; the second attempt usually succeeds |
| SDK calls fail; `127.0.0.1:35211` shows as not listening *(all SDKs)* | Solo's auto-port-forward for consensus gRPC died after deploy | Restore manually: `kubectl port-forward svc/haproxy-node1-svc -n 35211:50211 &` |
| Upstream SDK example hangs against Solo *(JS, Go)* | Example uses the SDK's local-node preset, hardcoded to ports Solo doesn't expose | Follow [Option A or B in *Make the examples reachable*](#make-the-examples-reachable) |
| `INVALID_SIGNATURE` receipt error | `OPERATOR_KEY` set to public key instead of private key | Re-check your `.env` - use the `privateKey` field value |
| `INSUFFICIENT_TX_FEE` | Operator account has no HBAR | Use a pre-funded `createdAccounts` entry or top up the operator |
---
## Resources
- **Solo operational workflows** - [Solo examples directory](https://github.com/hiero-ledger/solo/tree/main/examples) (node management, state backup/restore, multi-cluster setups, version upgrades, etc.).
- **SDK examples and API references:**
- JavaScript - [hiero-sdk-js examples](https://github.com/hiero-ledger/hiero-sdk-js/tree/main/examples) · [JSDoc](https://hiero-ledger.github.io/hiero-sdk-js/)
- Java - [hiero-sdk-java examples](https://github.com/hiero-ledger/hiero-sdk-java/tree/main/examples) · [Javadoc](https://hiero-ledger.github.io/hiero-sdk-java/)
- Go - [hiero-sdk-go examples](https://github.com/hiero-ledger/hiero-sdk-go/tree/main/examples) · [godoc](https://pkg.go.dev/github.com/hiero-ledger/hiero-sdk-go/v2)
- **EVM workflows** - [Using Solo with EVM Tools](/docs/using-solo/using-solo-with-evm-tools).
- **Solo cluster internals** - [Accessing Solo Services](/docs/using-solo/accessing-solo-services/).
---
# CLI Migration Reference
URL: https://solo.hiero.org/docs/advanced-solo-setup/cli/cli-migrations/
Description: Legacy-to-current Solo CLI command mappings for users migrating from pre-v0.44 command paths.
## Overview
Use this page when migrating scripts or runbooks from legacy Solo CLI command paths (`< v0.44.0`) to the current command structure.
For full current syntax and flags, see [Solo CLI Reference](/docs/advanced-solo-setup/cli/).
## Legacy to Current Mapping
| Legacy command | Current command |
| --- | --- |
| `block node add` | `block node add` |
| `block node destroy` | `block node destroy` |
| `block node upgrade` | `block node upgrade` |
| `account init` | `ledger system init` |
| `account update` | `ledger account update` |
| `account create` | `ledger account create` |
| `account get` | `ledger account info` |
| `quick-start single deploy` | `one-shot single deploy` |
| `quick-start single destroy` | `one-shot single destroy` |
| `cluster-ref connect` | `cluster-ref config connect` |
| `cluster-ref disconnect` | `cluster-ref config disconnect` |
| `cluster-ref list` | `cluster-ref config list` |
| `cluster-ref info` | `cluster-ref config info` |
| `cluster-ref setup` | `cluster-ref config setup` |
| `cluster-ref reset` | `cluster-ref config reset` |
| `deployment add-cluster` | `deployment cluster attach` |
| `deployment list` | `deployment config list` |
| `deployment create` | `deployment config create` |
| `deployment delete` | `deployment config delete` |
| `explorer deploy` | `explorer node add` |
| `explorer destroy` | `explorer node destroy` |
| `mirror-node deploy` | `mirror node add` |
| `mirror-node destroy` | `mirror node destroy` |
| `relay deploy` | `relay node add` |
| `relay destroy` | `relay node destroy` |
| `network deploy` | `consensus network deploy` |
| `network destroy` | `consensus network destroy` |
| `node keys` | `keys consensus generate` |
| `node freeze` | `consensus network freeze` |
| `node upgrade` | `consensus network upgrade` |
| `node setup` | `consensus node setup` |
| `node start` | `consensus node start` |
| `node stop` | `consensus node stop` |
| `node restart` | `consensus node restart` |
| `node refresh` | `consensus node refresh` |
| `node add` | `consensus node add` |
| `node update` | `consensus node update` |
| `node delete` | `consensus node destroy` |
| `node add-prepare` | `consensus dev-node-add prepare` |
| `node add-submit-transaction` | `consensus dev-node-add submit-transactions` |
| `node add-execute` | `consensus dev-node-add execute` |
| `node update-prepare` | `consensus dev-node-update prepare` |
| `node update-submit-transaction` | `consensus dev-node-update submit-transactions` |
| `node update-execute` | `consensus dev-node-update execute` |
| `node upgrade-prepare` | `consensus dev-node-upgrade prepare` |
| `node upgrade-submit-transaction` | `consensus dev-node-upgrade submit-transactions` |
| `node upgrade-execute` | `consensus dev-node-upgrade execute` |
| `node delete-prepare` | `consensus dev-node-delete prepare` |
| `node delete-submit-transaction` | `consensus dev-node-delete submit-transactions` |
| `node delete-execute` | `consensus dev-node-delete execute` |
| `node prepare-upgrade` | `consensus dev-freeze prepare-upgrade` |
| `node freeze-upgrade` | `consensus dev-freeze freeze-upgrade` |
| `node logs` | `deployment diagnostics logs` |
| `node download-generated-files` | No direct equivalent. Use `deployment diagnostics all` or `deployment diagnostics debug` based on intent. |
| `node states` | `consensus state download` |
## Notes
- Current command tree includes additional commands not present in legacy CLI (for example `ledger account predefined`, `rapid-fire load start`, and `consensus node collect-jfr`).
---
# Falcon Values File Reference
URL: https://solo.hiero.org/docs/advanced-solo-setup/network-deployments/falcon-flags-reference/
Description: Comprehensive reference for all supported CLI flags per section of a Falcon values file, including defaults, types, and descriptions. Use this as your source of truth when customizing Falcon deployments.
## Overview
This page catalogs the Solo CLI flags accepted under each top-level section of a
Falcon values file. Each entry corresponds to the command-line flag that the
underlying Solo subcommand accepts.
Sections map to subcommands as follows:
| Section | Solo subcommand |
| --- | --- |
| `network` | `solo consensus network deploy` |
| `setup` | `solo consensus node setup` |
| `consensusNode` | `solo consensus node start` |
| `mirrorNode` | `solo mirror node add` |
| `explorerNode` | `solo explorer node add` |
| `relayNode` | `solo relay node add` |
| `blockNode` | `solo block node add` |
All flag names must be written in long form with double dashes (for example,
`--release-tag`). Flags left empty (`""`) or matching their default value are
ignored by Solo at argument expansion time.
> **Note:** Not every flag listed here is relevant to every deployment. Use this
> page as a lookup when writing or debugging a values file. For a working
> example file, see the upstream reference at
> .
---
## Consensus Network Deploy — `network`
Flags passed to `solo consensus network deploy`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--release-tag` | string | current Hedera platform version | Consensus node release tag (e.g. `v0.71.0`). |
| `--pvcs` | boolean | `false` | Enable Persistent Volume Claims for consensus node storage. Required for node add operations. |
| `--load-balancer` | boolean | `false` | Enable load balancer for network node proxies. |
| `--chart-dir` | string | — | Path to a local Helm chart directory for the Solo network chart. |
| `--solo-chart-version` | string | current chart version | Specific Solo testing chart version to deploy. |
| `--haproxy-ips` | string | — | Static IP mapping for HAProxy pods (e.g. `node1=127.0.0.1,node2=127.0.0.2`). |
| `--envoy-ips` | string | — | Static IP mapping for Envoy proxy pods. |
| `--debug-node-alias` | string | — | Enable the default JVM debug port (5005) for the specified node alias. |
| `--domain-names` | string | — | Custom domain name mapping per node alias (e.g. `node1=node1.example.com`). |
| `--grpc-tls-cert` | string | — | TLS certificate path for gRPC, per node alias (e.g. `node1=/path/to/cert`). |
| `--grpc-web-tls-cert` | string | — | TLS certificate path for gRPC Web, per node alias. |
| `--grpc-tls-key` | string | — | TLS certificate key path for gRPC, per node alias. |
| `--grpc-web-tls-key` | string | — | TLS certificate key path for gRPC Web, per node alias. |
| `--storage-type` | string | `minio_only` | Stream file storage backend. Options: `minio_only`, `aws_only`, `gcs_only`, `aws_and_gcs`. |
| `--gcs-write-access-key` | string | — | GCS write access key. |
| `--gcs-write-secrets` | string | — | GCS write secret key. |
| `--gcs-endpoint` | string | — | GCS storage endpoint URL. |
| `--gcs-bucket` | string | — | GCS bucket name. |
| `--gcs-bucket-prefix` | string | — | GCS bucket path prefix. |
| `--aws-write-access-key` | string | — | AWS write access key. |
| `--aws-write-secrets` | string | — | AWS write secret key. |
| `--aws-endpoint` | string | — | AWS storage endpoint URL. |
| `--aws-bucket` | string | — | AWS bucket name. |
| `--aws-bucket-region` | string | — | AWS bucket region. |
| `--aws-bucket-prefix` | string | — | AWS bucket path prefix. |
| `--settings-txt` | string | template | Path to a custom `settings.txt` file for consensus nodes. |
| `--application-properties` | string | template | Path to a custom `application.properties` file. Defaults to key-level merge mode; add `# SOLO_ENABLE_OVERWRITE=true` to the file for overwrite mode. See [Custom Application Properties](/docs/advanced-solo-setup/network-deployments/custom-application-properties). |
| `--application-env` | string | template | Path to a custom `application.env` file. |
| `--api-permission-properties` | string | template | Path to a custom `api-permission.properties` file. |
| `--bootstrap-properties` | string | template | Path to a custom `bootstrap.properties` file. |
| `--log4j2-xml` | string | template | Path to a custom `log4j2.xml` file. |
| `--genesis-throttles-file` | string | — | Path to a custom `throttles.json` file for network genesis. |
| `--service-monitor` | boolean | `false` | Install a `ServiceMonitor` custom resource for Prometheus metrics. |
| `--pod-log` | boolean | `false` | Install a `PodLog` custom resource for node pod log monitoring. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--values-file` | string | — | Comma-separated Helm chart values file paths (not the Falcon values file). |
---
## Consensus Node Setup — `setup`
Flags passed to `solo consensus node setup`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--release-tag` | string | current Hedera platform version | Consensus node release tag. Must match `network.--release-tag`. |
| `--local-build-path` | string | — | Path to a local Hiero consensus node build (e.g. `~/hiero-consensus-node/hedera-node/data`). Used for local development workflows. |
| `--app` | string | `HederaNode.jar` | Name of the consensus node application binary. |
| `--app-config` | string | — | Path to a JSON configuration file for the testing app. |
| `--admin-public-keys` | string | — | Comma-separated DER-encoded ED25519 public keys in node alias order. |
| `--domain-names` | string | — | Custom domain name mapping per node alias. |
| `--debug` | boolean | `false` | Enable debug mode. (Formerly `--dev`, which is deprecated — see note below.) |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--cache-dir` | string | `~/.solo/cache` | Local cache directory for downloaded artifacts. |
> **Deprecated:** The `--dev` flag has been renamed to `--debug`. `--dev` still
> works as an alias but is deprecated and prints a warning. The `--dev` alias
> will no longer be supported once Solo `0.82.0` reaches its end of support
> date.
---
## Consensus Node Start — `consensusNode`
Flags passed to `solo consensus node start`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--force-port-forward` | boolean | `true` | Force port forwarding to access network services locally. |
| `--stake-amounts` | string | — | Comma-separated stake amounts in node alias order (e.g. `100,100,100`). Required for multi-node deployments that need non-default stakes. |
| `--state-file` | string | — | Path to a zipped state file to restore the network from. |
| `--debug-node-alias` | string | — | Enable JVM debug port (5005) for the specified node alias. |
| `--app` | string | `HederaNode.jar` | Name of the consensus node application binary. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
---
## Mirror Node Add — `mirrorNode`
Flags passed to `solo mirror node add`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--mirror-node-version` | string | current version | Mirror node Helm chart version to deploy. |
| `--enable-ingress` | boolean | `false` | Deploy an ingress controller for the mirror node. |
| `--force-port-forward` | boolean | `true` | Enable port forwarding for mirror node services. |
| `--pinger` | boolean | `false` | Enable the mirror node Pinger service. |
| `--mirror-static-ip` | string | — | Static IP address for the mirror node load balancer. |
| `--domain-name` | string | — | Custom domain name for the mirror node. |
| `--ingress-controller-value-file` | string | — | Path to a Helm values file for the ingress controller. |
| `--mirror-node-chart-dir` | string | — | Path to a local mirror node Helm chart directory. |
| `--use-external-database` | boolean | `false` | Connect to an external PostgreSQL database instead of the chart-bundled one. |
| `--external-database-host` | string | — | Hostname of the external database. Requires `--use-external-database`. |
| `--external-database-owner-username` | string | — | Owner username for the external database. |
| `--external-database-owner-password` | string | — | Owner password for the external database. |
| `--external-database-read-username` | string | — | Read-only username for the external database. |
| `--external-database-read-password` | string | — | Read-only password for the external database. |
| `--storage-type` | string | `minio_only` | Stream file storage backend for the mirror node importer. |
| `--storage-read-access-key` | string | — | Storage read access key for the mirror node importer. |
| `--storage-read-secrets` | string | — | Storage read secret key for the mirror node importer. |
| `--storage-endpoint` | string | — | Storage endpoint URL for the mirror node importer. |
| `--storage-bucket` | string | — | Storage bucket name for the mirror node importer. |
| `--storage-bucket-prefix` | string | — | Storage bucket path prefix. |
| `--storage-bucket-region` | string | — | Storage bucket region. |
| `--operator-id` | string | — | Operator account ID for the mirror node. |
| `--operator-key` | string | — | Operator private key for the mirror node. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--values-file` | string | — | Comma-separated Helm chart values file paths for the mirror node chart. |
---
## Explorer Add — `explorerNode`
Flags passed to `solo explorer node add`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--explorer-version` | string | current version | Hiero Explorer Helm chart version to deploy. |
| `--enable-ingress` | boolean | `false` | Deploy an ingress controller for the explorer. |
| `--force-port-forward` | boolean | `true` | Enable port forwarding for the explorer service. |
| `--domain-name` | string | — | Custom domain name for the explorer. |
| `--ingress-controller-value-file` | string | — | Path to a Helm values file for the ingress controller. |
| `--explorer-chart-dir` | string | — | Path to a local Hiero Explorer Helm chart directory. |
| `--explorer-static-ip` | string | — | Static IP address for the explorer load balancer. |
| `--enable-explorer-tls` | boolean | `false` | Enable TLS for the explorer. Requires cert-manager. |
| `--explorer-tls-host-name` | string | `explorer.solo.local` | Hostname used for the explorer TLS certificate. |
| `--tls-cluster-issuer-type` | string | `self-signed` | TLS cluster issuer type. Options: `self-signed`, `acme-staging`, `acme-prod`. |
| `--mirror-node-id` | number | — | ID of the mirror node instance to connect the explorer to. |
| `--mirror-namespace` | string | — | Kubernetes namespace of the mirror node. |
| `--solo-chart-version` | string | current version | Solo chart version used for explorer cluster setup. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--values-file` | string | — | Comma-separated Helm chart values file paths for the explorer chart. |
---
## JSON-RPC Relay Add — `relayNode`
Flags passed to `solo relay node add`.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--relay-release` | string | current version | Hiero JSON-RPC Relay Helm chart release to deploy. |
| `--node-aliases` | string | — | Comma-separated node aliases the relay will observe (e.g. `node1` or `node1,node2`). |
| `--replica-count` | number | `1` | Number of relay replicas to deploy. |
| `--chain-id` | string | `298` | EVM chain ID exposed by the relay (Hedera testnet default). |
| `--force-port-forward` | boolean | `true` | Enable port forwarding for the relay service. |
| `--domain-name` | string | — | Custom domain name for the relay. |
| `--relay-chart-dir` | string | — | Path to a local Hiero JSON-RPC Relay Helm chart directory. |
| `--operator-id` | string | — | Operator account ID for relay transaction signing. |
| `--operator-key` | string | — | Operator private key for relay transaction signing. |
| `--mirror-node-id` | number | — | ID of the mirror node instance the relay will query. |
| `--mirror-namespace` | string | — | Kubernetes namespace of the mirror node. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--values-file` | string | — | Comma-separated Helm chart values file paths for the relay chart. |
---
## Block Node Add — `blockNode`
Flags passed to `solo block node add`.
> **Important:** The `blockNode` section is only read when `ONE_SHOT_WITH_BLOCK_NODE=true`
> is set in the environment. Otherwise Solo skips the block node add step
> regardless of whether a `blockNode` section is present.
> **Version requirements:** Consensus node ≥ v0.72.0 and block node ≥ 0.29.0.
> Use `--force` to bypass version gating during testing.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--release-tag` | string | current version | Hiero block node release tag. |
| `--image-tag` | string | — | Docker image tag to override the Helm chart default. |
| `--enable-ingress` | boolean | `false` | Deploy an ingress controller for the block node. |
| `--domain-name` | string | — | Custom domain name for the block node. |
| `--debug` | boolean | `false` | Enable debug mode for the block node. (Formerly `--dev`, which is deprecated — see note below.) |
| `--block-node-chart-dir` | string | — | Path to a local Hiero block node Helm chart directory. |
| `--quiet-mode` | boolean | `false` | Suppress confirmation prompts. |
| `--values-file` | string | — | Comma-separated Helm chart values file paths for the block node chart. |
> **Deprecated:** The `--dev` flag has been renamed to `--debug`. `--dev` still
> works as an alias but is deprecated and prints a warning. The `--dev` alias
> will no longer be supported once Solo `0.82.0` reaches its end of support
> date.
---
## Top-Level Falcon Command Flags
The following flags are passed directly on the `solo one-shot falcon deploy` command
line. They are **not** read from the values file sections.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--values-file` | string | — | Path to the Falcon values YAML file. |
| `--deployment` | string | `one-shot` | Deployment name for Solo's internal state. |
| `--namespace` | string | `one-shot` | Kubernetes namespace to deploy into. |
| `--cluster-ref` | string | `one-shot` | Cluster reference name. |
| `--num-consensus-nodes` | number | `1` | Number of consensus nodes to deploy. |
| `--parallel-deploy` | boolean | `true` | Run independent deploy stages in parallel (consensus+block, mirror+accounts, explorer+relay). Use `--no-parallel-deploy` for sequential execution. |
| `--quiet-mode` | boolean | `false` | Suppress all interactive prompts. |
| `--force` | boolean | `false` | Force actions that would otherwise be skipped. |
---
## Falcon Prepare — `prepare`
Flags accepted by `solo one-shot falcon prepare`, the interactive wizard that generates a Falcon values file. The wizard prompts for nearly every values-file field, but the following CLI flags control its output behavior directly.
| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--output-values-file` | string | `~/.solo/cache/falcon-values.yaml` | Path to the generated values file. Absolute paths are written as-is. Relative paths are resolved against the current working directory. |
| `--quiet-mode` | boolean | `false` | Generate a values file using all defaults without prompting. |
All other `prepare`-time flags correspond directly to the per-section values shown in the tables above and are documented under their respective `network`, `setup`, `consensusNode`, `mirrorNode`, `explorerNode`, `relayNode`, and `blockNode` sections.
---
# Quickstart
URL: https://solo.hiero.org/docs/simple-solo-setup/quickstart/
Description: Deploy a local Hiero test network with a single command using the Solo CLI. This guide covers installation, one-shot deployment, network verification, and accessing local service endpoints.
## Overview
Solo Quickstart provides a single, one-shot command path to deploy a running Hiero test network using the Solo CLI tool.
This guide covers installing Solo, running the one-shot deployment, verifying the network, and accessing local service endpoints.
> **Note:** This guide assumes basic familiarity with command-line interfaces and Docker.
## Prerequisites
Before you begin, ensure you have completed the following:
- System Readiness:
- Prepare your local environment (Docker, Kind, Kubernetes, and related tooling) by following the **[System Readiness](/docs/simple-solo-setup/system-readiness)** guide.
> **macOS prerequisite:** Docker Desktop must be installed and open before running `solo one-shot single deploy`. The Docker daemon is not started automatically on macOS, so confirm Docker Desktop is running from your menu bar before you begin.
> **Apple Silicon:** If `solo one-shot single deploy` fails with a **"mounts denied"** error, see [Troubleshooting Installation](/docs/simple-solo-setup/system-readiness#troubleshooting-installation).
> **Windows (PowerShell):** Complete the [System Readiness](/docs/simple-solo-setup/system-readiness) **Windows** tab first, then run the commands on this page from a PowerShell terminal. The `solo` and `kubectl` commands are identical in PowerShell; only shell-specific commands (pipes, port checks, and `~/.solo` paths) differ, and those show a **PowerShell** tab.
> **Note:** Quickstart only covers what you need to run `solo one-shot single deploy` and verify that the network is working.
> Detailed version requirements, OS-specific notes, and optional tools are documented in the [System Readiness](/docs/simple-solo-setup/system-readiness).
## Step 1: Install Solo CLI
Install the latest Solo CLI globally using one of the following methods:
- **npm** (**recommended** for all platforms):
```bash
npm install -g @hiero-ledger/solo@latest
```
> **Note:** npm requires Node.js >= 22.0.0 to already be present (check with `node --version`; upgrade via [nvm](https://github.com/nvm-sh/nvm) or [nodejs.org](https://nodejs.org/en/download) if needed — Solo will fail with an `EBADENGINE` warning on Node.js 20.x or earlier). Solo provisions kubectl, Helm, and Kind automatically at deploy time.
- **Homebrew** (deprecated — macOS/Linux/WSL2 only):
```bash
brew install hiero-ledger/tools/solo
```
> ⚠️ **Homebrew support is being deprecated.** Solo will stop publishing updates to Homebrew after August 31, 2026. New users should install via npm. Existing Homebrew users should migrate before August 31.
### Verify the installation
Confirm that Solo is installed and available on your PATH:
```bash
solo --version
```
Expected output (version may be different):
```text
******************************* Solo *********************************************
Version : 0.84.0
**********************************************************************************
```
If you see a similar banner with a valid Solo version, your installation is successful.
## Step 2: Deploy a local network (one-shot)
Use the one-shot command to create and configure a fully functional local Hiero network:
```bash
solo one-shot single deploy
```
This command performs the following actions:
- Creates or connects to a local Kubernetes cluster using Kind.
- Deploys the Solo network components.
- Sets up and funds default test accounts.
- Exposes gRPC and JSON-RPC endpoints for client access.
> **⏱ First-run time:** `solo one-shot single deploy` typically takes
> **3–5 minutes** when container images are already cached locally, or
> **10–20 minutes** on the very first run while Solo pulls images over the
> network (longer on slower connections). Long pauses with no visible output
> change are normal — the deploy is still running. Later deployments reuse the
> local image cache and complete faster. See
> [Solo Image Cache](/docs/advanced-solo-setup/image-cache).
> **Note:** During deployment you may see `Stopping port-forward for port [N]`
> printed in yellow. This is expected - as it sets up the network, Solo stops
> and re-establishes port-forwards to finalize the port configuration (clearing
> stale forwards and migrating ports as needed). It does not indicate a failure.
> **PostgreSQL startup timeout:** If the first deployment fails during mirror
> node setup with a PostgreSQL startup timeout, destroy the deployment and
> retry — this is a known intermittent issue on first deploy:
>
> ```bash
> solo one-shot single destroy
> solo one-shot single deploy
> ```
### What gets deployed
| Component | What it does | Use it for |
|----------------|---------------------------------------------------------------------------|-------------------------------------------------------------|
| Consensus Node | Processes transactions and maintains the shared ledger. | Sending transactions and queries via a Hiero SDK. |
| Mirror Node | Indexes all transaction history and exposes a REST API and gRPC stream. | Querying balances, history, and subscribing to event feeds. |
| Explorer UI | Browser-based dashboard for inspecting accounts and transactions. | Browsing the network state without writing code. |
| JSON-RPC Relay | Ethereum-compatible JSON-RPC interface layered on top of the consensus node. | Connecting MetaMask, Hardhat, Foundry, and ethers.js. |
{{< details summary="Multiple Node Deployment - for testing consensus scenarios" >}}
To deploy multiple consensus nodes, pass the `--num-consensus-nodes` flag:
```bash
solo one-shot multi deploy --num-consensus-nodes 3
```
This deploys 3 consensus nodes along with the same components as the
single-node setup (mirror node, explorer, relay).
> **Note:** Multiple node deployments require more resources. Ensure you have
> at least **16 GB of memory** and **8 CPU cores** allocated to Docker before
> running this command. See
> [System Readiness](/docs/simple-solo-setup/system-readiness#hardware-requirements) for
> the full multi-node requirements.
For multi-node teardown, run `solo one-shot multi destroy`.
{{< /details >}}
### Capture your deployment name
`solo one-shot single deploy` (and `multi deploy`) assigns a unique name to
each deployment. Subsequent Solo commands and SDK guides reference it as
`` — substitute your actual value when you run them.
Retrieve the most recent deployment's name with:
```bash
solo one-shot show deployment
```
The output includes a `Deployment Name:` line - use that value as `` in other commands.
### Verify the network
After the one-shot deployment completes, verify that the Kubernetes workloads are healthy.
You can monitor the Kubernetes workloads with standard tools:
{{< tabpane text=true >}}
{{% tab header="Bash" lang="bash" %}}
```bash
kubectl get pods -A | grep -v kube-system
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
kubectl get pods -A | Select-String -Pattern 'kube-system' -NotMatch
```
{{% /tab %}}
{{< /tabpane >}}
Confirm that all Solo-related pods are in a `Running` or `Completed` state.
> **Tip:** The Solo testing team recommends [k9s](https://k9scli.io/) for managing Kubernetes clusters. It provides a terminal-based UI that makes it easy to view pods, logs, and cluster status. Install it with `brew install k9s` and run `k9s` to launch.
## Step 3: Access your local network
After the one-shot deployment completes and all pods are running, Solo sets up
port-forwards so you can reach your local services. For the full endpoint
reference — default ports for Solo 0.63+ and Solo 0.62 and earlier, verification
commands, and port lookup — see [**Service Endpoints**](/docs/using-solo/endpoints).
Open `http://localhost:38080` in your browser to explore your network.
## Step 4: Tear down your network
When you are finished, destroy the network to free up resources:
```bash
solo one-shot single destroy
```
For a full teardown procedure including failure recovery, see the [Cleanup](/docs/simple-solo-setup/cleanup) guide. For granular stop/start and management options, see [Managing Your Network](/docs/simple-solo-setup/managing-your-network).
## Next Steps
With your network running, connect your application or explore Solo further:
- [**Using Solo with Hiero SDKs**](/docs/using-solo/using-solo-with-hiero-sdks) — Submit transactions using the JavaScript, Java, or Go SDK.
- [**Using Solo with EVM Tools**](/docs/using-solo/using-solo-with-evm-tools) — Connect MetaMask, Hardhat, Foundry, or ethers.js to your local network.
- [**Managing Your Network**](/docs/simple-solo-setup/managing-your-network) — Stop, start, and reset nodes without redeploying.
- [**Service Endpoints**](/docs/using-solo/endpoints) — Quick reference for all default ports and connection details.
---
# Subprocess Environment Filtering
URL: https://solo.hiero.org/docs/advanced-solo-setup/subprocess-environment-filtering/
Description: How Solo decides which environment variables reach the external commands it runs (helm, kubectl, kind, container engines), how to tell when a variable was withheld, and how to forward an additional variable when a platform requires one.
## Overview
Solo runs external commands on your behalf — `helm`, `kubectl`, `kind`, `docker`/`podman`,
`npm`, `gh` and `brew`. It does **not** hand those commands your whole environment. Each
command receives only the variables it is known to need, built from an allowlist.
The reason is that Solo is frequently run from a shell or CI runner holding credentials that
have nothing to do with deploying a network — registry tokens, cloud keys, SSH agent sockets.
Passing the whole environment would forward all of it to every tool, and onward to anything
those tools spawn: Helm plugins, kubectl credential plugins, package lifecycle scripts.
Filtering is deliberately **deny-by-default**. A variable that is not on the allowlist is not
forwarded, even if it looks harmless.
## Checking whether a variable was withheld
Solo records what it filtered. Search your Solo log for the variable name:
{{< tabpane text=true >}}
{{% tab header="Bash / Zsh" lang="bash" %}}
```bash
grep MY_VARIABLE ~/.solo/logs/solo.log
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
Select-String -Path "$HOME\.solo\logs\solo.log" -Pattern "MY_VARIABLE"
```
{{% /tab %}}
{{< /tabpane >}}
Solo writes a summary line followed by one or more lines carrying the names, so your variable
appears on a `withheld from` line rather than in the summary:
```text
[19:45:49.621] INFO: Withheld 83 environment variable(s) from 'helm' commands because they are not on the allowlist for that command:
[19:45:49.621] INFO: withheld from 'helm': AI_AGENT, APPLICATION_INSIGHTS_NO_STATSBEAT, ..., MY_VARIABLE, ...
```
Searching for the variable name finds the second line, which also tells you which command withheld
it. To see everything withheld from one command instead, search for `withheld from 'helm'`.
This is logged at `info`, so it is present in the log by default — you do not need to re-run
with `--debug`. It is emitted once per command type per run, and long lists are split across
several lines so that every name remains searchable.
Two bounds apply, so that a hostile or unusual environment cannot forge log entries or fill your
disk:
* Names are only listed if they look like ordinary identifiers (letters, digits, `_`, `.`, `-`,
`()`, up to 64 characters). Anything else is counted rather than printed — the line ends with
something like `(3 with non-identifier names omitted)`.
* At most 2000 names are listed per command type. Beyond that the line ends with
`(N further name(s) omitted)`. No ordinary environment comes close to this; if you hit it, the
variable is still filtered exactly as described, it is simply not enumerated.
If your variable is not listed but also is not reaching the tool, forward it explicitly as
below — the two bounds above affect only what is *reported*, never what is *forwarded*.
If your config file is present but unusable — malformed YAML, unreadable, or with permissions
Solo will not trust — Solo fails with an error naming the file rather than starting up as if the
file were not there. A setting you believe is applied but silently is not would be worse than a
clear failure.
If your variable is in that list and the tool needs it, forward it explicitly as below.
## Forwarding an additional variable
Add the exact variable name to `subprocess.additionalEnvironmentVariables` in your Solo
config file — `~/.solo/solo-config.yaml` — under the command that needs it:
```yaml
subprocess:
additionalEnvironmentVariables:
helm:
- MY_PLATFORM_SETTING
kubectl:
- MY_PLATFORM_SETTING
```
Recognised command keys are `generic`, `kubectl`, `helm`, `kind`, `containerEngine`, `brew`,
`npm` and `githubCli`.
The file is `solo-config.yaml` in your Solo home directory. It is optional — if you do not have
one, nothing changes. Create it if it is not already there.
The default location is `~/.solo` (`%USERPROFILE%\.solo` on Windows). Override it with
`SOLO_HOME`:
{{< tabpane text=true >}}
{{% tab header="Bash / Zsh" lang="bash" %}}
```bash
export SOLO_HOME=/path/to/solo-home
ls -l "$SOLO_HOME/solo-config.yaml"
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
$env:SOLO_HOME = "C:\path\to\solo-home"
Get-Item "$env:SOLO_HOME\solo-config.yaml" | Format-List Name, Length, LastWriteTime
```
{{% /tab %}}
{{< /tabpane >}}
{{% alert title="Not solo.yaml" color="info" %}}
The similarly named `~/.solo/solo.yaml` is a leftover from older Solo versions and holds an
unrelated `flags:` structure. Some test tooling deletes it automatically, so settings placed
there would be lost. Use `solo-config.yaml`.
{{% /alert %}}
### Scope and syntax rules
* **Exact names only.** Wildcards and prefixes are not supported. `AWS_*` will not work; list
each name.
* **Per command.** A variable listed under `helm` reaches `helm` only. There is no "all
commands" list — a variable a credential plugin needs has no business reaching `npm` or a
container engine.
* **Config file only.** Unlike every other Solo setting, this one cannot be set through a
`SOLO_*` environment variable. A setting that relaxes environment filtering must not itself
be controllable by the environment being filtered. Attempts to set it via the environment are
ignored, with a warning.
### Names that are always refused
Some variables are refused no matter what the config file says, because they change how a
spawned tool loads code, whom it trusts, or where it fetches credentials. Solo logs a warning
naming each refused entry rather than ignoring it silently.
| Family | Examples |
| --- | --- |
| Loader and interpreter hooks | `LD_PRELOAD`, `LD_LIBRARY_PATH`, `DYLD_INSERT_LIBRARIES`, `NODE_OPTIONS`, `BASH_ENV`, `PYTHONPATH`, `PERL5OPT`, `RUBYOPT`, `PS4`, `GIT_SSH_COMMAND`, `EDITOR` |
| TLS trust overrides | `SSL_CERT_FILE`, `SSL_CERT_DIR`, `CURL_CA_BUNDLE`, `NODE_EXTRA_CA_CERTS`, `REQUESTS_CA_BUNDLE`, `AWS_CA_BUNDLE`, `NODE_TLS_REJECT_UNAUTHORIZED` |
| Credential and endpoint redirection | `AWS_ENDPOINT_URL` and every `AWS_ENDPOINT_URL_` form such as `AWS_ENDPOINT_URL_STS`, `AWS_CONFIG_FILE`, `AWS_SHARED_CREDENTIALS_FILE`, `AZURE_CLIENT_SECRET` |
Matching is case-insensitive, and the `LD_`, `DYLD_` and `AWS_ENDPOINT_URL` families are refused
by prefix rather than by exact name — `AWS_ENDPOINT_URL_STS` in particular takes precedence over
the global endpoint setting and would otherwise redirect the EKS credential exchange.
These would let anyone able to write your Solo config file run arbitrary code inside a process
holding cluster-admin, or silently intercept traffic to your Kubernetes API server.
{{% alert title="Solo verifies the file before trusting it" color="warning" %}}
`subprocess.additionalEnvironmentVariables` extends what Solo forwards to `helm` and `kubectl`,
so anyone able to edit the file can widen what those commands receive. Because **you** create
this file, Solo does not own its permissions — it checks them instead, and refuses to apply the
settings with an error if the file itself is a symbolic link, is not owned by you, or is writable
by group or other users. It applies a similar check to the directories above the file, and reads
the file through a descriptor opened without following symlinks, validating that descriptor rather
than the path.
What that does and does not guarantee, stated precisely:
* **The file itself** — on POSIX only — is checked and read through the same descriptor, so its
contents cannot be swapped between the check and the read. On Windows there is no equivalent
no-follow open, so the symlink check is a check-then-open and carries a small race; see the
Windows note below.
* **The directories above it** are checked for a static misconfiguration — a group-writable
`SOLO_HOME`, for instance. This is *not* race-free: someone who already has write access to one
of those directories could replace a component between the check and the open. Closing that
would require component-by-component opens, which Node's filesystem API does not offer.
* On POSIX the directory walk reaches the filesystem root, and accepts directories owned by you or
by root, plus sticky directories such as `/tmp`. On Windows it stops before the volume root,
because `C:\` legitimately carries broad write grants.
In short: this protects you from a misconfigured or shared `SOLO_HOME`, not from an attacker who
already holds write access somewhere on the path to it.
Keep both owner-only:
{{< tabpane text=true >}}
{{% tab header="Bash / Zsh" lang="bash" %}}
```bash
# Secure the directory as well as the file: write access to the directory is enough to
# replace the file inside it. Solo also checks every parent directory up to the filesystem root.
chmod 700 ~/.solo
chmod 600 ~/.solo/solo-config.yaml
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
# NTFS ACLs replace POSIX mode bits. Secure the directory as well as the file: write access to
# the directory is enough to replace the file inside it.
icacls "$HOME\.solo" /inheritance:r /grant:r "$($env:USERNAME):(OI)(CI)F"
icacls "$HOME\.solo\solo-config.yaml" /inheritance:r /grant:r "$($env:USERNAME):(F)"
```
{{% /tab %}}
{{< /tabpane >}}
On Windows, Solo reads the DACL with `icacls` and refuses the file if any principal other than
you, `SYSTEM`, `Administrators` or `CREATOR OWNER` holds write access. Inherit-only entries are
ignored, since they apply to items created later rather than to the path itself.
{{% alert title="Windows support is not yet usable" color="warning" %}}
The ACL checks described here are implemented but have **not** been exercised on a real Windows
machine — only reasoned about and unit-tested on POSIX. The Windows guarantee is also weaker: the
volume root is not inspected, and the symlink check on the file is a check-then-open rather than
an atomic no-follow open. Do not rely on `subprocess.additionalEnvironmentVariables` on Windows
yet; please report what you find if you try it.
{{% /alert %}}
{{% /alert %}}
## Managed Kubernetes and workload identity
Solo forwards the variables the AWS credential plugin needs, so **EKS IRSA** works without any
configuration:
`AWS_ROLE_ARN`, `AWS_WEB_IDENTITY_TOKEN_FILE`, `AWS_REGION`, `AWS_DEFAULT_REGION`,
`AWS_STS_REGIONAL_ENDPOINTS`, `AWS_PROFILE`
**GKE and AKS are not yet covered.** The variables their credential plugins need have not been
verified against a real cluster, and adding unverified names risks both breakage and security
holes, so they are not in the built-in allowlist. Until they are verified, forward them
yourself:
```yaml
subprocess:
additionalEnvironmentVariables:
kubectl:
- GOOGLE_APPLICATION_CREDENTIALS
- USE_GKE_GCLOUD_AUTH_PLUGIN
helm:
- GOOGLE_APPLICATION_CREDENTIALS
- USE_GKE_GCLOUD_AUTH_PLUGIN
```
If you confirm the required set for GKE or AKS on a real cluster, please open an issue on
[hiero-ledger/solo](https://github.com/hiero-ledger/solo/issues) so it can be added to the
built-in allowlist.
Note that `AZURE_AUTHORITY_HOST` and `AWS_ENDPOINT_URL` are intentionally excluded from the
built-in list: they redirect which authority or endpoint the credential plugin contacts.
Sovereign clouds that genuinely need a non-default authority can add `AZURE_AUTHORITY_HOST`
explicitly, which makes it a deliberate local decision rather than something inherited silently
from the surrounding environment.
## See also
* [Using Environment Variables]({{< relref "using-environment-variables.md" >}}) — variables
that configure Solo itself, as opposed to the ones Solo passes on to external tools.
---
# Using Solo with EVM Tools
URL: https://solo.hiero.org/docs/using-solo/using-solo-with-evm-tools/
Description: Point your existing Ethereum tooling (Hardhat, ethers.js, and MetaMask) at a local Hiero network via the Hiero JSON-RPC relay. This document covers enabling the relay, creating and configuring a Hardhat project, deploying a Solidity contract, and configuring wallets.
## Overview
Hiero is EVM-compatible. The Hiero **JSON-RPC relay** exposes a standard Ethereum
JSON-RPC interface on your local Solo network, letting you use familiar EVM tools
without modification.
This guide walks you through:
- Launching a Solo network with the JSON-RPC relay enabled.
- Retrieving ECDSA accounts for EVM tooling.
- Creating and configuring a Hardhat project against the relay.
- Deploying and interacting with a Solidity contract.
- Verifying transactions via the Explorer and Mirror Node.
- Configuring ethers.js and MetaMask.
## Prerequisites
Before proceeding, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness/) - your local
environment meets all hardware and software requirements, including Docker
and Solo.
- [**Quickstart**](/docs/simple-solo-setup/quickstart/) - you are comfortable
running Solo deployments.
You will also need:
- [Git](https://git-scm.com/) - to clone the optional pre-built example.
- [Taskfile](https://taskfile.dev/installation/) - only required if using the
[automated example](#reference-running-the-full-example-automatically).
---
## Step 1: Launch a Solo Network with the JSON-RPC Relay
The easiest way to start a Solo network with the relay pre-configured is via
`one-shot single deploy`, which provisions the consensus node, mirror node,
Hiero Mirror Node Explorer, and the Hiero JSON-RPC relay in a single step:
```bash
npx @hiero-ledger/solo one-shot single deploy
```
This command:
- Creates a local Kind Kubernetes cluster.
- Deploys a Hiero consensus node, mirror node, and Hiero Mirror Node Explorer.
- Deploys the Hiero **JSON-RPC relay** and exposes it at `http://localhost:37546` (Solo 0.63+).
- Generates three groups of pre-funded accounts, including ECDSA (EVM-compatible) accounts.
> **Relay endpoint summary (Solo 0.63 and later):**
>
> | Property | Value |
> | --- | --- |
> | RPC URL | `http://localhost:37546` |
> | Chain ID | `298` |
> | Currency symbol | `HBAR` |
>
> If you are using Solo 0.62 or earlier, the relay is at `http://localhost:7546`.
### Adding the Relay to an Existing Deployment
If you already have a running Solo network without the relay, see [**Step 10: Deploy JSON-RPC Relay**](/docs/advanced-solo-setup/network-deployments/manual-deployment/#10-deploy-json-rpc-relay) in the Step-by-Step Manual Deployment guide for full instructions, then return here once your relay is running on `http://localhost:37546` (Solo 0.63+) or `http://localhost:7546` (Solo 0.62 and earlier).
To remove the relay when you no longer need it, see [**Cleanup Step 1: Destroy JSON-RPC Relay**](/docs/advanced-solo-setup/network-deployments/manual-deployment/#1-destroy-json-rpc-relay) in the same guide.
---
## Step 2: Retrieve Your ECDSA Account and Private Key
`one-shot single deploy` creates ECDSA alias accounts, which are required for EVM tooling such as Hardhat, ethers.js, and MetaMask.
These accounts and their private keys are saved to a cache directory on completion.
> Note: ED25519 accounts are not compatible with Hardhat, ethers.js, or MetaMask when used via the JSON-RPC interface.
> Always use the ECDSA keys from accounts.json for EVM tooling.
- To find your deployment name, run `solo one-shot show deployment` (see [Capture your deployment name](/docs/simple-solo-setup/quickstart#capture-your-deployment-name)).
- Then open the accounts file at:
```bash
~/.solo/one-shot-/accounts.json
```
- Open that file to retrieve your ECDSA keys and EVM address. Each account entry contains:
- An **ECDSA private key** - 64 hex characters with a `0x` prefix (e.g. `0x105d0050...`).
- An **ECDSA public key** - the corresponding public key.
- An **EVM address** - derived from the public key (e.g. `0x70d379d473e2005bb054f50a1d9322f45acb215a`). In Hiero terminology, this means the account has an EVM address aliased from its ECDSA public key.
```bash
0x105d0050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524
0x2e1d968b041d84dd120a5860cee60cd83f9374ef527ca86996317ada3d0d03e7
...
```
- Export the private key for one account as an environment variable - **never
hardcode private keys in source files**:
{{< tabpane text=true >}}
{{% tab header="Bash" lang="bash" %}}
```bash
export SOLO_EVM_PRIVATE_KEY="0x105d0050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524"
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
$env:SOLO_EVM_PRIVATE_KEY = '0x105d0050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524'
```
{{% /tab %}}
{{< /tabpane >}}
---
## Step 3: Create and Configure a Hardhat Project
### Option A: Use the Pre-Built Solo Example (Recommended for First Time)
A ready-to-run Hardhat project is provided in the Solo repository. Skip to
[Step 4](#step-4-deploy-and-interact-with-a-solidity-contract) after cloning:
```bash
git clone https://github.com/hiero-ledger/solo.git
cd solo/examples/hardhat-with-solo/hardhat-example
npm install
```
### Option B: Create a New Hardhat Project from Scratch
If you want to integrate Solo into your own project:
```bash
mkdir solo-hardhat && cd solo-hardhat
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
npx hardhat init
```
When prompted, choose **TypeScript project** or **JavaScript project** based on
your preference.
Install dependencies:
```bash
npm install
```
### Configure Hardhat to Connect to the Solo Relay
Create or update `hardhat.config.ts` to point at the Solo JSON-RPC relay.
The `chainId` of `298` is required - Hardhat will reject transactions if it
does not match the network:
```typescript
import { defineConfig } from "hardhat/config";
import hardhatToolboxMochaEthers from "@nomicfoundation/hardhat-toolbox-mocha-ethers";
const config = defineConfig({
plugins: [hardhatToolboxMochaEthers],
solidity: "0.8.28",
networks: {
my_solo_deployment: {
type: "http",
url: "http://127.0.0.1:37546",
chainId: 298,
// Load from environment - never commit private keys to source control
accounts: process.env.SOLO_EVM_PRIVATE_KEY
? [process.env.SOLO_EVM_PRIVATE_KEY]
: [],
},
},
});
export default config;
```
> **Important:** This is the Hardhat v3 config format used by the bundled
> example (Hardhat 3.x). Each network needs an explicit `type: "http"`, and
> `chainId: 298` must be set - without `type`/`chainId`, Hardhat v3 fails with
> `HHE40000: No network with chain id "298" found` when connecting to the relay.
> The network key (`my_solo_deployment`) must match the `--network` flag you
> pass to Hardhat commands.
---
## Step 4: Deploy and Interact with a Solidity Contract
### The Sample Contract
If using the pre-built Solo example, `contracts/SimpleStorage.sol` is included.
For a new project, create `contracts/SimpleStorage.sol`:
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract SimpleStorage {
uint256 private value;
event ValueChanged(
uint256 indexed oldValue,
uint256 indexed newValue,
address indexed changer
);
constructor(uint256 initial) {
value = initial;
}
function get() external view returns (uint256) {
return value;
}
function set(uint256 newValue) external {
uint256 old = value;
value = newValue;
emit ValueChanged(old, newValue, msg.sender);
}
}
```
### Compile the Contract
```bash
npx hardhat compile
```
**Expected output:**
```bash
Compiled 1 Solidity file successfully (evm target: paris).
```
### Run the Tests
```bash
npx hardhat test --network my_solo_deployment
```
For the pre-built example, the test suite covers three scenarios:
```bash
SimpleStorage
✔ deploys with initial value
✔ updates value and emits ValueChanged event
✔ allows other accounts to set value
3 passing (12s)
```
### Deploy via a Script
To deploy `SimpleStorage` to your Solo network using a deploy script:
```bash
npx hardhat run scripts/deploy.ts --network my_solo_deployment
```
A minimal `scripts/deploy.ts` looks like:
> **Hardhat v3:** The bundled example pins Hardhat 3.x, which removed the
> `ethers` named export from the `hardhat` module. Obtain `ethers` from the
> network connection with `const { ethers } = await network.connect()` instead
> of `import { ethers } from "hardhat"`.
```typescript
import { network } from "hardhat";
async function main() {
const { ethers } = await network.connect();
const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
const contract = await SimpleStorage.deploy(42);
await contract.waitForDeployment();
console.log("SimpleStorage deployed to:", await contract.getAddress());
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
```
---
## Step 5: Send a Transaction with ethers.js
To submit a transaction directly from a script using ethers.js via Hardhat:
```typescript
import { network } from "hardhat";
async function main() {
const { ethers } = await network.connect();
const [sender] = await ethers.getSigners();
console.log("Sender:", sender.address);
const balance = await ethers.provider.getBalance(sender.address);
console.log("Balance:", ethers.formatEther(balance), "HBAR");
const tx = await sender.sendTransaction({
to: sender.address,
value: 10_000_000_000n,
});
await tx.wait();
console.log("Transaction confirmed. Hash:", tx.hash);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
```
Run it with:
```bash
npx hardhat run scripts/send-tx.ts --network my_solo_deployment
```
---
## Step 6: Verify Transactions
Confirm your transactions reached consensus using any of the following:
### Hiero Mirror Node Explorer
```url
http://localhost:38080/localnet/dashboard
```
> **Note:** If you are using Solo 0.62 or earlier, the Explorer is at `http://localhost:8080/localnet/dashboard`.
Search by account address, transaction hash, or contract address to view
transaction details and receipts.
### Hiero Mirror Node REST API
```url
http://localhost:38081/api/v1/transactions?limit=5
```
Returns the five most recent transactions in JSON format. Useful for scripted
verification.
> Note: `localhost:5551` (the legacy Mirror Node REST API direct endpoint) is being phased out.
> Use `localhost:38081` (Solo 0.63+) or `localhost:8081` (Solo 0.62 and earlier) to ensure compatibility with all endpoints.
### Hiero JSON RPC Relay (eth_getTransactionReceipt)
```bash
curl -X POST http://localhost:37546 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xYOUR_TX_HASH"],"id":1}'
```
---
## Step 7: Configure MetaMask
To connect MetaMask to your local Solo network:
1. Open MetaMask and go to **Settings → Networks → Add a network → Add a
network manually**.
2. Enter the following values:
| Field | Value |
| --- | --- |
| Network name | `Solo Local` |
| New RPC URL | `http://localhost:37546` |
| Chain ID | `298` |
| Currency symbol | `HBAR` |
> **Note:** If you are using Solo 0.62 or earlier, use `http://localhost:7546` for the RPC URL.
3. Click **Save** and switch to the **Solo Local** network.
4. Import an account using an ECDSA private key from `accounts.json`:
- Click the account icon → **Import account**.
- Paste the private key (with `0x` prefix).
- Click **Import**.
Your MetaMask wallet is now connected to the local Solo network and funded with
the pre-allocated HBAR balance.
---
## Step 8: Tear Down the Network
When finished, destroy the Solo deployment and all associated containers:
```bash
npx @hiero-ledger/solo one-shot single destroy
```
If you added the relay manually to an existing deployment:
```bash
solo relay node destroy --deployment "${SOLO_DEPLOYMENT}"
```
---
## Reference: Running the Full Example Automatically
The `hardhat-with-solo` example includes a `Taskfile.yml` that automates all
steps - deploy network, install dependencies, compile, and test - in a single
command:
```bash
cd solo/examples/hardhat-with-solo
task
```
To tear everything down:
```bash
task destroy
```
This is useful for CI pipelines. See the
[Solo deployment with Hardhat Example](https://github.com/hiero-ledger/solo/tree/main/examples/hardhat-with-solo) for full
details.
---
## Troubleshooting
| Symptom | Likely Cause | Fix |
| --- | --- | --- |
| `connection refused` on port `37546` | Relay not running | Run `one-shot single deploy` or `solo relay node add` |
| `invalid sender` or signature error | Using ED25519 key instead of ECDSA | Use ECDSA keys from `accounts.json` |
| Hardhat `chainId` mismatch error | Missing or wrong `chainId` in config | Set `chainId: 298` in `hardhat.config.ts` |
| MetaMask shows wrong network | Chain ID mismatch | Ensure Chain ID is `298` in MetaMask network settings |
| `INSUFFICIENT_TX_FEE` on transaction | Account not funded | Use a pre-funded ECDSA account from `accounts.json` |
| Hardhat test timeout | Network not fully started | Wait for `one-shot` to fully complete before running tests |
| Port `37546` already in use | Another process is using the port | Run `lsof -i :37546` and stop the conflicting process |
---
## Further Reading
- [Solo deployment with Hardhat Example](https://github.com/hiero-ledger/solo/tree/main/examples/hardhat-with-solo).
- [Configuring Hardhat with Hiero Local Node](https://docs.hedera.com/hedera/tutorials/smart-contracts/configuring-hardhat-with-hiero-local-node-a-step-by-step-guide) - the Hedera tutorial this guide is modelled on.
- [Retrieving Logs](/docs/advanced-solo-setup/jvm-debugger/) - for debugging network-level issues.
---
# Using Solo with Mirror Node
URL: https://solo.hiero.org/docs/using-solo/accessing-solo-services/solo-with-mirror-node/
Description: Add Mirror Node to a Solo network to stream and query transaction records, account history, and token data via the Hiero Mirror Node REST API.
## Overview
The Hiero Mirror Node stores the full transaction history of your local Solo network
and exposes it through several interfaces:
- A **web-based block explorer** (Hiero Mirror Node Explorer) at `http://localhost:38080/localnet/dashboard` (Solo 0.63+) or `http://localhost:8080/localnet/dashboard` (Solo 0.62 and earlier).
- A **REST API** via the mirror-ingress service at `http://localhost:38081` (Solo 0.63+) or `http://localhost:8081` (Solo 0.62 and earlier)
(recommended entry point — routes to the correct REST implementation).
- A **gRPC endpoint** for mirror node subscriptions.
> **Important:** The port numbers in this document are Solo's default targets. If any port is already in use on your machine when Solo starts, Solo automatically selects the next available port. If an endpoint does not work, check the actual ports assigned to your deployment — see [Port Reference](#port-reference) below.
This guide walks you through adding Mirror Node and the Hiero Explorer to a
Solo network, and shows you how to query transaction data and create accounts.
---
## Prerequisites
Before proceeding, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness/) - your
local environment meets all hardware and software requirements, including Docker and Solo.
- [**Quickstart**](/docs/simple-solo-setup/quickstart/) - you have a running Solo
network deployed using `solo one-shot single deploy`.
- To find your deployment name at any time, run `solo one-shot show deployment` (see [Capture your deployment name](/docs/simple-solo-setup/quickstart#capture-your-deployment-name)).
---
## Step 1: Deploy Solo with Mirror Node
> **Note:** If you deployed your network using
> [one-shot](/docs/simple-solo-setup/quickstart),
> [Falcon](/docs/advanced-solo-setup/network-deployments/falcon-deployment),
> or the [Task Tool](/docs/advanced-solo-setup/customizing-solo-with-tasks),
> Mirror Node is already running -
> skip to [Step 2: Access the Mirror Node Explorer](#step-2-access-the-mirror-node-explorer).
### Fresh manual Deployment
If you are building a custom network or adding the mirror node to an existing
deployment, run the following commands in sequence.
On native Windows (PowerShell), set the environment variables with `$env:` instead of `export` (and reference them as `$env:SOLO_CLUSTER_NAME`, etc., in the commands that follow):
```powershell
$env:SOLO_CLUSTER_NAME = 'solo-cluster'
$env:SOLO_NAMESPACE = 'solo-deployment'
$env:SOLO_CLUSTER_SETUP_NAMESPACE = 'solo-cluster-setup'
$env:SOLO_DEPLOYMENT = 'solo-deployment'
```
```bash
# Set environment variables
export SOLO_CLUSTER_NAME=solo-cluster
export SOLO_NAMESPACE=solo-deployment
export SOLO_CLUSTER_SETUP_NAMESPACE=solo-cluster-setup
export SOLO_DEPLOYMENT=solo-deployment
# Reset environment
rm -Rf ~/.solo
kind delete cluster -n "${SOLO_CLUSTER_NAME}"
kind create cluster -n "${SOLO_CLUSTER_NAME}"
# Configure cluster
solo cluster-ref config setup \
--cluster-setup-namespace "${SOLO_CLUSTER_SETUP_NAMESPACE}"
solo cluster-ref config connect \
--cluster-ref ${SOLO_CLUSTER_NAME} \
--context kind-${SOLO_CLUSTER_NAME}
# Create deployment
solo deployment config create \
--namespace "${SOLO_NAMESPACE}" \
--deployment "${SOLO_DEPLOYMENT}"
solo deployment cluster attach \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref ${SOLO_CLUSTER_NAME} \
--num-consensus-nodes 2
# Generate keys and deploy consensus nodes
solo keys consensus generate \
--deployment "${SOLO_DEPLOYMENT}" \
--gossip-keys --tls-keys \
-i node1,node2
solo consensus network deploy --deployment "${SOLO_DEPLOYMENT}" -i node1,node2
solo consensus node setup --deployment "${SOLO_DEPLOYMENT}" -i node1,node2
solo consensus node start --deployment "${SOLO_DEPLOYMENT}" -i node1,node2
# Add mirror node and explorer
solo mirror node add \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref ${SOLO_CLUSTER_NAME} \
--enable-ingress \
--pinger
solo explorer node add \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref ${SOLO_CLUSTER_NAME}
```
> **Note:** The `--pinger` flag in `solo mirror node add` starts a background
> service that sends transactions to the network at regular intervals. This is
> **required** because mirror node record files are only imported when a new
> record file is created - without it, the mirror node will appear empty until
> the next transaction occurs naturally.
---
## Step 2: Access the Mirror Node Explorer
Once Mirror Node is running, open the Hiero Explorer in your browser at:
```url
http://localhost:38080/localnet/dashboard
```
> **Note:** If you are using Solo 0.62 or earlier, the Explorer is at `http://localhost:8080/localnet/dashboard`.
> If that port does not work, check the actual port assigned to your deployment — see [Port Reference](#port-reference).
The Explorer lets you browse accounts, transactions, tokens, and contracts on
your Solo network in real time.
---
## Step 3: Create Accounts and View Transactions
Create test accounts and observe them appearing in the Explorer:
```bash
solo ledger account create --deployment solo-deployment --hbar-amount 100
solo ledger account create --deployment solo-deployment --hbar-amount 100
```
Open the Explorer at `http://localhost:38080/localnet/dashboard` (Solo 0.63+) or `http://localhost:8080/localnet/dashboard` (Solo 0.62 and earlier) to see the new accounts and their transactions recorded by the Mirror Node. If the port does not work, check your actual port assignments — see [Port Reference](#port-reference).
You can also use the [Hiero JavaScript SDK](/docs/using-solo/using-solo-with-hiero-sdks)
to create a topic, submit a message, and subscribe to it.
---
## Step 4: Access Mirror Node APIs
### Option A: Mirror-Ingress (localhost:38081)
Use `localhost:38081` (Solo 0.63+) for all Mirror Node REST API access. The mirror-ingress
service routes requests to the correct REST implementation automatically. This
is important because certain endpoints are only supported in the newer
`rest-java` version.
```bash
# List recent transactions
curl -s "http://localhost:38081/api/v1/transactions?limit=5"
# Get account details
curl -s "http://localhost:38081/api/v1/accounts/0.0.2"
```
> **Note:** If you are using Solo 0.62 or earlier, use `localhost:8081` instead of `localhost:38081`.
> `localhost:5551` (the legacy Mirror Node REST API direct endpoint) is being phased
> out. Always use the mirror-ingress port to ensure compatibility with all endpoints.
If you need to access it directly:
```bash
kubectl port-forward svc/mirror-1-rest -n "${SOLO_NAMESPACE}" 5551:80 &
curl -s "http://${REST_IP:-127.0.0.1}:5551/api/v1/transactions?limit=1"
```
### Option B: Mirror Node gRPC
For mirror node gRPC subscriptions (e.g. topic messages, account balance
updates), enable port-forwarding manually if not already active:
```bash
kubectl port-forward svc/mirror-1-grpc -n "${SOLO_NAMESPACE}" 5600:5600 &
```
Then verify available services:
```bash
grpcurl -plaintext "${GRPC_IP:-127.0.0.1}:5600" list
```
### Option C: Mirror Node REST-Java (Direct Access)
For direct access to the `rest-java` service (bypassing the ingress):
```bash
kubectl port-forward service/mirror-1-restjava -n "${SOLO_NAMESPACE}" 8084:80 &
# Example: NFT allowances
curl -s "http://${REST_IP:-127.0.0.1}:8084/api/v1/accounts/0.0.2/allowances/nfts"
```
In most cases you should use `localhost:38081` (Solo 0.63+) or `localhost:8081` (Solo 0.62 and earlier) instead.
---
## Port Reference
> For the full network endpoint reference (consensus gRPC, Mirror Node REST,
> JSON-RPC Relay, and Explorer), see [Service Endpoints](/docs/using-solo/endpoints).
> The table below covers mirror-node-specific ports, including those accessible
> only via manual `kubectl port-forward`.
The ports listed below are Solo's **default** targets. Solo checks each port before opening a tunnel - if the port is already in use, Solo picks the next available one and logs `Using available port `. If an endpoint is not reachable, check the actual ports your deployment is using with `solo deployment config ports --deployment ` - see [Port availability](/docs/using-solo/endpoints#port-availability) for the full set of commands.
The default local ports depend on your Solo version:
**Solo 0.63 and later (current defaults):**
| Service | Local Port | Access Method |
| --- | --- | --- |
| Hiero Explorer | `38080` | Browser (`--enable-ingress`) |
| Mirror Node (all-in-one) | `38081` | HTTP (`--enable-ingress`) |
| Mirror Node REST API | `5551` | `kubectl port-forward` (manual) |
| Mirror Node gRPC | `5600` | `kubectl port-forward` |
| Mirror Node REST Java | `8084` | `kubectl port-forward` |
**Solo 0.62 and earlier:**
| Service | Local Port | Access Method |
| --- | --- | --- |
| Hiero Explorer | `8080` | Browser (`--enable-ingress`) |
| Mirror Node (all-in-one) | `8081` | HTTP (`--enable-ingress`) |
| Mirror Node REST API | `5551` | `kubectl port-forward` |
| Mirror Node gRPC | `5600` | `kubectl port-forward` |
| Mirror Node REST Java | `8084` | `kubectl port-forward` |
---
## Restoring Port-Forwards
If port-forwards are interrupted — for example after a system restart — restore
them by re-running the relevant component add commands. These commands are
idempotent and will reattach port-forwards without redeploying:
```bash
solo mirror node add --deployment "${SOLO_DEPLOYMENT}"
solo explorer node add --deployment "${SOLO_DEPLOYMENT}"
```
---
## Tearing Down
To remove the Mirror Node from a running deployment:
```bash
solo mirror node destroy --deployment "${SOLO_DEPLOYMENT}" --force
```
To remove the Hiero Mirror Node Explorer:
```bash
solo explorer node destroy --deployment "${SOLO_DEPLOYMENT}" --force
```
For full network teardown, see
[**Step-by-Step Manual Deployment-Cleanup**](/docs/advanced-solo-setup/network-deployments/manual-deployment/#cleanup).
---
# Managing Your Network
URL: https://solo.hiero.org/docs/simple-solo-setup/managing-your-network/
Description: Learn how to start, stop, and restart consensus nodes, reset the ledger to genesis, capture logs and diagnostics, and troubleshoot a running Solo network. Master day-to-day network operations and troubleshooting.
## Overview
This guide covers day-to-day management operations for a running Solo network,
including starting, stopping, and restarting nodes, resetting the ledger to
genesis, capturing logs, and troubleshooting.
## Prerequisites
Before proceeding, ensure you have completed the following:
- **[System Readiness](/docs/simple-solo-setup/system-readiness)** - your local environment meets all hardware and software requirements.
- **[Quickstart](/docs/simple-solo-setup/quickstart)** - you have a running Solo network deployed using `solo one-shot single deploy`.
> **Note:** If you need to upgrade an existing Solo network, see
> [Upgrade Your Network](/docs/simple-solo-setup/upgrade-your-network).
```bash
solo one-shot show deployment
```
Expected output — the deployment name you passed to `solo one-shot single deploy`, or the default `one-shot` if you did not specify `--deployment`:
```bash
Deployment Name: one-shot (default)
```
Most management commands require your deployment name. Find it with `solo one-shot show deployment` — see [Capture your deployment name](/docs/simple-solo-setup/quickstart#capture-your-deployment-name). It defaults to `one-shot` unless you passed `--deployment`. Use it as `` in all commands on this page.
## Stopping and Starting Nodes
> **Important:** The `solo consensus node` stop/start/restart commands act on
> **consensus nodes only**. They do not stop the mirror node, Hiero Explorer,
> JSON-RPC relay, block node, or the shared services (PostgreSQL, Redis,
> MinIO) - those keep running. Solo has no stop/start command for the
> non-consensus components (their lifecycle is `add`/`destroy`). To pause the
> whole network, see [Stop the entire network](#stop-the-entire-network).
### Stop consensus nodes
Pause the consensus node(s) without destroying the deployment:
```bash
solo consensus node stop --deployment
```
### Start consensus nodes
Bring stopped consensus node(s) back online:
```bash
solo consensus node start --deployment
```
### Restart consensus nodes
Stop and start all consensus nodes in a single operation:
```bash
solo consensus node restart --deployment
```
To verify pod status after any of the above commands, see [Verify the network](/docs/simple-solo-setup/quickstart#verify-the-network) in the Quickstart guide.
> **Stop/start vs. ledger reset:** `stop`/`start`/`restart` pause and resume
> consensus nodes without touching ledger state — accounts, balances, and
> transaction history are preserved. To return the ledger to genesis and
> discard all on-ledger state, see
> [Reset the ledger to genesis](#reset-the-ledger-to-genesis).
### Stop the entire network
Solo does not provide a single command to stop every component. To pause the
**entire** network - consensus, mirror, Explorer, relay, block node, and
shared services - while preserving its data, scale every workload in the
deployment namespace to zero with `kubectl`. For one-shot deployments the
namespace matches your deployment name.
```bash
kubectl scale deployment --all --replicas=0 -n
kubectl scale statefulset --all --replicas=0 -n
```
This stops all pods but keeps the Kind cluster, persistent volumes, and
configuration intact. To bring the network back online, scale the workloads
back up (Solo's default deployments run a single replica each):
```bash
kubectl scale statefulset --all --replicas=1 -n
kubectl scale deployment --all --replicas=1 -n
```
> **Note:** Scaling to zero pauses the network without deleting it. To remove
> the network entirely (cluster, volumes, and configuration), use
> `solo one-shot single destroy` - see the
> [Cleanup guide](/docs/simple-solo-setup/cleanup).
### Verify Network is Working
To confirm your Hedera network is fully operational, create a test account using the Ledger account creation command:
```bash
solo ledger account create --deployment
```
Expected output:
```bash
*** new account created ***
-------------------------------------------------------------------------------
{
"accountId": "0.0.1001",
"publicKey": "302a300506032b6570032100439379b330f3b57b5deffda196c7c0c3387f3330a838c021954303e260606f24",
"balance": 100
}
```
Once the account is created, verify it in the web-based Explorer UI:
1. Open your browser to **http://localhost:38080**
2. In the search bar, enter the account ID (e.g., `0.0.1001`)
3. View the account details, balance, and transaction history
This confirms that:
* The network is processing transactions
* The consensus node is responding correctly
* The mirror node is indexing transactions
* The explorer is displaying data properly
## Reset the ledger to genesis
To return a running deployment to a clean genesis state without tearing it down
and redeploying, reset the ledger system. This clears the saved consensus state
and ledger-related secrets, returning the ledger to genesis - with no accounts,
files, or balances beyond the genesis defaults:
```bash
solo ledger system reset --deployment
```
`solo ledger system reset` is the counterpart to `solo ledger system init`
(which initializes a new deployment). Use it when you want a fresh ledger - for
example, to rerun a scenario from a known starting point - while keeping the
same Kind cluster and deployment.
| Flag | Description |
| --- | --- |
| `--deployment` | The deployment to reset. |
| `--node-aliases` | Comma-separated consensus node aliases to reset. Defaults to all nodes in the deployment. |
| `--cluster-ref` | The cluster reference, for a deployment that spans multiple clusters. |
> **Note:** This discards on-ledger state created since genesis and cannot be
> undone. It does not delete the cluster or deployment - to remove those
> entirely, use `solo one-shot single destroy` (see the
> [Cleanup guide](/docs/simple-solo-setup/cleanup)).
## Viewing Logs
To capture logs and diagnostic information for your deployment:
```bash
solo deployment diagnostics all --deployment
```
Logs are saved to `~/.solo/logs/` (on native Windows, `$env:USERPROFILE\.solo\logs\`).
**Expected output**:
```bash
******************************* Solo *********************************************
Version : 0.59.1
Kubernetes Context : kind-solo
Kubernetes Cluster : kind-solo
Current Command : deployment diagnostics all --deployment
**********************************************************************************
✔ Initialize [0.3s]
✔ Get consensus node logs and configs [15s]
✔ Get Helm chart values from all releases [2s]
✔ Downloaded logs from 10 Hiero component pods [1s]
✔ Get node states [10s]
Configurations and logs saved to /Users//.solo/logs
Log zip file network-node1-0-log-config.zip downloaded to /Users//.solo/logs/
Helm chart values saved to /Users//.solo/logs/helm-chart-values
```
You can also retrieve logs for a specific pod directly using `kubectl`:
```bash
kubectl logs -n
```
> **Important:** Solo deploys each network into a Kubernetes namespace. For one-shot deployments, the namespace defaults to `one-shot` (matching the default deployment name). You can override it by passing `--namespace` to `solo one-shot single deploy`.
To find your deployment namespace, use any of:
```bash
# Look up the namespace Solo recorded for this deployment
solo deployment config info --deployment
# Or list all namespaces and pick the one matching your deployment
kubectl get ns
# Or inspect pods and use the NAMESPACE column
kubectl get pods -A | grep -v kube-system
```
For one-shot deployments the namespace matches the deployment name, which defaults to `one-shot` unless you passed `--deployment` (retrieve it with `solo one-shot show deployment`).
Replace `` and `` with the values from your deployment.
---
# One-Shot Deploy with Custom Component Versions
URL: https://solo.hiero.org/docs/advanced-solo-setup/one-shot-deploy-with-custom-versions/
Description: Use the --edge flag and *_EDGE_VERSION environment variables to deploy a Solo network against arbitrary component versions — release candidates, pre-releases, or local builds — without modifying Solo source or rebuilding the CLI.
## Overview
Solo's `one-shot single deploy` and `one-shot multi deploy` commands accept
an `--edge` flag that switches every component from its built-in stable
default to a separate set of "edge" versions. Each edge version is read from
an environment variable at startup, so you can pin any component to any tag
the container registry exposes — including release candidates and unreleased
builds — without editing Solo source or rebuilding the CLI.
Use this guide when you need to:
- Test a Hiero Consensus Node release candidate against the rest of the
Solo-managed stack.
- Reproduce a specific component version combination for a bug report or
regression test.
- Iterate on a single component (Mirror Node, Relay, Explorer, …) while the
other components stay on stable defaults.
For the canonical list of `*_EDGE_VERSION` variables, see
[Edge Component Versions](/docs/advanced-solo-setup/using-environment-variables#edge-component-versions)
in the environment variables reference.
> **Local binary builds vs published version overrides:** `--edge` and
> `*_EDGE_VERSION` variables pin components to **published container image
> tags** — they require the image to exist in the registry. If you need to
> deploy a binary you compiled locally (before any tag or release exists), use
> `--local-build-path` instead.
---
## How It Works
```text
*_EDGE_VERSION env var (e.g. CONSENSUS_NODE_EDGE_VERSION)
│
▼
solo one-shot ... deploy --edge
│
▼
Each component is pinned to its edge version for this deploy.
Components without an explicit override fall back to the compiled-in
edge defaults, which themselves fall back to the stable defaults.
```
- Without `--edge`, Solo uses the stable defaults compiled into the CLI.
- With `--edge`, Solo reads the `*_EDGE_VERSION` constants — and any matching
environment variable you set in the shell overrides those constants.
You only need to set variables for the components you want to override. All
others fall back to their compiled-in defaults.
> **Image cache:** Because you pin versions with environment variables, Solo's
> [image cache](/docs/advanced-solo-setup/image-cache) pulls the matching image
> versions automatically. Pinning a version with a `--*-version` CLI flag (or in
> `solo.config.yaml`) instead does **not** update the cache — it would pull the
> default versions and cause a cache miss on first deploy. Use the environment
> variables shown here to keep the cache aligned with the deployed versions.
---
## Quick Start
Deploy a single-node network with a custom Consensus Node release candidate:
```bash
CONSENSUS_NODE_EDGE_VERSION=v0.74.0-rc.1 \
solo one-shot single deploy --edge --debug
```
What this does:
- `CONSENSUS_NODE_EDGE_VERSION=v0.74.0-rc.1` overrides the consensus node
version for this command invocation.
- `--edge` tells Solo to read `*_EDGE_VERSION` variables instead of stable
defaults.
- `--debug` enables Solo's debug mode — appropriate for local development,
not for production-shaped deployments.
- Mirror Node, Relay, Explorer, Block Node, and the Solo chart keep their
compiled-in edge defaults because no `*_EDGE_VERSION` was set for them.
> **Note:** Every successive `solo one-shot single deploy` command will remove the
> existing components and will create a new deployment.
> **Deprecated:** The `--dev` flag has been renamed to `--debug`. `--dev` still
> works as an alias but is deprecated and prints a warning; update your scripts
> to use `--debug`. The `--dev` alias will no longer be supported once Solo
> `0.82.0` reaches its end of support date.
---
## Where to Find Version Tags
Each `*_EDGE_VERSION` value is a published release tag from the component's
GitHub release page. Pick a tag from the appropriate page below, and match
the format the component publishes — a missing or extra `v` prefix is the
most common cause of image-pull failures.
| Component | Release tags | Format | Example |
| --------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------- | --------------- |
| Consensus Node | [hiero-consensus-node](https://github.com/hiero-ledger/hiero-consensus-node/releases) | `vMAJOR.MINOR.PATCH[-qualifier]` | `v0.74.0-rc.1` |
| Mirror Node | [hiero-mirror-node](https://github.com/hiero-ledger/hiero-mirror-node/releases) | `vMAJOR.MINOR.PATCH` | `v0.153.1` |
| JSON-RPC Relay | [hiero-json-rpc-relay](https://github.com/hiero-ledger/hiero-json-rpc-relay/releases) | `MAJOR.MINOR.PATCH` | `0.77.0` |
| Explorer | [hiero-mirror-node-explorer](https://github.com/hiero-ledger/hiero-mirror-node-explorer/releases) | `MAJOR.MINOR.PATCH` | `27.0.0` |
| Block Node | [hiero-block-node](https://github.com/hiero-ledger/hiero-block-node/releases) | `vMAJOR.MINOR.PATCH[-qualifier]` | `v0.32.0` |
| Solo Chart | [hashgraph/solo-charts](https://github.com/hashgraph/solo-charts/releases) | `MAJOR.MINOR.PATCH` | `0.64.0` |
> **Note:** Consensus Node, Mirror Node, and Block Node tags are prefixed
> with `v`; Relay, Explorer, and Solo Chart tags are not. The tag must exist
> in the component's container registry, otherwise the deploy fails with an
> image-pull error — see [Troubleshooting](#troubleshooting).
---
## Command Reference
In Solo v0.72.0, `--edge` is accepted by the `single` and `multi` one-shot
deploy variants. `solo one-shot falcon deploy` does **not** currently accept
`--edge` — use one of the two variants below to test custom component
versions.
### Single-node deploy
```bash
CONSENSUS_NODE_EDGE_VERSION= \
MIRROR_NODE_EDGE_VERSION= \
solo one-shot single deploy --edge [--debug] [other flags]
```
### Multi-node deploy
```bash
CONSENSUS_NODE_EDGE_VERSION= \
MIRROR_NODE_EDGE_VERSION= \
solo one-shot multi deploy --edge --num-consensus-nodes 3 [--debug] [other flags]
```
---
## Examples
### Override Consensus Node and Mirror Node
```bash
CONSENSUS_NODE_EDGE_VERSION=v0.73.0 \
MIRROR_NODE_EDGE_VERSION=v0.153.1 \
solo one-shot single deploy --edge --debug
```
### Override every component
```bash
CONSENSUS_NODE_EDGE_VERSION=v0.73.0 \
MIRROR_NODE_EDGE_VERSION=v0.153.1 \
RELAY_EDGE_VERSION=0.77.0 \
EXPLORER_EDGE_VERSION=27.0.0 \
BLOCK_NODE_EDGE_VERSION=v0.32.0 \
SOLO_CHART_EDGE_VERSION=0.64.0 \
solo one-shot single deploy --edge --debug
```
### Export once, reuse across a development session
If you are iterating and running deploy/destroy/deploy cycles, export the
variables so every `one-shot` command in the shell session picks them up:
```bash
export CONSENSUS_NODE_EDGE_VERSION=v0.74.0-rc.1
export MIRROR_NODE_EDGE_VERSION=v0.153.1
solo one-shot single deploy --edge --debug
# Destroy and redeploy without re-typing the variables
solo one-shot single destroy
solo one-shot single deploy --edge --debug
```
---
## Verifying the Versions in Use
After the deploy starts, confirm the resolved versions in the structured Solo
log:
```bash
tail -f $HOME/.solo/logs/solo.ndjson | jq '.msg, .version // empty'
```
> **Note:** Use `solo.ndjson` (newline-delimited JSON, machine-readable) for
> `jq` pipes. The companion `solo.log` is pino-pretty formatted text and will
> not parse as JSON.
Inspect the deployed Helm releases and their chart versions:
```bash
helm list -A
helm get values -n
```
Confirm the consensus node container image tag:
```bash
kubectl get pods -n -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
```
Replace `` with your deployment namespace (default `one-shot` —
see [Find your deployment namespace](/docs/simple-solo-setup/managing-your-network#viewing-logs)).
---
## Without `--edge`
Omitting `--edge` uses the stable defaults compiled into the Solo CLI you are
running — any `*_EDGE_VERSION` variables you have set are ignored for that
invocation.
```bash
# Stable defaults — *_EDGE_VERSION variables are ignored.
solo one-shot single deploy --debug
```
If you want to pin versions without using `--edge` (for example, to test a
specific stable release of one component), see
[Pinning Component Versions](/docs/advanced-solo-setup/using-environment-variables#pinning-component-versions)
in the environment variables reference.
---
## Troubleshooting
**The version I set is not being used.**
Confirm you passed `--edge`. Without it, Solo ignores every `*_EDGE_VERSION`
variable and uses the compiled-in stable defaults.
**Solo is ignoring my environment variable.**
The variable must be exported in (or prefixed to) the same shell process that
runs Solo. Verify with:
```bash
echo $CONSENSUS_NODE_EDGE_VERSION # should print your value
```
If you set the variable inline (`FOO=bar solo ...`), double-check the variable
name is spelled exactly as listed in
[Edge Component Versions](/docs/advanced-solo-setup/using-environment-variables#edge-component-versions)
— the names are case-sensitive.
**The deploy fails with an image-pull error.**
The tag you supplied does not exist in the component's container registry, or
the format is wrong (missing `v` prefix, extra spaces, …). Cross-check the tag
against the official release list for that component before retrying.
**The deploy starts but a component crashes immediately.**
Different component versions are not guaranteed to be mutually compatible.
When mixing edge versions, prefer combinations Solo's CI already exercises
(see the [Version Compatibility Reference](/docs/simple-solo-setup/system-readiness#version-compatibility-reference)).
---
# Step-by-Step Manual Deployment
URL: https://solo.hiero.org/docs/advanced-solo-setup/network-deployments/manual-deployment/
Description: 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**](/docs/simple-solo-setup/system-readiness) — your local environment
meets all hardware and software requirements (Docker, kind, kubectl, helm, Solo).
- [**Quickstart**](/docs/simple-solo-setup/quickstart) — you have a running Kind cluster.
- Set your environment variables if you have not already done so:
{{< tabpane text=true >}}
{{% tab header="Bash" lang="bash" %}}
```bash
export SOLO_CLUSTER_NAME=solo
export SOLO_NAMESPACE=solo-deployment
export SOLO_CLUSTER_SETUP_NAMESPACE=solo-cluster
export SOLO_DEPLOYMENT=solo-deployment
```
{{% /tab %}}
{{% tab header="PowerShell" lang="powershell" %}}
```powershell
$env:SOLO_CLUSTER_NAME = 'solo'
$env:SOLO_NAMESPACE = 'solo-deployment'
$env:SOLO_CLUSTER_SETUP_NAMESPACE = 'solo-cluster'
$env:SOLO_DEPLOYMENT = 'solo-deployment'
```
{{% /tab %}}
{{< /tabpane >}}
---
## 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:
```bash
# 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-output ref="solo-cluster-ref-config-connect" lang="bash" >}}
- {{< solo-output ref="solo-deployment-config-create" lang="bash" >}}
---
### 2. Add Cluster to Deployment
- Attach the cluster to your deployment and specify the number of consensus nodes:
#### 1. Single node:
```bash
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):
```bash
solo deployment cluster attach \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref kind-${SOLO_CLUSTER_NAME} \
--num-consensus-nodes 3
```
- **Expected Output**:
{{< solo-output ref="solo-deployment-cluster-attach" lang="bash" >}}
---
### 3. Generate Keys
- Generate the gossip and TLS keys for your consensus nodes:
```bash
solo keys consensus generate \
--gossip-keys \
--tls-keys \
--deployment "${SOLO_DEPLOYMENT}"
```
PEM key files are written to `~/.solo/cache/keys/`.
- **Expected output**:
{{< solo-output ref="solo-keys-consensus-generate" lang="bash" >}}
---
### 4. Set Up Cluster with Shared Components
- Install shared cluster-level components (MinIO Operator, Prometheus CRDs, etc.)
into the cluster setup namespace:
```bash
solo cluster-ref config setup --cluster-setup-namespace "${SOLO_CLUSTER_SETUP_NAMESPACE}"
```
- **Expected output**:
{{< solo-output ref="solo-cluster-ref-config-setup" lang="bash" >}}
---
### 5. Deploy the Network
- Deploy the Solo network Helm chart, which provisions the consensus node pods,
HAProxy, Envoy, and MinIO:
```bash
solo consensus network deploy --deployment "${SOLO_DEPLOYMENT}"
```
To provide a custom consensus node `application.properties` file, pass
`--application-properties `. Solo merges custom files with its generated
defaults unless the file includes the overwrite marker. See
[Custom Application Properties](/docs/advanced-solo-setup/network-deployments/custom-application-properties)
for merge and overwrite examples.
- **Expected output**:
{{< solo-output ref="solo-consensus-network-deploy" lang="bash" >}}
---
### 6. Set Up Consensus Nodes
- Download the consensus node platform software and configure each node:
```bash
export CONSENSUS_NODE_VERSION=v0.66.0
solo consensus node setup \
--deployment "${SOLO_DEPLOYMENT}" \
--consensus-node-version "${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-output ref="solo-consensus-node-setup" lang="bash" >}}
---
### 7. Start Consensus Nodes
- Start all configured nodes and wait for them to reach ACTIVE status:
```bash
solo consensus node start --deployment "${SOLO_DEPLOYMENT}"
```
- **Expected output**:
{{< solo-output ref="solo-consensus-node-start" lang="bash" >}}
---
### 8. Deploy Mirror Node
- Deploy the Hedera Mirror Node, which indexes all transaction data and exposes a
REST API and gRPC endpoint:
```bash
solo mirror node add \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref kind-${SOLO_CLUSTER_NAME} \
--enable-ingress \
--pinger \
--force-port-forward
```
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-output ref="solo-mirror-node-add" lang="bash" >}}
---
### 9. Deploy Explorer
- Deploy the Hiero Explorer, a web UI for browsing transactions and accounts:
```bash
solo explorer node add \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref kind-${SOLO_CLUSTER_NAME} \
--force-port-forward
```
- **Expected output**:
{{< solo-output ref="solo-explorer-node-add" lang="bash" >}}
---
### 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.).
The `-i` flag (short for `--node-aliases`) specifies which consensus nodes the relay serves. Pass a comma-separated list for multi-node deployments. Omitting the flag covers all nodes.
#### 1. Single node:
```bash
solo relay node add \
-i node1 \
--deployment "${SOLO_DEPLOYMENT}"
```
#### 2. Multiple nodes (e.g., 3 nodes):
```bash
solo relay node add \
--node-aliases node1,node2,node3 \
--deployment "${SOLO_DEPLOYMENT}"
```
- **Expected output**:
{{< solo-output ref="solo-relay-node-add" lang="bash" >}}
---
## 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
Pass the same node aliases you used when deploying the relay. For a multi-node deployment, use `--node-aliases node1,node2,node3` (or omit the flag to destroy all).
```bash
solo relay node destroy \
-i node1 \
--deployment "${SOLO_DEPLOYMENT}" \
--cluster-ref kind-${SOLO_CLUSTER_NAME}
```
### 2. Destroy Explorer
```bash
solo explorer node destroy \
--deployment "${SOLO_DEPLOYMENT}" \
--force
```
### 3. Destroy Mirror Node
```bash
solo mirror node destroy \
--deployment "${SOLO_DEPLOYMENT}" \
--force
```
### 4. Destroy the Network
```bash
solo consensus network destroy \
--deployment "${SOLO_DEPLOYMENT}" \
--force
```
---
# Using Network Load Generator with Solo
URL: https://solo.hiero.org/docs/using-solo/using-network-load-generator-with-solo/
Description: Learn how to run load tests against a Solo network using the Network Load Generator (NLG). Generate realistic transaction flows and stress-test your deployment to verify performance under load.
## Using Network Load Generator with Solo
The Network Load Generator (NLG) is a benchmarking tool that stress tests Hiero networks by generating configurable transaction loads. Use it to validate the performance and
stability of your Solo network before deploying to production or running
integration tests.
## Prerequisites
Before proceeding, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness) — your local environment
meets all hardware and software requirements.
- [**Quickstart**](/docs/simple-solo-setup/quickstart) — you have a running Solo network
and are familiar with the basic Solo workflow.
## Step 1: Start a Load Test
Use the `rapid-fire load start` command to install the NLG Helm chart and
begin a load test against your deployment.
```bash
npx @hiero-ledger/solo@latest rapid-fire load start \
--deployment \
--args '"-c 3 -a 10 -t 60"' \
--test CryptoTransferLoadTest
```
Replace `` with your deployment name - find it with `solo one-shot show deployment` (see [Capture your deployment name](/docs/simple-solo-setup/quickstart#capture-your-deployment-name)).
The `--args` flag passes arguments directly to the NLG. In this example:
- -c 3 — 3 concurrent threads
- -a 10 — 10 accounts
- -t 60 — run for 60 seconds
## Step 2: Run Multiple Load Tests (Optional)
You can run additional load tests in parallel from a separate terminal. Each
test runs independently against the same deployment:
```bash
npx @hiero-ledger/solo@latest rapid-fire load start \
--deployment \
--args '"-c 3 -a 10 -t 60"' \
--test NftTransferLoadTest
```
## Step 3: Stop a Specific Load Test
To stop a single running load test before it completes, use the `stop` command:
```bash
npx @hiero-ledger/solo@latest rapid-fire load stop \
--deployment \
--test CryptoTransferLoadTest
```
## Step 4: Tear Down All Load Tests
To stop all running load tests and uninstall the NLG Helm chart:
```bash
npx @hiero-ledger/solo@latest rapid-fire destroy all \
--deployment
```
## Complete Example
For an end-to-end walkthrough with a full configuration, see the [examples/rapid-fire](https://github.com/hiero-ledger/solo/tree/main/examples/rapid-fire).
## Available Tests and Arguments
A full list of all available `rapid-fire` commands can be found in [Solo CLI Reference](/docs/advanced-solo-setup/cli/).
---
# Custom Application Properties
URL: https://solo.hiero.org/docs/advanced-solo-setup/network-deployments/custom-application-properties/
Description: Configure consensus node application.properties with Solo's default merge mode or full overwrite mode.
## Overview
Solo lets you provide a custom `application.properties` file for consensus nodes
with the `--application-properties` flag. By default, Solo merges your file with
its generated defaults. If you need complete control over the final file, add an
overwrite marker to your custom file.
Use the default merge mode when you only need to change or add a few properties.
Use overwrite mode only when you want your file to replace Solo's generated
`application.properties` content.
## Default merge mode
Pass your file to `solo consensus network deploy`:
```bash
solo consensus network deploy \
--deployment "${SOLO_DEPLOYMENT}" \
--application-properties ./config/application.properties
```
In merge mode, Solo starts with its generated `application.properties`, then
applies your file as key-level overrides:
- If your file contains a key that already exists in Solo's generated file, Solo
replaces that key's value.
- If your file contains a new key, Solo appends it to the final file.
- Blank lines and comments in your file are ignored during the merge.
- Solo-generated keys that you do not mention remain in the final file.
Example custom file for merge mode:
```properties
# Override only the properties that need to change.
contracts.chainId=298
hedera.recordStream.logPeriod=1
```
This is the recommended mode for most deployments because Solo keeps its
generated defaults while still applying your overrides.
## Overwrite mode
To replace Solo's generated `application.properties` file, add the overwrite
marker as a comment in your custom file:
```properties
# SOLO_ENABLE_OVERWRITE=true
contracts.chainId=298
hedera.recordStream.logPeriod=1
# Include every other property your consensus nodes require.
```
Then deploy with the same flag:
```bash
solo consensus network deploy \
--deployment "${SOLO_DEPLOYMENT}" \
--application-properties ./config/application.properties
```
The marker must be on a comment line that starts with `#`. Solo looks for the
exact text `SOLO_ENABLE_OVERWRITE=true` inside a comment. If the marker is
missing, or if it is written as a normal property instead of a comment, Solo
uses default merge mode.
In overwrite mode, your file becomes the full `application.properties` content.
Solo does not carry over defaults that are missing from your file, so include
all properties required by the consensus node version and deployment topology
you are running.
## Falcon values file
For One-shot Falcon deployments, put the same flag under the `network` section:
```yaml
network:
--application-properties: "./config/application.properties"
```
The merge or overwrite behavior is still controlled by the contents of the
referenced `application.properties` file. Add `# SOLO_ENABLE_OVERWRITE=true` to
that file only when you want overwrite mode.
For the complete list of Falcon network flags, see the
[Falcon Values File Reference](/docs/advanced-solo-setup/network-deployments/falcon-flags-reference).
---
# Customizing Solo with Tasks
URL: https://solo.hiero.org/docs/advanced-solo-setup/customizing-solo-with-tasks/
Description: Use the Task runner to deploy and customize Solo networks, then explore maintained GitHub example projects for common workflows.
## Overview
The **Task** tool (`task`) is a task runner that enables you to deploy and customize Solo networks using infrastructure-as-code patterns. Rather than running individual Solo CLI commands, you can use predefined Taskfile targets to orchestrate complex deployment workflows with a single command.
This guide covers installing the Task tool, understanding available Taskfile targets, and using them to deploy networks with various configurations. It also points to maintained example projects that demonstrate common Solo workflows.
> **Note:** This guide assumes you have cloned the [Solo repository](https://github.com/hiero-ledger/solo) and have basic familiarity with command-line interfaces and Docker.
## Prerequisites
Before you begin, ensure you have completed the following:
- [**System Readiness**](/docs/simple-solo-setup/system-readiness): Prepare your local environment (Docker, Kind, Kubernetes, and related tooling).
- [**Quickstart**](/docs/simple-solo-setup/quickstart): You are familiar with the basic Solo workflow and the `solo one-shot single deploy` command.
> **Tip:** Task-based workflows are ideal for developers who want to:
>
> - Run the same deployment multiple times reliably.
> - Customize network components (add mirror nodes, relays, block nodes, etc.).
> - Use version control to track deployment configurations.
> - Integrate Solo deployments into CI/CD pipelines.
## Install the Task Tool
The Task tool is a dependency for using Taskfile targets in the Solo repository. Install it using one of the following methods:
### Using Homebrew (macOS/Linux) (recommended)
```bash
brew install go-task/tap/go-task
```
### Using npm
```bash
npm install -g @go-task/cli
```
Verify the installation:
```bash
task --version
```
Expected output:
```text
Task version: v3.X.X
```
### Using package managers
Visit the [Task installation guide](https://taskfile.dev/installation/) for additional installation methods for your operating system.
## Understanding the Task Structure
The Solo repository uses a modular Task architecture located in the `scripts/` directory:
```text
scripts/
├── Taskfile.yml # Main entry point (includes other Taskfiles)
├── Taskfile.scripts.yml # Core deployment and management tasks
├── Taskfile.examples.yml # Example project tasks
├── Taskfile.release.yml # Package publishing tasks
└── [other helper scripts]
```
### How to Run Tasks
From the **root directory** or any **example directory**, run:
```bash
# Run the default task
task
# Run a specific task
task
# Run tasks with variables
task -- VAR_NAME=value
```
## Deploy Network Configurations
### Basic Network Deployment
Deploy a standalone Hiero Consensus Node network with a single command:
```bash
# From the repository root, navigate to scripts directory
cd scripts
# Deploy default network (2 consensus nodes)
task default
```
This command performs the following actions:
- Initializes Solo and downloads required dependencies.
- Creates a local Kubernetes cluster using Kind.
- Deploys 2 consensus nodes.
- Sets up gRPC and JSON-RPC endpoints for client access.
### Deploy Network with Mirror Node
Deploy a network with a consensus node, mirror node, and Hiero Explorer:
```bash
cd scripts
task default-with-mirror
```
This configuration includes:
| Component | Description |
| ------------------ | --------------------------------------------- |
| **Consensus Node** | 2 consensus nodes running Hiero |
| **Mirror Node** | Stores and serves historical transaction data |
| **Explorer UI** | Web interface for viewing accounts |
Access the Explorer at: `http://localhost:38080/localnet/dashboard` (Solo 0.63+) or `http://localhost:8080/localnet/dashboard` (Solo 0.62 and earlier). See [Port availability](/docs/using-solo/endpoints#port-availability) if the port is in use.
### Deploy Network with Relay and Explorer
Deploy a network with consensus nodes, mirror node, explorer, and JSON-RPC relay for Ethereum-compatible access:
```bash
cd scripts
task default-with-relay
```
This configuration includes:
| Component | Description |
| ------------------ | --------------------------------------------- |
| **Consensus Node** | 2 consensus nodes running Hiero |
| **Mirror Node** | Stores and serves historical transaction data |
| **Explorer UI** | Web interface for viewing accounts |
| **JSON-RPC Relay** | Ethereum-compatible JSON-RPC interface |
Access the services at (Solo 0.63+ defaults; for Solo 0.62 and earlier use the legacy ports in parentheses):
- Explorer: `http://localhost:38080/localnet/dashboard` (legacy: `http://localhost:8080/localnet/dashboard`)
- JSON-RPC Relay: `http://localhost:37546` (legacy: `http://localhost:7546`)
> See [Port availability](/docs/using-solo/endpoints#port-availability) if a port is already in use on your machine.
## Available Taskfile Targets
The Taskfile includes a comprehensive set of targets for deploying and managing Solo networks. Below are the most commonly used targets, organized by category.
### Core Deployment Targets
These targets handle the primary deployment lifecycle:
| Task | Description |
| --------- | -------------------------------------------------------------- |
| `default` | Complete deployment workflow for Solo |
| `install` | Initialize cluster, create deployment, and setup consensus net |
| `destroy` | Tear down the consensus network |
| `clean` | Full cleanup: destroy network, remove cache, logs, and files |
| `start` | Start all consensus nodes |
| `stop` | Stop all consensus nodes |
### Example: Deploy, then clean up
```bash
cd scripts
# Deploy the network
task default
# ... (use the network)
# Stop the network
task stop
# Remove all traces of the deployment
task clean
```
### Cache and Log Cleanup
When cleaning up, you can selectively remove specific components:
| Task | Description |
| -------------- | ------------------------------------------------------ |
| `clean:cache` | Remove the Solo cache directory (`~/.solo/cache`) |
| `clean:logs` | Remove the Solo logs directory (`~/.solo/logs`) |
| `clean:tmp` | Remove temporary deployment files |
### Mirror Node Management
Add, configure, or remove mirror nodes from an existing deployment:
| Task | Description |
| ----------------------------- | ------------------------------------------------- |
| `solo:mirror-node` | Add a mirror node to the current deployment |
| `solo:destroyer-mirror-node` | Remove the mirror node from the deployment |
### Example: Add mirror node to running network
```bash
cd scripts
# Start with a basic network
task default
# Add mirror node later
task solo:mirror-node
# Remove mirror node
task solo:destroyer-mirror-node
```
### Explorer UI Management
Deploy or remove the Hiero Explorer for transaction/account viewing:
| Task | Description |
| ------------------------- | ---------------------------------------------- |
| `solo:explorer` | Add explorer UI to the current deployment |
| `solo:destroy-explorer` | Remove explorer UI from the deployment |
### Example: Deploy network with explorer
```bash
cd scripts
task default
task solo:explorer
# Access at http://localhost:38080/localnet/dashboard (Solo 0.63+) or http://localhost:8080/localnet/dashboard (Solo 0.62 and earlier)
```
### JSON-RPC Relay Management
Deploy or remove the Relay for Ethereum-compatible access:
| Task | Description |
| --------------------- | ------------------------------------------------ |
| `solo:relay` | Add JSON-RPC relay to the current deployment |
| `solo:destroy-relay` | Remove JSON-RPC relay from the deployment |
### Example: Add relay to running network
```bash
cd scripts
task default-with-mirror
task solo:relay
# Access JSON-RPC at http://localhost:37546 (Solo 0.63+) or http://localhost:7546 (Solo 0.62 and earlier)
```
### Block Node Management
Deploy or remove block nodes for streaming block data:
| Task | Description |
| ------------------- | -------------------------------------------------- |
| `solo:block:add` | Add a block node to the current deployment |
| `solo:block:destroy`| Remove the block node from the deployment |
### Example: Deploy network with block node
```bash
cd scripts
task default
task solo:block:add
# Block node will stream block data
```
### Infrastructure Tasks
Low-level tasks for managing clusters and network infrastructure:
| Task | Description |
| --------------------------- | ---------------------------------------------------------- |
| `cluster:create` | Create a Kind (Kubernetes in Docker) cluster |
| `cluster:destroy` | Delete the Kind cluster |
| `solo:cluster:setup` | Setup cluster infrastructure and prerequisites |
| `solo:deployment:create` | Create a new deployment configuration |
| `solo:deployment:attach` | Attach an existing cluster to a deployment |
| `solo:network:deploy` | Deploy the consensus network to the cluster |
| `solo:network:destroy` | Destroy the consensus network |
> **Tip:** Unless you need custom cluster management, use the higher-level tasks like `default`, `install`, or `destroy` which orchestrate these infrastructure tasks automatically.
### Utility Tasks
Helpful tasks for inspecting and managing running networks:
| Task | Description |
| ----------------------- | ------------------------------------------------------------------------------- |
| `show:ips` | Display the external IPs of all network nodes |
| `solo:node:logs` | Retrieve logs from consensus nodes |
| `solo:freeze:restart` | Execute a freeze/restart upgrade workflow for testing version upgrades |
### Example: View network IPs and logs
```bash
cd scripts
# See which nodes are running and their IPs
task show:ips
# Retrieve node logs for debugging
task solo:node:logs
```
### Database Tasks
Deploy external databases for specialized configurations:
| Task | Description |
| ------------------------ | ------------------------------------------------------ |
| `solo:external-database` | Setup external PostgreSQL database with Helm |
## Advanced Configuration with Environment Variables
You can customize Task behavior by setting environment variables before running tasks. Common variables include:
| Variable | Description | Default |
| --- | --- | --- |
| `SOLO_NETWORK_SIZE` | Number of consensus nodes | `1` |
| `SOLO_NAMESPACE` | Kubernetes namespace | `solo-e2e` |
| `CONSENSUS_NODE_VERSION` | Consensus node version | `v0.65.1` |
| `MIRROR_NODE_VERSION` | Mirror node version | `v0.138.0` |
| `RELAY_VERSION` | JSON-RPC Relay version | `v0.70.0` |
| `EXPLORER_VERSION` | Explorer UI version | `v25.1.1` |
For a comprehensive reference of all available environment variables, see [Using Environment Variables](/docs/advanced-solo-setup/using-environment-variables/).
### Example: Deploy with custom versions
```bash
cd scripts
# Deploy with specific component versions
CONSENSUS_NODE_VERSION=v0.66.0 \
MIRROR_NODE_VERSION=v0.139.0 \
task default-with-mirror
```
## Example Projects
The Solo repository includes 14+ maintained example projects that demonstrate common Solo workflows. These examples serve as templates and starting points for custom implementations.
### Getting Started with Examples
Each example is located in the `examples/` directory and includes:
- Pre-configured `Taskfile.yml` with deployment settings.
- `init-containers-values.yaml` for customization.
- Example-specific README with detailed instructions.
**To run an example:**
```bash
cd examples/
# Deploy the example
task
# Clean up when done
task clean
```
### Available Examples
#### Network Setup Examples
- **[Address Book](https://github.com/hiero-ledger/solo/tree/main/examples/address-book)**: Use Yahcli to pull ledger and mirror node address books for querying network state
- **[Network with Domain Names](https://github.com/hiero-ledger/solo/tree/main/examples/network-with-domain-names)**: Setup a network with custom domain names for nodes instead of IP addresses
- **Network with Block Node**: Deploy a network with block node for streaming block data *(example coming soon)*
#### Configuration Examples
- **[Local Build with Custom Config](https://github.com/hiero-ledger/solo/tree/main/examples/local-build-with-custom-config)**: Deploy using a locally-built consensus node with custom configuration
- **[Consensus Node JVM Parameters](https://github.com/hiero-ledger/solo/tree/main/examples/consensus-node-jvm-parameters)**: Customize JVM parameters (memory, GC settings, etc.) for consensus nodes
#### Database Examples
- **[External Database Test](https://github.com/hiero-ledger/solo/tree/main/examples/external-database-test)**: Deploy Solo with an external PostgreSQL database instead of embedded storage
- **[Multi-Cluster Backup and Restore](https://github.com/hiero-ledger/solo/tree/main/examples/multicluster-backup-restore)**: Backup state from one cluster and restore to another using external database
#### State Management Examples
- **[State Save and Restore](https://github.com/hiero-ledger/solo/tree/main/examples/state-save-and-restore)**: Save the network state with mirror node, then restore to a new deployment
- **[Version Upgrade Test](https://github.com/hiero-ledger/solo/tree/main/examples/version-upgrade-test)**: Upgrade all network components to the current version to test compatibility
#### Node Transaction Examples
These examples demonstrate manual operations for adding, modifying, and removing nodes:
- **[Node Create Transaction](https://github.com/hiero-ledger/solo/tree/main/examples/node-create-transaction)**: Create a new node manually using the NodeCreate transaction
- **[Node Update Transaction](https://github.com/hiero-ledger/solo/tree/main/examples/node-update-transaction)**: Update an existing node configuration with NodeUpdate transaction
- **[Node Delete Transaction](https://github.com/hiero-ledger/solo/tree/main/examples/node-delete-transaction)**: Remove a node from the network with NodeDelete transaction
#### Integration Examples
- **[Hardhat with Solo](https://github.com/hiero-ledger/solo/tree/main/examples/hardhat-with-solo)**: Test smart contracts locally with Hardhat using Solo as the test network
- **[One-Shot Falcon Deployment](https://github.com/hiero-ledger/solo/tree/main/examples/one-shot-falcon)**: One-shot deployment using Falcon (consensus node implementation)
- **[One-Shot Local Build](https://github.com/hiero-ledger/solo/tree/main/examples/one-shot-local-build)**: One-shot deployment using a locally-built consensus node
#### Testing Examples
- **[Rapid-Fire](https://github.com/hiero-ledger/solo/tree/main/examples/rapid-fire)**: Rapid-fire deployment and teardown commands for stress testing the deployment workflow
- **[Running Solo Inside Cluster](https://github.com/hiero-ledger/solo/tree/main/examples/running-solo-inside-cluster)**: Deploy Solo within an existing Kubernetes cluster instead of creating a new one
## Practical Workflows
### Workflow 1: Quick Development Network with Logging
Deploy a network for development and debugging:
```bash
cd scripts
# Set logging level (PowerShell: $env:SOLO_LOG_LEVEL = 'debug')
export SOLO_LOG_LEVEL=debug
# Deploy with mirror and relay
task default-with-relay
# Retrieve logs if needed
task solo:node:logs
# View network endpoints
task show:ips
# Clean up
task clean
```
### Workflow 2: Test Configuration Changes
Iterate on network configuration using any example with a `Taskfile.yml`:
```bash
cd examples/local-build-with-custom-config
# Edit the Taskfile or init-containers-values.yaml
# Deploy with your changes
task
# Test your configuration
# Clean up and try again
task clean
```
### Workflow 3: Upgrade Network Components
Test upgrading Solo components:
```bash
cd examples/version-upgrade-test
# Deploy with current versions
task
# The example automatically tests the upgrade path
# Clean up
task clean
```
### Workflow 4: Backup and Restore Network State
Test disaster recovery and state migration:
```bash
cd examples/state-save-and-restore
# Deploy initial network with state
task
# The example includes backup/restore operations
# Clean up
task clean
```
## Troubleshooting
### Common Issues
#### Task command not found
Ensure Task is installed and on your PATH:
```bash
which task
task --version
```
#### Taskfile not found
Run Task commands from the `scripts/` directory or an `examples/` subdirectory where a Taskfile.yml exists:
```bash
cd scripts
task default
```
#### Insufficient resources
Some deployments require significant resources. Verify your Docker has at least 12 GB of memory and 6 CPU cores allocated:
```bash
docker info --format 'CPU: {{.NCPU}}, Memory: {{.MemTotal | div 1000000000}}GB'
```
#### Cluster cleanup issues
If the cluster becomes unstable, perform a full cleanup:
```bash
cd scripts
# Remove all traces
task clean
# As a last resort, manually delete the Kind cluster
kind delete cluster --name solo-e2e
```
## Next Steps
After deploying a network with Task, explore:
- **[Using the JavaScript SDK](/docs/using-solo/using-solo-with-hiero-sdks)**: Interact with your network programmatically
- **[Using Network Load Generator](/docs/using-solo/using-network-load-generator-with-solo)**: Stress test your network
- **[Environment Variables Reference](/docs/advanced-solo-setup/using-environment-variables)**: Fine-tune deployment behavior
- **[Solo CI Workflow](/docs/advanced-solo-setup/solo-ci-workflow)**: Integrate Solo deployments into CI/CD pipelines
## Additional Resources
- [Task Official Documentation](https://taskfile.dev/)
- [Solo Repository](https://github.com/hiero-ledger/solo)
- [Hiero Consensus Node](https://github.com/hiero-ledger/hiero-consensus-node)
- [Hiero Mirror Node](https://github.com/hiero-ledger/hiero-mirror-node)
- [JSON-RPC Relay](https://github.com/hiero-ledger/hiero-json-rpc-relay)
---
# Deploying a Local Consensus Node Build
URL: https://solo.hiero.org/docs/using-solo/local-builds/
Description: Test unreleased hiero-consensus-node changes end-to-end using Solo's --local-build-path flag — no Docker image rebuild or registry push required.
## Overview
Solo's `--local-build-path` flag lets you deploy a network using a consensus
node binary you compiled locally. Use this when you need to:
- Test unreleased hiero-consensus-node code against a live Solo network.
- Reproduce a bug with a specific build.
- Iterate on platform changes without a full release cycle.
Solo validates the path for the expected `apps/` and `lib/` subdirectories,
then uses `kubectl cp` to push the local binaries directly into the running
node pods — no Docker image rebuild or registry push required.
> **Scope:** This guide covers the consensus node local build workflow.
> Local build support for mirror node, block node, relay, and explorer
> requires additional engineering work and is not yet available as a
> first-class Solo feature.
---
## Prerequisites
- **Solo CLI installed** — if you have not yet deployed a network, follow the
[Quickstart](/docs/simple-solo-setup/quickstart) first.
- **hiero-consensus-node cloned locally** — see
[Step 1](#step-1-build-hiero-consensus-node).
- **Java 25 (Temurin)** — this is a hard Gradle toolchain requirement;
Java 21 will fail with a cryptic toolchain error. Install with
[SDKMAN](https://sdkman.io/):
```bash
sdk install java 25.0.2-tem
```
- **Gradle** — the repository includes the Gradle wrapper (`./gradlew`); no
separate Gradle install is needed.
---
## Step 1: Build hiero-consensus-node
Clone the repository and run `./gradlew assemble`. This compiles the consensus
node and populates `hedera-node/data/` with the runtime artifacts Solo needs:
- `hedera-node/data/lib/` — runtime dependency JARs
- `hedera-node/data/apps/HederaNode.jar` — the main consensus node binary
```bash
git clone https://github.com/hiero-ledger/hiero-consensus-node.git
cd hiero-consensus-node
./gradlew assemble
```
To build a specific release tag, use `--branch`:
```bash
git clone https://github.com/hiero-ledger/hiero-consensus-node.git \
--depth 1 --branch @
cd hiero-consensus-node
./gradlew assemble
```
> **Note:** The initial Gradle build downloads dependencies and compiles all
> modules. Expect 10–30 minutes on a first run; subsequent incremental builds
> are faster.
> **Note:** Solo copies `data/lib/` and `data/apps/` from your build path but
> skips `data/config/` and `data/keys/` — those come from the container image.
> To customise consensus node configuration, see
> [Custom Application Properties](/docs/advanced-solo-setup/network-deployments/custom-application-properties).
---
## Step 2: Deploy with your local build
Choose the path that matches your situation.
### Option A — New cluster (Falcon deploy)
Creates a fresh Kind cluster and deploys the full Solo network from scratch,
using your local build for the consensus node.
Create a values file with the `--local-build-path` flag:
```yaml
# local-build-values.yaml
setup:
--local-build-path: "/absolute/path/to/hiero-consensus-node/hedera-node/data"
```
Then deploy:
```bash
solo one-shot falcon deploy --values-file local-build-values.yaml
```
Use an absolute path — relative paths can behave unexpectedly depending on
where Solo is invoked.
For a full deployment with mirror node, explorer, and relay, add the
corresponding sections to your values file. See the
[One-Shot Falcon Deployment](/docs/advanced-solo-setup/network-deployments/falcon-deployment)
guide for the complete values file reference.
### Option B — Existing cluster (consensus node setup)
If you already have a running Solo deployment and want to swap in a new
consensus node binary without redeploying the whole network:
```bash
solo consensus node setup \
--deployment \
--local-build-path /absolute/path/to/hiero-consensus-node/hedera-node/data
```
Replace `` with your deployment name. One-shot deployments use
`one-shot` by default; You can see it with:
```bash
solo one-shot show deployment
```
---
## Step 3: Verify the local build is running
Confirm that the consensus node gRPC port is reachable:
```bash
nc -zv localhost 35211
```
**Expected output:**
```text
Connection to localhost port 35211 [tcp/*] succeeded!
```
Confirm that the pods are running your local build by inspecting the container
images:
```bash
kubectl get pods -n -o \
jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
```
Replace `` with your deployment namespace (default: `one-shot`).
The consensus node pod should reference the image tag that matches your
`--release-tag` (or the Solo built-in default if you omitted it). The key
indicator is that the node started successfully with your local `data/lib/` and
`data/apps/` artifacts copied in.
---
## Step 4: Tear down
```bash
solo one-shot falcon destroy
```
---
## Reference: ready-to-run example
The Solo repository ships a Task-based example that automates the full
workflow — cloning at the correct versions, building the consensus node,
generating an absolute-path values file, and deploying:
- [Browse on GitHub](https://github.com/hiero-ledger/solo/tree/main/examples/one-shot-local-build)
- Download from the [Solo releases page](https://github.com/hiero-ledger/solo/releases):
```text
https://github.com/hiero-ledger/solo/releases/download/@