A Solana wallet holds SOL directly, but it does not hold tokens. Every token you own, from USDC to a memecoin to an NFT, sits in a separate token account: a small account that records which token it is, who owns it and how much is in it. Your wallet controls these accounts; apps add them up and show them as your balance.
What is inside a token account
A classic token account is exactly 165 bytes:
| Field | Bytes | Meaning |
|---|---|---|
| mint | 32 | Which token this account holds |
| owner | 32 | The wallet that controls it |
| amount | 8 | The token balance |
| delegate | 36 | Optional: an address allowed to spend part of the balance |
| state | 1 | Initialized or frozen |
| is_native | 12 | Set for wrapped SOL accounts |
| delegated_amount | 8 | How much the delegate may still spend |
| close_authority | 36 | Optional: who may close it instead of the owner |
Like every account, it needs a rent deposit for those bytes: 0.00203928 SOL at the original price, 0.00148844 SOL today.
Associated token accounts
A wallet could have any number of token accounts for the same token at random addresses, which would make it hard for anyone to know where to send tokens. The Associated Token Account program solves this: it derives one canonical address from your wallet address, the token program and the token’s mint. Anyone can compute that address, and anyone can create the account there for you, paying its deposit. That is how airdrops reach wallets that never asked for them.
Almost every token account you have is an associated token account. Wallets create one the first time you receive or buy a token, and send to it from then on.
Two token programs
Solana has two token programs. The original SPL Token program, since 2026 running as the leaner p-token
implementation, holds most tokens. Token-2022 is a newer program with optional extensions such as transfer fees,
metadata stored on the mint or non-transferable tokens. Token-2022 accounts start at the same 165 bytes and grow with each
extension, so their deposit is larger. Both programs share the instructions that matter for rent: CloseAccount and WithdrawExcessLamports.
Why it adds up
Every token your wallet has ever touched left a token account behind, unless something closed it. Swapped a token away completely? The account is still there, empty, holding its full deposit. A hundred such accounts at the original price hold about 0.20 SOL.
- Empty accounts can be closed for the whole deposit: Closing empty token accounts.
- Accounts with a balance stay open, but return everything above today’s minimum: WithdrawExcessLamports.
- Accounts with worthless leftovers can be burned and closed: Dust and spam tokens.
SOL itself has a token form too, used by many apps: wrapped SOL. The scanner lists all token accounts of a wallet with what each can return.