General
Tokens on Solana

Tokens on Solana

Mint Accounts and Supply Control

USDC has $28 billion in circulating supply. Circle controls the mint authority. One organization decides how many USDC tokens exist. The mint account makes this explicit.

Every token on Solana has a mint account that defines the token's rules: total supply, decimals, who can create more tokens, who can freeze accounts. These aren't hidden in contract code—they're stored in a public account anyone can inspect.

Mint accounts define who controls supply, what permissions exist, and how tokens enforce scarcity.

The Mint Account Structure

Here's what a mint account contains:

rust
pub struct Mint {
    pub mint_authority: COption<Pubkey>,
    pub supply: u64,
    pub decimals: u8,
    pub is_initialized: bool,
    pub freeze_authority: COption<Pubkey>,
}

mint_authority - Who can create new tokens:

  • Set to an address: That account can mint tokens, increasing supply

  • Set to None: No one can mint. Supply is permanently fixed

  • Can be changed once, then revoked

supply - Total tokens in existence:

  • Increases when tokens are minted

  • Decreases when tokens are burned

  • Stored as raw base units (not accounting for decimals)

decimals - How many decimal places:

  • 0 decimals = indivisible (1 token = 1 base unit)

  • 6 decimals = divisible to millionths (1 token = 1,000,000 base units)

  • 9 decimals = SOL-like precision (1 token = 1,000,000,000 base units)

freeze_authority - Who can freeze token accounts:

  • Set to an address: That account can prevent transfers from specific token accounts

  • Set to None: No freezing capability

  • Independent from mint authority

is_initialized - Whether the mint account has been set up:

  • Prevents using uninitialized account data

  • Set to true when mint account is created

Mint Authority and Supply Control

Mint authority determines who controls token supply. This single field defines whether a token has fixed scarcity or unlimited inflation.

Fixed supply tokens:

rust
mint_authority: None

No one can create more tokens. Supply is capped permanently. Examples:

  • NFTs (supply of 1, no mint authority)

  • Fixed-supply meme coins (total supply minted at launch, authority revoked)

  • Capped tokens (max supply minted, then authority renounced)

Once mint authority is set to None, it's irrevocable. You cannot restore minting capability. The token's maximum supply is whatever exists at that moment.

Unlimited supply tokens:

rust
mint_authority: Some(authority_pubkey)

One address can mint new tokens whenever they want. Examples:

  • USDC (Circle mints when users deposit USD)

  • Stablecoins (issuers mint against collateral)

  • Governance tokens with ongoing emissions

The authority address could be a wallet (centralized control), a program-derived address (programmatic control), or a multisig (distributed control).

Governance-controlled minting:

Many protocols set mint authority to a governance program. Token holders vote on minting new supply. The governance program has mint authority and executes approved mint operations.

This creates programmatic scarcity: supply can increase, but only through defined governance processes.

Freeze Authority

Freeze authority is independent control over token account freezing. An account with freeze authority can prevent specific token accounts from transferring tokens.

Why freeze authority exists:

Compliance for regulated stablecoins. USDC's freeze authority allows Circle to freeze accounts linked to illegal activity or court orders. Your USDC token account can be frozen without your consent.

Fraud prevention for centralized platforms. Exchanges can freeze token accounts if they detect suspicious activity.

How freezing works:

Freeze authority calls FreezeAccount instruction on specific token accounts. Frozen accounts cannot:

  • Transfer tokens out

  • Burn tokens

  • Close the account

They can still:

  • Receive tokens

  • Exist as valid accounts

Thawing reverses the freeze. Only freeze authority can thaw frozen accounts.

Tokens without freeze authority:

rust
freeze_authority: None

No one can freeze any token account. Transfers are always possible (assuming sufficient balance). Examples:

  • Decentralized tokens where freezing contradicts the mission

  • Fixed-supply tokens where control is fully renounced

  • Community tokens valuing censorship resistance

Like mint authority, revoking freeze authority is permanent. Once set to None, freezing becomes impossible forever.

Decimals and Precision

Decimals define how tokens split into smaller units.

0 decimals - Indivisible tokens:

rust
decimals: 0

You can own 1 token or 5 tokens, but not 0.5 tokens. Used for:

  • NFTs (you own 1, not 0.3 of an NFT)

  • Tickets (1 ticket, not a partial ticket)

  • Voting shares (whole votes)

6 decimals - Stablecoin standard:

rust
decimals: 6

