Skip to content

Solana

Solana is a high-performance blockchain platform known for its exceptional throughput and fast block times. It uses a unique Proof of History (PoH) mechanism combined with Proof of Stake (PoS) to achieve high throughput. Running a Solana node allows you to participate in network validation, build decentralized applications, or provide RPC services.


ComponentDescription
Proof of History (PoH)A cryptographic clock (continuous SHA-256 hash chain) that creates a verifiable historical record of events, allowing nodes to agree on the order of transactions without global synchronization
Proof of Stake (PoS)Tower BFT consensus where validators stake SOL tokens to participate in block production
FeatureValueDescription
Block Time~0.4 secondsExtremely fast block cadence (one slot every 400ms)
Finality~2 epochs (~4-8 seconds)Optimistic confirmations are faster; “finalized” is later
Transaction ThroughputThousands of TPSHigh throughput via parallel execution and PoH ordering
TokenSOLNative cryptocurrency
┌─────────────────────────────────────────────────────────────┐
│ SOLANA NETWORK │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Validator │◄──►│ Validator │◄──►│ Validator │ │
│ │ (Leader) │ │ │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Proof of History (PoH) │ │
│ │ (Cryptographic Clock / Event Log) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ RPC Node │ │ RPC Node │ │ RPC Node │ │
│ │ (API) │ │ (API) │ │ (API) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Solana’s high performance requires substantial hardware:

ComponentMinimumRecommendedNotes
CPU16 cores32+ coresHigh single-thread performance preferred
RAM128 GB256 GBValidator operations are memory-intensive
Storage1 TB NVMe2 TB NVMeSSD must support high IOPS
Network1 Gbps10 GbpsHigh bandwidth for block propagation
ComponentMinimumRecommended
CPU8 cores16+ cores
RAM64 GB128 GB
Storage500 GB NVMe1 TB NVMe
Network500 Mbps1 Gbps
  • Single-thread performance matters more than core count.
  • NVMe SSD is mandatory — SATA SSDs cannot handle Solana’s IOPS requirements.
  • ECC RAM strongly recommended for validators.

Section titled “Method 1: Official Installer (Recommended)”
Terminal window
# Install the latest stable release
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# The installer prints a PATH export — add it to ~/.bashrc / ~/.zshrc
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# Verify
solana --version
Terminal window
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Install dependencies
sudo apt-get update
sudo apt-get install -y \
build-essential pkg-config libssl-dev libudev-dev protobuf-compiler
# Clone and build a release tag
git clone https://github.com/anza-xyz/agave.git # Solana validator client ("Agave")
cd agave
cargo build --release

Note: the validator client repository is maintained by Anza as Agave (formerly solana-labs/solana). Production validators should use an official Agave release binary rather than a source build.

Terminal window
docker pull solanalabs/solana:stable
docker run -d \
--name solana-validator \
--restart unless-stopped \
-p 8000-8020:8000-8020/tcp \
-p 8000-8020:8000-8020/udp \
-p 8899:8899 \
-p 8900:8900 \
-v solana-data:/root/.solana \
solanalabs/solana:stable \
solana-validator \
--identity /root/.solana/validator-identity.json \
--vote-account /root/.solana/vote-account.json \
--rpc-port 8899 \
--entrypoint entrypoint.mainnet-beta.solana.com:8001

Terminal window
# Generate validator identity keypair (protect this file!)
solana-keygen new -o ~/validator-identity.json
# Verify
solana-keygen verify ~/validator-identity.json
# Generate vote account keypair (no SOL inside; vote accounts are funded by the identity)
solana-keygen new -o ~/vote-account.json

solana-validator --config FILE reads one CLI flag per line:

~/validator-config
#
--identity /home/ubuntu/validator-identity.json
--vote-account /home/ubuntu/vote-account.json
--rpc-port 8899
--dynamic-port-range 8000-8020
--entrypoint entrypoint.mainnet-beta.solana.com:8001
--limit-ledger-size 50000000
--log /home/ubuntu/solana-validator.log
Terminal window
solana-validator --config ~/validator-config
# Or with command-line arguments:
solana-validator \
--identity ~/validator-identity.json \
--vote-account ~/vote-account.json \
--rpc-port 8899 \
--dynamic-port-range 8000-8020 \
--entrypoint entrypoint.mainnet-beta.solana.com:8001 \
--limit-ledger-size 50000000 \
--log ~/solana-validator.log

—known-validator: pass one or more --known-validator <PUBKEY> flags for known, trusted boot nodes (fetch the current list from the official Solana validator docs). These guard against cluster spoofing during first sync. Never use somebody else’s keypair listing blindly.


An RPC node is a validator binary run without voting:

Terminal window
solana-validator \
--identity ~/rpc-identity.json \
--no-voting \
--rpc-port 8899 \
--dynamic-port-range 8000-8020 \
--entrypoint entrypoint.mainnet-beta.solana.com:8001 \
--known-validator <KNOWN_VALIDATOR_PUBKEY> \
--limit-ledger-size 50000000 \
--log ~/solana-rpc.log

Useful RPC tuning flags:

