Node Setup
Running a validator means operating a full node that participates in consensus, validates transactions, and runs submission audits. This guide walks through identity generation, staking, configuration, and starting the node.
Hardware Requirements
Section titled “Hardware Requirements”Validators handle consensus, data validation, and model weight storage. Underprovisioned machines will fall behind on sync and miss proposals.
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 14 cores | 16+ cores |
| RAM | 14 GB | 32+ GB |
| Storage | 250 GB NVMe SSD | 500 GB+ NVMe SSD |
| Network | 1 Gbps | 10 Gbps |
OS: Linux (Ubuntu 22.04+ recommended).
If you haven’t installed SOMA yet, follow the installation guide.
Generate Validator Info
Section titled “Generate Validator Info”Before configuring anything, generate your validator identity. This creates the key files and metadata needed for both the node config and committee registration.
-
Run the following command, replacing
<hostname>with your machine’s public hostname and<commission_rate>with your desired rate in basis points (200= 2%):soma validator make-validator-info <hostname> <commission_rate>This creates the following files in the current directory:
File Description protocol.keyProtocol signing keypair account.keyAccount keypair network.keyNetwork communication keypair worker.keyWorker keypair validator.infoSigned validator metadata (used later with join-committee) -
Back up all key files immediately.
Start the Scoring Server
Section titled “Start the Scoring Server”Validators audit submissions by scoring data against model weights on a GPU. If the validator machine has a GPU, set scoring_device: cuda in the config and the validator handles scoring internally, no separate process needed. If the GPU lives on a different machine, run a standalone scoring server there and point the validator to it via scoring_url.
GPU requirements
Section titled “GPU requirements”Scoring loads full model weights into GPU memory. You need a dedicated GPU with at least 24 GB of VRAM (e.g. RTX 3090, RTX 4090, A10G, L4, A100).
Remote scoring server (optional)
Section titled “Remote scoring server (optional)”If the GPU is on a separate machine from the validator, start a standalone scoring server on that machine:
soma start scoring --device cudaThis binds to 0.0.0.0:9124 by default. Common options:
soma start scoring --device cuda --port 9124 --data-dir /data/scoringMake sure port 9124 is reachable from the validator host. You’ll point the validator to it via scoring_url in the config below.
Configure the Node
Section titled “Configure the Node”A validator node is started from a YAML config file that tells it where to find keys, genesis state, and data directories.
-
Download the genesis blob for the network you’re joining. For testnet:
curl -fsSL -o genesis.blob https://github.com/soma-org/genesis/raw/refs/heads/main/testnet/genesis.blob -
Create your
validator.yamlreferencing the key files from the generate step, the genesis blob, and your node’s addresses. Here is a minimal example. Replacevalidator.example.comwith your hostname and adjust paths as needed:# Keys (from make-validator-info)protocol_key_pair:path: ./protocol.keyworker_key_pair:path: ./worker.keyaccount_key_pair:path: ./account.keynetwork_key_pair:path: ./network.key# Genesisgenesis:genesis-file-location: ./genesis.blob# Data directories (persistent storage)db_path: /data/authorities_dbconsensus_db_path: /data/consensus_db# Network addressesnetwork_address: "/dns/validator.example.com/tcp/8080/http"consensus_config:address: "/dns/validator.example.com/tcp/8081/http"db-path: /data/consensus_dbp2p_config:listen_address: "0.0.0.0:8084"external_address: "/dns/validator.example.com/tcp/8084/http"seed_peers:- address: "/dns/validator-0.testnet.soma.org/tcp/8084/http"rpc_address: "0.0.0.0:9000"# Scoring - GPU on this machine:scoring_device: cuda# Or, point to a remote scoring server instead:# scoring_url: "http://gpu-host:9124"authority_store_pruning_config:num-latest-epoch-dbs-to-retain: 3epoch-db-pruning-period-secs: 3600num-epochs-to-retain: 0end_of_epoch_broadcast_channel_capacity: 128
Start the Node
Section titled “Start the Node”-
Start the validator process with your config file:
RUST_LOG=info soma start validator --config validator.yaml -
Look for increasing checkpoint height. This means your node is syncing with the network.
-
Wait for the node to fully sync before proceeding to join the network. A partially synced validator will miss proposals and may be penalized.
Troubleshooting
Section titled “Troubleshooting”Common startup issues
- Port conflict: another process is using a required port. Check with
lsof -i :8080(or the relevant port) and stop the conflicting process or reconfigure. - Disk space low: monitor with
df -hand plan for expansion. Running out mid-sync corrupts state. - Checkpoint height stops advancing: check your network connection and firewall rules. Ensure consensus and P2P ports are reachable. Restarting usually resolves transient stalls.
- OOM killed: check
dmesg | tailfor OOM messages. Ensure at least 14 GB RAM is available.