Chapter 2 of Solana Accounts: Programs, Wallets, Mints & Token Accounts Explained

Chapter 2 of Solana Accounts: Programs, Wallets, Mints & Token Accounts Explained

TL;DR

  • Solana Accounts 101: Programs, Wallets, Mints, and Token Accounts.
  • Program Accounts run executable code; Wallet Accounts represent users.
  • Mint Accounts define tokens, while Token Accounts store user balances.
  • Understanding these relationships is the foundation for building on Solana.

This article was prepared by Core Dev Team and edited by Marketing team of Nodit

In the previous chapter, we walked through the core pieces of Solana’s architecture - from how it achieves parallel execution, to the way its account model works, to the high-speed infrastructure that keeps everything running. (If you missed it, go check it out! Here)

For this chapter, we will go a layer deeper which is one of the most important ideas to understand in Solana “Every piece of data on Solana is stored inside an Account.”

It doesn’t matter whether it’s token data, program state, metadata, or anything in between — if it lives on Solana, it lives in an Account.


All Data on Solana Lives Inside an Account

Solana does not use “contracts” with internal storage like Ethereum.

Instead, Solana breaks everything into Accounts, and each Account contains:

  • lamports (SOL balance)
  • owner program (which program is allowed to modify it)
  • optional data field (up to 10MB)
  • executable flag (true/false)

Different account types simply represent different combinations of these fields.

There are four foundational account types every developer must understand:

  1. Program Accounts
  2. Wallet Accounts
  3. Mint Accounts
  4. Token Accounts (including ATAs)

Let's break them down.

1️⃣ Program Account, the core component that powers execution on Solana.

If you're coming from Ethereum, you might instinctively think of this as a “smart contract.”

That comparison isn’t wrong, but it’s not the full picture.

On Solana, a Program is simply an Account marked as executable.

That’s it. Nothing mystical. No hidden VM tricks.

Just an Account whose executable = true.

In a typical setup, you’ll see three main parts:

  1. BPF LoaderThe system component responsible for loading and verifying program binaries.(We can safely ignore this for now.)
  2. Program AccountThis is the account that actually contains your compiled BPF code.
  3. Data AccountThis is where your program’s state is stored.

💡And here’s the key rule you need to remember:

👉 Only the Program that owns a Data Account is allowed to modify the data inside it.

This ownership model is central to how Solana enforces account-level permissions.

2️⃣ Wallet Accounts: one of the simplest account types on Solana

Now that we’ve looked at Program Accounts, let’s shift to something most of us interact with every day: Wallet Accounts.

And honestly? They’re one of the simplest account types on Solana.

At the end of the day, a wallet is just… an Account.

But it has two traits that make it stand out:

  • It’s not executable
  • It’s owned by the System Program

No hidden logic, no fancy flags — just a basic account managed by one of Solana’s built-in system programs.

If you’re wondering what the System Program actually is, think of it as:

Solana’s “account manager” — the built-in program responsible for creating and configuring accounts.

It’s deployed by the Solana Foundation and comes baked into the network.

Whenever you make a new account, guess who’s behind it? Exactly! It’s the System Program.

It handles things like:

  • Creating new accounts
  • Funding them with rent-exempt SOL
  • Assigning their owner (which Program can modify them)

So if a wallet exists, it’s because the System Program helped set it up.

Hints:How Accounts Get Created (The Part Every Dev Should Know)

Creating an account in Solana always follows a similar pattern, whether it’s a wallet, a data account, or something more custom.

When you call create_account, here’s what’s happening behind the scenes:

  1. You generate a new public key
  2. You deposit enough SOL to make it rent-exempt
  3. You decide how much data space it needs
  4. You assign a Program that “owns” it

In Rust language, that looks something like:

solana_program::system_instruction::create_account(
    &from_pubkey,         // Who pays for the account
    &new_account_pubkey,  // The account being created
    lamports,             // Rent-exempt amount
    space,                // Data size
    &owner_program_id     // Program that owns this account
)

Once this clicks, Solana’s account model suddenly becomes way less intimidating.

💡Plus: What About the BPF Loader?

We saw something called the BPF Loader, so let’s give it 30 seconds of attention in earlier.

Every executable Program on Solana is owned by a Loader.

There are a few versions, but developers mostly encounter:

  • BPF Loader v3 (supports upgradable programs)
  • BPF Loader v4 (the newer standard)

Think of the Loader as the runtime environment that knows how to load, verify, and run your program code.

It’s not something you touch often, but it’s important to know it exists.


SPL (Solana Program Library): The Token Standard Every Solana Dev Touches

