Nilikuwa nikidhani kwamba kutengeneza NFT kwenye Solana kulihitaji kupambana na Metaplex. Huo ndio ulikuwa mwelekeo uliopendekezwa na kila mafunzo: kuanzisha Candy Machine, kusimamia akaunti za metadata, na kutumia programu tofauti ili tu kuunganisha jina na picha kwenye tokeni. Inatokea kwamba dhana hiyo imepitwa na wakati. Programu ya Token Extensions, inayojulikana pia kama Token-2022, imepunguza utata huo kwa kuingiza kila kitu ndani ya mint yenyewe. Sasa unaweza kutengeneza NFT inayofanya kazi kikamilifu bila kugusa programu ya metadata au kuwekeza fedha kwenye akaunti za ziada. Unawasha bendera (flags) chache, unaandika data moja kwa moja kwenye akaunti ya mint, na umemaliza.
Hii inabadilisha jinsi watengenezaji wanapaswa kufikiria kuhusu rasilimali za kidijitali kwenye Solana. Katika uundaji wa tovuti wa kawaida, NFT inahisiwa kama muundo wa data tofauti, kitu kinachohitaji jedwali (table) na schema yake yenyewe. Kwenye Solana, uhalisia ni rahisi zaidi na wa kisasa zaidi. NFT si kitu maalum kinachosimamiwa na itifaki (protocol) ya nje. Ni akaunti ya mint tu iliyosanidiwa na upatikanaji (supply) wa moja kwa moja na sifuri decimals. Tokeni ya kawaida inakuwezesha kugawanya vipimo kwa sababu ina upatikanaji mkubwa na decimals nyingi. NFT inafunga upatikanaji kwenye kitengo kimoja ambacho hakiwezi kugawanywa. Kila kitu kinachofanya iwe ya kipekee kipo kwenye extensions zinazoambatana na akaunti hiyo kuu ya mint.
Njia ya Zamani na Njia Mpya
Kabla ya Token Extensions, mfumo wa kawaida ulihusisha programu ya SPL Token kwa ajili ya mint yenyewe, pamoja na Metaplex kwa ajili ya metadata, collections, na wakati mwingine off-chain indexing. Metadata ilikuwa kwenye akaunti tofauti, zikiunganishwa na anwani (addresses) ambazo ilibidi uzifuatilie. Ilifanya kazi, lakini ilileta utata zaidi. Akaunti nyingi zilimaanisha kodi (rent) zaidi, njia nyingi za kusaini (signing paths), na mantiki zaidi upande wa mteja (client-side logic) ili kupata picha kamili ya tokeni.
Token Extensions inachukua nafasi ya mtawanyiko huo kwa kuingiza uwezo moja kwa moja ndani ya mint. Unahitaji jina, alama (symbol), na kiashiria (pointer) cha media za off-chain? Washa metadata extension. Unahitaji kuweka tokeni kwenye mkusanyiko (collection)? Tumia Group na Member extensions. Mint inakuwa chanzo kimoja cha ukweli (single source of truth). Kwa watengenezaji waliozoea kanzi data za uhusiano (relational databases), mabadiliko haya yanahisi kama kuhama kutoka usanifu wa microservices uliotawanyika kurudi kwenye jedwali lililonyooka (normalized table) lenye foreign keys zilizoundwa vizuri.
Muundo wa NFT Inayotegemea Extension
Kutengeneza NFT kwa kutumia Token Extensions kunahitaji kuelewa hasa nini kinachofanya tokeni isiwe ya kubadilishika (non-fungible) kwenye mnyororo huu. Upatikanaji (supply) lazima uwe mmoja. Decimals lazima ziwe sifuri. Vikwazo hivyo viwili huzuia kugawanywa kwa sehemu (fractionalization). Mara tu vigezo hivyo vinapowekwa, unawasha extensions zinazohifadhi maelezo ya ziada moja kwa moja kwenye akaunti ya mint.
Metadata extension inahifadhi jina, alama, na URI. URI hiyo inaashiria faili ya JSON, ambayo kwa kawaida huhifadhiwa kwenye hifadhi isiyo ya kati (decentralized storage) au seva ya kawaida ya wavuti, inayoelezea picha, sifa (attributes), na tabia (traits). Hakuna akaunti ya metadata tofauti ya kutafuta na kuifafanua (deserialize). Data inakaa kwenye mint yenyewe, kumaanisha kuwa explorers, wallet, na programu za mteja zinaweza kusoma utambulisho wa msingi wa tokeni kwa kuangalia akaunti moja tu.
Nilijaribu hili mwenyewe kwenye devnet. Nilitengeneza mint mpya ikiwa na metadata extension imewashwa, kisha nikaandika jina na alama moja kwa moja kwenye hali ya mint (mint state). Muamala ulifanikiwa, na matokeo yalijitokeza mara moja kwenye Solana Explorer. Hakukuwa na akaunti ya pili ya kuwekeza fedha au kuitafuta. Urahisi huo ulikuwa wa kushangaza baada ya wiki kadhaa za kufanya kazi na metadata za Metaplex zenye akaunti nyingi.
Kujenga Collections Kama Safu za Kanzi Data
Collections zilikuwa hatua inayofuata ya kimantiki. Katika mfumo wa zamani, kuweka NFTs kwenye makundi mara nyingi kulimaanisha kutegemea Metaplex Certified Collections au rejista za off-chain. Token Extensions inaleta mbinu mbili mahususi: Group extension na Member extension.
Hivi ndivyo mantiki inavyofanya kazi. Unatengeneza mint moja inayofanya kazi kama kichwa cha mkusanyiko (collection header) na kuwasha Group extension kwenye hiyo. Kisha, kwa kila NFT inayojitegemea kwenye mkusanyiko huo, unatengeneza mint ikiwa na Member extension imewashwa. Kila mint ya mwanachama (member mint) huhifadhi kiashiria (pointer) kinachorudi kwenye anwani ya mint ya mkusanyiko. Uhusiano huo unafanya kazi sawa kabisa na foreign key kwenye kanzi data ya uhusiano (relational database). Safu ya mkusanyiko (collection row) ipo mara moja, na kila safu ya mwanachama inairejelea bila kunakili utambulisho wa mkusanyiko.
Nilitengeneza mkusanyiko mdogo wa majaribio kwa njia hii kwenye devnet. Mint kuu ya mkusanyiko ilikuwa na bendera ya group. Tokeni binafsi zilikuwa na bendera ya member na zilirejelea anwani ya mzazi (parent address). Kuuliza mnyororo (querying the chain) kunanipa muundo safi na unaoweza kupitiwa kwa urahisi. Hakukuwa na haja ya indexer wa tatu kukisia ikiwa tokeni zilikuwa zimeunganishwa. Uhusiano huo uko wazi na uko kwenye mnyororo (on-chain).
Schema ya Wazi na Majaribio ya On-Chain
Jambo moja linalojitokeza ni schema ya wazi ya metadata extension. Viwango vya zamani mara nyingi huweka orodha maalum ya nyanja (fields). Ikiwa unataka kuhifadhi kitu kisicho cha kawaida kwenye mnyororo (on-chain), ingalibidi uweke kwenye JSON ya nje ya mnyororo (off-chain JSON) au utumie mbinu za kando kwenye mpangilio thabiti wa akaunti.
Token Extensions inatumia mbinu tofauti. Kwa sababu metadata extension inakubali nyanja maalum (custom fields), niliweza kuongeza sifa ya nadra (rarity attribute) moja kwa moja kwenye akaunti ya mint. Niliandika nyanja hiyo, nikatuma muamala, na kuifanyia upya Solana Explorer. Thamani ya nadra ilitokeza papo hapo pamoja na jina na alama. Kwa watengenezaji wa michezo au mtu yeyote anayetengeneza rasilimali zinazobadilika (dynamic assets), unyumbufu huu ni muhimu. Unaweza kuonyesha sifa muhimu kwenye mnyororo (on-chain) bila kuhitaji mthibitishaji wa nje kuchanganua JSON.
Pengo la Nje ya Mnyororo (Off-Chain Gap): URIs na Caching
Licha ya urembo wote wa uhifadhi wa on-chain, funzo moja lilijidhihirisha wazi: utambulisho bado upo nje ya mnyororo (off-chain). Mint haihifadhi picha yako. Inahifadhi URI. Nilipoboresha URI hiyo na kuweka mabadiliko kwenye devnet, mnyororo ulionyesha kiashiria (pointer) kipya mara moja. Block explorers zilionyesha kiungo kilichoboreshwa bila kuchelewa.
Lakini pochi yangu (wallet) ilichelewa. Iliendelea kuonyesha picha ya zamani kwa dakika kadhaa, ikitoa toleo la 'cached' kwa ukaidi wakati data ya msingi kwenye mnyororo ilikuwa tayari imebadilika. Hii ni hali halisi ambayo watengenezaji lazima wajipange nayo. Leja ya Solana ni ya haraka. Muda wa uthibitisho ni mfupi. Hata hivyo, tabaka la kuonekana ambalo watumiaji hulitumia linategemea HTTP caches, usambazaji wa CDN, na vipindi vya uboreshaji vya pochi husika. Ikiwa unatengeneza NFT inayobadilika kulingana na matukio ya ulimwengu halisi, huwezi kudhania kuwa mtumiaji ataona mabadiliko mara tu muamala unapofika. Unahitaji mbinu za cache-busting, utoaji toleo (versioning) katika njia zako za URI, au vichochezi vya uboreshaji vilivyo wazi kwenye frontend yako.
Nini Kinafuata
Majaribio yangu ya devnet yameweka msingi wa mradi wenye nguvu zaidi. Hatua inayofuata ni mkusanyiko (collection)
