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:
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)
Plug in Ledger, unlock, open Solana app (close Ledger Live).
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
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