Skip to content
NEW Earn 30% affiliate commissions Get your link

How to clean up a Ledger Solana wallet and reclaim SOL

A Ledger Solana wallet collects empty token accounts like any other, each holding 0.0015-0.002 SOL. Here's how to close them through Phantom or Solflare safely.

10 min read
Cover image for How to clean up a Ledger Solana wallet and reclaim SOL

Key takeaways

  • A Ledger Solana address collects empty token accounts exactly like a hot wallet; each one holds 0.00148844 or 0.00203928 SOL of rent that closing returns to you.
  • Ledger's Solana app clear-signs only simple patterns, such as a single CloseAccount, and allows at most 6 instructions; anything else needs blind signing turned on in the app's settings.
  • Every SOLTidy transaction that carries a fee, including token account closes, NFT burns and stake withdrawals, falls outside those patterns, so the Ledger shows 'Unrecognized format' and a message hash.
  • SOLTidy asks for one wallet approval per transaction and packs up to 12 token accounts into each, so 40 empty accounts means about 4 confirmations on the Ledger, not 40.
  • Never type a Ledger's 24-word recovery phrase into a website, wallet app or support chat; cleanup only ever needs the device to confirm transactions.

The short answer

You clean up a Ledger Solana wallet the same way as any other: close empty token accounts, burn spam NFTs and withdraw inactive stake, then approve each transaction on the device. Connect the Ledger to Phantom, Solflare or Backpack, open a cleanup tool such as the SOLTidy wallet cleanup, and confirm each transaction on the Ledger. Each empty token account returns 0.00148844 or 0.00203928 SOL. The Ledger Solana app clear-signs a single close, but multi-account or fee-bearing transactions, which includes all of SOLTidy's, require blind signing in the app's settings.

Why does a Ledger wallet collect empty token accounts and spam?

A Ledger wallet collects them for the same reason a hot wallet does: the clutter lives on the Solana address, not on the device. A Ledger holds the private key for an ordinary Solana address. Every token you buy or receive at that address opens a token account, and selling the token leaves the account open with its rent deposit inside.

A token account is a small on-chain account that holds one token for one owner. Its rent deposit is 0.00203928 SOL if it was opened before Solana lowered rent and 0.00148844 SOL if it was opened after, and closing it returns that SOL to you. What a Solana token account is covers the details.

Spam behaves the same way too. Anyone can send tokens and NFTs to any address, so a Ledger address that has been seen on chain receives airdropped spam like any other. The hardware wallet stops spam from stealing your key, but it does not stop spam from arriving. For the risks of those links and what to do with them, see what to do with spam NFTs on Solana.

If you staked from a Ledger, you may also have stake accounts that finished deactivating but were never withdrawn. Those hold their full balance until you withdraw it.

How do you connect a Ledger to a Solana wallet app?

You connect it through a browser extension or mobile wallet that supports hardware wallets. As of November 2026, Phantom, Solflare and Backpack all document Ledger support. Ledger's own app, now called Ledger Wallet (formerly Ledger Live), does not connect to dApps the same way, so for cleanup you go through one of these.

Before connecting, update the device firmware and the Solana app from Ledger Wallet, then close Ledger Wallet. Phantom's help center warns that Ledger Live "can block the browser connection".

Wallet app + LedgerHow it connectsLedger models documentedNotes
Phantom extensionUSB cableNano S, Nano S Plus, Stax, FlexAdd Account, then Connect Hardware Wallet
Phantom mobileBluetoothNano X, Stax, FlexNano S and S Plus have no Bluetooth; Nano Gen5 listed as unsupported
Solflare web and extensionUSB cableNot listed by modelChoose derivation path; docs ask you to enable blind signing
Backpack extension and mobileAdd Account, Import Wallet, Use a hardware walletNot listed by modelAlso supports Trezor and Keystone
Ledger Wallet (Ledger Live)NativeAll current modelsHolds SOL and SPL tokens; no documented close-account option
spl-token CLIusb://ledger signerAny with the Solana appFree; one close per command clear-signs