Before we go deeper into how Solana handles data and accounts, we need to talk about something you’ll almost certainly encounter when building on Solana: SPL, the Solana Program Library. SPL provides the standard on-chain programs that allow developers to create and manage tokens. In that case, any token issued through this library is simply called an SPL Token.

If you’re coming from Ethereum, the idea should feel familiar:

SPL Tokens are to Solana what ERC-20 tokens are to Ethereum —a shared standard that ensures consistent behavior across apps and wallets.

Types of Token Programs

1. SPL Token Program (Classic standard)

Program ID: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

This is the original token standard on Solana, responsible for minting and managing both:

  • Fungible tokens (the typical “SPL Token”)
  • NFTs (technically SPL Tokens with 0 decimals)

It supports all the basic operations you’d expect:

  • Mint / burn
  • Transfer
  • Approvals
  • Creating associated token accounts

But it does have limitations.

The classic SPL Token Program doesn’t support more flexible features such as:

  • Custom fee rules
  • Pre-transfer validation or hooks
  • Built-in lock/vesting mechanisms
  • Conditional transfers

These limitations eventually led to the next evolution of the token program.

2. Token Extensions (introduced after 2022)

Program ID: TokenzQdYJ7eFZdDZzgdqHrAe7jCLsZ2Nwuzs3d7T1gX

Token Extensions are essentially an upgraded, more modular version of the original SPL token program.

They add optional features that can be enabled depending on the token’s requirements.

Some examples include:

  • Transfer hooks — run logic before/after transfers
  • Memo requirements — enforce transaction memos
  • Transfer fees — automatically deduct custom fees
  • …and more

This opens the door for more sophisticated token use cases that weren’t possible under the original SPL Token standard.

Way to create a token with the Token Program

Now that we know what the Token Program is, the next question is obvious:

How does a token actually get created on Solana?

This diagram is a great way to visualize how token ownership works on Solana. Even though everything—wallets, token accounts, mints—are technically just “Accounts,” they each have a very different purpose.

Let’s break it down.

When you look at the Token Program in action, you’ll see three different types of Accounts involved that’s really important to understand what each one represents.

Here are the three players:

1️⃣ Wallet Account — the user’s wallet (your regular keypair)

Wallet Account (owned by the System Program)

On the left, you’ll see the Wallet Account, and it’s owned by the System Program.

This makes sense because wallets are just basic accounts created by Solana’s built-in account manager.

A wallet:

  • has a private key you control
  • can sign transactions
  • cannot hold any token balance directly

This last part is important:

your wallet owns your tokens, but your wallet address does not store their balance.

2️⃣ Token Account — an account that can hold a specific token

Token Account (owned by your Wallet, but managed by the Token Program)

In the center is the Token Account, and this is where the actual token balance lives.

A Token Account stores:

  • mint → which token it belongs to
  • owner → who controls this account (usually your wallet)
  • amount → how many tokens it holds

A wallet needs a separate Token Account for each token type:

  • 1 ATA for USDC
  • 1 ATA for wSOL
  • 1 ATA for your custom token
  • etc.

The Token Program owns the Token Account (so only the Token Program can modify balances),

but your wallet owns the authority over that Token Account.

The Mint defines what the token is, and the wallet needs a Token Account to actually receive any of those tokens. We can illustrate this more clearly in the diagram below.

3️⃣ Mint Account — the account that stores the metadata and configuration of the token itself

On the right, you see the Mint Account.

This account is also owned by the Token Program because it's entirely managed through token instructions.

The Mint Account defines:

  • the token’s decimal places
  • the total supply
  • the authority that can mint or freeze
  • the identity of the token itself

Think of the Mint Account as the “specification sheet” or “DNA” of the token. Each one plays a completely different role, even though they’re all just “Accounts” under the hood.

To visualize the relationship between a Wallet Account and a Mint Account, it will be looked like this:

Example of “Token Program”:

USDC Token Architecture Overview

1. USDC Mint Account

  • Address: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
  • Owner: Token Program
  • Key Fields: decimals, mint authority, total supply, etc.

The Mint Account represents the token definition itself—similar to a token contract address on an EVM chain. It contains the metadata and authorities responsible for managing the token.

Mint struct example:

pub struct Mint {
    pub mint_authority: COption<Pubkey>,    // Entity allowed to mint new tokens
    pub supply: u64,                        // Total token supply
    pub decimals: u8,                       // Number of decimal places
    pub is_initialized: bool,               // Initialization status
    pub freeze_authority: COption<Pubkey>,  // Authority able to freeze accounts
}

