مرکزی مواد پر جائیں

ایک ⁦NFT⁩ کیسے ڈھالیں (⁦NFT⁩ ٹیوٹوریل سیریز کا حصہ ⁦2/3⁩)

ERC-721
Alchemy
Solidity
سمارٹ کنٹریکٹس
ابتدائی
سومی مدگل
۲۲ اپریل، ۲۰۲۱
11 منٹ کا مطالعہ

"ایک غیر متبادل ٹوکن (NFT) کی ڈھلائی" بلاک چین پر آپ کے ERC-721 ٹوکن کی ایک منفرد مثال شائع کرنے کا عمل ہے۔ اس NFT ٹیوٹوریل سیریز کے حصہ 1 سے ہمارے سمارٹ کنٹریکٹ کا استعمال کرتے ہوئے، آئیے اپنی Web3 کی مہارتوں کو آزمائیں اور ایک NFT ڈھالیں۔ اس ٹیوٹوریل کے اختتام پر، آپ اتنے NFTs ڈھالنے کے قابل ہو جائیں گے جتنا آپ کا دل (اور والیٹ) چاہے گا!

آئیے شروع کریں!

مرحلہ 1: اپنا سیٹ اپ چیک کریں

اگر آپ نے اپنا NFT سمارٹ کنٹریکٹ بنانے کے پہلے ٹیوٹوریل کی پیروی کی ہے، تو آپ کے پاس پہلے سے ہی وہ سب کچھ موجود ہے جس کی آپ کو ضرورت ہے: Ethers پلگ ان (نئے ٹیب میں کھلتا ہے) اور ethers.js (نئے ٹیب میں کھلتا ہے) کے ساتھ ایک Hardhat 3 پروجیکٹ، جو ایک لائبریری ہے جسے ایتھیریم بلاک چین پر درخواستیں بنانے کو آسان بنانے کے لیے استعمال کیا جاتا ہے۔ ہم اپنا ڈھلائی کا کوڈ ایک Hardhat سکرپٹ کے طور پر لکھیں گے، تاکہ یہ Sepolia نیٹ ورک کی ترتیبات اور حصہ 1 سے API_URL اور PRIVATE_KEY کی اقدار کو دوبارہ استعمال کر سکے — انسٹال کرنے کے لیے کچھ نیا نہیں ہے۔

مرحلہ 2: ایک mint-nft.js فائل بنائیں

اپنی سکرپٹس ڈائرکٹری کے اندر، ایک mint-nft.js فائل بنائیں اور کوڈ کی درج ذیل لائنیں شامل کریں:

import { network } from "hardhat"

const { ethers } = await network.create()

جیسا کہ ہمارے تعینات کرنے کے سکرپٹ میں، جب آپ سکرپٹ چلاتے ہیں تو network.create() اس نیٹ ورک سے جڑ جاتا ہے جسے آپ --network کے ساتھ منتخب کرتے ہیں، اور ہمیں اس کے لیے ایک ethers آبجیکٹ دیتا ہے۔

مرحلہ 3: اپنے کنٹریکٹ کی اے بی آئی حاصل کریں

ہمارے کنٹریکٹ کی ایپلیکیشن بائنری انٹرفیس (اے بی آئی) ہمارے سمارٹ کنٹریکٹ کے ساتھ تعامل کرنے کا انٹرفیس ہے۔ آپ کے بارے میں مزید جان سکتے ہیں۔ جب Hardhat کنٹریکٹ کو مرتب کرتا ہے تو یہ خود بخود ہمارے لیے ایک اے بی آئی تیار کرتا ہے اور اسے artifacts/contracts/MyNFT.sol/MyNFT.json فائل میں محفوظ کرتا ہے۔ جب ہم مرحلہ 5 میں اپنے کنٹریکٹ کی مثال بناتے ہیں تو Hardhat Ethers پلگ ان اسے ہمارے لیے وہاں سے پڑھتا ہے، اس لیے ہمیں اسے خود لوڈ کرنے کی ضرورت نہیں ہے۔

اگر آپ اے بی آئی دیکھنا چاہتے ہیں تو آپ اسے اپنے کنسول پر پرنٹ کر سکتے ہیں۔ اپنے پروجیکٹ کی روٹ ڈائرکٹری سے، چلائیں:

node -p "JSON.stringify(require('./artifacts/contracts/MyNFT.sol/MyNFT.json').abi)"