Sources for the table: Phantom's Ledger extension guide, Phantom's supported hardware wallets, Solflare's Ledger import guide and Backpack's hardware wallet guide.

One device note: the current open-source Solana app lists Nano X, Nano S Plus, Stax, Flex and Apex P as build targets, and no longer lists the original Nano S. An original Nano S may be stuck on an older Solana app, so if signing fails on one, the device itself may be the reason.

Once the Ledger account is in your wallet app, how you clean it up inside that app is covered in cleaning up a Phantom wallet, cleaning up a Solflare wallet and cleaning up a Backpack wallet. This post covers what changes when a Ledger is the signer.

What does the Ledger screen show for a close-account transaction?

For a transaction that closes a single token account, the Ledger shows what it does: "Close token account" with the account address, "Withdraw to" with the address receiving the rent, and the owner. If the transaction sets a priority fee, it also shows "Max fees". I took those labels from the open-source Ledger Solana app (libsol/spl_token_instruction.c and transaction_printers.c), not from a device photo, so the exact layout varies by model.

That readable display is called clear signing. Clear signing means the device decodes the transaction and shows its actions in plain words. Blind signing means approving a transaction the device cannot decode, so it shows only a hash. When the Solana app cannot decode a transaction and blind signing is on, it shows "Unrecognized format" and a "Message Hash", which is a SHA-256 hash of the transaction message. When blind signing is off, it refuses to sign.

When does the Ledger Solana app need blind signing?

It needs blind signing whenever a transaction does not match one of the small set of patterns the app knows how to display. Reading the app's source as of November 2026, the rules are:

  1. At most 6 instructions. More than that and the app refuses to decode the transaction.
  2. Known programs only. It decodes the System program, Stake program, SPL Token and Token-2022, the Associated Token Account program, Vote and Compute Budget. Any other program, such as Metaplex for NFT burns or pump.fun, forces blind signing.
  3. Known instructions only. Within SPL Token it decodes common instructions like CloseAccount, BurnChecked and TransferChecked. WithdrawExcessLamports, which recovers spare rent from accounts you keep, is not in its list.
  4. Known combinations only. After setting aside the two Compute Budget instructions, the app handles one instruction on its own, or specific multi-instruction patterns such as "create stake account and delegate" or "create a token account and transfer". A token close followed by a SOL transfer is not one of them, and neither are two token closes.
  5. No address lookup tables. Versioned v0 transactions are decoded, but only when every account is listed in the transaction itself.

So the device handles v0 transactions fine. What triggers blind signing is batching and unfamiliar programs, not the transaction version.

Do SOLTidy transactions need blind signing on a Ledger?

Yes, for every transaction that carries a fee. I built SOLTidy, so I checked what it sends against those rules. Every SOLTidy transaction is a v0 VersionedTransaction without lookup tables, starting with SetComputeUnitLimit and SetComputeUnitPrice (src/lib/tx.ts). A token cleanup transaction then holds up to 12 items: CloseAccount instructions, plus BurnChecked for leftover dust and HarvestWithheldTokensToMint for Token-2022 fees where needed, WithdrawExcessLamports for spare rent, and pump.fun account closes. It ends with a plain System Transfer of the 5% fee to the SOLTidy fee wallet (src/lib/reclaim.ts, src/lib/fees.ts).

Even the smallest case, one close plus the fee transfer, is a close followed by a transfer, which the Ledger app does not recognize. Here is how each SOLTidy action lines up:

SOLTidy actionInstructions after compute budgetLedger result
Close 1 to 12 token accountsCloseAccount (x N) + fee transferBlind signing required
Withdraw spare rentWithdrawExcessLamports + fee transferBlind signing required
Close pump.fun accountspump.fun program + fee transferBlind signing required
Burn NFTsMetaplex burn + fee transferBlind signing required
Withdraw stake accountsStake Withdraw (x N) + fee transferBlind signing required
Deactivate 1 stake accountStake Deactivate only (free)Clear-signed: stake account and authority
Deactivate 2+ stake accountsStake Deactivate (x N)Blind signing required

