Solana Mainnet Validator - Quickstart

Introduction

To deploy a Solana mainnet validator, you'll use the SLV command-line tool. This quickstart guide explains how to launch and deploy a mainnet validator hot spare.
You must have Ubuntu 24.04 LTS clean installed on your server.

Preparing a Baremetal Server

While it is possible to run a Solana node on VPS or virtual machines (VM), achieving optimal performance and stable operation is challenging. Solana officially recommends the use of baremetal servers.
Mainnet validators should be provisioned to stay stable during congestion.
Below is a guideline based on the official Solana / Agave / Firedancer documentation.

Agave Validator (official requirements and recommendations)

SOL requirements
  • There is no strict minimum SOL requirement
  • The Vote Account needs 0.02685864 SOL to be rent-exempt
  • Voting transactions can cost up to ~1.1 SOL / day
Hardware requirements (guideline)
ComponentValidatorRPC Node (reference)
CPU2.8GHz+ / AMD Gen3+ / Intel Ice Lake+ / SHA extensions / AVX216 cores / 32 threads+
RAM256GB+512GB+
DiskNVMe Gen3 x4 or better / Accounts-Ledger-Snapshots separation recommendedLarger capacity recommended
GPUNot requiredNot required
Note:
Clock speed and effective throughput are considered more important than core count.

Firedancer (Frankendancer)

Firedancer (Frankendancer) currently depends on Agave,
so at minimum it assumes the Agave recommended configuration or higher.
Minimum
  • 24-core CPU @ >2.8GHz
  • 256GB RAM
  • 2TB NVMe (High TBW)
Recommended
  • 32-core CPU @ >3GHz (AVX512 supported)
  • 512GB RAM (ECC)
  • Accounts / Ledger separation
  • Network bandwidth of 1Gbps or higher
For a balanced cost-performance setup, Agave with a 24-core CPU and 384GB RAM is a practical guideline.
When you run the slv v init command, you will be asked whether your baremetal server is already set up:
bash
➜ slv v init
? Select Solana Network (testnet) β€Ί mainnet
? πŸ›‘οΈ Do you have a Solana Node Compatible Server? (no)
❯ yes
  no
This tutorial assumes you select yes.
If you have not yet prepared your baremetal server, please refer to the Baremetal Server Setup Guide.
Additionally, you may find these resources helpful:

Deploy Solana Mainnet Firedancer Jito Validator

New SLV deployments always use unstaked-keypair.json as the identity key. This is a best practice to prevent double voting and other issues.
Therefore, after deployment, please use slv v set:identity to set the authorized identity key.
In most mainnet validator operations, you will use slv v switch to change the identity key. For no-downtime migration, please refer to this guide.

Select the Solana Network

Select the Solana Network you want to deploy.
bash
slv v init
? Select Solana Network (mainnet)
  testnet
❯ mainnet

Input Server's Default Username

Most of the time, the default username is ubuntu or root.
bash
? What's the user for the server? (ubuntu) β€Ί ubuntu

Input Server's IP Address

Input the IP address of the server.
bash
? What's the IP address of the server? β€Ί

Set RSA Key for SSH

β€» Please set the path to your RSA key. The default path is ~/.ssh/id_rsa.
bash
? What's the path to your RSA key? (~/.ssh/id_rsa) β€Ί ~/.ssh/id_rsa
πŸ” Checking SSH connection...
βœ”οΈŽ SSH connection succeeded
Then SLV will check the connection to the server. If the connection is successful, the next step will be prompted.

Select Solana Validator Type

Select the type of Solana validator.
bash
? Select Validator Type (firedancer-jito)
  agave
  jito
  jito-bam
  firedancer-agave
❯ firedancer-jito

Set Commission Rate

Set the commission rate for your validator. β€» 1000 equals 10%.
bash
? Enter Commission BPS (Max 1000 = 10%) (1000)

Generate or Set the Solana Validator Identity Key

You can generate a new identity key or set an existing identity key. This example shows how to set an existing identity key with the name "epics-sub".
bash
? Do you want to create a new identity key now? (Y/n) β€Ί No
? Please Enter Your Identity Public Key β€Ί KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM
? Enter Inventory Name (KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM) β€Ί epics-sub
⚠️ Please place your identity key in

  ~/.slv/keys/KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM.json
.
.
βœ”οΈŽ Success
βœ” Inventory updated to ~/.slv/inventory.yml
βœ” Successfully created solv user on x.x.x.x
Please place your identity key in ~/.slv/keys/<your-pubkey>.json.

Automatic Region Detection

Next, the system will ping each block engine from your configured node to automatically detect the nearest region. By measuring actual ping values, you can select the optimal region.
bash
βœ” Inventory updated to ~/.slv/inventory.mainnet.validators.yml

