Dahulu saya menganggap bahawa membina NFT di Solana bermaksud perlu bergelut dengan Metaplex. Itulah jalan yang dicadangkan oleh setiap tutorial: jalankan Candy Machine, uruskan akaun metadata, dan kendalikan pelbagai program berasingan hanya untuk menyertakan nama dan imej pada sesuatu token. Rupa-rupanya, andaian itu sudah ketinggalan zaman. Program Token Extensions, yang juga dikenali sebagai Token-2022, telah meringkaskan kerumitan tersebut ke dalam akaun mint itu sendiri. Anda kini boleh mencipta NFT yang berfungsi sepenuhnya tanpa perlu menyentuh program metadata atau membiayai akaun tambahan. Anda hanya perlu menukar beberapa flag, menulis data terus ke akaun mint, dan selesai.
Ini mengubah cara pembangun harus berfikir tentang aset digital di Solana. Dalam pembangunan web tradisional, NFT terasa seperti struktur data yang berbeza, sesuatu yang memerlukan jadual dan skema tersendiri. Di Solana, realitinya lebih rata dan lebih elegan. NFT bukanlah objek khas yang diuruskan oleh protokol luaran. Ia hanyalah akaun mint yang dikonfigurasikan dengan bekalan tepat satu dan sifar perpuluhan. Token standard membolehkan anda membahagikan unit kerana ia mempunyai bekalan yang besar dan banyak perpuluhan. NFT mengunci bekalan kepada satu unit tunggal yang tidak boleh dibahagikan. Segala yang menjadikannya unik berada dalam extension yang disertakan bersama akaun mint teras tersebut.
Cara Lama dan Cara Baharu
Sebelum Token Extensions, stack kanonikal melibatkan program SPL Token untuk mint itu sendiri, ditambah dengan Metaplex untuk metadata, koleksi, dan kadangkala pengindeksan luar rantaian (off-chain indexing). Metadata berada dalam akaun berasingan, yang dihubungkan melalui alamat yang perlu anda pantau. Ia berfungsi, tetapi ia menambah kerumitan. Lebih banyak akaun bermakna lebih banyak sewa (rent), lebih banyak laluan tandatangan, dan lebih banyak logik bahagian klien untuk menyelesaikan gambaran penuh sesuatu token.
Token Extensions menggantikan penyebaran tersebut dengan menyatukan keupayaan terus ke dalam mint. Perlukan nama, simbol, dan penunjuk ke media luar rantaian? Aktifkan metadata extension. Perlu mengumpulkan token ke dalam satu koleksi? Gunakan extension Group dan Member. Mint tersebut menjadi satu-satunya sumber kebenaran (single source of truth). Bagi pembangun yang biasa dengan pangkalan data hubungan (relational databases), peralihan ini terasa seperti berpindah daripada seni bina mikroperkhidmatan teragih kembali kepada jadual ternormal dengan kunci asing (foreign keys) yang direka dengan baik.
Anatomi NFT Berasaskan Extension
Mencipta NFT dengan Token Extensions memerlukan pemahaman tentang apa sebenarnya yang menjadikan sesuatu token itu tidak boleh tukar (non-fungible) pada rantaian ini. Bekalan mesti bersamaan dengan satu. Perpuluhan mesti bersamaan dengan sifar. Dua kekangan tersebut menghalang pembahagian pecahan (fractionalization). Sebaik sahaja parameter tersebut ditetapkan, anda boleh mengaktifkan extension yang menyimpan medan tambahan terus pada akaun mint.
Metadata extension menyimpan nama, simbol, dan URI. URI tersebut merujuk kepada fail JSON, yang biasanya dihoskan pada storan terdesentralisasi atau pelayan web standard, yang menerangkan imej, atribut, dan ciri-ciri (traits). Tiada akaun metadata berasingan untuk dikesan dan dinyahserial (deserialize). Data tersebut berada pada mint itu sendiri, yang bermaksud explorer, dompet, dan perisian klien boleh membaca identiti teras token tersebut dengan hanya memeriksa satu akaun.
Saya menguji perkara ini sendiri di devnet. Saya mencipta mint baharu dengan metadata extension yang diaktifkan, kemudian menulis nama dan simbol terus ke dalam keadaan (state) mint tersebut. Transaksi berjaya, dan hasilnya muncul serta-merta dalam Solana Explorer. Tiada akaun kedua untuk dibiayai atau dicari. Kesederhanaannya hampir mengejutkan selepas berminggu-minggu bekerja dengan metadata Metaplex yang melibatkan pelbagai akaun.
Membina Koleksi Seperti Baris Pangkalan Data
Koleksi adalah langkah logik seterusnya. Dalam model lama, pengumpulan NFT biasanya bermaksud bergantung pada Metaplex Certified Collections atau daftar luar rantaian (off-chain registries). Token Extensions memperkenalkan dua primitif khusus: extension Group dan extension Member.
Begini aliran logiknya. Anda mencipta satu mint tunggal yang bertindak sebagai pengepala (header) koleksi dan mengaktifkan extension Group padanya. Kemudian, bagi setiap NFT individu dalam koleksi tersebut, anda mencipta mint dengan extension Member yang diaktifkan. Setiap mint ahli menyimpan penunjuk (pointer) kembali ke alamat mint koleksi tersebut. Hubungan tersebut berfungsi tepat seperti kunci asing (foreign key) dalam pangkalan data hubungan. Baris koleksi wujud sekali, dan setiap baris ahli merujuk kepadanya tanpa menduplikasi identiti koleksi tersebut.
Saya membina satu koleksi ujian kecil dengan cara ini di devnet. Mint koleksi utama membawa flag group. Token individu membawa flag member dan merujuk kepada alamat induk. Melakukan pertanyaan (querying) pada rantaian memberikan saya struktur yang bersih dan boleh dilalui (traversable). Tiada keperluan untuk pengindeks pihak ketiga untuk meneka sama ada token-token tersebut saling berkaitan. Hubungannya adalah eksplisit dan on-chain.
Open Schema and On-Chain Experimentation
One detail that stands out is the open schema of the metadata extension. Older standards often enforce a fixed field list. If you wanted to store something non-standard on-chain, you were stuck putting it in off-chain JSON or hacking around rigid account layouts.
Token Extensions takes a different approach. Because the metadata extension accepts custom fields, I was able to add a rarity attribute directly to the mint account. I wrote the field, sent the transaction, and refreshed the Solana Explorer. The rarity value appeared instantly alongside the name and symbol. For game developers or anyone building dynamic assets, this flexibility matters. You can surface critical traits on-chain without needing an external verifier to parse JSON.
The Off-Chain Gap: URIs and Caching
For all the elegance of on-chain storage, one lesson cut through clearly: identity still lives off-chain. The mint does not store your image. It stores a URI. When I updated that URI and committed the change to devnet, the chain reflected the new pointer immediately. Block explorers showed the updated link without delay.
But my wallet lagged. It continued displaying the old image for minutes, stubbornly serving a cached version while the underlying data on-chain had already changed. This is a practical reality developers must plan for. The Solana ledger is fast. Confirmation times are short. Yet the visual layer that users interact with depends on HTTP caches, CDN propagation, and wallet-specific refresh intervals. If you build a dynamic NFT that changes based on real-world events, you cannot assume the user sees the change the moment the transaction lands. You need cache-busting strategies, versioning in your URI paths, or explicit refresh triggers in your frontend.
What Comes Next
My devnet experiments have laid the groundwork for a more dynamic project. The next step is a collection
