惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
aimingoo的专栏
aimingoo的专栏
I
InfoQ
IT之家
IT之家
罗磊的独立博客
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
博客园_首页
Engineering at Meta
Engineering at Meta
Martin Fowler
Martin Fowler

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
What I learned minting NFTs on Solana with Token Extensio...
Siddhant Chavan · 2026-06-13 · via DEV Community

Siddhant Chavan

What I learned minting NFTs on Solana with Token Extensions

Before this week, I thought creating a Solana NFT meant using a marketplace stack or relying on a separate metadata program. I wanted to understand what actually happens underneath.

It turns out an NFT on Solana is still built from the same token primitives I had already been working with: a mint, a supply of one, zero decimals, and extensions that add meaning directly on-chain.

This week I went from creating a basic 1-of-1 token to building a complete NFT with metadata, collections, and on-chain verification using Token Extensions.

The mental model: what an NFT actually is on Solana

The biggest shift was realizing that an NFT is not a completely different asset type.

At the core, it is still a token mint.

The difference is:

  • Supply is exactly 1
  • Decimals are 0
  • Mint authority is disabled so no more copies can be created

In Web2 terms, imagine creating a database row where the ID is unique, the quantity can never increase, and ownership history is tracked publicly.

The first NFT I created started with a simple mint:

solana config set --url https://api.devnet.solana.com

spl-token create-token --decimals 0

spl-token create-account [YOUR_MINT_ADDRESS]

spl-token mint [YOUR_MINT_ADDRESS] 1

spl-token authorize [YOUR_MINT_ADDRESS] mint --disable

After this, the token was technically an NFT, but it had no identity.

No name.
No image.
No metadata.

It was just an on-chain asset waiting for more information.

What I built: metadata, collections, and extensions

The next step was adding identity.

With Token Extensions, metadata can live directly with the mint account instead of depending on a separate metadata account.

The metadata extension allowed me to attach:

  • Name
  • Symbol
  • Image URI
  • Attributes

The flow looked like this:

spl-token create-token \
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
  --enable-metadata \
  --decimals 0

spl-token initialize-metadata \
  [YOUR_MINT_ADDRESS] \
  "First Light" \
  "LIGHT" \
  [YOUR_METADATA_URI]

Seeing the NFT appear in Solana Explorer with its own metadata was the moment it stopped feeling like a token experiment and started feeling like an actual NFT.

The next challenge was collections.

A real NFT usually belongs to something bigger. A collection is basically another mint that acts as the parent.

The Group extension creates the collection:

spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb create-token \
  --decimals 0 \
  --enable-group

Then member NFTs reference that group using the Member extension:

spl-token initialize-member MEMBER_ONE_MINT COLLECTION_MINT

Now the relationship exists fully on-chain:

Collection → NFT members

Similar to a database foreign key connecting two tables.

The surprising part: what was different from Web2

Coming from Web2 development, I expected NFTs to be mostly application logic.

A database stores metadata.
A backend verifies ownership.
A frontend renders the result.

Solana flips a lot of that thinking.

The blockchain itself becomes the source of truth.

The mint account contains the structure.
Extensions define additional capabilities.
Explorer tools can directly read and display the data.

I also found it interesting that metadata is not just a static image attached forever.

The update authority can modify fields:

spl-token update-metadata [MINT_ADDRESS] name "Field Notes"

spl-token update-metadata [MINT_ADDRESS] rarity legendary

spl-token update-metadata [MINT_ADDRESS] rarity --remove

This felt very similar to updating a database record, except the change happens through a blockchain transaction.

What I would build next

After understanding the building blocks, the next step would be building an actual NFT application around them.

Some ideas:

  • A Flutter mobile app that creates and manages NFTs
  • An NFT dashboard that reads extensions directly from Solana
  • A creator platform where users mint collections without writing CLI commands
  • AI-generated NFTs with dynamic metadata updates

The biggest lesson from this week:

NFTs are not magic objects. They are carefully designed token structures with rules, ownership, metadata, and relationships.

Understanding the primitives makes the whole ecosystem easier to build on.

This post is part of #100DaysOfSolana. Follow along or jump in any day.

Beginner #DEV