πŸ“ Measuring latencies from x.x.x.x to mainnet regions...
  Pinging Amsterdam (amsterdam.mainnet.block-engine.jito.wtf)...
  Pinging Dublin (dublin.mainnet.block-engine.jito.wtf)...
  Pinging Frankfurt (frankfurt.mainnet.block-engine.jito.wtf)...
  Pinging London (london.mainnet.block-engine.jito.wtf)...
  Pinging New York (ny.mainnet.block-engine.jito.wtf)...
  Pinging Salt Lake City (slc.mainnet.block-engine.jito.wtf)...
  Pinging Singapore (singapore.mainnet.block-engine.jito.wtf)...
  Pinging Tokyo (tokyo.mainnet.block-engine.jito.wtf)...
  βœ… London: 8.801 ms
  βœ… Dublin: 12.946 ms
  βœ… Frankfurt: 5.888 ms
  βœ… Amsterdam: 0.169 ms
  βœ… New York: 74.321 ms
  βœ… Salt Lake City: 115.577 ms
  βœ… Singapore: 154.200 ms
  βœ… Tokyo: 229.989 ms

🎯 Nearest region: πŸ‡³πŸ‡± Amsterdam
   Latency: 0.169 ms
   Block Engine: https://amsterdam.mainnet.block-engine.jito.wtf
   Shred Receiver: 74.118.140.240:1002
   Relayer: http://amsterdam.mainnet.relayer.jito.wtf:8100
   NTP Server: ntp.amsterdam.jito.wtf

Generate or Set the Solana Validator Vote Account Key

You can generate a new vote account key or set an existing vote account key. This example shows how to set an existing vote account key.
bash
? Do you want to create a new vote account key now? (Y/n) β€Ί No
? Please Enter Your Vote Account Public Key > <your-vote-account>
The validator node information will be saved to ~/.slv/inventory.mainnet.validators.yml.
bash
βœ”οΈŽ Success
βœ” Inventory updated to ~/.slv/inventory.mainnet.validators.yml
βœ” Successfully created solv user on epics-sub
βœ”οΈŽ Validator Mainnet Config Saved To ~/.slv/inventory.mainnet.validators.yml
Now you can deploy with:

$ slv v deploy -n mainnet -p epics-sub

Deploy the Validator

Once you confirm the configuration, the deployment will start.
bash
slv v deploy -n mainnet -p epics-sub
bash
Your Mainnet Validators Settings:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Identity Key   β”‚ KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Vote Key       β”‚ EpicsoqLdDP8qRn3wQRKTSKAXbjK9dUgFfNPRQS77MQD β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Authority Key  β”‚ authAccount                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ IP             β”‚ x.x.x.x                                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Validator Type β”‚ firedancer-jito                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Version        β”‚ 0.712.30006                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
? Do you want to continue? (Y/n) β€Ί Yes
.
.
.
Successfully Deployed RPC on mainnet
⚑️⚑️⚑️ Enhanced Solana RPC Connection API Key ⚑️⚑️⚑️

We're excited to offer a free API key exclusively for the Validators DAO community πŸŽ‰
It's our way of supporting the community and empowering you with fast, reliable connections.

To get your Free API key, simply join us through the link below:

Validators DAO: `https://discord.gg/X4BgkBHavp`

Unlock fast connections and elevate your experience with your very own API key πŸš€

You can monitor your Node with the following steps:

Log in to your server with SSH:
ssh [email protected]

Then, run the following command to monitor your node:
$ solv m
It's done! Your Solana Validator is now deployed. It will take some time to sync with the Solana network.

Debugging & Monitoring

After deployment, you can debug and monitor within the Solana RPC node. You can check the status of the Solana RPC node using the following commands:
bash
$ solv m
solv is an alias for agave-validator -l /mnt/ledger. This setting is added to ~/.profile during the RPC node deployment.

Change the Identity Key

After deployment, you need to change the unstaked key to the authorized identity key.
bash
slv v set:identity -n mainnet --pubkey epics-sub
This command will change the identity key to the authorized identity key.
β€» For no-downtime migration, please refer to this guide.

SLV Validator Commands

bash
slv validator --help
Usage:   slv validator
Version: 0.9.700

Description:

  πŸ› οΈ Manage Solana Validator Nodes πŸ› οΈ

Options:

  -h, --help  - Show this help.

Commands:

  init               - πŸš€ Initialize a new validator configuration
  deploy             - πŸ“¦ Deploy Validators
  list               - πŸ“‹ List validators
  set:identity       - πŸͺͺ  Set Validator Identity
  set:unstaked       - πŸ“΄ Set Validator Identity to Unstaked Key
  setup:firedancer   - πŸ”₯ Setup/Update Firedancer Validator
  update:firedancer  - πŸ”„ Update Firedancer Version
  build:solana-cli   - πŸ› οΈ Build Solana CLI from Source
  install:solana     - ➑️ Install Solana CLI Binary
  update:script      - βš™οΈ  Update Validator Startup Config
  update:jinja       - 🧩 Update Jinja Template
  start              - 🟒 Start Validator
  stop               - πŸ”΄ Stop Validator
  restart            - ♻️  Restart Validator
  cleanup            - 🧹 Cleanup Validator - Remove Ledger/Snapshot Unnecessary Files
  get:snapshot       - πŸ’Ύ Download Snapshot with aria2c
  gen:vote-account   - πŸ—³οΈ  Generate Vote Account
  switch             - πŸ” Switch Validator Identity - No DownTime Migration