Solana-வில் ஒரு NFT-ஐ உருவாக்குவது என்பது Metaplex உடன் போராடுவதாகும் என்று நான் முன்பு நினைத்தேன். ஒவ்வொரு பயிற்சியும் (tutorial) அதையே பரிந்துரைத்தது: ஒரு Candy Machine-ஐ உருவாக்குவது, metadata கணக்குகளை நிர்வகிப்பது, ஒரு டோக்கனுடன் பெயர் மற்றும் படத்தை இணைக்க தனித்தனி புரோகிராம்களைக் கையாளுவது. ஆனால் அந்த எண்ணம் காலாவதியானது என்று இப்போது தெரியவருகிறது. Token-2022 என்று அழைக்கப்படும் Token Extensions புரோகிராம், அந்த சிக்கல்களை mint-க்குள்ளேயே சுருக்கிவிட்டது. இப்போது ஒரு metadata புரோகிராமைத் தொடாமலோ அல்லது கூடுதல் கணக்குகளுக்கு நிதி செலுத்தாமலோ முழுமையாகச் செயல்படும் ஒரு NFT-ஐ நீங்கள் உருவாக்க முடியும். சில flags-களை மாற்றி, mint கணக்கில் நேரடியாகத் தரவை எழுதினால் போதும், வேலை முடிந்தது.

இது Solana-வில் உள்ள டிஜிட்டல் சொத்துக்களை (digital assets) டெவலப்பர்கள் எவ்வாறு பார்க்க வேண்டும் என்பதை மாற்றுகிறது. பாரம்பரிய இணைய மேம்பாட்டில் (traditional web development), ஒரு NFT என்பது ஒரு தனித்துவமான தரவு அமைப்பு (data structure), அதாவது அதற்குத் தனியான அட்டவணை (table) மற்றும் schema தேவைப்படும் என்று தோன்றும். ஆனால் Solana-வில், உண்மை மிகவும் எளிமையானது மற்றும் நேர்த்தியானது. ஒரு NFT என்பது வெளிப்புற புரோட்டோகால் மூலம் நிர்வகிக்கப்படும் ஒரு சிறப்புப் பொருள் அல்ல. அது சரியாக ஒரு சப்ளை (supply) மற்றும் பூஜ்ஜிய தசம எண்களைக் (zero decimals) கொண்ட ஒரு mint account மட்டுமே. ஒரு சாதாரண டோக்கன் அதிக சப்ளை மற்றும் பல தசம எண்களைக் கொண்டிருப்பதால், அதன் அலகுகளைப் பிரிக்க முடியும். ஆனால் ஒரு NFT அதன் சப்ளையை ஒரு ஒற்றை, பிரிக்க முடியாத அலகாகப் பூட்டிவிடுகிறது. அதைத் தனித்துவமாக்கும் அனைத்தும் அந்த முக்கிய mint account உடன் இணைந்த extensions-களில் உள்ளன.

பழைய முறை மற்றும் புதிய முறை

Token Extensions வருவதற்கு முன்பு, வழக்கமான முறையில் mint செய்வதற்கு SPL Token program மற்றும் metadata, collections மற்றும் சில நேரங்களில் off-chain indexing ஆகியவற்றிற்கு Metaplex பயன்படுத்தப்பட்டது. Metadata என்பது நீங்கள் கண்காணிக்க வேண்டிய முகவரிகளால் (addresses) இணைக்கப்பட்ட தனித்தனி கணக்குகளில் இருந்தது. இது வேலை செய்ததுதான், ஆனால் இது சிக்கல்களை அதிகரித்தது. அதிக கணக்குகள் என்பது அதிக வாடகை (rent), அதிக கையொப்பமிடும் பாதைகள் (signing paths) மற்றும் ஒரு டோக்கனின் முழுமையான விவரங்களைப் பெற அதிக client-side logic ஆகியவற்றைக் குறித்தது.

Token Extensions அந்தப் பரவலான சிக்கல்களைத் தவிர்த்து, திறன்களை நேரடியாக mint-லேயே இணைக்கிறது. பெயர், குறியீடு (symbol) மற்றும் off-chain ஊடகத்திற்கான இணைப்பு (pointer) தேவையா? Metadata extension-ஐ இயக்கவும். டோக்கன்களை ஒரு collection-ஆகக் குழுவாக்க வேண்டுமா? Group மற்றும் Member extensions-களைப் பயன்படுத்தவும். இப்போது mint என்பதே உண்மையான ஆதாரமாக (single source of truth) மாறுகிறது. உறவுநிலைத் தரவுத்தளங்களுக்கு (relational databases) பழகிய டெவலப்பர்களுக்கு, இந்த மாற்றம் ஒரு distributed microservices architecture-லிருந்து நன்கு வடிவமைக்கப்பட்ட foreign keys கொண்ட ஒரு normalized table-க்கு மாறுவது போன்ற உணர்வைத் தரும்.

Extension-அடிப்படையிலான NFT-இன் அமைப்பு

