NFT کیسے ڈھالیں (NFT ٹیوٹوریل سیریز کا حصہ 2/3)
Beeple (opens in a new tab): $69 Million 3LAU (opens in a new tab): $11 Million Grimes (opens in a new tab): $6 Million
ان سب نے Alchemy کی طاقتور API کا استعمال کرتے ہوئے اپنے NFTs ڈھالے۔ اس ٹیوٹوریل میں، ہم آپ کو سکھائیں گے کہ <10 minutes میں ایسا کیسے کیا جائے۔
”NFT ڈھالنا“ بلاک چین پر آپ کے ERC-721 ٹوکن کی ایک منفرد مثال شائع کرنے کا عمل ہے۔ اس NFT ٹیوٹوریل سیریز کے حصہ 1 سے ہمارے سمارٹ کنٹریکٹ کا استعمال کرتے ہوئے، آئیے اپنی Web3 مہارتوں کو آزمائیں اور ایک NFT ڈھالیں۔ اس ٹیوٹوریل کے اختتام پر، آپ اتنے NFTs ڈھالنے کے قابل ہو جائیں گے جتنا آپ کا دل (اور والیٹ) چاہے گا!
آئیے شروع کرتے ہیں!
مرحلہ 1: Web3 انسٹال کریں
اگر آپ نے اپنا NFT سمارٹ کنٹریکٹ بنانے کے پہلے ٹیوٹوریل کی پیروی کی ہے، تو آپ کو پہلے ہی Ethers.js استعمال کرنے کا تجربہ ہے۔ Web3 بھی Ethers کی طرح ہے، کیونکہ یہ ایک لائبریری ہے جو ایتھیریم بلاک چین پر درخواستیں بنانے کو آسان بنانے کے لیے استعمال ہوتی ہے۔ اس ٹیوٹوریل میں ہم Alchemy Web3 (opens in a new tab) استعمال کریں گے، جو ایک بہتر Web3 لائبریری ہے اور خودکار ری ٹرائی (automatic retries) اور مضبوط WebSocket سپورٹ پیش کرتی ہے۔
اپنے پروجیکٹ کی ہوم ڈائریکٹری میں چلائیں:
npm install @alch/alchemy-web3
مرحلہ 2: ایک mint-nft.js فائل بنائیں
اپنی سکرپٹس ڈائریکٹری کے اندر، ایک mint-nft.js فائل بنائیں اور کوڈ کی درج ذیل لائنیں شامل کریں:
require("dotenv").config()
const API_URL = process.env.API_URL
const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)
مرحلہ 3: اپنے کنٹریکٹ کا ABI حاصل کریں
ہمارے کنٹریکٹ کا ABI (ایپلیکیشن بائنری انٹرفیس) ہمارے سمارٹ کنٹریکٹ کے ساتھ تعامل کرنے کا انٹرفیس ہے۔ آپ کنٹریکٹ ABIs کے بارے میں مزید یہاں (opens in a new tab) جان سکتے ہیں۔ Hardhat خود بخود ہمارے لیے ایک ABI تیار کرتا ہے اور اسے MyNFT.json فائل میں محفوظ کرتا ہے۔ اسے استعمال کرنے کے لیے ہمیں اپنی mint-nft.js فائل میں کوڈ کی درج ذیل لائنیں شامل کر کے مواد کو پارس (parse) کرنا ہوگا:
const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")
اگر آپ ABI دیکھنا چاہتے ہیں تو آپ اسے اپنے کنسول پر پرنٹ کر سکتے ہیں:
console.log(JSON.stringify(contract.abi))
mint-nft.js کو چلانے اور اپنے ABI کو کنسول پر پرنٹ ہوتا دیکھنے کے لیے اپنے ٹرمینل پر جائیں اور چلائیں:
node scripts/mint-nft.js
مرحلہ 4: IPFS کا استعمال کرتے ہوئے اپنے NFT کے لیے میٹا ڈیٹا کنفیگر کریں
اگر آپ کو حصہ 1 میں ہمارے ٹیوٹوریل سے یاد ہو، تو ہمارا mintNFT سمارٹ کنٹریکٹ فنکشن ایک tokenURI پیرامیٹر لیتا ہے جسے ایک JSON دستاویز پر حل ہونا چاہیے جو NFT کے میٹا ڈیٹا کو بیان کرتی ہے— جو دراصل NFT کو زندہ کرتا ہے، اور اسے قابل ترتیب خصوصیات، جیسے کہ نام، تفصیل، تصویر، اور دیگر اوصاف رکھنے کی اجازت دیتا ہے۔
انٹرپلینیٹری فائل سسٹم (IPFS) ایک لامركزی پروٹوکول اور پیئر ٹو پیئر نیٹ ورک ہے جو تقسیم شدہ فائل سسٹم میں ڈیٹا کو ذخیرہ کرنے اور شیئر کرنے کے لیے استعمال ہوتا ہے۔
ہم Pinata کا استعمال کریں گے، جو ایک آسان IPFS API اور ٹول کٹ ہے، تاکہ اپنے NFT اثاثے اور میٹا ڈیٹا کو ذخیرہ کر سکیں اور اس بات کو یقینی بنائیں کہ ہمارا NFT واقعی لامركزی ہے۔ اگر آپ کے پاس Pinata اکاؤنٹ نہیں ہے، تو یہاں (opens in a new tab) مفت اکاؤنٹ کے لیے سائن اپ کریں اور اپنا ای میل تصدیق کرنے کے مراحل مکمل کریں۔
ایک بار جب آپ اکاؤنٹ بنا لیں:
-
"Files" صفحہ پر جائیں اور صفحے کے اوپری بائیں جانب نیلے رنگ کے "Upload" بٹن پر کلک کریں۔
-
Pinata پر ایک تصویر اپ لوڈ کریں — یہ آپ کے NFT کے لیے تصویری اثاثہ ہوگا۔ آپ اثاثے کا جو چاہیں نام رکھ سکتے ہیں۔
-
اپ لوڈ کرنے کے بعد، آپ کو "Files" صفحہ پر موجود ٹیبل میں فائل کی معلومات نظر آئیں گی۔ آپ کو ایک CID کالم بھی نظر آئے گا۔ آپ اس کے آگے موجود کاپی بٹن پر کلک کر کے CID کاپی کر سکتے ہیں۔ آپ اپنی اپ لوڈ کو یہاں دیکھ سکتے ہیں:
https://gateway.pinata.cloud/ipfs/<CID>۔ مثال کے طور پر، آپ وہ تصویر جو ہم نے IPFS پر استعمال کی ہے یہاں (opens in a new tab) تلاش کر سکتے ہیں۔
بصری طور پر سیکھنے والوں کے لیے، مندرجہ بالا مراحل کا خلاصہ یہاں دیا گیا ہے:
اب، ہم Pinata پر ایک اور دستاویز اپ لوڈ کرنا چاہیں گے۔ لیکن ایسا کرنے سے پہلے، ہمیں اسے بنانا ہوگا!
اپنی روٹ ڈائریکٹری میں، nft-metadata.json کے نام سے ایک نئی فائل بنائیں اور درج ذیل json کوڈ شامل کریں:
{
"attributes": [
{
"trait_type": "Breed",
"value": "Maltipoo"
},
{
"trait_type": "Eye color",
"value": "Mocha"
}
],
"description": "The world's most adorable and sensitive pup.",
"image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",
"name": "Ramses"
}
json میں ڈیٹا کو تبدیل کرنے میں ہچکچاہٹ محسوس نہ کریں۔ آپ attributes سیکشن میں اضافہ کر سکتے ہیں یا اسے ہٹا سکتے ہیں۔ سب سے اہم بات، اس بات کو یقینی بنائیں کہ image فیلڈ آپ کی IPFS تصویر کے مقام کی طرف اشارہ کرتا ہے — بصورت دیگر، آپ کے NFT میں ایک (بہت پیارے!) کتے کی تصویر شامل ہوگی۔
ایک بار جب آپ JSON فائل میں ترمیم کر لیں، تو اسے محفوظ کریں اور تصویر اپ لوڈ کرنے کے لیے ہم نے جو مراحل اختیار کیے تھے انہی پر عمل کرتے ہوئے اسے Pinata پر اپ لوڈ کریں۔
مرحلہ 5: اپنے کنٹریکٹ کی ایک مثال (instance) بنائیں
اب، اپنے کنٹریکٹ کے ساتھ تعامل کرنے کے لیے، ہمیں اپنے کوڈ میں اس کی ایک مثال بنانے کی ضرورت ہے۔ ایسا کرنے کے لیے ہمیں اپنے کنٹریکٹ کا پتہ درکار ہوگا جو ہم تعیناتی سے یا Blockscout (opens in a new tab) سے وہ پتہ تلاش کر کے حاصل کر سکتے ہیں جو آپ نے کنٹریکٹ کو تعینات کرنے کے لیے استعمال کیا تھا۔
مندرجہ بالا مثال میں، ہمارے کنٹریکٹ کا پتہ 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778 ہے۔
اس کے بعد ہم ABI اور پتہ کا استعمال کرتے ہوئے اپنا کنٹریکٹ بنانے کے لیے Web3 contract method (opens in a new tab) استعمال کریں گے۔ اپنی mint-nft.js فائل میں، درج ذیل شامل کریں:
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = new web3.eth.Contract(contract.abi, contractAddress)
مرحلہ 6: .env فائل کو اپ ڈیٹ کریں
اب، ایتھیریم چین پر ٹرانزیکشنز بنانے اور بھیجنے کے لیے، ہم اکاؤنٹ کا نانس حاصل کرنے کے لیے آپ کے عوامی ایتھیریم اکاؤنٹ کا پتہ استعمال کریں گے (نیچے وضاحت کی جائے گی)۔
اپنی عوامی کلید کو اپنی .env فائل میں شامل کریں — اگر آپ نے ٹیوٹوریل کا حصہ 1 مکمل کر لیا ہے، تو ہماری .env فائل اب اس طرح دکھنی چاہیے:
API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-private-account-address"
PUBLIC_KEY = "your-public-account-address"
مرحلہ 7: اپنی ٹرانزیکشن بنائیں
سب سے پہلے، آئیے mintNFT(tokenData) کے نام سے ایک فنکشن کی وضاحت کریں اور درج ذیل کام کر کے اپنی ٹرانزیکشن بنائیں:
-
.envفائل سے اپنی PRIVATE_KEY اور PUBLIC_KEY حاصل کریں۔ -
اس کے بعد، ہمیں اکاؤنٹ کا نانس معلوم کرنے کی ضرورت ہوگی۔ نانس کی تخصیص آپ کے پتے سے بھیجی گئی ٹرانزیکشنز کی تعداد کا ٹریک رکھنے کے لیے استعمال ہوتی ہے — جس کی ہمیں سیکیورٹی مقاصد اور ری پلے حملوں (replay attacks) (opens in a new tab) کو روکنے کے لیے ضرورت ہے۔ آپ کے پتے سے بھیجی گئی ٹرانزیکشنز کی تعداد حاصل کرنے کے لیے، ہم getTransactionCount (opens in a new tab) استعمال کرتے ہیں۔
-
آخر میں ہم درج ذیل معلومات کے ساتھ اپنی ٹرانزیکشن ترتیب دیں گے:
-
'from': PUBLIC_KEY— ہماری ٹرانزیکشن کا ماخذ ہمارا عوامی پتہ ہے -
'to': contractAddress— وہ کنٹریکٹ جس کے ساتھ ہم تعامل کرنا اور ٹرانزیکشن بھیجنا چاہتے ہیں -
'nonce': nonce— ہمارے پتے سے بھیجی گئی ٹرانزیکشنز کی تعداد کے ساتھ اکاؤنٹ کا نانس -
'gas': estimatedGas— ٹرانزیکشن مکمل کرنے کے لیے درکار تخمینی گیس -
'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()— وہ کمپیوٹیشن جو ہم اس ٹرانزیکشن میں انجام دینا چاہتے ہیں — جو اس صورت میں ایک NFT ڈھالنا ہے
آپ کی mint-nft.js فائل اب اس طرح دکھنی چاہیے:
require('dotenv').config();
const API_URL = process.env.API_URL;
const PUBLIC_KEY = process.env.PUBLIC_KEY;
const PRIVATE_KEY = process.env.PRIVATE_KEY;
const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(API_URL);
const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778";
const nftContract = new web3.eth.Contract(contract.abi, contractAddress);
async function mintNFT(tokenURI) {
const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //تازہ ترین نانس حاصل کریں
//ٹرانزیکشن
const tx = {
'from': PUBLIC_KEY,
'to': contractAddress,
'nonce': nonce,
'gas': 500000,
'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()
};
}
مرحلہ 8: ٹرانزیکشن پر دستخط کرنا
اب جب کہ ہم نے اپنی ٹرانزیکشن بنا لی ہے، ہمیں اسے بھیجنے کے لیے اس پر دستخط کرنے کی ضرورت ہے۔ یہاں ہم اپنی نجی کلید استعمال کریں گے۔
web3.eth.sendSignedTransaction ہمیں ٹرانزیکشن ہیش دے گا، جسے ہم یہ یقینی بنانے کے لیے استعمال کر سکتے ہیں کہ ہماری ٹرانزیکشن مائن ہو گئی تھی اور نیٹ ورک کے ذریعے ڈراپ نہیں ہوئی تھی۔ آپ دیکھیں گے کہ ٹرانزیکشن پر دستخط کرنے والے حصے میں، ہم نے کچھ ایرر چیکنگ شامل کی ہے تاکہ ہمیں معلوم ہو سکے کہ آیا ہماری ٹرانزیکشن کامیابی سے گزر گئی ہے۔
require("dotenv").config()
const API_URL = process.env.API_URL
const PUBLIC_KEY = process.env.PUBLIC_KEY
const PRIVATE_KEY = process.env.PRIVATE_KEY
const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)
const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = new web3.eth.Contract(contract.abi, contractAddress)
async function mintNFT(tokenURI) {
const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //تازہ ترین نانس حاصل کریں
//ٹرانزیکشن
const tx = {
from: PUBLIC_KEY,
to: contractAddress,
nonce: nonce,
gas: 500000,
data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),
}
const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)
signPromise
.then((signedTx) => {
web3.eth.sendSignedTransaction(
signedTx.rawTransaction,
function (err, hash) {
if (!err) {
console.log(
"The hash of your transaction is: ",
hash,
"\nCheck Alchemy's Mempool to view the status of your transaction!"
)
} else {
console.log(
"Something went wrong when submitting your transaction:",
err
)
}
}
)
})
.catch((err) => {
console.log(" Promise failed:", err)
})
}
مرحلہ 9: mintNFT کو کال کریں اور نوڈ mint-nft.js چلائیں
کیا آپ کو وہ metadata.json یاد ہے جو آپ نے Pinata پر اپ لوڈ کیا تھا؟ Pinata سے اس کا ہیش کوڈ حاصل کریں اور درج ذیل کو فنکشن mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code> میں پیرامیٹر کے طور پر پاس کریں
ہیش کوڈ حاصل کرنے کا طریقہ یہ ہے:
Pinata پر اپنے nft میٹا ڈیٹا کا ہیش کوڈ کیسے حاصل کریں
ایک الگ ونڈو میں
https://gateway.pinata.cloud/ipfs/<metadata-hash-code>لوڈ کر کے دو بار چیک کریں کہ آپ نے جو ہیش کوڈ کاپی کیا ہے وہ آپ کے metadata.json سے لنک کرتا ہے۔ صفحہ نیچے دیے گئے سکرین شاٹ جیسا دکھنا چاہیے:
آپ کے صفحے کو json میٹا ڈیٹا دکھانا چاہیے
مجموعی طور پر، آپ کا کوڈ کچھ اس طرح دکھنا چاہیے:
require("dotenv").config()
const API_URL = process.env.API_URL
const PUBLIC_KEY = process.env.PUBLIC_KEY
const PRIVATE_KEY = process.env.PRIVATE_KEY
const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)
const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = new web3.eth.Contract(contract.abi, contractAddress)
async function mintNFT(tokenURI) {
const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //تازہ ترین نانس حاصل کریں
//ٹرانزیکشن
const tx = {
from: PUBLIC_KEY,
to: contractAddress,
nonce: nonce,
gas: 500000,
data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),
}
const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)
signPromise
.then((signedTx) => {
web3.eth.sendSignedTransaction(
signedTx.rawTransaction,
function (err, hash) {
if (!err) {
console.log(
"The hash of your transaction is: ",
hash,
"\nCheck Alchemy's Mempool to view the status of your transaction!"
)
} else {
console.log(
"Something went wrong when submitting your transaction:",
err
)
}
}
)
})
.catch((err) => {
console.log("Promise failed:", err)
})
}
mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")
اب، اپنا NFT تعینات کرنے کے لیے node scripts/mint-nft.js چلائیں۔ چند سیکنڈ کے بعد، آپ کو اپنے ٹرمینل میں اس طرح کا جواب نظر آنا چاہیے:
The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
Check Alchemy's Mempool to view the status of your transaction!
اس کے بعد، اپنی ٹرانزیکشن کی حیثیت دیکھنے کے لیے اپنے Alchemy میم پول (opens in a new tab) پر جائیں (چاہے یہ زیر التواء ہو، مائن ہو گئی ہو، یا نیٹ ورک کے ذریعے ڈراپ ہو گئی ہو)۔ اگر آپ کی ٹرانزیکشن ڈراپ ہو گئی ہے، تو Blockscout (opens in a new tab) چیک کرنا اور اپنے ٹرانزیکشن ہیش کو تلاش کرنا بھی مددگار ثابت ہوتا ہے۔
Etherscan پر اپنا NFT ٹرانزیکشن ہیش دیکھیں
اور بس! اب آپ نے ایتھیریم بلاک چین پر ایک NFT تعینات کر دیا ہے اور ڈھال لیا ہے
mint-nft.js کا استعمال کرتے ہوئے آپ اتنے NFTs ڈھال سکتے ہیں جتنا آپ کا دل (اور والیٹ) چاہے! بس اس بات کو یقینی بنائیں کہ NFT کے میٹا ڈیٹا کو بیان کرنے والا ایک نیا tokenURI پاس کریں (بصورت دیگر، آپ صرف مختلف IDs کے ساتھ ایک جیسے بہت سے NFTs بنا لیں گے)۔
غالباً، آپ اپنے والیٹ میں اپنا NFT دکھانا چاہیں گے — لہذا حصہ 3: اپنے والیٹ میں اپنا NFT کیسے دیکھیں کو ضرور چیک کریں!


