Sunima Chain · Testnet · chain-id: sunima_8081-2

Running a
Sunima Chain Validator

This guide walks you through setting up a full validator node on the Sunima Chain testnet — a sovereign Cosmos SDK + CometBFT chain. Validators propose and sign blocks, earn staking rewards, and form the decentralised foundation of the network.

Open testnet — one command. The validator set is open. A single installer downloads the binary, installs genesis and the confidential-layer artifacts, requests a starter stake from the on-chain faucet, and bonds your validator — automatically. No application, no waiting. The detailed manual steps below are for operators who prefer to configure each step by hand.
curl -fsSL https://sunima.uk/install/operator.sh | ROLE=cpu bash
Already running a node? Run this once. It installs the helper scripts that switch your node at upgrade heights (upgrade switch, signed-binary stager, start wrapper) and keeps them current: a timer checks the signed kit every 6 hours. It never restarts your node.
curl -fsSL https://sunima.uk/install/kit-update.sh | sudo bash -s -- --install

1. What your node does

A Sunima Chain validator node runs the full Cosmos SDK application state machine and the CometBFT consensus engine. It:

  • Receives and validates transactions from the mempool
  • Participates in BFT consensus rounds — proposing and pre-voting blocks
  • Signs committed blocks with its consensus key (ed25519)
  • Earns staking rewards proportional to bonded stake

A BFT chain needs at least four validators to tolerate one Byzantine fault. With a healthy multi-validator set the chain keeps producing blocks even if some validators go offline.

BFT
Byzantine Fault Tolerance
CometBFT consensus guarantees finality in one block. The chain continues as long as ⅔+ of bonded stake is online.
Sign
Staking & Rewards
Bond stake tokens to become an active validator. Rewards are distributed per block proportional to bonded stake.
SDK
Cosmos SDK
Built on Cosmos SDK v0.50 + CometBFT — battle-tested stack powering Cosmos Hub, Osmosis, and many sovereign chains.
L1
Sovereign Chain
Sunima Chain is a standalone L1 — no bridges, no rollup dependencies. Validators own the full execution environment.

2. System requirements

Sunima has three node tiers. Each plays a different role and has different hardware needs.

Tier 1 — Validator

Participates in BFT consensus. Proposes and signs blocks (ed25519 — pure CPU work, no GPU needed). Runs the CURARE rule-based runtime sensor alongside the chain daemon. This is the role that secures the network.

ComponentMinimumRecommended
OSUbuntu 22.04 LTS x86-64Ubuntu 24.04 LTS x86-64
CPU16 cores24+ cores
RAM32 GB64+ GB
Disk1 TB NVMe SSD2 TB NVMe SSD
Network100 Mbit, static public IP, outbound TCP 266561 Gbit, dedicated
GPUNot required
Reference classDedicated-CPU VPS (~€45/mo)Dedicated-CPU or bare-metal (~€60-90/mo)
Personal devices (laptop, desktop) are not recommended for production validators once mainnet launches. The hardware figures above are preliminary mainnet targets — today only the testnet is live. Intermittent connectivity, NAT issues, and disk wear make personal devices unreliable for 24/7 operation, so use a dedicated server. Personal devices are fine for testnet experimentation or as Tier 3 (RPC / full node) operators.

Tier 2 — GPU Worker (intake closed)

Performs encrypted computation off-chain and signs attestations. Not part of consensus. These workers are protocol-operated and are not currently a paid role: the gas-fee split pays burn, the validator set, and the protocol treasury — it has no compute channel, so accelerator hardware earns no fee income on this network. We are not asking anyone to buy a card against revenue that does not exist, so this tier is not open for applications. Tier 1 below is open and needs no GPU.

Tier 3 — RPC / Full Node

Serves API requests (read-only queries: balances, history, staking info). Keeps a full copy of chain history. Not a validator — does not participate in consensus, does not sign blocks, no stake required. Useful for integrators (wallets, exchanges, block explorers) and the wider community.

