میں پہلے یہ سمجھتا تھا کہ Solana پر NFT بنانے کا مطلب Metaplex کے ساتھ جدوجہد کرنا ہے۔ ہر ٹیوٹوریل یہی راستہ تجویز کرتا تھا: ایک Candy Machine شروع کرنا، metadata اکاؤنٹس کو مینیج کرنا، اور صرف ایک ٹوکن کے ساتھ نام اور تصویر منسلک کرنے کے لیے الگ الگ پروگراموں کو سنبھالنا۔ معلوم ہوا کہ یہ مفروضہ پرانا ہو چکا تھا۔ Token Extensions پروگرام، جسے Token-2022 کے نام سے بھی جانا جاتا ہے، نے اس پیچیدگی کو خود mint کے اندر ہی سمو دیا ہے۔ اب آپ کسی metadata پروگرام کو چھوئے بغیر یا اضافی اکاؤنٹس کو فنڈ کیے بغیر ایک مکمل طور پر کام کرنے والا NFT بنا سکتے ہیں۔ آپ بس چند flags تبدیل کرتے ہیں، براہ راست mint account میں ڈیٹا لکھتے ہیں، اور آپ کا کام ہو جاتا ہے۔

یہ چیز اس انداز کو بدل دیتی ہے کہ ڈویلپرز کو Solana پر ڈیجیٹل اثاثوں کے بارے میں کیسے سوچنا چاہیے۔ روایتی ویب ڈویلپمنٹ میں، ایک NFT ایک الگ ڈیٹا اسٹرکچر کی طرح محسوس ہوتا ہے، جو اپنے الگ ٹیبل اور schema کا تقاضا کرتا ہے۔ Solana پر، حقیقت زیادہ سادہ اور باوقار ہے۔ NFT کسی بیرونی پروٹوکول کے ذریعے مینیج کیا جانے والا کوئی خاص آبجیکٹ نہیں ہے۔ یہ محض ایک mint account ہے جسے بالکل ایک کی supply اور زیرو decimals کے ساتھ کنفیگر کیا گیا ہے۔ ایک اسٹینڈرڈ ٹوکن آپ کو یونٹس کو تقسیم کرنے کی اجازت دیتا ہے کیونکہ اس میں بڑی supply اور متعدد decimals ہوتے ہیں۔ ایک NFT supply کو ایک واحد، ناقابل تقسیم یونٹ تک محدود کر دیتا ہے۔ وہ سب کچھ جو اسے منفرد بناتا ہے، ان extensions میں موجود ہوتا ہے جو اس بنیادی mint account کے ساتھ ساتھ چلتے ہیں۔

پرانا طریقہ اور نیا طریقہ

Token Extensions سے پہلے، روایتی stack میں خود mint کے لیے SPL Token پروگرام، اور metadata، collections، اور کبھی کبھار off-chain indexing کے لیے Metaplex شامل تھا۔ Metadata الگ اکاؤنٹس میں ہوتا تھا، جو ان ایڈریسز کے ذریعے جڑے ہوتے تھے جنہیں آپ کو ٹریک کرنا پڑتا تھا۔ یہ کام تو کرتا تھا، لیکن اس سے پیچیدگی بڑھ جاتی تھی۔ زیادہ اکاؤنٹس کا مطلب تھا زیادہ rent، زیادہ signing paths، اور ٹوکن کی مکمل تصویر حاصل کرنے کے لیے زیادہ client-side logic۔

Token Extensions ان صلاحیتوں کو براہ راست mint میں شامل کر کے اس پھیلاؤ کو ختم کر دیتا ہے۔ کیا آپ کو نام، symbol، اور off-chain media کے لیے ایک pointer چاہیے؟ metadata extension کو فعال کریں۔ کیا ٹوکنز کو ایک collection میں گروپ کرنا چاہتے ہیں؟ Group اور Member extensions کا استعمال کریں۔ Mint "single source of truth" بن جاتا ہے۔ ریلیشنل ڈیٹا بیسز کے عادی ڈویلپرز کے لیے، یہ تبدیلی ایک distributed microservices architecture سے واپس ایک well-designed foreign keys والی normalized table کی طرف منتقل ہونے جیسی ہے۔

