ஒரு 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 கோப்பை உருவாக்கவும்
உங்கள் scripts கோப்பகத்திற்குள், mint-nft.js என்ற கோப்பை உருவாக்கி, பின்வரும் குறியீட்டு வரிகளைச் சேர்க்கவும்:
import { network } from "hardhat"
const { ethers } = await network.create()
எமது நிலைநிறுத்தும் ஸ்கிரிப்டைப் போலவே, நீங்கள் ஸ்கிரிப்டை இயக்கும் போது --network மூலம் நீங்கள் தேர்ந்தெடுக்கும் பிணையத்துடன் network.create() இணைகிறது, மேலும் அதற்கான ஒரு ethers பொருளை நமக்கு வழங்குகிறது.
படி 3: உங்கள் ஒப்பந்த ABI-ஐப் பெறவும்
எமது ஒப்பந்த 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-இல் அதைப் பதிவேற்றுவதை உறுதிசெய்யவும்: உங்கள் NFT-ஐக் காண்பிக்கும் பணப்பைகள் மற்றும் சந்தைகளால் தனிப்பட்ட IPFS (புதிய தாவலில் திறக்கும்)-இல் உள்ள கோப்புகளைப் பெற முடியாது.
-
நீங்கள் பதிவேற்றிய பிறகு, கோப்புகள் பக்கத்தில் அதன் 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 ஆகும்.
அடுத்து, Hardhat Ethers செருகுநிரலின் getContractAt முறையைப் பயன்படுத்தி எமது ஒப்பந்தத்தை அதன் பெயர் (எந்த ABI-ஐப் பயன்படுத்த வேண்டும் என்பதை இது கூறுகிறது) மற்றும் அதன் முகவரியைப் பயன்படுத்தி உருவாக்குவோம். உங்கள் 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என்பதால், இது ஒப்பந்தத்தை நிலைநிறுத்திய அதே கணக்காக இருக்க வேண்டும். -
எமது ஒப்பந்த நிகழ்வில்
mintNFTசெயல்பாட்டை அழைக்கவும், பெறுநராக எமது சொந்த முகவரியையும் மீத்தரவு URI-ஐயும் பயன்படுத்தவும். இந்தப் பரிவர்த்தனையில் நாம் செய்ய விரும்பும் கணக்கீடு இதுதான் — இது இந்த நிலையில் ஒரு 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-ஐ எவ்வாறு பார்ப்பது-ஐப் பார்க்க மறக்காதீர்கள்!