مرحلہ 4: IPFS کا استعمال کرتے ہوئے اپنے NFT کے لیے میٹا ڈیٹا کنفیگر کریں

اگر آپ کو حصہ 1 میں ہمارے ٹیوٹوریل سے یاد ہے، تو ہمارا mintNFT سمارٹ کنٹریکٹ فنکشن ایک tokenURI پیرامیٹر لیتا ہے جسے ایک JSON دستاویز میں حل ہونا چاہیے جو NFT کے میٹا ڈیٹا کو بیان کرتا ہے— جو واقعی NFT کو زندہ کرتا ہے، جس سے اس میں قابل ترتیب خصوصیات، جیسے کہ نام، تفصیل، تصویر، اور دیگر اوصاف شامل ہو سکتے ہیں۔

انٹرپلینیٹری فائل سسٹم (IPFS) ایک تقسیم شدہ فائل سسٹم میں ڈیٹا کو ذخیرہ کرنے اور شیئر کرنے کے لیے ایک لامركزی پروٹوکول اور پیئر ٹو پیئر نیٹ ورک ہے۔

ہم اپنے NFT اثاثے اور میٹا ڈیٹا کو ذخیرہ کرنے کے لیے Pinata کا استعمال کریں گے، جو ایک آسان IPFS ایپلیکیشن پروگرامنگ انٹرفیس (API) اور ٹول کٹ ہے، تاکہ یہ یقینی بنایا جا سکے کہ ہمارا NFT واقعی لامركزی ہے۔ اگر آپ کے پاس Pinata اکاؤنٹ نہیں ہے، تو یہاں (نئے ٹیب میں کھلتا ہے) مفت اکاؤنٹ کے لیے سائن اپ کریں اور اپنا ای میل تصدیق کرنے کے مراحل مکمل کریں۔

ایک بار جب آپ اکاؤنٹ بنا لیں:

  • فائلز کے صفحے (نئے ٹیب میں کھلتا ہے) پر جائیں اور صفحے کے اوپری دائیں کونے میں "Add" بٹن پر کلک کریں۔

  • Pinata پر ایک تصویر اپ لوڈ کریں — یہ آپ کے NFT کے لیے تصویری اثاثہ ہوگا۔ آپ اثاثے کا جو بھی نام رکھنا چاہیں رکھ سکتے ہیں۔ یقینی بنائیں کہ آپ اسے عوامی IPFS پر اپ لوڈ کرتے ہیں: نجی IPFS (نئے ٹیب میں کھلتا ہے) پر موجود فائلیں ان والیٹس اور مارکیٹ پلیسز کے ذریعے حاصل نہیں کی جا سکتیں جو آپ کا NFT دکھاتے ہیں۔

  • اپ لوڈ کرنے کے بعد، آپ کو فائلز کے صفحے پر اس کے CID (مواد کا شناخت کنندہ) کے ساتھ فائل درج نظر آئے گی۔ CID کاپی کریں۔ آپ اپنا اپ لوڈ یہاں دیکھ سکتے ہیں: https://gateway.pinata.cloud/ipfs/<CID>، یا Pinata سائیڈ بار میں "Gateways" کے تحت درج مخصوص گیٹ وے کے ذریعے۔ مثال کے طور پر، آپ وہ تصویر تلاش کر سکتے ہیں جو ہم نے IPFS پر یہاں (نئے ٹیب میں کھلتا ہے) استعمال کی تھی۔

اب، ہم Pinata پر ایک اور دستاویز اپ لوڈ کرنا چاہیں گے۔ لیکن ایسا کرنے سے پہلے، ہمیں اسے بنانا ہوگا!

اپنی روٹ ڈائرکٹری میں، nft-metadata.json نامی ایک نئی فائل بنائیں اور درج ذیل json کوڈ شامل کریں:

json میں ڈیٹا کو تبدیل کرنے میں ہچکچاہٹ محسوس نہ کریں۔ آپ اوصاف (attributes) کے حصے کو ہٹا یا اس میں اضافہ کر سکتے ہیں۔ سب سے اہم بات، یقینی بنائیں کہ تصویر کا فیلڈ آپ کی IPFS تصویر کے مقام کی طرف اشارہ کرتا ہے، ipfs://<image-CID> کی شکل میں — بصورت دیگر، آپ کے NFT میں ایک (بہت پیارے!) کتے کی تصویر شامل ہوگی۔

