SOLSTACKAcademy

Intermediate· Lesson 1 of 2· 3 min

The account model

Everything on Solana is an account: your wallet, a token balance, a program, its state. Learn the five fields and the chain reads like a data structure.

The Solana ledger is a large key-value store. The key is a 32-byte public key — an address. The value is an account. Wallets, token balances, programs, NFTs, an exchange's pool state: all accounts, all the same shape.

The five fields

lamportsThe account's SOL balance in lamports. Every account has one, even accounts that exist only to hold data.
ownerThe program allowed to change the account's data and debit its lamports. Wallets are owned by the System Program, token balances by the Token program, a program's state by that program.
dataA byte array. Empty for a plain wallet, 165 bytes for a token account, whatever a program defines for its own state.
executableTrue if the account is a program. The data of an executable account is compiled bytecode that gets run, not read.
rent_epochA leftover from when rent was collected over time. Accounts must now hold enough SOL to be rent-exempt, so the field no longer does anything.
// a token account, as Account Inspector decodes it
{
  lamports:   2039280,                                        // its rent deposit
  owner:      "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",  // the Token program
  executable: false,
  data:       <165 bytes>   // mint, authority (your wallet), amount, ...
}
Solana Explorer's overview of an account: address, SOL balance, allocated data size, assigned program id and executable flag
  1. lamports, shown in SOL: this account's rent-exempt deposit for 679 bytes of data.
  2. data: 679 bytes here. Explorer decodes it on the Metadata tab.
  3. owner, which Explorer calls the assigned program. Only this program can write the data.
  4. executable: No. A data account, not a program.
Every account page on Solana Explorer shows the same fields. This one is USDC's metadata account, captured 19 Sep 2026 · explorer.solana.com

Ownership is the rule that matters

Only an account's owner program can change its data or reduce its lamports. Anyone can add lamports to any account — that is how a transfer works: the System Program debits the sender, which it owns, and credits the recipient. This is why your token balance is not controlled by you directly. The account is owned by the Token program; you are recorded inside its data as the authority, and the Token program moves the balance only when a transaction is signed by that authority.

A wallet address is simply a System-Program-owned account with no data. It comes into existence the first time it receives lamports.

Rent

Storing data costs validators disk and memory, so every account must hold a SOL deposit proportional to its size: the rent-exempt minimum. For a data-less account it is about 0.00089 SOL, for a 165-byte token account about 0.002 SOL, for an 82-byte mint about 0.0015 SOL. It is not a fee. Close the account and the deposit comes back to whoever you name. Rent Reclaim closes empty token accounts and returns exactly this; Solana rent explained has the numbers.

Programs are accounts too

A program is an account with executable set, its data holding the compiled code, owned by a loader. Programs are stateless: they keep no balances or user records themselves. State lives in ordinary accounts that the program owns. That is why every instruction lists the accounts it will read or write — the runtime loads those, hands them to the program, and enforces the ownership rule above.

Solana Explorer's page for the System Program: a program account with 21 bytes of data, assigned to the Native Loader, executable yes
  1. The System Program itself, at the all-ones address 11111111111111111111111111111111.
  2. Almost no data. Native programs like this one are built into the validator; the account is a marker.
  3. Even a program has an owner: a loader.
  4. executable: Yes. The runtime may run this account.
The System Program's own account page, captured 19 Sep 2026 · explorer.solana.com

Reading accounts yourself

Paste any address into Account Inspector. It shows the owner, size, lamports and whether the account is executable, and for token accounts and mints it decodes the data. Make it a habit: when something behaves unexpectedly, the account's owner and data almost always explain it.

What to remember

  • Every account has the same five fields: lamports, owner, data, executable, rent_epoch.
  • Only the owner program can change an account's data or debit it. Anyone can credit it.
  • Your wallet is a data-less System-owned account. Your token balance is a Token-program-owned account that names you as authority.
  • Rent is a refundable deposit proportional to data size, not a fee. Closing an account returns it.
  • Programs hold no state. State lives in accounts the program owns, passed in with each instruction.

Try it