DEV Community

Cover image for Reading a Token Mint: How I Learned to Inspect On-Chain Configuration
Vinay
Vinay

Posted on

Reading a Token Mint: How I Learned to Inspect On-Chain Configuration

In Web2 you read config files. On Solana you read accounts.

When you join a new team in Web2, your first task is reading configuration files. You open package.json, environment variables, database schemas. You do not start changing things until you understand what is already there. Reading and interpreting existing configuration is a core skill that separates developers who break things from developers who improve things.

On Solana, that same skill applies to on-chain accounts. Every token mint stores its configuration as public account data. The spl-token display command is your cat package.json — it decodes raw bytes into human-readable configuration.

The command

spl-token display [MINT_ADDRESS] \
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Enter fullscreen mode Exit fullscreen mode

The --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb flag tells the CLI to read from the Token Extensions program (Token-2022), not the original SPL Token program.

What the output tells you

Here is the output from an interest-bearing mint I created:

SPL Token Mint
  Address: 7CjQNSGCiXuYAZu6UNn2xGXPEa5wxc1oxLQoj198jFdy
  Program: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  Supply: 0
  Decimals: 9
  Mint authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
Extensions
  Interest-bearing:
    Current rate: 500bps
    Average rate: 500bps
    Rate authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
Enter fullscreen mode Exit fullscreen mode

Each extension occupies its own block. The Interest-bearing block tells me:

  • The current rate is 500 basis points (5%)
  • The rate authority is a specific wallet address

Here is the output from a multi-extension mint (transfer fees + interest + metadata):

Extensions
  Interest-bearing:
    Current rate: 5bps
    Rate authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
  Transfer fees:
    Current fee: 100bps
    Current maximum: 50000
    Config authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
    Withdrawal authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
  Metadata Pointer:
    Authority: 2Cd1SqwosBfgoo8UrxBDBFquZRTt11Cmh1bcPDemn164
  Metadata:
    Name: ArcCoin
    Symbol: ARC
    URI: https://raw.githubusercontent.com/...
Enter fullscreen mode Exit fullscreen mode

How to compare account sizes

Extensions are not free. Each one adds bytes to the account. You can measure this directly:

# Get the data size of any mint
solana account [MINT_ADDRESS] --output json | grep -o '"space":[ ]*[0-9]*' | grep -o '[0-9]*$'

# Calculate the rent cost
solana rent [DATA_SIZE]
Enter fullscreen mode Exit fullscreen mode

I compared three mints and got this:

Mint Type Size Rent Cost
Default-frozen (1 extension) 171 bytes 0.002081 SOL
Interest-bearing (1 extension) 222 bytes 0.002436 SOL
Multi-extension (3 extensions) 599 bytes 0.005060 SOL

The multi-extension mint costs more than double the rent of the simplest. This is not a bug — it is a design tradeoff. More features mean more data, and more data means more SOL to keep the account rent-exempt.


What surprised me

You can see every authority. The display command shows who controls what — mint authority, freeze authority, rate authority, transfer fee config authority, metadata update authority. Some of these cannot be changed after creation. Reading the configuration before deploying to mainnet is how you avoid painting yourself into a corner.

Extensions are stored sequentially as TLV entries. Each extension uses a type-length-value format. The CLI parses them one by one and displays them as blocks. The order in the output matches the order in the raw account data.

Where to go deeper

Being able to read on-chain state is as important as being able to create it. The official docs explain the data model:

Next time you encounter an unfamiliar token on devnet, run spl-token display on it. You will learn more from reading one real configuration than from ten tutorials.

Top comments (0)