Token Extensions மூலம் ஒரு NFT-ஐ உருவாக்க, இந்தச் சங்கிலியில் (chain) ஒரு டோக்கனை எவ்வாறு non-fungible ஆக்குகிறது என்பதைத் துல்லியமாகப் புரிந்துகொள்ள வேண்டும். சப்ளை (supply) சரியாக ஒன்றாக இருக்க வேண்டும். தசம எண்கள் (decimals) பூஜ்ஜியமாக இருக்க வேண்டும். இந்த இரண்டு கட்டுப்பாடுகளும் அதைத் துண்டுகளாகப் பிரிக்காமல் (fractionalization) தடுக்கின்றன. இந்த அளவுருக்கள் (parameters) அமைக்கப்பட்டதும், mint account-இல் நேரடியாக கூடுதல் புலங்களைச் சேமிக்கும் extensions-களை நீங்கள் இயக்கலாம்.

Metadata extension என்பது பெயர், குறியீடு மற்றும் URI-ஐக் கொண்டிருக்கும். அந்த URI ஒரு JSON கோப்பைக் குறிக்கும், இது பொதுவாக decentralized storage அல்லது ஒரு சாதாரண web server-இல் இருக்கும்; இது படம், பண்புகள் (attributes) மற்றும் குணாதிசயங்களை (traits) விவரிக்கிறது. இதைக் கண்டறியவோ அல்லது deserialize செய்யவோ தனித்தனி metadata கணக்கு தேவையில்லை. தரவு mint-லேயே இருப்பதால், explorers, wallets மற்றும் client software ஆகியவை ஒரே ஒரு கணக்கைச் சரிபார்ப்பதன் மூலம் டோக்கனின் முக்கிய அடையாளத்தைப் படிக்க முடியும்.

நான் இதை devnet-இல் நேரடியாகச் சோதித்தேன். Metadata extension-ஐ இயக்கி ஒரு புதிய mint-ஐ உருவாக்கி, பின்னர் பெயர் மற்றும் குறியீட்டை நேரடியாக mint state-இல் எழுதினேன். பரிவர்த்தனை (transaction) வெற்றிகரமாக முடிந்தது, அதன் முடிவு உடனடியாக Solana Explorer-இல் தோன்றியது. நிதி செலுத்தவோ அல்லது தேடவோ இரண்டாவது கணக்கு எதுவும் தேவையில்லை. பல வாரங்களாகப் பல கணக்குகளைக் கொண்ட Metaplex metadata-வுடன் பணியாற்றிய பிறகு, இந்த எளிமை வியப்பளிப்பதாக இருந்தது.

தரவுத்தள வரிசைகளைப் போல Collections உருவாக்குதல்

Collections என்பது அடுத்த தர்க்கரீதியான படியாகும். பழைய முறையில், NFTs-களைக் குழுவாக்குவது என்பது பொதுவாக Metaplex Certified Collections அல்லது off-chain registries-ஐச் சார்ந்திருப்பதை означа했습니다. Token Extensions இரண்டு குறிப்பிட்ட primitives-களை அறிமுகப்படுத்துகிறது: Group extension மற்றும் Member extension.

இதன் தர்க்கம் (logic) எவ்வாறு செயல்படுகிறது என்பதை இங்கே காணலாம். நீங்கள் collection header ஆகச் செயல்படும் ஒரு தனி mint-ஐ உருவாக்கி, அதில் Group extension-ஐ இயக்க வேண்டும். பின்னர், அந்த collection-இல் உள்ள ஒவ்வொரு தனிப்பட்ட NFT-க்கும், Member extension-ஐ இயக்கி ஒரு mint-ஐ உருவாக்க வேண்டும். ஒவ்வொரு member mint-உம் collection mint முகவரியைக் குறிக்கும் ஒரு pointer-ஐச் சேமிக்கும். இந்தத் தொடர்பு ஒரு relational database-இல் உள்ள foreign key போலவே செயல்படுகிறது. Collection வரிசை (row) ஒருமுறை மட்டுமே இருக்கும், மேலும் ஒவ்வொரு member வரிசையும் collection அடையாளத்தை நகலெடுக்காமல் அதைச் சுட்டிக்காட்டும்.

நான் devnet-இல் இந்த முறையில் ஒரு சிறிய சோதனை collection-ஐ உருவாக்கினேன். முக்கிய collection mint-இல் group flag இருந்தது. தனிப்பட்ட டோக்கன்கள் member flag-ஐக் கொண்டிருந்தன மற்றும் parent address-ஐச் சுட்டிக்காட்டின. சங்கிலியை (chain) ஆய்வு செய்தபோது எனக்கு ஒரு தெளிவான, எளிதில் அணுகக்கூடிய அமைப்பு கிடைத்தது. டோக்கன்கள் ஒன்றாகச் சேர்ந்தவையா என்பதைத் தெரிந்துகொள்ள மூன்றாம் தரப்பு indexer தேவையில்லை. இந்தத் தொடர்பு வெளிப்படையானது மற்றும் on-chain முறையில் உள்ளது.

திறந்த ஸ்கீமா மற்றும் ஆன்-செயின் பரிசோதனை