USDC and USDT use 6 decimals, matching USD cents with extra precision:

  • 1 USDC = 1,000,000 base units

  • 0.01 USDC (1 cent) = 10,000 base units

  • $0.000001 USDC = 1 base unit

9 decimals - SOL precision:

rust
decimals: 9

SOL uses 9 decimals. 1 SOL = 1,000,000,000 lamports. Many Solana tokens copy this precision for consistency.

Why this matters:

Decimals are set at mint creation and never change. Choose carefully:

  • Too few decimals = insufficient precision for small amounts

  • Too many decimals = unnecessarily large numbers in base units

Programs work with base units internally, converting to decimal representation only for display. 1 USDC in your wallet is stored as 1,000,000 base units. Transfers specify base units. The decimal field tells wallets and explorers how to display the number.

Real Examples

USDC (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v):

text
mint_authority: Some(Circle's authority address)
supply: 28,000,000,000,000,000 (28 billion with 6 decimals)
decimals: 6
freeze_authority: Some(Circle's freeze authority address)

Circle can mint new USDC when users deposit USD. Circle can freeze accounts for compliance. Supply fluctuates based on deposits/withdrawals.

BONK (DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263):

text
mint_authority: None
supply: 93,000,000,000,000,000,000 (93 trillion with 5 decimals)
decimals: 5
freeze_authority: None

Fixed supply. No one can mint more BONK. No one can freeze accounts. Total decentralization of supply control.

Typical NFT mint:

text
mint_authority: None
supply: 1
decimals: 0
freeze_authority: None

One indivisible token. No minting capability. No freeze authority. Pure scarcity and transfer freedom.

Viewing Mint Account Data

Every mint account is public. Anyone can inspect any token's configuration.

On Solana Explorer:

Navigate to the mint address (e.g., USDC's mint). Under "Token" tab, see:

  • Current supply

  • Decimals

  • Mint authority (or "disabled" if None)

  • Freeze authority (or "disabled" if None)

On Solscan:

Search mint address. "Token Info" shows all mint account fields with human-readable formatting.

Programmatically:

Query the mint account data using Solana RPC:

typescript
const mint = await getMint(connection, mintAddress);

console.log("Supply:", mint.supply.toString());
console.log("Decimals:", mint.decimals);
console.log("Mint Authority:", mint.mintAuthority);
console.log("Freeze Authority:", mint.freezeAuthority);

This transparency is architectural. Ethereum tokens hide authority in contract code. Solana tokens declare authority in public account fields. No code reading required—just inspect the account.

Creating and Managing Mint Accounts

Creating a mint account requires:

  1. Allocate space for the mint account (82 bytes)

  2. Transfer rent-exempt SOL to the account (currently ~0.00144 SOL)

  3. Assign ownership to SPL Token program

  4. Initialize the mint with decimals and authorities

After creation, mint authority can:

  • Mint new tokens to any token account

  • Transfer mint authority to another address

  • Revoke mint authority (set to None)

After creation, freeze authority can:

  • Freeze specific token accounts

  • Thaw frozen accounts

  • Transfer freeze authority to another address

  • Revoke freeze authority (set to None)

Supply increases through minting, decreases through burning. The mint account automatically tracks total supply. Programs querying mint supply see real-time totals.

Security Implications

Mint authority is trust. Holding a token with mint authority means trusting that authority won't inflate supply unpredictably.

Centralized mint authority risks:

  • Authority can mint unlimited tokens, diluting holders

  • Single private key controls supply (theft or loss)

  • No transparency on minting decisions

Decentralized solutions:

  • Set mint authority to None (fixed supply)

  • Use governance program as mint authority (token holder control)

  • Use multisig as mint authority (distributed control)

  • Publish minting schedule and enforce programmatically

Freeze authority is power. Tokens with freeze authority can prevent you from transferring. Your wallet holds tokens you can't move.

When freeze authority is reasonable:

  • Regulated stablecoins (legal compliance requirements)

  • Centralized platforms (fraud prevention)

  • Experimental tokens (emergency controls)

When to avoid it:

  • Decentralized protocols (censorship resistance matters)

  • Store-of-value tokens (transfer freedom essential)

  • Community tokens (no single authority should control)

Always check mint and freeze authority before holding significant value. A token with centralized control might be fine for trading but risky for long-term storage.

Mint accounts reveal power structures. Who controls supply? Who can freeze accounts? The mint account answers these questions explicitly.

Next: understanding token accounts and how balances are tracked per owner.

Contents
View Source
Blueshift © 2026Commit: 0c864b3