ComponentMinimumRecommended
OSUbuntu 22.04 LTS x86-64 / arm64, macOS (Apple Silicon), Windows WSL2Ubuntu 24.04 LTS
CPU8 cores12+ cores
RAM16 GB32 GB
Disk500 GB SSD1 TB NVMe SSD (chain history grows ~1 GB/day at 1M users)
Network100 Mbit1 Gbit
GPUNot required

Tier comparison: Tier 1 (Validator) is the only tier with stake, slashing, and staking rewards — and the only tier the gas-fee split pays. Tier 2 (GPU Worker) is protocol-operated and earns nothing from fees; intake is closed. Tier 3 (RPC) operates on volunteer or service-provider basis (no native rewards). On testnet all tokens are non-transferable test tokens with no monetary value.

3. Downloads

The installer above does all of this for you. The steps below are for a manual setup.

PlatformBinarySHA-256
Linux x86-64sunimad-linux-amd64.sha256
macOS Apple Silicon (M1/M2/M3/M4)sunimad-darwin-arm64.sha256
WindowsUse WSL2 and the Linux x86-64 binary
curl -LO https://sunima.uk/chain/sunimad-linux-amd64
curl -LO https://sunima.uk/chain/sunimad-linux-amd64.sha256
sha256sum -c sunimad-linux-amd64.sha256
curl -LO https://sunima.uk/chain/genesis.json

The binary links the privacy-core library libkzg_ffi.so (macOS: libkzg_ffi.dylib). Put it in /usr/local/lib and run ldconfig.

Signed releases

Every network upgrade ships as a signed release: https://sunima.uk/chain/upgrades/<name>/manifest.json lists the sha256 of each file, and manifest.json.sig is its Ed25519 signature by the Sunima release key:

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAhiLCLBA8nfNEqO/ui0d+avp8TrtyN8fCYg5vOkP6JJQ=
-----END PUBLIC KEY-----
# save the key above as release.pub.pem, then (OpenSSL 3):
openssl pkeyutl -verify -pubin -inkey release.pub.pem -rawin \
  -in manifest.json -sigfile manifest.json.sig

4. Initialise

Replace my-validator with your preferred moniker (display name).

chmod +x sunimad-linux-amd64 && mv sunimad-linux-amd64 sunimad
./sunimad init my-validator --chain-id sunima_8081-2
cp genesis.json ~/.sunima/config/genesis.json
Default home directory is ~/.sunima/ — not ~/.sunimad/.

5. Configure

Peer — ~/.sunima/config/config.toml

SEED="[email protected]:26656"
sed -i "s|^persistent_peers = .*|persistent_peers = \"$SEED\"|" ~/.sunima/config/config.toml

The current peer list is always at /install/peers.txt.

State sync

A new node joins from a recent snapshot, not from genesis (replaying from block 1 is not supported):

RPC=https://sunima.uk/chain-rpc
H=$(curl -s $RPC/block | python3 -c "import json,sys;print(int(json.load(sys.stdin)['result']['block']['header']['height'])//1000*1000-2000)")
HASH=$(curl -s "$RPC/block?height=$H" | python3 -c "import json,sys;print(json.load(sys.stdin)['result']['block_id']['hash'])")
C=~/.sunima/config/config.toml
sed -i "/^\[statesync\]/,/^\[/ s|^enable = .*|enable = true|" $C
sed -i "s|^rpc_servers = .*|rpc_servers = \"https://sunima.uk:443/chain-rpc/,https://sunima.uk:443/chain-rpc/\"|" $C
sed -i "s|^trust_height = .*|trust_height = $H|; s|^trust_hash = .*|trust_hash = \"$HASH\"|" $C
Behind a home NAT? Open (or forward) TCP 26656 so other nodes can reach you; outbound 26656 is enough to sync.

6. Start the node

Run it under Cosmovisor:

export DAEMON_NAME=sunimad DAEMON_HOME=~/.sunima
export DAEMON_ALLOW_DOWNLOAD_BINARIES=false UNSAFE_SKIP_BACKUP=true
cosmovisor init ./sunimad
cosmovisor run start --minimum-gas-prices=1000000000asuna