Extension-Based NFT کی ساخت

Token Extensions کے ساتھ NFT بنانے کے لیے یہ سمجھنا ضروری ہے کہ اس چین پر ایک ٹوکن کو non-fungible کیا بناتا ہے۔ Supply کا ایک کے برابر ہونا ضروری ہے۔ Decimals کا زیرو کے برابر ہونا ضروری ہے۔ یہ دو پابندیاں (constraints) اسے تقسیم (fractionalization) ہونے سے روکتی ہیں۔ ایک بار جب یہ پیرامیٹرز سیٹ ہو جائیں، تو آپ ایسی extensions کو فعال کرتے ہیں جو اضافی فیلڈز کو براہ راست mint account پر اسٹور کرتی ہیں۔

Metadata extension میں نام، symbol، اور URI ہوتا ہے۔ وہ URI ایک JSON فائل کی طرف اشارہ کرتا ہے، جو عام طور پر decentralized storage یا ایک اسٹینڈرڈ ویب سرور پر ہوسٹ ہوتی ہے، اور جو تصویر، attributes، اور traits کی وضاحت کرتی ہے۔ اسے تلاش کرنے اور deserialize کرنے کے لیے کوئی الگ metadata account نہیں ہوتا۔ ڈیٹا خود mint پر ہوتا ہے، جس کا مطلب ہے کہ explorers، wallets، اور client software صرف ایک اکاؤنٹ کا معائنہ کر کے ٹوکن کی بنیادی شناخت پڑھ سکتے ہیں۔

میں نے اسے خود devnet پر ٹیسٹ کیا۔ میں نے metadata extension کو فعال کرتے ہوئے ایک نیا mint بنایا، پھر براہ راست mint state میں نام اور symbol لکھ دیا۔ ٹرانزیکشن کامیاب رہی، اور نتیجہ فوری طور پر Solana Explorer میں نظر آیا۔ فنڈ کرنے یا تلاش کرنے کے لیے کوئی دوسرا اکاؤنٹ نہیں تھا۔ کئی ہفتوں تک multi-account Metaplex metadata کے ساتھ کام کرنے کے بعد، یہ سادگی حیران کن تھی۔

ڈیٹا بیس روز (Rows) کی طرح کلیکشنز بنانا

کلیکشنز اگلا منطقی قدم تھیں۔ پرانے ماڈل میں، NFTs کو گروپ کرنے کا مطلب عام طور پر Metaplex Certified Collections یا off-chain registries پر انحصار کرنا تھا۔ Token Extensions دو مخصوص primitives متعارف کرواتا ہے: Group extension اور Member extension۔

منطق (logic) اس طرح کام کرتی ہے۔ آپ ایک واحد mint بناتے ہیں جو collection header کے طور پر کام کرتا ہے اور اس پر Group extension کو فعال کرتے ہیں۔ پھر، کلیکشن میں موجود ہر انفرادی NFT کے لیے، آپ Member extension کو فعال کرتے ہوئے ایک mint بناتے ہیں۔ ہر member mint کلیکشن mint ایڈریس کی طرف ایک pointer اسٹور کرتا ہے۔ یہ تعلق بالکل ایک ریلیشنل ڈیٹا بیس میں foreign key کی طرح کام کرتا ہے۔ کلیکشن row صرف ایک بار موجود ہوتی ہے، اور ہر member row کلیکشن کی شناخت کو ڈپلیکیٹ کیے بغیر اسے ریفرنس کرتی ہے۔

میں نے اس طرح devnet پر ایک چھوٹا ٹیسٹ کلیکشن بنایا۔ مین کلیکشن mint میں group flag موجود تھا۔ انفرادی ٹوکنز میں member flag تھا اور وہ parent address کو ریفرنس کر رہے تھے۔ چین کو کوئری کرنے سے مجھے ایک صاف ستھرا اور traversable اسٹرکچر ملا۔ کسی تیسرے فریق (third-party) انڈیکسر کی ضرورت نہیں تھی کہ وہ اندازہ لگائے کہ آیا ٹوکنز ایک ساتھ تعلق رکھتے ہیں۔ یہ تعلق واضح اور on-chain ہے۔

