NFTని ఎలా ముద్రించాలి (NFT ట్యుటోరియల్ సిరీస్లో పార్ట్ 2/3)
"నాన్-ఫంజిబుల్ టోకెన్ (NFT)ని ముద్రించడం" అంటే బ్లాక్చైన్లో మీ ERC-721 టోకెన్ యొక్క ప్రత్యేకమైన ఉదాహరణను ప్రచురించడం. ఈ NFT ట్యుటోరియల్ సిరీస్లోని పార్ట్ 1 నుండి మన స్మార్ట్ కాంట్రాక్ట్ను ఉపయోగించి, మన Web3 నైపుణ్యాలను ప్రదర్శిద్దాం మరియు ఒక NFTని ముద్రిద్దాం. ఈ ట్యుటోరియల్ ముగిసే సమయానికి, మీ మనస్సుకు (మరియు వాలెట్కు) కావలసినన్ని NFTలను మీరు ముద్రించగలుగుతారు!
ప్రారంభిద్దాం!
దశ 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తో మీరు ఎంచుకున్న నెట్వర్క్కు network.create() కనెక్ట్ అవుతుంది మరియు దాని కోసం మనకు ethers ఆబ్జెక్ట్ను ఇస్తుంది.
దశ 3: మీ కాంట్రాక్ట్ ABIని పొందండి
మన కాంట్రాక్ట్ అప్లికేషన్ బైనరీ ఇంటర్ఫేస్ (ABI) అనేది మన స్మార్ట్ కాంట్రాక్ట్తో ఇంటరాక్ట్ అవ్వడానికి ఇంటర్ఫేస్. మీరు గురించి మరింత తెలుసుకోవచ్చు. Hardhat కాంట్రాక్ట్ను కంపైల్ చేసినప్పుడు మన కోసం స్వయంచాలకంగా ఒక ABIని రూపొందిస్తుంది మరియు దానిని artifacts/contracts/MyNFT.sol/MyNFT.json ఫైల్లో సేవ్ చేస్తుంది. దశ 5లో మనం మన కాంట్రాక్ట్ ఇన్స్టాన్స్ను సృష్టించినప్పుడు Hardhat Ethers ప్లగిన్ దానిని మన కోసం అక్కడి నుండి చదువుతుంది, కాబట్టి మనం దానిని స్వయంగా లోడ్ చేయాల్సిన అవసరం లేదు.
మీరు ABIని చూడాలనుకుంటే, మీరు దానిని మీ కన్సోల్కు ప్రింట్ చేయవచ్చు. మీ ప్రాజెక్ట్ యొక్క రూట్ డైరెక్టరీ నుండి, దీన్ని రన్ చేయండి:
node -p "JSON.stringify(require('./artifacts/contracts/MyNFT.sol/MyNFT.json').abi)"
దశ 4: IPFSని ఉపయోగించి మీ NFT కోసం మెటాడేటాను కాన్ఫిగర్ చేయండి
పార్ట్ 1లోని మన ట్యుటోరియల్ నుండి మీకు గుర్తున్నట్లయితే, మన mintNFT స్మార్ట్ కాంట్రాక్ట్ ఫంక్షన్ tokenURI పారామీటర్ను తీసుకుంటుంది, అది నాన్-ఫంజిబుల్ టోకెన్ (NFT) యొక్క మెటాడేటాను వివరించే JSON డాక్యుమెంట్కు రిజాల్వ్ అవ్వాలి— ఇది నిజంగా NFTకి జీవం పోస్తుంది, పేరు, వివరణ, చిత్రం మరియు ఇతర లక్షణాల వంటి కాన్ఫిగర్ చేయగల లక్షణాలను కలిగి ఉండటానికి అనుమతిస్తుంది.
ఇంటర్ప్లానెటరీ ఫైల్ సిస్టమ్ (IPFS) అనేది పంపిణీ చేయబడిన ఫైల్ సిస్టమ్లో డేటాను నిల్వ చేయడానికి మరియు భాగస్వామ్యం చేయడానికి ఒక వికేంద్రీకృత ప్రోటోకాల్ మరియు పీర్-టు-పీర్ నెట్వర్క్.
మన NFT నిజంగా వికేంద్రీకృతమైందని నిర్ధారించుకోవడానికి మన NFT ఆస్తి మరియు మెటాడేటాను నిల్వ చేయడానికి, మేము అనుకూలమైన IPFS అప్లికేషన్ ప్రోగ్రామింగ్ ఇంటర్ఫేస్ (API) మరియు టూల్కిట్ అయిన Pinataని ఉపయోగిస్తాము. మీకు Pinata ఖాతా లేకపోతే, ఉచిత ఖాతా కోసం ఇక్కడ (కొత్త ట్యాబ్లో తెరవబడుతుంది) సైన్ అప్ చేయండి మరియు మీ ఇమెయిల్ను ధృవీకరించడానికి దశలను పూర్తి చేయండి.
మీరు ఖాతాను సృష్టించిన తర్వాత:
-
ఫైల్స్ పేజీ (కొత్త ట్యాబ్లో తెరవబడుతుంది)కి నావిగేట్ చేయండి మరియు పేజీ కుడి ఎగువ మూలలో ఉన్న "Add" బటన్ను క్లిక్ చేయండి.
-
Pinataకి ఒక చిత్రాన్ని అప్లోడ్ చేయండి — ఇది మీ NFT కోసం ఇమేజ్ అసెట్ అవుతుంది. ఆస్తికి మీకు నచ్చిన పేరు పెట్టుకోవచ్చు. మీరు దీన్ని పబ్లిక్ IPFSకి అప్లోడ్ చేశారని నిర్ధారించుకోండి: ప్రైవేట్ IPFS (కొత్త ట్యాబ్లో తెరవబడుతుంది)లోని ఫైల్లను మీ NFTని ప్రదర్శించే వాలెట్లు మరియు మార్కెట్ప్లేస్లు పొందలేవు.
-
మీరు అప్లోడ్ చేసిన తర్వాత, ఫైల్స్ పేజీలో దాని CID (కంటెంట్ ఐడెంటిఫైయర్)తో పాటు ఫైల్ జాబితా చేయబడటం మీరు చూస్తారు. CIDని కాపీ చేయండి. మీరు మీ అప్లోడ్ను ఇక్కడ చూడవచ్చు:
https://gateway.pinata.cloud/ipfs/<CID>, లేదా Pinata సైడ్బార్లో "Gateways" కింద జాబితా చేయబడిన అంకితమైన గేట్వే ద్వారా. ఉదాహరణకు, మేము IPFSలో ఉపయోగించిన చిత్రాన్ని మీరు ఇక్కడ (కొత్త ట్యాబ్లో తెరవబడుతుంది) కనుగొనవచ్చు.
ఇప్పుడు, మేము 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లోని డేటాను మార్చడానికి సంకోచించకండి. మీరు అట్రిబ్యూట్స్ విభాగాన్ని తీసివేయవచ్చు లేదా దానికి జోడించవచ్చు. మరీ ముఖ్యంగా, ఇమేజ్ ఫీల్డ్ మీ IPFS ఇమేజ్ స్థానాన్ని ipfs://<image-CID> రూపంలో సూచిస్తుందని నిర్ధారించుకోండి — లేకపోతే, మీ NFTలో (చాలా అందమైన!) కుక్క ఫోటో ఉంటుంది.
మీరు JSON ఫైల్ను సవరించడం పూర్తి చేసిన తర్వాత, దాన్ని సేవ్ చేయండి మరియు చిత్రాన్ని అప్లోడ్ చేయడానికి మేము చేసిన దశలనే అనుసరించి దాన్ని Pinataకి అప్లోడ్ చేయండి. nft-metadata.json యొక్క CIDని కూడా కాపీ చేయండి; దశ 9లో మనకు ఇది అవసరం.
దశ 5: మీ కాంట్రాక్ట్ యొక్క ఇన్స్టాన్స్ను సృష్టించండి
ఇప్పుడు, మన కాంట్రాక్ట్తో ఇంటరాక్ట్ అవ్వడానికి, మన కోడ్లో దాని ఇన్స్టాన్స్ను సృష్టించాలి. అలా చేయడానికి మనకు మన కాంట్రాక్ట్ చిరునామా అవసరం, దాన్ని మన డిప్లాయ్ స్క్రిప్ట్ పార్ట్ 1లో ప్రింట్ చేసింది. కాంట్రాక్ట్ను డిప్లాయ్ చేయడానికి మీరు ఉపయోగించిన చిరునామాను వెతకడం ద్వారా మీరు దీన్ని Etherscan (కొత్త ట్యాబ్లో తెరవబడుతుంది) లేదా Blockscout (కొత్త ట్యాబ్లో తెరవబడుతుంది)లో కూడా కనుగొనవచ్చు.
పై ఉదాహరణలో, మన కాంట్రాక్ట్ చిరునామా 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.
తర్వాత మనం మన కాంట్రాక్ట్ను దాని పేరు (ఏ అప్లికేషన్ బైనరీ ఇంటర్ఫేస్ (ABI)ని ఉపయోగించాలో చెబుతుంది) మరియు దాని చిరునామాను ఉపయోగించి సృష్టించడానికి 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) అనే ఫంక్షన్ను నిర్వచిద్దాం మరియు కింది వాటిని చేయడం ద్వారా మన లావాదేవీని సృష్టిద్దాం:
-
మనం లావాదేవీని పంపే ఖాతాను పొందండి.
ethers.getSigners()నెట్వర్క్ కోసం కాన్ఫిగర్ చేయబడిన ఖాతాలను అందిస్తుంది, ఇది Sepoliaలో.envలో ప్రైవేట్ కీ ఉన్న ఖాతా.mintNFTఅనేదిonlyOwnerకాబట్టి, ఇది కాంట్రాక్ట్ను డిప్లాయ్ చేసిన అదే ఖాతా అయి ఉండాలి. -
మన స్వంత చిరునామాను గ్రహీతగా మరియు మెటాడేటా URIతో మన కాంట్రాక్ట్ ఇన్స్టాన్స్లో
mintNFTఫంక్షన్ను కాల్ చేయండి. ఈ లావాదేవీలో మనం చేయాలనుకుంటున్న గణన ఇదే — ఈ సందర్భంలో ఇది నాన్-ఫంజిబుల్ టోకెన్ (NFT)ని ముద్రించడం.
మీరు నాన్స్ (మీ చిరునామా నుండి పంపబడిన లావాదేవీల సంఖ్య, ఇది రీప్లే దాడులను నిరోధిస్తుంది), గ్యాస్ పరిమితి లేదా ఫీజులను మీరే లెక్కించాల్సిన అవసరం లేదు: లావాదేవీని పంపే ముందు ethers వాటిని పొందుతుంది లేదా అంచనా వేస్తుంది.
మీ mint-nft.js ఫైల్ ఇప్పుడు ఇలా ఉండాలి:
import { network } from "hardhat"
const { ethers } = await network.create()
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = await ethers.getContractAt("MyNFT", contractAddress)
async function mintNFT(tokenURI) {
const [signer] = await ethers.getSigners()
// లావాదేవీని పంపండి. ethers మన కోసం నాన్స్, గ్యాస్ పరిమితి మరియు ఫీజులను పూరిస్తుంది.
const tx = await nftContract.mintNFT(signer.address, tokenURI)
}
దశ 8: లావాదేవీపై సంతకం చేయండి
నెట్వర్క్ మన ప్రైవేట్ కీతో కాన్ఫిగర్ చేయబడినందున, ethers లావాదేవీని పంపే ముందు స్వయంచాలకంగా దానితో సంతకం చేస్తుంది.
లావాదేవీ పంపబడిన తర్వాత mintNFTని కాల్ చేయడం తిరిగి వస్తుంది మరియు మనకు లావాదేవీ హాష్ను ఇస్తుంది, మన లావాదేవీ మైన్ చేయబడిందని మరియు నెట్వర్క్ ద్వారా వదిలివేయబడలేదని నిర్ధారించుకోవడానికి మనం దీన్ని ఉపయోగించవచ్చు. tx.wait() ఆపై లావాదేవీ బ్లాక్లో చేర్చబడే వరకు వేచి ఉంటుంది. మన లావాదేవీ విజయవంతంగా జరిగిందో లేదో తెలుసుకోవడానికి మేము కొంత ఎర్రర్ చెకింగ్ను కూడా జోడించాము.
import { network } from "hardhat"
const { ethers } = await network.create()
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = await ethers.getContractAt("MyNFT", contractAddress)
async function mintNFT(tokenURI) {
const [signer] = await ethers.getSigners()
try {
// లావాదేవీని పంపండి. ethers మన కోసం నాన్స్, గ్యాస్ పరిమితి మరియు ఫీజులను పూరిస్తుంది.
const tx = await nftContract.mintNFT(signer.address, tokenURI)
console.log("The hash of your transaction is:", tx.hash)
// లావాదేవీ ఒక బ్లాక్లో చేర్చబడే వరకు వేచి ఉండండి.
const receipt = await tx.wait()
console.log("Your NFT was minted in block", receipt.blockNumber)
} catch (err) {
console.log("Something went wrong when submitting your transaction:", err)
}
}
దశ 9: mintNFTని కాల్ చేయండి మరియు mint-nft.jsని రన్ చేయండి
మీరు Pinataకి అప్లోడ్ చేసిన nft-metadata.json గుర్తుందా? Pinata నుండి దాని CIDని పొందండి మరియు ipfs://<metadata-CID>ని mintNFT ఫంక్షన్కు పారామీటర్గా పంపండి. వాలెట్లు మరియు మార్కెట్ప్లేస్లు తమకు నచ్చిన IPFS గేట్వే ద్వారా ipfs:// URIలను రిజాల్వ్ చేస్తాయి, కాబట్టి మీ నాన్-ఫంజిబుల్ టోకెన్ (NFT) ఏ ఒక్క గేట్వేపైనా ఆధారపడి ఉండదు.
ప్రత్యేక విండోలో
https://gateway.pinata.cloud/ipfs/<metadata-CID>ని లోడ్ చేయడం ద్వారా మీరు కాపీ చేసిన CID మీ nft-metadata.jsonకి లింక్ చేస్తుందో లేదో ఒకటికి రెండుసార్లు తనిఖీ చేయండి. పేజీ కింది స్క్రీన్షాట్ను పోలి ఉండాలి:
మీ పేజీ json మెటాడేటాను ప్రదర్శించాలి
మొత్తం మీద, మీ కోడ్ ఇలా ఉండాలి:
import { network } from "hardhat"
const { ethers } = await network.create()
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = await ethers.getContractAt("MyNFT", contractAddress)
async function mintNFT(tokenURI) {
const [signer] = await ethers.getSigners()
try {
// లావాదేవీని పంపండి. ethers మన కోసం నాన్స్, గ్యాస్ పరిమితి మరియు ఫీజులను పూరిస్తుంది.
const tx = await nftContract.mintNFT(signer.address, tokenURI)
console.log("The hash of your transaction is:", tx.hash)
// లావాదేవీ ఒక బ్లాక్లో చేర్చబడే వరకు వేచి ఉండండి.
const receipt = await tx.wait()
console.log("Your NFT was minted in block", receipt.blockNumber)
} catch (err) {
console.log("Something went wrong when submitting your transaction:", err)
}
}
await mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")
ఇప్పుడు, మీ 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 (కొత్త ట్యాబ్లో తెరవబడుతుంది)లో దాని హాష్ కోసం శోధించండి.
Etherscanలో మీ NFT లావాదేవీ హాష్ను వీక్షించండి
అంతే! మీరు ఇప్పుడు ఎథీరియం బ్లాక్చైన్లో NFTతో డిప్లాయ్ చేశారు మరియు ముద్రించారు
mint-nft.jsని ఉపయోగించి మీరు మీ మనస్సుకు (మరియు వాలెట్కు) కావలసినన్ని NFTలను ముద్రించవచ్చు! NFT యొక్క మెటాడేటాను వివరించే కొత్త tokenURIని పంపాలని నిర్ధారించుకోండి (లేకపోతే, మీరు వేర్వేరు IDలతో ఒకేలాంటి వాటిని చాలా తయారు చేస్తారు).
బహుశా, మీరు మీ వాలెట్లో మీ NFTని ప్రదర్శించాలనుకుంటున్నారు — కాబట్టి పార్ట్ 3: మీ వాలెట్లో మీ NFTని ఎలా చూడాలిని తప్పకుండా తనిఖీ చేయండి!