Cosmovisor on its own does not switch Sunima nodes at an upgrade height (it cannot read the node's height through the binary's startup warning). The switch is done by sunima-upgrade-switch: when the node halts at the upgrade height it checks the staged binary against the signed release manifest, points cosmovisor/current at it and restarts the node. The installer sets it up, together with a 10-minute timer that stages each scheduled upgrade into ~/.sunima/cosmovisor/upgrades/<name>/bin/sunimad ahead of time. On a node set up by hand, or by an older installer, run once:

curl -fsSL https://sunima.uk/install/kit-update.sh | sudo bash -s -- --install
double_sign_check_height. The start wrapper the kit installs (sunima-node-run) passes --consensus.double_sign_check_height=0 only for the restart at an upgrade halt. Without it, a value above 0 in config.toml makes the node refuse to sign while the chain waits.

Wait until catching_up is false before you bond:

curl -s http://localhost:26657/status | python3 -m json.tool | grep -E "latest_block_height|catching_up"

7. Become a validator

The installer script handles the entire validator lifecycle automatically: it downloads the binary and native library, installs genesis and the confidential-layer artifacts, seeds peers, creates your account key, requests a starter stake from the on-chain faucet, registers the operator, submits create-validator, and starts the node in the background.

curl -fsSL https://sunima.uk/install/operator.sh | ROLE=cpu bash

The script prints your sunima1… address and a 24-word mnemonic when done.

Save your mnemonic. The key creation step prints a 24-word mnemonic. Write it down — it cannot be recovered from the server.

7a. Starter stake — automatic

The installer requests your starter stake from the on-chain faucet automatically and waits for it to confirm before bonding. No manual request is needed. The faucet is rate-limited per network address.

7b. Manual create-validator (advanced)

The installer already submits this for you. If you configured the node by hand and want to bond manually, run (replace my-key with the key name you chose):

./sunimad tx staking create-validator validator.json \
  --from=my-key \
  --keyring-backend=test \
  --chain-id=sunima_8081-2 \
  --node=http://localhost:26657 \
  --gas=300000 \
  --gas-prices=2000000000asuna \
  --yes
Use the consensus key (ed25519). The installer generates validator.json automatically with the correct key type. If you edit it manually, use ./sunimad comet show-validator — not keys show.

After one block your validator appears on the Network page with status Bonded.

8. Monitoring

Check your node's sync status and peer count via the local RPC:

# Sync status
curl -s http://localhost:26657/status | python3 -m json.tool | grep -E "latest_block_height|catching_up"

# Peer count
curl -s http://localhost:26657/net_info | python3 -m json.tool | grep n_peers

The live network dashboard shows all bonded validators, block height, and stake in real time:

sunima.uk/network →

9. Troubleshooting

ErrorCauseFix
Node stops at the upgrade height and stays there (UPGRADE "…" NEEDED in the log)Upgrade switch not installed — cosmovisor alone does not switchRun curl -fsSL https://sunima.uk/install/kit-update.sh | sudo bash -s -- --install. It switches the halted node within seconds. By hand: systemctl stop sunima-node; ln -sfn upgrades/<name> ~/.sunima/cosmovisor/current; systemctl start sunima-node
failed to initialize database: resource temporarily unavailable Another sunimad process is already running and holds the DB lock Run sudo pkill -f sunimad, delete any stale lock files with find ~/.sunima/data -name LOCK -delete, then restart
auth failure: secret conn failed Connecting from the same external IP as another validator (NAT) Add allow_duplicate_ip = true under [p2p] in the seed node's config.toml and restart it
validator pubkey type is not supported Used the account key (secp256k1) instead of the consensus key (ed25519) in validator.json Replace pubkey with the output of ./sunimad comet show-validator
persistent_peers not connecting (timeout) Port 26656 blocked by firewall Allow outbound TCP 26656 in your firewall / router. On Linux: ufw allow 26656/tcp
genesis.json path error on curl Wrong home directory path (~/.sunimad vs ~/.sunima) The home directory is ~/.sunima/ (no trailing 'd'). Use ~/.sunima/config/genesis.json
Still stuck? Open an issue at github.com/sunima-labs/sunima-evm or reach out via the community Discord.