Starting a Validator

Configure Velas CLI

The Velas cli includes get and set configuration commands to automatically set the --url argument for cli commands. For example:

velas config set --url

While this section demonstrates how to connect to the Devnet cluster, the steps are similar for the other Velas Clusters.

Confirm The Cluster Is Reachable

Before attaching a validator node, sanity check that the cluster is accessible to your machine by fetching the transaction count:

velas transaction-count

Confirm your Installation

Try running following command to join the gossip network and view all the other nodes in the cluster:

velas-gossip spy --entrypoint
# Press ^C to exit

Enabling CUDA

If your machine has a GPU with CUDA installed (Linux-only currently), include the --cuda argument to velas-validator.

When your validator is started look for the following log message to indicate that CUDA is enabled: "[<timestamp> solana::validator] CUDA is enabled"

System Tuning



The Velas repo includes a daemon to adjust system settings to optimize performance (namely by increasing the OS UDP buffer limits, and scheduling PoH with realtime policy).

The daemon (solana-sys-tuner) is included in the Velas binary release. Restart it, before restarting your validator, after each software upgrade to ensure that the latest recommended settings are applied.

To run it:

sudo solana-sys-tuner --user $(whoami) > sys-tuner.log 2>&1 &


If you would prefer to manage system settings on your own, you may do so with the following commands.

Increase UDP buffers
sudo bash -c "cat >/etc/sysctl.d/20-solana-udp-buffers.conf <<EOF
# Increase UDP buffer size
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728
sudo sysctl -p /etc/sysctl.d/20-solana-udp-buffers.conf
Increased memory mapped files limit
sudo bash -c "cat >/etc/sysctl.d/20-solana-mmaps.conf <<EOF
# Increase memory mapped files limit
vm.max_map_count = 500000
sudo sysctl -p /etc/sysctl.d/20-solana-mmaps.conf



to the [Service] section of your systemd service file, if you use one, otherwise add it to /etc/systemd/system.conf.

sudo systemctl daemon-reload
sudo bash -c "cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 500000
### Close all open sessions (log out then, in again) ###

Generate identity

Create an identity keypair for your validator by running:

velas-keygen new -o ~/validator-keypair.json

The identity public key can now be viewed by running:

velas-keygen pubkey ~/validator-keypair.json

Note: The "validator-keypair.json” file is also your (ed25519) private key.

Paper Wallet identity

You can create a paper wallet for your identity file instead of writing the keypair file to disk with:

velas-keygen new --no-outfile

The corresponding identity public key can now be viewed by running:

velas-keygen pubkey ASK

and then entering your seed phrase.

See Paper Wallet Usage for more info.

Vanity Keypair

You can generate a custom vanity keypair using solana-keygen. For instance:

velas-keygen grind --starts-with e1v1s

Depending on the string requested, it may take days to find a match...

Your validator identity keypair uniquely identifies your validator within the network. It is crucial to back-up this information.

If you don’t back up this information, you WILL NOT BE ABLE TO RECOVER YOUR VALIDATOR if you lose access to it. If this happens, YOU WILL LOSE YOUR ALLOCATION OF SOL TOO.

To back-up your validator identify keypair, back-up your "validator-keypair.json” file or your seed phrase to a secure location.

More Velas CLI Configuration

Now that you have a keypair, set the velas configuration to use your validator keypair for all following commands:

velas config set --keypair ~/validator-keypair.json

You should see the following output:

Wallet Config Updated: /home/solana/.config/solana/wallet/config.yml
* url:
* keypair: /home/solana/validator-keypair.json

Airdrop & Check Validator Balance

Airdrop yourself some VLX to get started:

velas airdrop 10 --url

Note that airdrops are only available on bootstrap node at Devnet.

To view your current balance:

velas balance

Or to see in finer detail:

velas balance --lamports

Create Vote Account

If you haven’t already done so, create a vote-account keypair and create the vote account on the network. If you have completed this step, you should see the “vote-account-keypair.json” in your Velas runtime directory:

velas-keygen new -o ~/vote-account-keypair.json

The following command can be used to create your vote account on the blockchain with all the default options:

velas create-vote-account ~/vote-account-keypair.json ~/validator-keypair.json

Read more about creating and managing a vote account.

Trusted validators

If you know and trust other validator nodes, you can specify this on the command line with the --trusted-validator <PUBKEY> argument to velas-validator. You can specify multiple ones by repeating the argument --trusted-validator <PUBKEY1> --trusted-validator <PUBKEY2>. This has two effects, one is when the validator is booting with --no-untrusted-rpc, it will only ask that set of trusted nodes for downloading genesis and snapshot data. Another is that in combination with the --halt-on-trusted-validator-hash-mismatch option, it will monitor the merkle root hash of the entire accounts state of other trusted nodes on gossip and if the hashes produce any mismatch, the validator will halt the node to prevent the validator from voting or processing potentially incorrect state values. At the moment, the slot that the validator publishes the hash on is tied to the snapshot interval. For the feature to be effective, all validators in the trusted set should be set to the same snapshot interval value or multiples of the same.

It is highly recommended you use these options to prevent malicious snapshot state download or account state divergence.

Connect Your Validator

Connect to the cluster by running:

velas-validator \
--identity ~/validator-keypair.json \
--vote-account ~/vote-account-keypair.json \
--ledger ~/validator-ledger \
--rpc-port 8899 \
--entrypoint \
--limit-ledger-size \
--log ~/velas-validator.log

Lastly, to configure log rotation, please run the following:

# Setup log rotation
cat > logrotate.sol <<EOF
~/velas-validator.log {
rotate 7
systemctl kill -s USR1 sol.service
sudo cp logrotate.sol /etc/logrotate.d/sol
systemctl restart logrotate.service

To force validator logging to the console add a --log - argument, otherwise the validator will automatically log to a file.

Note: You can use a paper wallet seed phrase for your --identity and/or --vote-account keypairs. To use these, pass the respective argument as velas-validator --identity ASK ... --vote-account ASK ... and you will be prompted to enter your seed phrases and optional passphrase.

Confirm your validator connected to the network by opening a new terminal and running:

velas-gossip spy --entrypoint

If your validator is connected, its public key and IP address will appear in the list.

Controlling local network port allocation

By default the validator will dynamically select available network ports in the 8000-10000 range, and may be overridden with --dynamic-port-range. For example, velas-validator --dynamic-port-range 11000-11010 ... will restrict the validator to ports 11000-11010.

Limiting ledger size to conserve disk space

The --limit-ledger-size argument will instruct the validator to only retain the last couple hours of ledger. To retain the full ledger, simply remove that arg.