Phase 2 — Node access opening soon (Mainnet Beta)

01 // Overview

This document describes how to prepare for, install, and operate a SHH Ghost Node once public node access is enabled in Phase 2 (Mainnet Beta). Ghost Nodes act as Zero-Knowledge Validators, mixing liquidity and validating proofs without seeing underlying transaction data.

The commands below are designed to be technically realistic and follow common patterns used by production blockchain clients (Docker + systemd). Exact binaries, image names, and endpoint URLs may change and will be announced before Phase 2 launch.

02 // Minimum requirements

Hardware

Operating system

We recommend a minimal Linux distribution:

Dependencies

03 // Installation

When public binaries are released, a one-line installer will be available. Until then, the commands below describe the expected flow.

1. Create a dedicated user

sudo adduser --system --group --home /var/lib/shh shh
sudo mkdir -p /var/lib/shh
sudo chown -R shh:shh /var/lib/shh

2. Install Docker (if not already installed)

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker shh
newgrp docker

3. Fetch the SHH node image (placeholder)

The final image name will be announced. For now, we assume the canonical registry registry.shh.network/shh-node:

docker pull registry.shh.network/shh-node:latest

04 // Configuration

1. Generate node keys

Each Ghost Node needs a long‑lived identity keypair and an operator wallet.

sudo -u shh mkdir -p /var/lib/shh/keys
cd /var/lib/shh/keys

# Node identity key (example using openssl)
openssl genpkey -algorithm ed25519 -out node_identity.key
openssl pkey -in node_identity.key -pubout -out node_identity.pub

Operator wallet creation will depend on the target L1 (e.g., Ethereum). As a placeholder, we assume you will connect an existing wallet via the web dashboard and get an operator token:

# Placeholder: this token will be issued by the SHH web dashboard
echo "SHH_OPERATOR_TOKEN=replace-with-real-token" > /var/lib/shh/operator.env

2. Create a configuration file

sudo -u shh cat > /var/lib/shh/config.toml << 'EOF'
[node]
id_key_path = "/var/lib/shh/keys/node_identity.key"
data_dir    = "/var/lib/shh/data"
network     = "mainnet-beta"   # or "testnet" when available

[p2p]
listen_addr   = "0.0.0.0:31000"
max_peers     = 128

[rpc]
listen_addr   = "127.0.0.1:8547"
metrics_addr  = "127.0.0.1:9101"

[operator]
token_env_var = "SHH_OPERATOR_TOKEN"
rewards_addr  = "REPLACE_WITH_OPERATOR_WALLET"
EOF

05 // Running the node

Option A: Docker Compose (recommended)

Create a small docker-compose.yml in /var/lib/shh:

cd /var/lib/shh
sudo -u shh cat > docker-compose.yml << 'EOF'
services:
  ghost-node:
    image: registry.shh.network/shh-node:latest
    restart: unless-stopped
    user: "1000:1000"          # replace with output of: id -u shh ; id -g shh
    env_file:
      - /var/lib/shh/operator.env
    volumes:
      - /var/lib/shh/config.toml:/app/config.toml:ro
      - /var/lib/shh/data:/app/data
      - /var/lib/shh/keys:/app/keys:ro
    network_mode: "host"
EOF

Then start the service:

cd /var/lib/shh
docker compose up -d

Option B: systemd service (advanced)

You can also manage the node via systemd for better integration with your OS:

sudo tee /etc/systemd/system/shh-node.service > /dev/null << 'EOF'
[Unit]
Description=SHH Ghost Node
After=network-online.target docker.service
Wants=network-online.target

[Service]
User=shh
Group=shh
Restart=always
RestartSec=5
EnvironmentFile=/var/lib/shh/operator.env
ExecStart=/usr/bin/docker run --rm \\
  --name shh-node \\
  --network host \\
  -v /var/lib/shh/config.toml:/app/config.toml:ro \\
  -v /var/lib/shh/data:/app/data \\
  -v /var/lib/shh/keys:/app/keys:ro \\
  registry.shh.network/shh-node:latest

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now shh-node

06 // Monitoring, logs & updates

Logs

If you are running via Docker Compose:

cd /var/lib/shh
docker compose logs -f ghost-node

Via systemd:

sudo journalctl -u shh-node -f

Health & metrics

By default the node exposes:

Upgrading

To upgrade to the latest image while using Docker Compose:

cd /var/lib/shh
docker compose pull
docker compose up -d
Important: All endpoints, image names, and network identifiers in this document are placeholders until Phase 2 (Mainnet Beta) launch. Currently, SHH is in Phase 1 (Testnet) with limited node access. Before operating a production Ghost Node, always verify values against the official SHH documentation and announcements.