ایک بار جب آپ JSON فائل میں ترمیم کر لیں، تو اسے محفوظ کریں اور تصویر اپ لوڈ کرنے کے لیے ہم نے جو اقدامات کیے تھے انہی پر عمل کرتے ہوئے اسے Pinata پر اپ لوڈ کریں۔ nft-metadata.json کا CID بھی کاپی کریں؛ ہمیں مرحلہ 9 میں اس کی ضرورت ہوگی۔

مرحلہ 5: اپنے کنٹریکٹ کی ایک مثال بنائیں

اب، اپنے کنٹریکٹ کے ساتھ تعامل کرنے کے لیے، ہمیں اپنے کوڈ میں اس کی ایک مثال بنانے کی ضرورت ہے۔ ایسا کرنے کے لیے ہمیں اپنے کنٹریکٹ کے پتہ کی ضرورت ہوگی، جسے ہمارے تعینات کرنے کے سکرپٹ نے حصہ 1 میں پرنٹ کیا تھا۔ آپ اسے Etherscan (نئے ٹیب میں کھلتا ہے) یا Blockscout (نئے ٹیب میں کھلتا ہے) پر بھی اس پتہ کو تلاش کر کے پا سکتے ہیں جسے آپ نے کنٹریکٹ تعینات کرنے کے لیے استعمال کیا تھا۔

View your contract address on Etherscan

مندرجہ بالا مثال میں، ہمارے کنٹریکٹ کا پتہ 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778 ہے۔

اس کے بعد ہم Hardhat Ethers پلگ ان کا getContractAt طریقہ استعمال کریں گے تاکہ اس کے نام (جو اسے بتاتا ہے کہ کون سی اے بی آئی استعمال کرنی ہے) اور اس کے پتہ کا استعمال کرتے ہوئے اپنا کنٹریکٹ بنائیں۔ اپنی mint-nft.js فائل میں، پتہ کو اپنے پتہ سے تبدیل کرتے ہوئے درج ذیل شامل کریں:

const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = await ethers.getContractAt("MyNFT", contractAddress)

مرحلہ 6: .env فائل چیک کریں

ہمارے بھیجے گئے ہر ٹرانزیکشن پر آپ کے اکاؤنٹ کی نجی کلید سے دستخط ہونا ضروری ہے۔ اگر آپ نے ٹیوٹوریل کا حصہ 1 مکمل کر لیا ہے، تو ہماری .env فائل پہلے ہی اس طرح نظر آنی چاہیے:

API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY="your-metamask-private-key"

اپنا عوامی پتہ شامل کرنے کی کوئی ضرورت نہیں ہے: ethers اسے نجی کلید سے خود نکال لیتا ہے۔

مرحلہ 7: اپنا ٹرانزیکشن بنائیں

سب سے پہلے، آئیے mintNFT(tokenURI) نامی ایک فنکشن کی وضاحت کریں اور درج ذیل کام کر کے اپنا ٹرانزیکشن بنائیں:

  1. وہ اکاؤنٹ حاصل کریں جس سے ہم ٹرانزیکشن بھیجتے ہیں۔ ethers.getSigners() نیٹ ورک کے لیے کنفیگر کیے گئے اکاؤنٹس واپس کرتا ہے، جو Sepolia پر وہ اکاؤنٹ ہے جس کی نجی کلید .env میں ہے۔ چونکہ mintNFT onlyOwner ہے، اس لیے یہ وہی اکاؤنٹ ہونا چاہیے جس نے کنٹریکٹ تعینات کیا تھا۔

  2. وصول کنندہ کے طور پر اپنے پتہ اور میٹا ڈیٹا URI کے ساتھ، ہمارے کنٹریکٹ کی مثال پر mintNFT فنکشن کو کال کریں۔ یہ وہ کمپیوٹیشن ہے جو ہم اس ٹرانزیکشن میں انجام دینا چاہتے ہیں — جو اس معاملے میں ایک NFT کی ڈھلائی ہے۔

آپ کو خود نانس (آپ کے پتہ سے بھیجے گئے ٹرانزیکشنز کی تعداد، جو ری پلے حملوں کو روکتی ہے)، گیس کی حد، یا فیس کا حساب لگانے کی ضرورت نہیں ہے: ethers ٹرانزیکشن بھیجنے سے پہلے انہیں حاصل کرتا ہے یا ان کا تخمینہ لگاتا ہے۔

