Solana Account Model
The Solana account model is a fundamental part of its architecture, differing significantly from the UTXO model (used by Bitcoin) and the account-based model (used by Ethereum). Here's an explanation with a conceptual diagram.
Key Concepts

Accounts as Objects: Everything in Solana is stored in accounts - programs (smart contracts), data, and even the programs themselves.
Two Types of Accounts:
Program Accounts: Store executable code (smart contracts)
Data Accounts: Store data (user accounts, token accounts, etc.)
Account Fields:
Lamports: The account's balance in lamports (1 SOL = 1 billion lamports)
Owner: The program that owns the account
Executable: Whether the account is a program
Data: The raw data stored in the account
Rent Epoch: When the account will next owe rent
Solana Account Model Diagram
┌─────────────────────────────────────────────────────────────┐ │ Solana Account │ ├──────────────┬──────────────┬──────────────┬───────────────┤ │ Lamports │ Owner │ Executable │ Data │ │ (balance) │ (program ID) │ (true/false) │ (raw bytes) │ └──────────────┴──────────────┴──────────────┴───────────────┘ ▲ ▲ ▲ ▲ │ │ │ │ │ │ │ │ ┌───────┴───────┐ ┌────┴─────┐ ┌──────┴──────┐ ┌─────┴───────┐ │ Native SOL │ │ System │ │ Program │ │ Can store: │ │ or SPL tokens │ │ Program │ │ Account │ │ - Metadata │ │ │ │ or other │ │ (if true) │ │ - State │ │ │ │ program │ │ │ │ - PDA seeds │ └───────────────┘ └───────────┘ └────────────┘ └─────────────┘
Program Derived Accounts (PDAs)
┌─────────────────────────────────────────────────────────────┐ │ Program Derived Account │ ├─────────────────────────────────────────────────────────────┤ │ • Created by programs (not users) │ │ • No private key (derived from program ID + seeds) │ │ • Can only be signed by the deriving program │ │ • Used for cross-program invocation and state management │ └─────────────────────────────────────────────────────────────┘
Account Relationships
┌─────────────┐ owns ┌─────────────┐ │ Program ├─────────────► Data Account│ │ Account ◄─────────────┤ │ └─────────────┘ used by └─────────────┘ ▲ │ │ creates │ ┌──────┴───────┐ │ Program │ │ Derived │ │ Account (PDA)│ └──────────────┘
Key Features
Rent Mechanism: Accounts must maintain a minimum balance or pay rent (recently made optional with the 1.8 upgrade)
Account Size: Fixed size when created, must specify maximum size upfront
Ownership Model: Only the owning program can modify an account's data
Parallel Processing: The account model enables parallel transaction processing by identifying which accounts a transaction will modify
This model enables Solana's high throughput by making it clear which state will be modified by transactions, allowing for parallel execution.

