Operator quickstart

Run a Syntarie node yourself. Two paths: a local single-node devnet (5 minutes), or a real validator on a Debian 13 VPS (more involved).

Local devnet (5 minutes)

You need: Rust toolchain, ~13 GB RAM, ~5 GB disk.

# 1. Build the node
cargo build --release -p interface --bin scc-node

# 2. Run a single-node devnet
./target/release/scc-node --dev

# 3. Ask the node whether IT thinks it's ready
curl -s http://127.0.0.1:9944/status | jq
curl -s http://127.0.0.1:9944/production/readiness | jq

/production/readiness returns per-subsystem pass/fail plus a single go_no_go.

Multi-node devnet

For local 3-node testing (no internet required):

./scripts/devnet_3nodes.sh

Spawns 3 validators on localhost ports, configured with the same chain seed. Useful for testing PoA rotation and multi-node consensus locally.

Real validator (Debian 13 VPS)

This path is for someone who wants to run their own validator against the public testnet OR start a private consortium chain. Requires real infrastructure.

Provision

A target server should have:

  • Debian 13 (Trixie) x86_64
  • ≥4 GB RAM (8 GB recommended for sustained PoA)
  • ≥40 GB disk
  • Public IPv4
# On the target server:
ssh root@<server> 'bash -s' < ops/deploy/scripts/provision-node.sh

This installs build deps, Rust toolchain, creates the syntarie user, sets up ufw firewall (allows SSH + P2P), and adds 4 GB swap.

Deploy + run

From your operator laptop:

ops/deploy/scripts/deploy-node.sh <ssh-alias> [seed-peer-addr]

This rsyncs the source, builds the static-linked binary on the server, installs to /usr/local/bin/scc-node, writes /etc/default/syntarie-node with starter env vars, installs the systemd unit, and starts the service.

You must edit /etc/default/syntarie-node to set PRODUCERS= (the comma-separated list of validator pubkeys) before the service can produce blocks. Use scc-node keygen /etc/syntarie/node.key on each validator first to generate a key, then collect the pubkeys via scc-node key-address /etc/syntarie/node.key.

Configure faucet (optional)

If this node should serve the public faucet endpoint:

ops/deploy/scripts/configure-faucet.sh <ssh-alias> <local-faucet-key-path>

The script verifies the key derives to FAUCET_ADDRESS, installs it at /etc/syntarie/faucet.key, sets the systemd unit's --faucet-key-path arg, and smoke-tests the /faucet endpoint.

Static-linked binary for cloud deploy

If the cloud OS has a different librocksdb version than your local dev machine, build a static-linked binary:

ops/deploy/scripts/build-for-cloud.sh

The script temporarily removes the ROCKSDB_LIB_DIR line from .cargo/config.toml and sets ROCKSDB_STATIC=1 for a vendored static rocksdb compile. ~6–8 minutes from cold.

Operating notes

  • systemd unit name: syntarie-node (NOT scc-node).
  • Default RPC bind: 127.0.0.1:19100 (loopback only). For external access, change to 0.0.0.0:19100 and open ufw.
  • Logs: journalctl -u syntarie-node -f
  • Health: curl localhost:19100/status + curl localhost:19100/production/readiness
  • Restart: systemctl restart syntarie-node. Chain state on disk persists; node re-syncs from peers.

Bridge runbooks

For Base mainnet bridge operations (drill 1/3/4/5, prover key rotation, withdrawal proof generation), see:

  • docs/operators/bridge-launch-runbook.md (in source repo)
  • ops/syntarie-prover/drills/drill1-over-cap.md
  • ops/syntarie-prover/drills/drill5-prover-rotation.md
  • ops/syntarie-prover/round-trip.md

These are the operator-SSH labor referenced in the v1 readiness audit.