I have not tested every Ledger model with every action, so treat this as what the app's source code says, not a lab result. Ledger could add patterns in a future Solana app release. Wallet apps can also show their own preview of balance changes before handing the transaction to the device, but the device itself only shows the hash.

If you are not comfortable blind signing, the free alternative is the spl-token command line with a Ledger signer. spl-token close sends one close per transaction, which the Ledger clear-signs, at the cost of one command and one confirmation per account. Closing token accounts with the CLI walks through it.

How do you clean up a Ledger Solana wallet step by step?

  1. Update the device. In Ledger Wallet, update the firmware and the Solana app, then close Ledger Wallet completely.
  2. Connect the Ledger to your wallet app. In Phantom: Add Account, Connect Hardware Wallet. In Solflare: + Add wallet, Connect hardware wallet. In Backpack: Add Account, Import Wallet, Use a hardware wallet. Keep the Solana app open on the device.
  3. Keep a little SOL in the account. Each transaction pays 5,000 lamports per signature plus a small priority fee before the rent comes back, so the Ledger account needs a few thousandths of a SOL to start.
  4. Run a read-only scan. Open the SOLTidy wallet cleanup and connect the Ledger account. The scan reads token accounts, NFTs, stake accounts and pump.fun accounts and signs nothing.
  5. Enable blind signing for the session. On the Ledger, open the Solana app, go to Settings and turn on blind signing. Phantom's path is Settings, Blind signing, Enable blind signing, Enabled; Solflare describes it as "Allow blind sign", Yes. Menu labels differ slightly by model.
  6. Pick what to clean. Empty token accounts and spare rent are selected for you; NFTs and dust are yours to pick item by item.
  7. Confirm each transaction. Check the preview in the wallet app, then approve on the Ledger. Each prompt corresponds to one transaction.
  8. Turn blind signing off. Go back to the Solana app's settings and disable it.

If you only want empty token accounts, the Token Account Closer does that one job. For spam collectibles, use the NFT Burner, which fits about 5 Metaplex burns per transaction.

Why does SOLTidy ask for one Ledger confirmation per transaction?

Because SOLTidy sends every transaction to the wallet separately. Batch signing, where one approval covers several transactions, is switched off in the code (BATCH_SIGNING = false in src/lib/tx.ts) after Phantom warned about it. On a Ledger that means one press on the device per transaction.

Batching inside each transaction keeps the count low. The closer packs up to 12 token accounts into one transaction, so 40 empty accounts take about 4 confirmations. Closing them one at a time from a wallet menu or the CLI would take 40. While you approve one transaction, the previous one confirms in the background, so you are not waiting on the network between presses.

The fee is part of each transaction and covers only what that transaction returns: 5% of the recovered SOL for token accounts and NFTs, and 0.002 SOL per stake account withdrawn. If you reject a prompt halfway through, you have paid only for the transactions already confirmed.

How do you handle stake accounts on a Ledger?

You withdraw them with the Ledger as the withdraw authority, the same way as any wallet, after they finish deactivating. If you staked SOL through Ledger Wallet's staking or through Solflare, the stake accounts belong to your Ledger address and need the Ledger to sign.

The Stake Accounts tool looks up every stake account where your address is the stake or withdraw authority, including ones your wallet app does not show. Looking up and deactivating are free. Deactivating a single account is a plain Stake Deactivate, which the Ledger clear-signs. Withdrawing costs 0.002 SOL per account, and because that fee is a transfer in the same transaction, the withdrawal needs blind signing.

Deactivation finishes at the end of the current epoch, which can take up to about 26 hours, so plan on two sessions. How unstaking SOL works explains the cooldown, and withdrawing old Solana stake accounts covers where forgotten stake accounts come from.

What safety rules matter most with a Ledger?

