Skip to main content
This guide will help you quickly set up and run an SSV Node. For detailed configuration options, see the Configuration Reference.

Before You Begin

Ensure you have:
  • Completed the installation
  • Access to an Ethereum Beacon node
  • Access to an Ethereum Execution node (ETH1)

Quick Setup

1

Generate operator keys

First, generate your operator private key. This uniquely identifies your operator node.
./bin/ssvnode generate-operator-keys
Production Use: Always use the encrypted format with --password-file for production. The raw format can expose sensitive data.
The command will generate:
  • encrypted_private_key.json (keystore file)
  • Operator public key (displayed in terminal)
2

Create configuration file

Copy the example configuration and customize it:
cp config/config.example.yaml config/config.yaml
Edit config/config.yaml with your settings:
global:
  LogLevel: info
  LogFilePath: ./data/debug.log

db:
  Path: ./data/db

ssv:
  Network: mainnet  # or holesky for testnet

eth2:
  BeaconNodeAddr: http://your-beacon-node:5052

eth1:
  ETH1Addr: ws://your-eth1-node:8546/ws

# Add your operator private key (Option 1: Encrypted keystore)
KeyStore:
  PrivateKeyFile: ./encrypted_private_key.json
  PasswordFile: ./password.txt

# Enable metrics
MetricsAPIPort: 15000
3

Start your node

Run the SSV Node:
./bin/ssvnode start-node --config ./config/config.yaml
Your node will start syncing with the network!
4

Verify node is running

Check node logs to confirm it’s running correctly:
# Logs are written to ./data/debug.log
tail -f ./data/debug.log
You should see log entries indicating:
  • Connection to beacon node
  • Connection to execution node
  • P2P network discovery
  • Event synchronization

Network Ports

Ensure the following ports are accessible:
PortProtocolPurposeRequired
13000TCPP2P communicationYes
12000UDPP2P discoveryYes
15000TCPMetrics APIOptional
16000TCPSSV APIOptional
Configure your firewall to allow incoming connections on TCP 13000 and UDP 12000.

Monitoring Your Node

The metrics API provides Prometheus-compatible metrics at http://localhost:15000/metricsView metrics with:
curl http://localhost:15000/metrics
Key metrics to monitor:
  • ssv_validator_status - Validator status
  • ssv_beacon_status - Beacon node connectivity
  • ssv_p2p_peers - Connected peers

Register Your Operator

After your node is running, register it on the SSV Network:
1

Visit SSV Network Web App

Go to app.ssv.network and connect your wallet.
2

Register as operator

Navigate to “Join as Operator” and submit your operator public key generated in Step 1.
3

Set operator fee

Configure your annual operator fee (in SSV tokens).

Running a Local Test Network

For development and testing, run a local 4-node network:
1

Prepare local configuration

# Generate configuration for 4 local operators
./scripts/generate_local_config.sh 4 \
  ./keystore.json \
  "keystore-password" \
  0x1234567890123456789012345678901234567890 \
  0
2

Move config files

mv share*.yaml events.yaml ./config/
3

Update config for local network

Add to config/config.yaml:
LocalEventsPath: ./config/events.yaml
p2p:
  Discovery: mdns
4

Start local network

make docker-all
This starts 4 SSV nodes that communicate via mDNS discovery.

Common Commands

Useful commands for managing your node:
CommandDescription
./bin/ssvnode versionDisplay version information
./bin/ssvnode start-node --config <path>Start the node
./bin/ssvnode generate-operator-keysGenerate operator keys
make docker-allRun local 4-node network
make docker-debugRun local network with debugging

Next Steps

Configuration Reference

Explore all configuration options

Operator Guide

Learn about operator responsibilities

Key Management

Secure your operator keys

Monitoring

Set up comprehensive monitoring

Troubleshooting

Verify your beacon node is running and accessible:
curl http://your-beacon-node:5052/eth/v1/node/health
Check that the BeaconNodeAddr in your config is correct.
Ensure ports 13000 (TCP) and 12000 (UDP) are open in your firewall:
# Check if ports are listening
netstat -tulpn | grep -E '12000|13000'
Verify your HostAddress is set correctly if behind NAT.
Ensure your password file contains the correct password without extra whitespace:
cat password.txt | tr -d '\n\r' > password_clean.txt
mv password_clean.txt password.txt
If the database is corrupted, you may need to resync:
# Backup and remove database
mv ./data/db ./data/db.backup

# Restart node to resync
./bin/ssvnode start-node --config ./config/config.yaml

Additional Resources

Build docs developers (and LLMs) love