Withdraw rewards using HW wallet

Step-by-step guide for withdrawing accumulated validator rewards using a Ledger hardware wallet as the withdraw authority.

Once your validator’s withdraw authority has been moved from a local keypair (id.json) to a Ledger hardware wallet, you can securely withdraw accumulated rewards directly from your vote account using your Ledger.

Step 0 — Set Your Variables

You’ll use these across commands:

Variable
Description
Example

VOTE_ACCOUNT_PUBKEY

Your validator vote account address

vote.json

RPC

Cluster endpoint

https://rpc.testnet.x1.xyz

LEDGER_PATH

Ledger device path

usb://ledger?key=0/0

DESTINATION_PUBKEY

Wallet to receive rewards

Usually the same as your Ledger address

To get your Ledger’s public key (run on your computer, Solana app open):

solana-keygen pubkey "usb://ledger?key=0/0"

Step 1 — Verify the vote account (on the server)

solana show-vote-account <VOTE_ACCOUNT_PUBKEY> --url <RPC>
  • Confirm the Withdraw Authority matches your Ledger public key.

  • Note the Account Balance; keep the account rent-exempt (don’t withdraw to zero).


Step 2 — Connect your Ledger (on your computer)

  1. Plug in Ledger, unlock, open Solana app (close Ledger Live).

  2. Verify the CLI sees your device:

solana-keygen pubkey "usb://ledger?key=0/0"

You should see your Ledger address printed.


Step 3 — Withdraw rewards (on your computer, Ledger signs)

Withdraw a specific amount (example: 5 XNT):

solana withdraw-from-vote-account \
  <VOTE_ACCOUNT_PUBKEY> \
  <DESTINATION_PUBKEY> \
  5 \
  --authorized-withdrawer "usb://ledger?key=0/0" \
  --url <RPC>

If your local default wallet has no funds for fees, make the Ledger pay the fee too:

solana withdraw-from-vote-account \
  <VOTE_ACCOUNT_PUBKEY> \
  <DESTINATION_PUBKEY> \
  5 \
  --authorized-withdrawer "usb://ledger?key=0/0" \
  --fee-payer "usb://ledger?key=0/0" \
  --url <RPC>

Tips

  • Keep the vote account rent-exempt by leaving a buffer.

  • If you hit “unfunded recipient”, first withdraw to your Ledger address, then transfer elsewhere.


Step 4 — Verify the transfer (server or computer)

Check the vote account:

solana show-vote-account <VOTE_ACCOUNT_PUBKEY> --url <RPC>

Check the destination wallet:

solana balance <DESTINATION_PUBKEY> --url <RPC>

Troubleshooting

Issue
Likely Cause
Fix

no device found / protocol error

Solana app not open or USB not recognized

Open Solana app, close Ledger Live, reconnect

insufficient funds for fee

Fee-payer empty

Add --fee-payer "usb://ledger?key=0/0" or fund your local wallet

signature verification failed

Wrong withdraw authority or wrong cluster

Re-check show-vote-account output and --url

unfunded recipient

Destination wallet never funded

Withdraw to your Ledger address first, then forward

Last updated