I spent years thinking "creating a token" meant writing complex smart contract
code, deploying it, hoping nothing breaks. Today on Day 30 of my
100DaysOfSolana challenge, I created a fully branded token — with a name,
symbol, and on-chain metadata — in under 5 minutes. No Solidity. No Rust.
Just a CLI.
Here's exactly what I did and what it means.
The Problem with Yesterday's Token
On Day 29, I created my first SPL token on Solana devnet. It worked — but
when I looked it up on Solana Explorer, it showed up as "Unknown Token." Just
a random address with no name, no symbol, no identity.
That's like launching a rewards program for your app but forgetting to give
it a name. Users would see a random ID and have no idea what it represents.
Today I fixed that using Token-2022 — Solana's next-generation token program.
Token-2022 vs the Original SPL Token Program
The original SPL Token Program is solid but basic. To add metadata (name,
symbol, image), you'd traditionally need a separate Metaplex account — an
extra transaction, extra cost, extra complexity.
Token Extensions Program (Token-2022) changes this. It lets you embed
metadata directly inside the mint account itself. One account. Everything
in one place. Fewer transactions, lower cost.
Think of it like this:
| Web2 Concept | Solana Equivalent |
|---|---|
| Reward program definition | Mint account |
| Display name / branding | On-chain metadata (name, symbol, URI) |
| User balance record | Associated Token Account (ATA) |
| Transfer API |
spl-token transfer instruction |
What I Built: 100DaysCoin (HUNDO)
- Token name: 100DaysCoin
- Symbol: HUNDO
- Decimals: 6
- Program: Token Extensions (Token-2022)
-
Mint:
3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt
Step-by-Step: How I Did It
Step 1: Create the mint with metadata enabled
spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--enable-metadata \
--decimals 6
The --program-id flag tells the CLI to use Token-2022 instead of the
original SPL Token Program. The --enable-metadata flag activates the
metadata extension on the mint.
Output: Creating token 3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt
Address: 3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt
Decimals: 6
Step 2: Initialize on-chain metadata
spl-token initialize-metadata \
3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt \
"100DaysCoin" "HUNDO" \
"https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"
This writes the token's name, symbol, and a URI directly onto the mint
account. The URI points to a JSON file with extended details — description,
image, attributes. This is now verifiable by anyone on-chain.
Step 3: Create a token account and mint supply
spl-token create-account 3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt
spl-token mint 3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt 1000
Balance check: 1000
Step 4: Transfer tokens to a second wallet
solana-keygen new --outfile ~/second-wallet.json --no-bip39-passphrase
spl-token transfer 3zX5oyL9skYKWo2ZoUHgBwLpG9BzLe1ViuXLgH8joqFt 250 \
$(solana-keygen pubkey ~/second-wallet.json) \
--fund-recipient --allow-unfunded-recipient
The --fund-recipient flag is key — it automatically creates the recipient's
Associated Token Account (ATA) and covers the rent cost from my wallet. In
Web2 terms, it's like your API automatically creating a user's balance row
before their first transaction.
Final balances
My wallet: 750 HUNDO ✅
Second wallet: 250 HUNDO ✅
The "Aha" Moment
In Web2, building a token/rewards system means:
- Database schema for the currency definition
- CRUD API endpoints for balance management
- Custom transfer logic with double-spend protection
- A server running 24/7 to keep it all alive
On Solana with Token-2022:
-
create-token= currency definition -
create-account= user balance row -
transfer= transfer API - Zero server. Zero maintenance. Publicly verifiable.
And critically — the metadata lives on-chain. Not in your database. Not
on your server. On a public ledger that anyone can read, forever.
What's Next
Day 31 onward: deeper into token extensions — transfer fees,
interest-bearing tokens, and eventually building tokens with real utility.
The foundation is set.
🔗 Full code + notes: GitHub
🔗 Mint on Explorer: Solana Explorer
Building daily → @GopichandAI | #100DaysOfSolana Day 30/100
Top comments (0)