The most important rule is that your 24-word recovery phrase is never typed anywhere. Not into a website, a wallet extension, a "Ledger sync" page or a support chat. Cleanup needs the device to confirm transactions and nothing else. Phantom's Ledger guide says the same: never enter your Ledger recovery phrase into Phantom, a website or any app. Fake "ledger start" setup pages are common in search results, so install firmware and apps only through Ledger Wallet.

The other rules:

  • Blind sign only transactions you started. With blind signing on, the device will sign anything you confirm. Reject any prompt you did not trigger yourself on a site you chose to visit.
  • Turn blind signing off afterwards. Solflare's guide notes that firmware and Solana app updates switch it off automatically, which is the safe default.
  • Never interact with spam. Do not open links in spam NFT metadata or "claim" pages. Burning from a trusted tool is fine; visiting the site is the risk.
  • A Ledger does not make a bad approval safe. It keeps the key off your computer, but a confirmed malicious transaction is still final. The Solana wallet security checklist covers the habits that matter.

Closing an empty token account is itself low risk: the token is gone, and the account reopens automatically if you ever receive that token again. Is it safe to close Solana token accounts? goes through the edge cases.

Bottom line

A Ledger keeps your Solana key offline, but the address still fills with empty token accounts, spam and old stake, each holding SOL you can get back. Connect the Ledger to Phantom, Solflare or Backpack, scan with the SOLTidy wallet cleanup, and approve one transaction at a time on the device, up to 12 token accounts per transaction. The Ledger Solana app clear-signs only simple transactions like a single close or a single deactivation, so SOLTidy's batched, fee-bearing transactions need blind signing turned on for the session and off afterwards. If you would rather never blind sign, the spl-token CLI closes one account per confirmation for network fees only.

Questions & answers

Do I need to enable blind signing on my Ledger to close Solana token accounts?

It depends on the transaction. Ledger's Solana app clear-signs a transaction that closes one token account, so the spl-token CLI or a wallet menu that sends one close at a time works without blind signing. A transaction that closes several accounts, or adds a fee transfer, does not match the app's known patterns, so it needs blind signing. All of SOLTidy's fee-bearing transactions are in that second group.

Why does my Ledger show "Unrecognized format" and a message hash?

The Ledger Solana app could not match the transaction to one of the instruction patterns it knows how to display, and blind signing is enabled, so it falls back to showing a SHA-256 hash of the message. That hash proves nothing about what the transaction does. Rely on the preview in your wallet app and the site you trust, and reject anything you did not start yourself.

Can Ledger Wallet (Ledger Live) close empty token accounts?

Ledger's app manages SOL and SPL tokens, but as of November 2026 I could not find a documented option in it for closing empty token accounts or withdrawing their rent. The usual route is to connect the Ledger to Phantom, Solflare or Backpack and use a dApp, or to use the spl-token command line with a usb://ledger signer.

Does SOLTidy work with a Ledger on my phone?

It works wherever your wallet app supports the Ledger. Phantom's help center lists Nano X, Stax and Flex over Bluetooth in its mobile app, and Nano S, Nano S Plus, Stax and Flex over a cable in its browser extension. SOLTidy itself only asks the connected wallet to sign; it never talks to the device directly.

Is it safe to leave blind signing turned on?

It is safer to turn it off when you finish. With blind signing on, the device will sign transactions it cannot describe, so a malicious site you approve could drain the account. Solflare's guide says firmware and Solana app updates switch it off automatically, and both Solflare and Ledger's own guidance treat it as something to enable only for a session.

How many Ledger confirmations does a SOLTidy cleanup take?

One per transaction. SOLTidy sends each transaction separately for approval and packs up to 12 token account items into each, so a wallet with 25 empty accounts needs 3 confirmations. NFT burns fit about 5 per transaction, and stake withdrawals are packed as many as fit. The panel shows how many transactions a run needs before you start.

Tools from this guide

Bookmark SOLTidy

Then open SOLTidy from the bookmark instead of from search results or links in DMs, where look-alike scam sites live.