FlagPurpose
--no-votingDo not vote — required for RPC nodes
--full-rpc-apiEnable the complete RPC API (not just a subset)
--private-rpcOnly accept RPC requests from localhost / private network
--no-port-checkSkip TCP/UDP port checks at startup
--limit-ledger-size <SHREDS>Keep only the latest ledger data (e.g., 50000000 ≈ 40+ GB)
--no-limit-ledger-sizeKeep full history (archive-style)
--account-index <PROGRAM_ID/SPL_TOKENS>Index accounts for getProgramAccounts performance
PortProtocolPurpose
8001TCP/UDPGossip (P2P discovery)
8003-8010TCP/UDPTPU (transaction processing unit) — within the dynamic range
8899TCPJSON-RPC
8900TCPWebSocket (subscriptions)
Terminal window
# Health check — returns "ok" when the node is healthy and caught up
curl -s http://localhost:8899/health
# Get current slot
curl -X POST http://localhost:8899 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
# Get cluster nodes
curl -X POST http://localhost:8899 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getClusterNodes"}'
# Check sync status
curl -X POST http://localhost:8899 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'

RequirementValue
Vote account rentA small amount of SOL (rent-exempt)
StakeEnough SOL delegated from --staked SOL to enter the leader schedule; ~10,000 SOL is a common reference target, but the exact bar changes with network conditions

The --vote-account pubkey must be funded by the identity and have stake delegated to it before the validator can earn rewards:

Terminal window
# Create a stake account (an amount below, e.g., 10000 SOL)
solana create-stake-account ~/stake-account.json 10000 SOL \
--from ~/validator-identity.json
# Delegate to your vote account
solana delegate-stake ~/stake-account.json ~/vote-account.json \
--from ~/validator-identity.json
# Check your validator in the cluster
solana validators

Terminal window
# Show your validator's slot production over the last epoch
solana validators --output json | jq '...' # find your identity
# Check gossip connectivity
solana gossip
# Look up a specific account balance
solana balance ~/validator-identity.json

Solana does not ship a first-party Prometheus exporter. The official metrics pipeline sends metrics to an InfluxDB-compatible endpoint (SOLANA_METRICS_CONFIG env var). For Prometheus users, common approaches:

  1. Solana’s InfluxDB pipeline (official): set SOLANA_METRICS_CONFIG to point at your own Telegraf/InfluxDB and build dashboards from those series.
  2. Community exporters (e.g., Jito’s solana-prometheus-exporter) that scrape the JSON-RPC and export getHealth, getSlot, getVoteAccounts, getClusterNodes results as Prometheus metrics.
  3. RPC-derived checks are the simplest reliable signal:
Terminal window
# Alert if health check fails or slot stops advancing
watch -n 5 curl -s http://localhost:8899/health
SignalWhy it matters
Slot advancingNode is keeping up with the cluster
Vote count / skip rateValidator participating and producing on schedule
Memory + diskOOM or full disk kills validators (hardware is the #1 cause of missed slots)
Gossip presenceNode visible in solana gossip

Terminal window
sudo fallocate -l 64G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Terminal window
# The ledger-tool is a separate binary shipped with the suite:
solana-ledger-tool verify --ledger ~/ledger
# If corrupted, stop the node and wipe the ledger, then restart
solana-ledger-tool delete-slot 0 --ledger ~/ledger # targeted repair
# (or remove ~/ledger entirely and re-sync)
Terminal window
sudo ufw status
sudo ufw allow 8000:8020/udp
sudo ufw allow 8000:8020/tcp
sudo ufw allow 8899/tcp
sudo ufw allow 8900/tcp
# Spy on gossip to verify connectivity to the cluster
solana-gossip spy --entrypoint entrypoint.mainnet-beta.solana.com:8001
Terminal window
tail -f ~/solana-validator.log
grep -i error ~/solana-validator.log
grep "skipped slot" ~/solana-validator.log

  • Keep the identity keypair offline where possible; chmod 600 any file-based keypair.
  • Use a separate keypair for the vote account and for RPC (RPC identity does not need staking privileges).
Terminal window
# Allow P2P, restrict RPC to trusted IPs
sudo ufw allow 8000:8020/udp
sudo ufw allow 8000:8020/tcp
sudo ufw allow from YOUR_IP to any port 8899/tcp
sudo ufw allow from YOUR_IP to any port 8900/tcp
sudo ufw allow 22/tcp
[Unit]
Description=Solana Validator
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/home/ubuntu/.local/share/solana/install/active_release/bin/solana-validator --config /home/ubuntu/validator-config
Restart=always
RestartSec=10
StandardOutput=append:/home/ubuntu/solana-validator.log
StandardError=append:/home/ubuntu/solana-validator.log
[Install]
WantedBy=multi-user.target
Terminal window
sudo systemctl daemon-reload
sudo systemctl enable solana-validator
sudo systemctl start solana-validator
systemctl status solana-validator

Terminal window
# Testnet
solana-validator \
--identity ~/validator-identity.json \
--vote-account ~/vote-account.json \
--rpc-port 8899 \
--entrypoint entrypoint.testnet.solana.com:8001 \
--testnet
# Devnet
solana-validator \
--identity ~/validator-identity.json \
--rpc-port 8899 \
--entrypoint entrypoint.devnet.solana.com:8001 \
--devnet

  • Solana uses Proof of History (PoH) ranked over Tower BFT, with ~0.4s slots.
  • Hardware requirements are demanding: fast single-thread CPU, 128 GB+ RAM, NVMe SSD.
  • Validators need an identity + funded vote account + delegated stake.
  • RPC nodes are validator binaries run with --no-voting (optionally --full-rpc-api, --private-rpc).
  • Solana has no first-party Prometheus exporter — monitor via RPC-derived signals or community exporters.
  • Testnet and devnet are available for practice before mainnet.

In Chapter 51: Avalanche Nodes, we’ll explore Avalanche blockchain node setup.


Last Updated: 2026-09-28