2. My USDC Token Account

  • Address: 9zsHDPqNomhse5tz5wHz1usun9gi8UmiQ5KeBF6dmS5u
  • Owner: Token Program
  • Key Fields: owner, mint reference, balance, etc.

A Token Account tracks the balance of a specific user for a specific Mint. In other words, it represents how much of that token a user owns.

Token Account struct example:

pub struct Account {
    pub mint: Pubkey,            // Mint this account is tied to
    pub owner: Pubkey,           // Actual owner of the account
    pub amount: u64,             // Token balance
    pub delegate: COption<Pubkey>,
    pub state: AccountState,
    pub is_native: COption<u64>,
    pub delegated_amount: u64,
    pub close_authority: COption<Pubkey>,
}

✔️ Summary Flow Diagram

[MINT ACCOUNT]
       ↓ defines token
       ↓
[USER WALLET]
       ↓ derives PDA
       ↓
[ASSOCIATED TOKEN ACCOUNT]
       ↑ holds user balance
       |
MintTo → increases balance
Transfer → moves balance
Burn → decreases balance

3. Associated Token Account (ATA)

An Associated Token Account (ATA) is the default token account each user has for a specific token.

Instead of manually creating token accounts, Solana derives this address automatically from:

  • the user’s wallet address, and
  • the token’s Mint address

(using a PDA derivation).

This guarantees there is one canonical token account per user per token, making token handling predictable for wallets and applications.

Your wallet holds the authority to use the ATA, while the Token Program manages its internal token balance.

Summary of This Chapter

To wrap up, remember this foundational idea:

Solana’s entire ecosystem is built on Accounts. Whether it’s a wallet, a token balance, or the program code itself, it all lives inside different types of Accounts with different owners and permissions.

For the next chapter, we’ll break down the internal structure of these Accounts and explore how data is organized on-chain. Stay tuned for more! In the meantime, if you’re attending Solana Breakpoint 2025 for infrastructure strategy, technical exchange, or guidance on building. Let’s connect!


🔎About Nodit

Nodit is a platform that provides reliable node and consistent data infrastructure to support the scaling of decentralized applications in a multi chain environment. The core technology of Nodit is a robust data pipeline that performs the crawling, indexing, storing, and processing of blockchain data, along with a dependable node operation service. Through its new Validator as a Service (VaaS) offering, Nodit delivers secure, transparent, and compliant validator operations that ensure stability, performance visibility, and regulatory assurance.

By utilizing processed blockchain data, developers and enterprises can achieve seamless on chain and off chain integration, advanced analytics, comprehensive visualization, and artificial intelligence modeling to build outstanding Web3 products.

Homepage l X (Twitter) l Linkedin

Join us and build more👊🏻

👉Start for Free (Click)

Read more

Chapter 3 of Solana: A Technical Guide to Solana’s Account Model and On-Chain Data

Chapter 3 of Solana: A Technical Guide to Solana’s Account Model and On-Chain Data

TL;DR * Solana’s account-centric model enables parallel execution, precise state isolation, and high-throughput performance. * Real on-chain analysis requires understanding how accounts, instructions, and logs work together to reflect user intent and asset movement. * Low-level decoding (signatures, logs, balances, and discriminators) reveals the mechanics behind each transaction. * Tools like Anchor

By Nodit Team
Chapter 1 of Solana Architecture Explained: Parallel Execution, Account Model, and High-Speed Infrastructure

Chapter 1 of Solana Architecture Explained: Parallel Execution, Account Model, and High-Speed Infrastructure

TL;DR * Solana’s strength lies in parallelism, speed, and data granularity. * Its Account Model and Sealevel runtime let developers build scalable, low-cost applications — from DeFi to meme ecosystems. * But its infrastructure requirements are steep — and Nodit helps developers and enterprises handle that complexity with optimized Node APIs. * Meet Nodit

By Nodit Team
Trusted Validator Stability with Transparent Performance and Regulatory Assurance: Introducing Nodit’s Validator as a Service (VaaS)

Trusted Validator Stability with Transparent Performance and Regulatory Assurance: Introducing Nodit’s Validator as a Service (VaaS)

TL;DR * Nodit has officially announced its Validator-as-a-Service (VaaS) initiative — a non-custodial enterprise solution that helps organizations participate in blockchain networks with full control and confidence. * Backed by Lambda256, a subsidiary of Dunamu, the operator of Upbit, Nodit brings proven blockchain infrastructure expertise and institutional reliability to validator operations. * Compliance

By Nodit Team