آپ کی mint-nft.js فائل اب اس طرح نظر آنی چاہیے:

مرحلہ 8: ٹرانزیکشن پر دستخط کریں

چونکہ نیٹ ورک ہماری نجی کلید کے ساتھ کنفیگر کیا گیا ہے، اس لیے ethers اسے بھیجنے سے پہلے خود بخود اس کے ساتھ ٹرانزیکشن پر دستخط کر دیتا ہے۔

ٹرانزیکشن بھیجے جانے کے بعد mintNFT کو کال کرنا واپس آ جاتا ہے، اور ہمیں ٹرانزیکشن ہیش دیتا ہے، جسے ہم یہ یقینی بنانے کے لیے استعمال کر سکتے ہیں کہ ہمارا ٹرانزیکشن مائن ہو گیا تھا اور نیٹ ورک کے ذریعے ڈراپ نہیں ہوا تھا۔ tx.wait() پھر اس وقت تک انتظار کرتا ہے جب تک کہ ٹرانزیکشن ایک بلاک میں شامل نہ ہو جائے۔ ہم نے کچھ ایرر چیکنگ بھی شامل کی ہے تاکہ ہمیں معلوم ہو سکے کہ آیا ہمارا ٹرانزیکشن کامیابی سے مکمل ہوا ہے۔

مرحلہ 9: mintNFT کو کال کریں اور mint-nft.js چلائیں

کیا آپ کو وہ nft-metadata.json یاد ہے جو آپ نے Pinata پر اپ لوڈ کیا تھا؟ Pinata سے اس کا CID حاصل کریں اور ipfs://<metadata-CID> کو mintNFT فنکشن کے پیرامیٹر کے طور پر پاس کریں۔ والیٹس اور مارکیٹ پلیسز اپنی پسند کے IPFS گیٹ وے کے ذریعے ipfs:// URIs کو حل کرتے ہیں، اس لیے آپ کا NFT کسی ایک گیٹ وے پر منحصر نہیں ہے۔

ایک الگ ونڈو میں https://gateway.pinata.cloud/ipfs/<metadata-CID> لوڈ کر کے دو بار چیک کریں کہ آپ نے جو CID کاپی کیا ہے وہ آپ کے nft-metadata.json سے لنک کرتا ہے۔ صفحہ نیچے دیے گئے سکرین شاٹ جیسا نظر آنا چاہیے:

Your page should display the json metadataآپ کے صفحے کو json میٹا ڈیٹا دکھانا چاہیے

مجموعی طور پر، آپ کا کوڈ کچھ اس طرح نظر آنا چاہیے:

اب، اپنا NFT ڈھالنے کے لیے Sepolia کے خلاف سکرپٹ چلائیں:

npx hardhat run scripts/mint-nft.js --network sepolia

چند سیکنڈ کے بعد، آپ کو اپنے ٹرمینل میں اس طرح کا جواب نظر آنا چاہیے:

The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
Your NFT was minted in block <block number>

اپنے ٹرانزیکشن کی تفصیلات دیکھنے کے لیے، Etherscan (نئے ٹیب میں کھلتا ہے) یا Blockscout (نئے ٹیب میں کھلتا ہے) پر اس کا ہیش تلاش کریں۔

View your NFT transaction hash on EtherscanEtherscan پر اپنا NFT ٹرانزیکشن ہیش دیکھیں

اور بس! اب آپ نے ایتھیریم بلاک چین پر ایک NFT کے ساتھ تعینات اور ڈھلائی کر لی ہے

mint-nft.js کا استعمال کرتے ہوئے آپ اتنے NFTs ڈھال سکتے ہیں جتنا آپ کا دل (اور والیٹ) چاہے گا! بس اس بات کو یقینی بنائیں کہ NFT کے میٹا ڈیٹا کو بیان کرنے والا ایک نیا tokenURI پاس کریں (بصورت دیگر، آپ صرف مختلف IDs کے ساتھ ایک جیسے بہت سے NFTs بنا لیں گے)۔

غالباً، آپ اپنے والیٹ میں اپنا NFT دکھانا چاہیں گے — لہذا حصہ 3: اپنے والیٹ میں اپنا NFT کیسے دیکھیں کو ضرور چیک کریں!