Jinsi ya Kufua NFT (Sehemu ya 2/3 ya Mfululizo wa Mafunzo ya NFT)
Beeple (opens in a new tab): Dola Milioni 69 3LAU (opens in a new tab): Dola Milioni 11 Grimes (opens in a new tab): Dola Milioni 6
Wote walifua NFT zao kwa kutumia API yenye nguvu ya Alchemy. Katika mafunzo haya, tutakufundisha jinsi ya kufanya vivyo hivyo kwa chini ya dakika 10.
"Kufua NFT" ni kitendo cha kuchapisha mfano wa kipekee wa tokeni yako ya ERC-721 kwenye mnyororo wa vitalu. Kwa kutumia mkataba wetu mahiri kutoka Sehemu ya 1 ya mfululizo huu wa mafunzo ya NFT, hebu tuonyeshe ujuzi wetu wa Web3 na tufue NFT. Mwishoni mwa mafunzo haya, utaweza kufua NFT nyingi kadri moyo wako (na mkoba wako) unavyotaka!
Hebu tuanze!
Hatua ya 1: Sakinisha Web3
Ikiwa ulifuata mafunzo ya kwanza kuhusu kuunda mkataba wako mahiri wa NFT, tayari una uzoefu wa kutumia Ethers.js. Web3 inafanana na Ethers, kwani ni maktaba inayotumika kurahisisha uundaji wa maombi kwenye mnyororo wa vitalu wa Ethereum. Katika mafunzo haya tutatumia Alchemy Web3 (opens in a new tab), ambayo ni maktaba iliyoboreshwa ya Web3 inayotoa majaribio ya kiotomatiki na usaidizi thabiti wa WebSocket.
Katika saraka ya mwanzo ya mradi wako endesha:
npm install @alch/alchemy-web3
Hatua ya 2: Unda faili ya mint-nft.js
Ndani ya saraka yako ya hati (scripts), unda faili ya mint-nft.js na uongeze mistari ifuatayo ya msimbo:
require("dotenv").config()
const API_URL = process.env.API_URL
const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)
Hatua ya 3: Chukua ABI ya mkataba wako
ABI (Application Binary Interface) ya mkataba wetu ni kiolesura cha kuingiliana na mkataba wetu mahiri. Unaweza kujifunza zaidi kuhusu ABI za Mkataba hapa (opens in a new tab). Hardhat inazalisha ABI kiotomatiki kwa ajili yetu na kuihifadhi katika faili ya MyNFT.json. Ili kutumia hii tutahitaji kuchanganua yaliyomo kwa kuongeza mistari ifuatayo ya msimbo kwenye faili yetu ya mint-nft.js:
const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")
Ikiwa unataka kuona ABI unaweza kuichapisha kwenye kiweko (console) chako:
console.log(JSON.stringify(contract.abi))
Ili kuendesha mint-nft.js na kuona ABI yako ikichapishwa kwenye kiweko nenda kwenye kituo chako (terminal) na uendeshe:
node scripts/mint-nft.js
Hatua ya 4: Sanidi data fafanuzi kwa ajili ya NFT yako kwa kutumia IPFS
Kama unakumbuka kutoka kwenye mafunzo yetu katika Sehemu ya 1, kipengele chetu cha mkataba mahiri cha mintNFT kinachukua kigezo cha tokenURI ambacho kinapaswa kutatua kwenye hati ya JSON inayoelezea data fafanuzi ya NFT— ambayo ndiyo hasa inayoipa NFT uhai, na kuiruhusu kuwa na sifa zinazoweza kusanidiwa, kama vile jina, maelezo, picha, na sifa nyinginezo.
Interplanetary File System (IPFS) ni itifaki iliyogatuliwa na mtandao wa rika-kwa-rika kwa ajili ya kuhifadhi na kushiriki data katika mfumo wa faili uliosambazwa.
Tutatumia Pinata, API na zana rahisi ya IPFS, kuhifadhi rasilimali yetu ya NFT na data fafanuzi ili kuhakikisha NFT yetu imegatuliwa kweli. Ikiwa huna akaunti ya Pinata, jisajili kwa akaunti ya bure hapa (opens in a new tab) na ukamilishe hatua za kuthibitisha barua pepe yako.
Mara tu unapounda akaunti:
-
Nenda kwenye ukurasa wa "Files" na ubofye kitufe cha bluu cha "Upload" kilicho juu kushoto mwa ukurasa.
-
Pakia picha kwenye Pinata — hii itakuwa rasilimali ya picha kwa ajili ya NFT yako. Jisikie huru kuipa rasilimali hiyo jina lolote unalotaka
-
Baada ya kupakia, utaona maelezo ya faili kwenye jedwali katika ukurasa wa "Files". Pia utaona safu wima ya CID. Unaweza kunakili CID kwa kubofya kitufe cha kunakili kilicho kando yake. Unaweza kutazama ulichopakia kwenye:
https://gateway.pinata.cloud/ipfs/<CID>. Unaweza kupata picha tuliyotumia kwenye IPFS hapa (opens in a new tab), kwa mfano.
Kwa wale wanaojifunza zaidi kwa kuona, hatua zilizo hapo juu zimefupishwa hapa:
Sasa, tutataka kupakia hati moja zaidi kwenye Pinata. Lakini kabla ya kufanya hivyo, tunahitaji kuiunda!
Katika saraka yako ya mzizi (root), tengeneza faili mpya inayoitwa nft-metadata.json na uongeze msimbo ufuatao wa 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"
}
Jisikie huru kubadilisha data katika json. Unaweza kuondoa au kuongeza kwenye sehemu ya sifa (attributes). Muhimu zaidi, hakikisha sehemu ya picha inaelekeza kwenye eneo la picha yako ya IPFS — vinginevyo, NFT yako itajumuisha picha ya mbwa (mzuri sana!).
Ukimaliza kuhariri faili ya JSON, ihifadhi na uipakie kwenye Pinata, ukifuata hatua zilezile tulizofanya kwa kupakia picha.
Hatua ya 5: Unda mfano wa mkataba wako
Sasa, ili kuingiliana na mkataba wetu, tunahitaji kuunda mfano wake katika msimbo wetu. Ili kufanya hivyo tutahitaji anwani ya mkataba wetu ambayo tunaweza kuipata kutoka kwenye usambazaji au Blockscout (opens in a new tab) kwa kutafuta anwani uliyotumia kusambaza mkataba.
Katika mfano ulio hapo juu, anwani ya mkataba wetu ni 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.
Kisha tutatumia njia ya mkataba (opens in a new tab) ya Web3 kuunda mkataba wetu kwa kutumia ABI na anwani. Katika faili yako ya mint-nft.js, ongeza yafuatayo:
const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
const nftContract = new web3.eth.Contract(contract.abi, contractAddress)
Hatua ya 6: Sasisha faili ya .env
Sasa, ili kuunda na kutuma miamala kwenye mnyororo wa Ethereum, tutatumia anwani ya akaunti yako ya umma ya Ethereum kupata nonsi ya akaunti (tutaelezea hapa chini).
Ongeza ufunguo wa umma wako kwenye faili yako ya .env — ikiwa ulikamilisha sehemu ya 1 ya mafunzo, faili yetu ya .env sasa inapaswa kuonekana hivi:
API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-private-account-address"
PUBLIC_KEY = "your-public-account-address"
Hatua ya 7: Unda muamala wako
Kwanza, hebu tufafanue kipengele kinachoitwa mintNFT(tokenData) na tuunde muamala wetu kwa kufanya yafuatayo:
-
Chukua PRIVATE_KEY na PUBLIC_KEY yako kutoka kwenye faili ya
.env. -
Kisha, tutahitaji kutambua nonsi ya akaunti. Uainishaji wa nonsi unatumika kufuatilia idadi ya miamala iliyotumwa kutoka kwenye anwani yako — ambayo tunaihitaji kwa madhumuni ya usalama na kuzuia mashambulizi ya kurudia (replay attacks) (opens in a new tab). Ili kupata idadi ya miamala iliyotumwa kutoka kwenye anwani yako, tunatumia getTransactionCount (opens in a new tab).
-
Hatimaye tutaweka muamala wetu na maelezo yafuatayo:
-
'from': PUBLIC_KEY— Asili ya muamala wetu ni anwani yetu ya umma -
'to': contractAddress— Mkataba tunaotaka kuingiliana nao na kutuma muamala -
'nonce': nonce— Nonsi ya akaunti yenye idadi ya miamala iliyotumwa kutoka kwenye anwani yetu -
'gas': estimatedGas— Gesi inayokadiriwa kuhitajika ili kukamilisha muamala -
'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()— Ukokotoaji tunaotaka kufanya katika muamala huu — ambao katika kesi hii ni kufua NFT
Faili yako ya mint-nft.js inapaswa kuonekana hivi sasa:
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'); //pata nonsi ya hivi karibuni
//muamala
const tx = {
'from': PUBLIC_KEY,
'to': contractAddress,
'nonce': nonce,
'gas': 500000,
'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI()
};
}
Hatua ya 8: Kusaini muamala
Sasa kwa kuwa tumeunda muamala wetu, tunahitaji kuusaini ili kuutuma. Hapa ndipo tutatumia ufunguo wa siri wetu.
web3.eth.sendSignedTransaction itatupa heshi ya muamala, ambayo tunaweza kuitumia kuhakikisha muamala wetu ulichimbwa na haukudondoshwa na mtandao. Utagundua katika sehemu ya kusaini muamala, tumeongeza ukaguzi wa makosa ili tujue ikiwa muamala wetu ulifanikiwa kupita.
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") //pata nonsi ya hivi karibuni
//muamala
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)
})
}
Hatua ya 9: Ita mintNFT na uendeshe nodi mint-nft.js
Unakumbuka metadata.json uliyopakia kwenye Pinata? Pata msimbo wake wa heshi (hashcode) kutoka Pinata na upitishe yafuatayo kama kigezo kwenye kipengele cha mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>
Hivi ndivyo jinsi ya kupata msimbo wa heshi:
Jinsi ya kupata msimbo wa heshi wa data fafanuzi ya nft yako kwenye Pinata
Hakikisha mara mbili kwamba msimbo wa heshi uliyonakili unaunganisha kwenye metadata.json yako kwa kupakia
https://gateway.pinata.cloud/ipfs/<metadata-hash-code>kwenye dirisha tofauti. Ukurasa unapaswa kuonekana sawa na picha ya skrini iliyo hapa chini:
Ukurasa wako unapaswa kuonyesha data fafanuzi ya json
Kwa ujumla, msimbo wako unapaswa kuonekana kama hivi:
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") //pata nonsi ya hivi karibuni
//muamala
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")
Sasa, endesha node scripts/mint-nft.js ili kusambaza NFT yako. Baada ya sekunde chache, unapaswa kuona jibu kama hili kwenye kituo chako:
The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
Check Alchemy's Mempool to view the status of your transaction!
Kisha, tembelea mempool ya Alchemy (opens in a new tab) yako ili kuona hali ya muamala wako (kama unasubiri, umechimbwa, au umedondoshwa na mtandao). Ikiwa muamala wako ulidondoshwa, inasaidia pia kuangalia Blockscout (opens in a new tab) na kutafuta heshi ya muamala wako.
Tazama heshi ya muamala wako wa NFT kwenye Etherscan
Na ndivyo hivyo! Sasa umesambaza NA kufua NFT kwenye mnyororo wa vitalu wa Ethereum
Kwa kutumia mint-nft.js unaweza kufua NFT nyingi kadri moyo wako (na mkoba wako) unavyotaka! Hakikisha tu unapitisha tokenURI mpya inayoelezea data fafanuzi ya NFT (vinginevyo, utaishia kutengeneza nyingi zinazofanana zenye vitambulisho tofauti).
Bila shaka, ungependa kuweza kuonyesha NFT yako kwenye mkoba wako — kwa hivyo hakikisha unaangalia Sehemu ya 3: Jinsi ya Kutazama NFT Yako Kwenye Mkoba Wako!