اوپن اسکیمہ اور آن-چین تجربات

ایک اہم تفصیل جو نمایاں ہے وہ میٹا ڈیٹا ایکسٹینشن (metadata extension) کا اوپن اسکیمہ ہے۔ پرانے معیار اکثر فکسڈ فیلڈ لسٹ (fixed field list) کو نافذ کرتے ہیں۔ اگر آپ آن-چین کچھ غیر معیاری اسٹور کرنا چاہتے تھے، تو آپ اسے آف-چین JSON میں رکھنے یا سخت اکاؤنٹ لے آؤٹس کے ساتھ سمجھوتہ کرنے پر مجبور تھے۔

Token Extensions ایک مختلف طریقہ اپناتا ہے۔ چونکہ میٹا ڈیٹا ایکسٹینشن کسٹم فیلڈز (custom fields) کو قبول کرتی ہے، اس لیے میں براہ راست مِنٹ اکاؤنٹ (mint account) میں نایاب ہونے کی صفت (rarity attribute) شامل کرنے کے قابل تھا۔ میں نے فیلڈ لکھی، ٹرانزیکشن بھیجی، اور Solana Explorer کو ریفریش کیا۔ نایاب ہونے کی قیمت (rarity value) نام اور علامت کے ساتھ فوری طور پر ظاہر ہو گئی۔ گیم ڈویلپرز یا ڈائنامک اثاثے بنانے والے کسی بھی شخص کے لیے، یہ لچک بہت اہمیت رکھتی ہے۔ آپ JSON کو پارس کرنے کے لیے کسی بیرونی تصدیق کنندہ کی ضرورت کے بغیر اہم خصوصیات کو آن-چین ظاہر کر سکتے ہیں۔

آف-چین خلا: URIs اور کیشنگ

آن-چین اسٹوریج کی تمام تر خوبصورتی کے باوجود، ایک سبق بالکل واضح طور پر سامنے آیا: شناخت اب بھی آف-چین رہتی ہے۔ مِنٹ آپ کی تصویر اسٹور نہیں کرتا۔ یہ ایک URI اسٹور کرتا ہے۔ جب میں نے اس URI کو اپ ڈیٹ کیا اور devnet پر تبدیلی کو کمٹ کیا، تو چین نے فوری طور پر نئے پوائنٹر کو ظاہر کر دیا۔ بلاک ایکسپلوررز نے بغیر کسی تاخیر کے اپ ڈیٹ شدہ لنک دکھایا۔

لیکن میرے والٹ (wallet) میں تاخیر ہوئی۔ یہ منٹوں تک پرانی تصویر دکھاتا رہا، ضدی طور پر کیش شدہ ورژن (cached version) فراہم کرتا رہا جبکہ آن-چین بنیادی ڈیٹا پہلے ہی تبدیل ہو چکا تھا۔ یہ ایک عملی حقیقت ہے جس کے لیے ڈویلپرز کو منصوبہ بندی کرنی چاہیے۔ Solana لیجر تیز ہے۔ کنفرمیشن کے اوقات کم ہیں۔ پھر بھی، وہ ویژول لیئر (visual layer) جس کے ساتھ صارفین بات چیت کرتے ہیں، وہ HTTP کیشز، CDN پروپیگیشن، اور والٹ کے مخصوص ریفریش انٹرویلز پر منحصر ہے۔ اگر آپ ایک ڈائنامک NFT بناتے ہیں جو حقیقی دنیا کے واقعات کی بنیاد پر تبدیل ہوتا ہے، تو آپ یہ فرض نہیں کر سکتے کہ صارف ٹرانزیکشن مکمل ہوتے ہی تبدیلی دیکھ لے گا۔ آپ کو کیش بسٹنگ اسٹریٹجیز (cache-busting strategies)، اپنے URI پاتھ میں ورژننگ، یا اپنے فرنٹ اینڈ میں واضح ریفریش ٹرگرز کی ضرورت ہوگی۔

آگے کیا ہے

میرے devnet تجربات نے ایک زیادہ ڈائنامک پروجیکٹ کے لیے بنیاد رکھ دی ہے۔ اگلا قدم ایک کلیکشن ہے