Solana
Chapter 50: Solana Node Setup
Section titled “Chapter 50: Solana Node Setup”Overview
Section titled “Overview”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.
50.1 Solana Architecture
Section titled “50.1 Solana Architecture”Consensus Mechanism
Section titled “Consensus Mechanism”| Component | Description |
|---|---|
| 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 |
Key Features
Section titled “Key Features”| Feature | Value | Description |
|---|---|---|
| Block Time | ~0.4 seconds | Extremely fast block cadence (one slot every 400ms) |
| Finality | ~2 epochs (~4-8 seconds) | Optimistic confirmations are faster; “finalized” is later |
| Transaction Throughput | Thousands of TPS | High throughput via parallel execution and PoH ordering |
| Token | SOL | Native cryptocurrency |
Network Components
Section titled “Network Components”┌─────────────────────────────────────────────────────────────┐│ SOLANA NETWORK │├─────────────────────────────────────────────────────────────┤│ ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ Validator │◄──►│ Validator │◄──►│ Validator │ ││ │ (Leader) │ │ │ │ │ ││ └─────────────┘ └─────────────┘ └─────────────┘ ││ │ │ │ ││ ▼ ▼ ▼ ││ ┌─────────────────────────────────────────────────────┐ ││ │ Proof of History (PoH) │ ││ │ (Cryptographic Clock / Event Log) │ ││ └─────────────────────────────────────────────────────┘ ││ ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ RPC Node │ │ RPC Node │ │ RPC Node │ ││ │ (API) │ │ (API) │ │ (API) │ ││ └─────────────┘ └─────────────┘ └─────────────┘ ││ │└─────────────────────────────────────────────────────────────┘50.2 Hardware Requirements
Section titled “50.2 Hardware Requirements”For Mainnet Validators
Section titled “For Mainnet Validators”Solana’s high performance requires substantial hardware:
| Component | Minimum | Recommended | Notes |
|---|---|---|---|
| CPU | 16 cores | 32+ cores | High single-thread performance preferred |
| RAM | 128 GB | 256 GB | Validator operations are memory-intensive |
| Storage | 1 TB NVMe | 2 TB NVMe | SSD must support high IOPS |
| Network | 1 Gbps | 10 Gbps | High bandwidth for block propagation |
For RPC Nodes
Section titled “For RPC Nodes”| Component | Minimum | Recommended |
|---|---|---|
| CPU | 8 cores | 16+ cores |
| RAM | 64 GB | 128 GB |
| Storage | 500 GB NVMe | 1 TB NVMe |
| Network | 500 Mbps | 1 Gbps |
Hardware Notes
Section titled “Hardware Notes”- 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.
50.3 Installation
Section titled “50.3 Installation”Method 1: Official Installer (Recommended)
Section titled “Method 1: Official Installer (Recommended)”# Install the latest stable releasesh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# The installer prints a PATH export — add it to ~/.bashrc / ~/.zshrcexport PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# Verifysolana --versionMethod 2: Building from Source
Section titled “Method 2: Building from Source”# Install Rustcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource ~/.cargo/env
# Install dependenciessudo apt-get updatesudo apt-get install -y \ build-essential pkg-config libssl-dev libudev-dev protobuf-compiler
# Clone and build a release taggit clone https://github.com/anza-xyz/agave.git # Solana validator client ("Agave")cd agavecargo build --releaseNote: 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.
Method 3: Using Docker
Section titled “Method 3: Using Docker”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:800150.4 Configuration
Section titled “50.4 Configuration”Creating Identities
Section titled “Creating Identities”# Generate validator identity keypair (protect this file!)solana-keygen new -o ~/validator-identity.json
# Verifysolana-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.jsonConfig File
Section titled “Config File”solana-validator --config FILE reads one CLI flag per line:
#--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.logStarting the Validator
Section titled “Starting the Validator”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.
50.5 RPC Node Setup
Section titled “50.5 RPC Node Setup”An RPC node is a validator binary run without voting:
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.logUseful RPC tuning flags:
| Flag | Purpose |
|---|---|
--no-voting | Do not vote — required for RPC nodes |
--full-rpc-api | Enable the complete RPC API (not just a subset) |
--private-rpc | Only accept RPC requests from localhost / private network |
--no-port-check | Skip TCP/UDP port checks at startup |
--limit-ledger-size <SHREDS> | Keep only the latest ledger data (e.g., 50000000 ≈ 40+ GB) |
--no-limit-ledger-size | Keep full history (archive-style) |
--account-index <PROGRAM_ID/SPL_TOKENS> | Index accounts for getProgramAccounts performance |
| Port | Protocol | Purpose |
|---|---|---|
| 8001 | TCP/UDP | Gossip (P2P discovery) |
| 8003-8010 | TCP/UDP | TPU (transaction processing unit) — within the dynamic range |
| 8899 | TCP | JSON-RPC |
| 8900 | TCP | WebSocket (subscriptions) |
RPC Health & Common Methods
Section titled “RPC Health & Common Methods”# Health check — returns "ok" when the node is healthy and caught upcurl -s http://localhost:8899/health
# Get current slotcurl -X POST http://localhost:8899 -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
# Get cluster nodescurl -X POST http://localhost:8899 -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"getClusterNodes"}'
# Check sync statuscurl -X POST http://localhost:8899 -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'50.6 Staking (Validators)
Section titled “50.6 Staking (Validators)”Becoming a Validator
Section titled “Becoming a Validator”| Requirement | Value |
|---|---|
| Vote account rent | A small amount of SOL (rent-exempt) |
| Stake | Enough 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:
# 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 accountsolana delegate-stake ~/stake-account.json ~/vote-account.json \ --from ~/validator-identity.json
# Check your validator in the clustersolana validators50.7 Monitoring
Section titled “50.7 Monitoring”CLI Checks
Section titled “CLI Checks”# Show your validator's slot production over the last epochsolana validators --output json | jq '...' # find your identity
# Check gossip connectivitysolana gossip
# Look up a specific account balancesolana balance ~/validator-identity.jsonMetrics
Section titled “Metrics”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:
- Solana’s InfluxDB pipeline (official): set
SOLANA_METRICS_CONFIGto point at your own Telegraf/InfluxDB and build dashboards from those series. - Community exporters (e.g., Jito’s
solana-prometheus-exporter) that scrape the JSON-RPC and exportgetHealth,getSlot,getVoteAccounts,getClusterNodesresults as Prometheus metrics. - RPC-derived checks are the simplest reliable signal:
# Alert if health check fails or slot stops advancingwatch -n 5 curl -s http://localhost:8899/healthKey Signals
Section titled “Key Signals”| Signal | Why it matters |
|---|---|
| Slot advancing | Node is keeping up with the cluster |
| Vote count / skip rate | Validator participating and producing on schedule |
| Memory + disk | OOM or full disk kills validators (hardware is the #1 cause of missed slots) |
| Gossip presence | Node visible in solana gossip |
50.8 Troubleshooting
Section titled “50.8 Troubleshooting”Out of Memory
Section titled “Out of Memory”sudo fallocate -l 64G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfileecho '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabLedger Corruption / Verify
Section titled “Ledger Corruption / Verify”# 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 restartsolana-ledger-tool delete-slot 0 --ledger ~/ledger # targeted repair# (or remove ~/ledger entirely and re-sync)Networking
Section titled “Networking”sudo ufw statussudo ufw allow 8000:8020/udpsudo ufw allow 8000:8020/tcpsudo ufw allow 8899/tcpsudo ufw allow 8900/tcp
# Spy on gossip to verify connectivity to the clustersolana-gossip spy --entrypoint entrypoint.mainnet-beta.solana.com:8001Log Analysis
Section titled “Log Analysis”tail -f ~/solana-validator.loggrep -i error ~/solana-validator.loggrep "skipped slot" ~/solana-validator.log50.9 Security Best Practices
Section titled “50.9 Security Best Practices”- Keep the identity keypair offline where possible;
chmod 600any file-based keypair. - Use a separate keypair for the vote account and for RPC (RPC identity does not need staking privileges).
Firewall
Section titled “Firewall”# Allow P2P, restrict RPC to trusted IPssudo ufw allow 8000:8020/udpsudo ufw allow 8000:8020/tcpsudo ufw allow from YOUR_IP to any port 8899/tcpsudo ufw allow from YOUR_IP to any port 8900/tcpsudo ufw allow 22/tcpSystemd Service
Section titled “Systemd Service”[Unit]Description=Solana ValidatorAfter=network.target
[Service]Type=simpleUser=ubuntuWorkingDirectory=/home/ubuntuExecStart=/home/ubuntu/.local/share/solana/install/active_release/bin/solana-validator --config /home/ubuntu/validator-configRestart=alwaysRestartSec=10StandardOutput=append:/home/ubuntu/solana-validator.logStandardError=append:/home/ubuntu/solana-validator.log
[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable solana-validatorsudo systemctl start solana-validatorsystemctl status solana-validator50.10 Testnet & Devnet
Section titled “50.10 Testnet & Devnet”# Testnetsolana-validator \ --identity ~/validator-identity.json \ --vote-account ~/vote-account.json \ --rpc-port 8899 \ --entrypoint entrypoint.testnet.solana.com:8001 \ --testnet
# Devnetsolana-validator \ --identity ~/validator-identity.json \ --rpc-port 8899 \ --entrypoint entrypoint.devnet.solana.com:8001 \ --devnetSummary
Section titled “Summary”- 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.
Next Chapter
Section titled “Next Chapter”In Chapter 51: Avalanche Nodes, we’ll explore Avalanche blockchain node setup.
Last Updated: 2026-09-28