Stranded Lamports
A field manual for SOL that gets stuck on Solana token accounts and mints. What it is, why it happens, and who (if anyone) can pull it out.
TL;DR
There are two categories of recoverable SOL on Solana that get confused in block explorers:
- Rent on empty token accounts. Always recoverable by you. Use
CloseAccount. This is what "close token accounts" tools do. - Excess lamports above the rent floor. Sometimes recoverable. Use
WithdrawExcessLamports(Token-2022 only). This is what stranded-lamports tooling surfaces.
The first is the high-value path for most users. The second is mostly a niche surface, and on graduated pump.fun mints, it's effectively unrecoverable.
1. Why SOL gets stuck in the first place
Every account on Solana pays rent. Each account must hold a rent-exempt minimum, enough lamports to cover its storage in perpetuity. The exact figure depends on account size:
- Standard SPL token account, roughly 0.00203 SOL.
- Base mint, roughly 0.00146 SOL.
- Token-2022 mint with extensions, higher, depending on which extensions are enabled.
That deposit isn't lost, it's locked. When the account is closed, it returns to a destination wallet.
The problems start when:
- You forget to close an empty account. The rent deposit sits there indefinitely.
- Someone sends extra SOL to the account. Now there's value above the rent floor.
- A program leaves lamports behind. Buggy or abandoned protocol logic.
These look identical in an explorer ("hey, there's SOL on this address") but the recovery path is completely different.
2. The two categories side by side
| Closing empty token accounts | Stranded excess lamports | |
|---|---|---|
| Where it occurs | ATAs you own | Token accounts and mint accounts |
| What's stuck | The full rent deposit | Lamports above the rent minimum |
| How it got there | Normal, every ATA costs rent | Abnormal, overfunding, stray sends, buggy programs |
| Instruction | CloseAccount | WithdrawExcessLamports |
| Program support | Both SPL Token and Token-2022 | Token-2022 only |
| Who signs | The ATA owner (you) | The account's authority, depends on type |
| Result | Account is destroyed, all lamports returned | Account stays alive, only the excess is withdrawn |
| Recoverable in practice | Yes, always | Sometimes, see section 3 |
The clean mental model: Close accounts is sweeping the rent on accounts you're done with. Stranded Lamports is finding SOL that shouldn't be in an account at all and pulling it out without closing the account.
3. Who can sign WithdrawExcessLamports
The instruction requires a signed authority. Which signer is valid depends entirely on the account type and how it was configured.
| Account type | Valid signer | Common case | Recoverable? |
|---|---|---|---|
| Your own ATA (overfunded) | Wallet that owns the ATA | Stray SOL sent to an ATA address | Yes |
| Mint with active mint authority | The mint authority | Pre-graduation tokens, hand-rolled launches | Yes |
| Mint with authority = None, on-curve address | Holder of the mint keypair | Graduated pump tokens, fixed-supply launches | Only if keypair was saved |
| Mint with authority = None, PDA address | The program that derived the PDA | Protocol-owned mints, some LP tokens | Only the program can sign |
| Legacy SPL Token mint | Instruction does not exist | Anything pre-Token-2022 | No |
The fallback signer rule
When a Token-2022 mint has its authority revoked (None), the program will accept the mint's own keypair as the signer of last resort, but only if the mint address is on-curve. Most mints are on-curve because they're generated as fresh ed25519 keypairs at creation.
The catch: the mint keypair is typically used once at InitializeMint and then discarded. Launchpads like Pump.fun never hand it to the creator. Hand-rolled launches where the dev saved the keypair are the only meaningful exception.
4. Case study: the pump.fun graveyard
A specimen from the wild, a graduated Token-2022 pump mint:
Lamport balance: 0.813433 SOL Rent-exempt minimum: 0.003807 SOL Excess (stranded): 0.809626 SOL Mint authority: None (fixed supply) Freeze authority: None Address: on-curve, ends in "pump"
The visible excess is roughly 0.81 SOL. The recoverable amount is 0 SOL. Here's why:
- Pump.fun generates a vanity keypair where the pubkey ends in
pump. - That keypair signs
InitializeMintonce, then gets discarded. - When the token graduates, the mint authority is revoked to
None. - After that: the wallet that paid to launch has no authority over the mint, the mint authority itself is dead, and the mint keypair is gone.
The SOL is visible. The instruction exists. The Token-2022 program would gladly process the withdrawal. But no entity left on Earth can produce a valid signature for it.
Multiply this across every graduated pump token, every abandoned memecoin, every launch where the dev didn't save their keypair. There's a non-trivial amount of SOL sitting in mint accounts that nobody will ever move.
5. When the tool is actually worth running
Walk this checklist before assuming anything is recoverable:
1. Is the account a token account (ATA) you own?
Connect the owning wallet, sign WithdrawExcessLamports, done. High-value path for most users.
2. Is it a mint where you still hold the mint authority?
Sign with the authority wallet. Common for projects you launched and haven't revoked. If you suspect overfunding, recover before you revoke.
3. Is it a mint with authority = None?
Check whether the address is on-curve and whether the original mint keypair was saved. If you generated the mint yourself and stored the keypair, you can sign. If it was a launchpad mint, you can't.
4. Token-2022 or legacy SPL Token?
WithdrawExcessLamports is Token-2022 only. Legacy SPL Token mints have no equivalent. Any excess lamports there are unrecoverable by design.
5. Does the rent-exempt minimum match what you expect?
Some Token-2022 extensions inflate the rent floor substantially (confidential transfers, transfer hooks, metadata, and similar). Always check the live rent calculation, not a static value.
6. Practical takeaways
- For most users, the bulk of recoverable SOL is rent on closeable ATAs, not stranded excess. Use a close-accounts tool first.
- Stranded Lamports tooling is genuinely useful for your own overfunded ATAs, mints you launched and still control, and protocol operators auditing program-owned accounts.
- On graduated launchpad mints, the visible "excess" is almost always uncatchable. Treat it as informational, not actionable.
- If you're building or launching a token yourself, save the mint keypair. The cost is zero, and it preserves your ability to clean up overfunding later.
Glossary
- Lamport.
- The smallest unit of SOL. 1 SOL = 1,000,000,000 lamports.
- Rent-exempt minimum.
- The lamport balance an account must hold to avoid being purged. Calculated from account size.
- ATA (Associated Token Account).
- A deterministic token account address derived from a wallet plus mint pair.
- Mint.
- The account that defines a token (decimals, supply, authorities). Distinct from token accounts that hold balances.
- Mint authority.
- The signer allowed to create new tokens. Set to
Noneto make supply fixed. - Token-2022.
- The newer SPL token program with extension support.
WithdrawExcessLamportsis unique to it. - On-curve address.
- An address with a corresponding ed25519 private key (can sign). The opposite is a PDA, which cannot sign without its derivation program.
- PDA (Program Derived Address).
- A deterministic address owned by a program. Has no private key, only the program can authorize it.