மெட்டாடேட்டா விரிவாக்கத்தின் (metadata extension) திறந்த ஸ்கீமா என்பது குறிப்பிடத்தக்க ஒரு விஷயமாகும். பழைய தரநிலைகள் பெரும்பாலும் ஒரு நிலையான புலப் பட்டியலை (fixed field list) கட்டாயப்படுத்துகின்றன. நீங்கள் ஆன்-செயினில் (on-chain) தரநிலைக்கு அப்பாற்பட்ட ஏதேனும் ஒன்றைச் சேமிக்க விரும்பினால், அதை ஆஃப்-செயின் (off-chain) JSON-இல் சேமிக்கவோ அல்லது கடினமான கணக்கு அமைப்புகளை (account layouts) மாற்றியமைக்கவோ வேண்டிய கட்டாயம் இருந்தது.

Token Extensions ஒரு மாறுபட்ட அணுகுமுறையைக் கொண்டுள்ளது. மெட்டாடேட்டா விரிவாக்கம் தனிப்பயன் புலங்களை (custom fields) ஏற்றுக்கொள்வதால், என்னால் நேரடியாக மின்ட் கணக்கில் (mint account) ஒரு அரிய வகை பண்பை (rarity attribute) சேர்க்க முடிந்தது. நான் அந்தப் புலத்தை எழுதி, பரிவர்த்தனையை அனுப்பி, Solana Explorer-ஐ புதுப்பித்தேன். பெயர் மற்றும் குறியீட்டுடன் (symbol) அந்த அரிய வகை மதிப்பு உடனடியாகத் தோன்றியது. கேம் டெவலப்பர்கள் அல்லது டைனமிக் சொத்துக்களை (dynamic assets) உருவாக்குபவர்களுக்கு இந்த நெகிழ்வுத்தன்மை மிகவும் முக்கியமானது. JSON-ஐ பகுப்பாய்வு செய்ய ஒரு வெளிப்புற சரிபார்ப்பாளர் (external verifier) தேவையில்லாமல், முக்கியமான பண்புகளை ஆன்-செயினிலேயே வெளிப்படுத்த முடியும்.

ஆஃப்-செயின் இடைவெளி: URIs மற்றும் கேச்சிங்

ஆன்-செயின் சேமிப்பின் சிறப்பம்சங்களுக்கு மத்தியிலும், ஒரு பாடம் தெளிவாகத் தெரிந்தது: அடையாளம் (identity) இன்னும் ஆஃப்-செயினில்தான் உள்ளது. மின்ட் உங்கள் படத்தைச் சேமிப்பதில்லை. அது ஒரு URI-ஐச் சேமிக்கிறது. நான் அந்த URI-ஐப் புதுப்பித்து, மாற்றத்தை devnet-இல் உறுதி செய்தபோது, செயின் (chain) உடனடியாகப் புதிய குறியீட்டைப் பிரதிபலித்தது. பிளாக் எக்ஸ்ப்ளோரர்கள் (Block explorers) தாமதமின்றி புதுப்பிக்கப்பட்ட இணைப்பைக் காட்டின.

ஆனால் எனது வாலட் (wallet) தாமதமானது. ஆன்-செயினில் உள்ள அடிப்படைத் தரவு ஏற்கனவே மாறிவிட்ட போதிலும், அது பல நிமிடங்கள் பழைய படத்தையே காட்டியது, பிடிவாதமாக கேச் செய்யப்பட்ட (cached) பதிப்பையே வழங்கியது. இது டெவலப்பர்கள் திட்டமிட வேண்டிய ஒரு நடைமுறை யதார்த்தமாகும். Solana லெட்ஜர் (ledger) வேகமானது. உறுதிப்படுத்தும் நேரங்கள் (Confirmation times) மிகக் குறைவு. இருப்பினும், பயனர்கள் தொடர்பு கொள்ளும் காட்சி அடுக்கு (visual layer), HTTP கேச்சுகள், CDN பரவல் மற்றும் வாலட் சார்ந்த புதுப்பிப்பு இடைவெளிகளைப் பொறுத்தே அமைகிறது. நிஜ உலக நிகழ்வுகளின் அடிப்படையில் மாறும் ஒரு டைனமிக் NFT-ஐ நீங்கள் உருவாக்கினால், பரிவர்த்தனை முடிந்த அடுத்த கணமே பயனர் அந்த மாற்றத்தைக் காண்பார் என்று நீங்கள் கருத முடியாது. உங்களுக்கு கேச்-பஸ்டிங் உத்திகள் (cache-busting strategies), உங்கள் URI பாதைகளில் பதிப்பு மேலாண்மை (versioning) அல்லது உங்கள் பிரண்ட்எண்டில் (frontend) தெளிவான புதுப்பிப்பு தூண்டுதல்கள் (refresh triggers) தேவைப்படும்.

அடுத்து என்ன

எனது devnet பரிசோதனைகள் மிகவும் டைனமிக் ஆன ஒரு திட்டத்திற்கான அடித்தளத்தை அமைத்துள்ளன. அடுத்த கட்டம் ஒரு சேகரிப்பு (collection)