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(NOTscc-node). - Default RPC bind:
127.0.0.1:19100(loopback only). For external access, change to0.0.0.0:19100and 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.mdops/syntarie-prover/drills/drill5-prover-rotation.mdops/syntarie-prover/round-trip.md
These are the operator-SSH labor referenced in the v1 readiness audit.