ஒரு NFT-ஐ மின்ட் செய்வது எப்படி (NFT பயிற்சித் தொடரின் பகுதி 2/3)
Beeple (opens in a new tab): $69 மில்லியன் 3LAU (opens in a new tab): $11 மில்லியன் Grimes (opens in a new tab): $6 மில்லியன்
இவர்கள் அனைவரும் Alchemy-இன் சக்திவாய்ந்த API-ஐப் பயன்படுத்தி தங்களது NFT-களை மின்ட் செய்தனர். இந்தப் பயிற்சியில், 10 நிமிடங்களுக்குள் அதை எப்படிச் செய்வது என்பதை நாங்கள் உங்களுக்குக் கற்பிப்போம்.
"ஒரு NFT-ஐ மின்ட் செய்வது" என்பது பிளாக்செயினில் உங்கள் ERC-721 டோக்கனின் தனித்துவமான நிகழ்வை வெளியிடும் செயலாகும். இந்த NFT பயிற்சித் தொடரின் பகுதி 1-இல் உள்ள எங்கள் ஸ்மார்ட் ஒப்பந்தத்தைப் பயன்படுத்தி, நமது Web3 திறன்களை வெளிப்படுத்தி ஒரு NFT-ஐ மின்ட் செய்வோம். இந்தப் பயிற்சியின் முடிவில், உங்கள் மனமும் (மற்றும் வாலட்டும்) விரும்பும் அளவுக்கு பல NFT-களை உங்களால் மின்ட் செய்ய முடியும்!
வாருங்கள் தொடங்கலாம்!
படி 1: Web3-ஐ நிறுவுதல்
உங்கள் NFT ஸ்மார்ட் ஒப்பந்தத்தை உருவாக்குவது குறித்த முதல் பயிற்சியை நீங்கள் பின்பற்றியிருந்தால், Ethers.js-ஐப் பயன்படுத்திய அனுபவம் உங்களுக்கு ஏற்கனவே இருக்கும். Web3 என்பது Ethers-ஐப் போன்றதே, ஏனெனில் இது Ethereum பிளாக்செயினுக்கு கோரிக்கைகளை உருவாக்குவதை எளிதாக்கப் பயன்படும் ஒரு லைப்ரரியாகும். இந்தப் பயிற்சியில் நாம் Alchemy Web3 (opens in a new tab)-ஐப் பயன்படுத்துவோம், இது தானியங்கி மறுமுயற்சிகள் மற்றும் வலுவான WebSocket ஆதரவை வழங்கும் மேம்படுத்தப்பட்ட Web3 லைப்ரரியாகும்.
உங்கள் திட்டத்தின் முகப்பு கோப்பகத்தில் (home directory) இதை இயக்கவும்:
1npm install @alch/alchemy-web3படி 2: mint-nft.js கோப்பை உருவாக்குதல்
உங்கள் scripts கோப்பகத்திற்குள், mint-nft.js என்ற கோப்பை உருவாக்கி, பின்வரும் குறியீட்டு வரிகளைச் சேர்க்கவும்:
1require("dotenv").config()2const API_URL = process.env.API_URL3const { createAlchemyWeb3 } = require("@alch/alchemy-web3")4const web3 = createAlchemyWeb3(API_URL)படி 3: உங்கள் ஒப்பந்தத்தின் ABI-ஐப் பெறுதல்
நமது ஒப்பந்தத்தின் ABI (Application Binary Interface) என்பது நமது ஸ்மார்ட் ஒப்பந்தத்துடன் தொடர்புகொள்வதற்கான இடைமுகமாகும். ஒப்பந்த ABI-கள் பற்றி இங்கே (opens in a new tab) நீங்கள் மேலும் அறியலாம். Hardhat நமக்காக தானாகவே ஒரு ABI-ஐ உருவாக்கி அதை MyNFT.json கோப்பில் சேமிக்கிறது. இதைப் பயன்படுத்த, நமது mint-nft.js கோப்பில் பின்வரும் குறியீட்டு வரிகளைச் சேர்ப்பதன் மூலம் உள்ளடக்கங்களைப் பாகுபடுத்த (parse) வேண்டும்:
1const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")நீங்கள் ABI-ஐப் பார்க்க விரும்பினால், அதை உங்கள் கன்சோலில் அச்சிடலாம்:
1console.log(JSON.stringify(contract.abi))mint-nft.js-ஐ இயக்கி, உங்கள் ABI கன்சோலில் அச்சிடப்பட்டிருப்பதைப் பார்க்க, உங்கள் டெர்மினலுக்குச் சென்று இதை இயக்கவும்:
1node scripts/mint-nft.jsபடி 4: IPFS-ஐப் பயன்படுத்தி உங்கள் NFT-க்கான மெட்டாடேட்டாவை உள்ளமைத்தல்
பகுதி 1-இல் உள்ள நமது பயிற்சியிலிருந்து உங்களுக்கு நினைவிருந்தால், நமது mintNFT ஸ்மார்ட் ஒப்பந்தச் செயல்பாடு ஒரு tokenURI அளவுருவை எடுத்துக்கொள்கிறது, அது NFT-இன் மெட்டாடேட்டாவை விவரிக்கும் JSON ஆவணமாகத் தீர்க்கப்பட வேண்டும்— இதுவே உண்மையில் NFT-க்கு உயிரூட்டுகிறது, பெயர், விளக்கம், படம் மற்றும் பிற பண்புக்கூறுகள் போன்ற உள்ளமைக்கக்கூடிய பண்புகளைக் கொண்டிருக்க அனுமதிக்கிறது.
Interplanetary File System (IPFS) என்பது பரவலாக்கப்பட்ட கோப்பு முறைமையில் தரவைச் சேமிப்பதற்கும் பகிர்வதற்குமான ஒரு பரவலாக்கப்பட்ட நெறிமுறை மற்றும் பியர்-டு-பியர் (peer-to-peer) நெட்வொர்க் ஆகும்.
நமது NFT உண்மையிலேயே பரவலாக்கப்பட்டிருப்பதை உறுதிசெய்ய, நமது NFT சொத்து மற்றும் மெட்டாடேட்டாவைச் சேமிக்க, வசதியான IPFS API மற்றும் கருவித்தொகுப்பான Pinata-ஐப் பயன்படுத்துவோம். உங்களிடம் 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-வில் மேலும் ஒரு ஆவணத்தைப் பதிவேற்றப் போகிறோம். ஆனால் அதைச் செய்வதற்கு முன், நாம் அதை உருவாக்க வேண்டும்!
உங்கள் ரூட் கோப்பகத்தில் (root directory), nft-metadata.json என்ற புதிய கோப்பை உருவாக்கி, பின்வரும் json குறியீட்டைச் சேர்க்கவும்:
1{2 "attributes": [3 {4 "trait_type": "Breed",5 "value": "Maltipoo"6 },7 {8 "trait_type": "Eye color",9 "value": "Mocha"10 }11 ],12 "description": "The world's most adorable and sensitive pup.",13 "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",14 "name": "Ramses"15}json-இல் உள்ள தரவை நீங்கள் விரும்பியபடி மாற்றிக்கொள்ளலாம். பண்புக்கூறுகள் (attributes) பிரிவில் நீங்கள் நீக்கலாம் அல்லது சேர்க்கலாம். மிக முக்கியமாக, படப் புலம் (image field) உங்கள் IPFS படத்தின் இருப்பிடத்தைக் குறிக்கிறதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள் — இல்லையெனில், உங்கள் NFT-இல் ஒரு (மிகவும் அழகான!) நாயின் புகைப்படம் இடம்பெறும்.
JSON கோப்பைத் திருத்தி முடித்ததும், படத்தைப் பதிவேற்றுவதற்கு நாம் செய்த அதே படிகளைப் பின்பற்றி, அதைச் சேமித்து Pinata-வில் பதிவேற்றவும்.
படி 5: உங்கள் ஒப்பந்தத்தின் நிகழ்வை (instance) உருவாக்குதல்
இப்போது, நமது ஒப்பந்தத்துடன் தொடர்புகொள்ள, நமது குறியீட்டில் அதன் நிகழ்வை (instance) உருவாக்க வேண்டும். அவ்வாறு செய்ய, நமது ஒப்பந்த முகவரி தேவைப்படும், அதை நீங்கள் ஒப்பந்தத்தைப் பயன்படுத்திய முகவரியைத் தேடுவதன் மூலம் வரிசைப்படுத்தலில் (deployment) இருந்தோ அல்லது Blockscout (opens in a new tab)-இல் இருந்தோ பெறலாம்.
மேலே உள்ள எடுத்துக்காட்டில், நமது ஒப்பந்த முகவரி 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778 ஆகும்.
அடுத்து, ABI மற்றும் முகவரியைப் பயன்படுத்தி நமது ஒப்பந்தத்தை உருவாக்க Web3 ஒப்பந்த முறையை (contract method) (opens in a new tab) பயன்படுத்துவோம். உங்கள் mint-nft.js கோப்பில், பின்வருவனவற்றைச் சேர்க்கவும்:
1const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"2
3const nftContract = new web3.eth.Contract(contract.abi, contractAddress)படி 6: .env கோப்பைப் புதுப்பித்தல்
இப்போது, Ethereum செயினுக்குப் பரிவர்த்தனைகளை உருவாக்கி அனுப்ப, கணக்கின் நான்ஸைப் (nonce) பெற உங்கள் பொது Ethereum கணக்கு முகவரியைப் பயன்படுத்துவோம் (கீழே விளக்கப்படும்).
உங்கள் .env கோப்பில் உங்கள் பொது விசையைச் (public key) சேர்க்கவும் — நீங்கள் பயிற்சியின் பகுதி 1-ஐ முடித்திருந்தால், நமது .env கோப்பு இப்போது இப்படி இருக்க வேண்டும்:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"2PRIVATE_KEY = "your-private-account-address"3PUBLIC_KEY = "your-public-account-address"படி 7: உங்கள் பரிவர்த்தனையை உருவாக்குதல்
முதலில், mintNFT(tokenData) என்ற பெயரில் ஒரு செயல்பாட்டை வரையறுத்து, பின்வருவனவற்றைச் செய்வதன் மூலம் நமது பரிவர்த்தனையை உருவாக்குவோம்:
-
.envகோப்பிலிருந்து உங்கள் PRIVATE_KEY மற்றும் PUBLIC_KEY-ஐப் பெறவும். -
அடுத்து, கணக்கின் நான்ஸை (nonce) நாம் கண்டுபிடிக்க வேண்டும். உங்கள் முகவரியிலிருந்து அனுப்பப்பட்ட பரிவர்த்தனைகளின் எண்ணிக்கையைக் கண்காணிக்க நான்ஸ் விவரக்குறிப்பு பயன்படுத்தப்படுகிறது — இது பாதுகாப்பு நோக்கங்களுக்காகவும் ரீப்ளே தாக்குதல்களைத் (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 கோப்பு இப்போது இப்படி இருக்க வேண்டும்:
1 require('dotenv').config();2 const API_URL = process.env.API_URL;3 const PUBLIC_KEY = process.env.PUBLIC_KEY;4 const PRIVATE_KEY = process.env.PRIVATE_KEY;5
6 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");7 const web3 = createAlchemyWeb3(API_URL);8
9 const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");10 const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778";11 const nftContract = new web3.eth.Contract(contract.abi, contractAddress);12
13 async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); // சமீபத்திய நான்ஸைப் பெறுக15
16 // பரிவர்த்தனை17 const tx = {18 'from': PUBLIC_KEY,19 'to': contractAddress,20 'nonce': nonce,21 'gas': 500000,22 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()23 };24 }படி 8: பரிவர்த்தனையில் கையொப்பமிடுதல்
இப்போது நாம் நமது பரிவர்த்தனையை உருவாக்கிவிட்டோம், அதை அனுப்புவதற்கு அதில் கையொப்பமிட வேண்டும். இங்குதான் நமது தனிப்பட்ட விசையைப் (private key) பயன்படுத்துவோம்.
web3.eth.sendSignedTransaction நமக்கு பரிவர்த்தனை ஹாஷை (transaction hash) வழங்கும், நமது பரிவர்த்தனை மைன் செய்யப்பட்டதா மற்றும் நெட்வொர்க்கால் கைவிடப்படவில்லையா என்பதை உறுதிப்படுத்த இதைப் பயன்படுத்தலாம். பரிவர்த்தனையில் கையொப்பமிடும் பிரிவில், சில பிழைச் சரிபார்ப்புகளைச் சேர்த்துள்ளதை நீங்கள் கவனிப்பீர்கள், இதன் மூலம் நமது பரிவர்த்தனை வெற்றிகரமாக நடந்ததா என்பதை நாம் அறியலாம்.
1require("dotenv").config()2const API_URL = process.env.API_URL3const PUBLIC_KEY = process.env.PUBLIC_KEY4const PRIVATE_KEY = process.env.PRIVATE_KEY5
6const { createAlchemyWeb3 } = require("@alch/alchemy-web3")7const web3 = createAlchemyWeb3(API_URL)8
9const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")10const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"11const nftContract = new web3.eth.Contract(contract.abi, contractAddress)12
13async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") // சமீபத்திய நான்ஸைப் பெறுக15
16 // பரிவர்த்தனை17 const tx = {18 from: PUBLIC_KEY,19 to: contractAddress,20 nonce: nonce,21 gas: 500000,22 data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),23 }24
25 const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)26 signPromise27 .then((signedTx) => {28 web3.eth.sendSignedTransaction(29 signedTx.rawTransaction,30 function (err, hash) {31 if (!err) {32 console.log(33 "The hash of your transaction is: ",34 hash,35 "\nCheck Alchemy's Mempool to view the status of your transaction!"36 )37 } else {38 console.log(39 "Something went wrong when submitting your transaction:",40 err41 )42 }43 }44 )45 })46 .catch((err) => {47 console.log(" Promise failed:", err)48 })49}படி 9: mintNFT-ஐ அழைத்து node mint-nft.js-ஐ இயக்குதல்
Pinata-வில் நீங்கள் பதிவேற்றிய metadata.json நினைவிருக்கிறதா? Pinata-விலிருந்து அதன் ஹாஷ்கோடைப் (hashcode) பெற்று, பின்வருவனவற்றை mintNFT செயல்பாட்டிற்கு அளவுருவாக (parameter) அனுப்பவும் https://gateway.pinata.cloud/ipfs/<metadata-hash-code>
ஹாஷ்கோடை எவ்வாறு பெறுவது என்பது இங்கே:
Pinata-வில் உங்கள் nft மெட்டாடேட்டா ஹாஷ்கோடை எவ்வாறு பெறுவது
நீங்கள் நகலெடுத்த ஹாஷ்கோடு உங்கள் metadata.json-உடன் இணைக்கப்பட்டுள்ளதா என்பதை
https://gateway.pinata.cloud/ipfs/<metadata-hash-code>-ஐ ஒரு தனி சாளரத்தில் ஏற்றுவதன் மூலம் இருமுறை சரிபார்க்கவும். பக்கம் கீழே உள்ள ஸ்கிரீன்ஷாட்டைப் போலவே இருக்க வேண்டும்:
உங்கள் பக்கம் json மெட்டாடேட்டாவைக் காட்ட வேண்டும்
ஒட்டுமொத்தமாக, உங்கள் குறியீடு இதுபோன்று இருக்க வேண்டும்:
1require("dotenv").config()2const API_URL = process.env.API_URL3const PUBLIC_KEY = process.env.PUBLIC_KEY4const PRIVATE_KEY = process.env.PRIVATE_KEY5
6const { createAlchemyWeb3 } = require("@alch/alchemy-web3")7const web3 = createAlchemyWeb3(API_URL)8
9const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")10const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"11const nftContract = new web3.eth.Contract(contract.abi, contractAddress)12
13async function mintNFT(tokenURI) {14 const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") // சமீபத்திய நான்ஸைப் பெறுக15
16 // பரிவர்த்தனை17 const tx = {18 from: PUBLIC_KEY,19 to: contractAddress,20 nonce: nonce,21 gas: 500000,22 data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),23 }24
25 const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)26 signPromise27 .then((signedTx) => {28 web3.eth.sendSignedTransaction(29 signedTx.rawTransaction,30 function (err, hash) {31 if (!err) {32 console.log(33 "The hash of your transaction is: ",34 hash,35 "\nCheck Alchemy's Mempool to view the status of your transaction!"36 )37 } else {38 console.log(39 "Something went wrong when submitting your transaction:",40 err41 )42 }43 }44 )45 })46 .catch((err) => {47 console.log("Promise failed:", err)48 })49}50
51mintNFT("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 mempool (opens in a new tab)-ஐப் பார்வையிடவும். உங்கள் பரிவர்த்தனை கைவிடப்பட்டால், Blockscout (opens in a new tab)-ஐச் சரிபார்த்து உங்கள் பரிவர்த்தனை ஹாஷைத் தேடுவதும் உதவியாக இருக்கும்.
Etherscan-இல் உங்கள் NFT பரிவர்த்தனை ஹாஷைப் பார்க்கவும்
அவ்வளவுதான்! நீங்கள் இப்போது Ethereum பிளாக்செயினில் ஒரு NFT-ஐ வரிசைப்படுத்தி மின்ட் செய்துள்ளீர்கள்
mint-nft.js-ஐப் பயன்படுத்தி உங்கள் மனமும் (மற்றும் வாலட்டும்) விரும்பும் அளவுக்கு பல NFT-களை உங்களால் மின்ட் செய்ய முடியும்! NFT-இன் மெட்டாடேட்டாவை விவரிக்கும் புதிய tokenURI-ஐ அனுப்புவதை மட்டும் உறுதிப்படுத்திக் கொள்ளுங்கள் (இல்லையெனில், வெவ்வேறு ID-களுடன் ஒரே மாதிரியான பலவற்றை உருவாக்குவீர்கள்).
உங்கள் வாலட்டில் உங்கள் NFT-ஐக் காட்ட நீங்கள் விரும்புவீர்கள் — எனவே பகுதி 3: உங்கள் வாலட்டில் உங்கள் NFT-ஐ எவ்வாறு பார்ப்பது-ஐச் சரிபார்க்கவும்!
பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 3 மார்ச், 2026


