Ruka kwenda kwenye maudhui makuu

Jinsi ya Kutengeneza NFT (Sehemu ya 2/3 ya Mfululizo wa Mafunzo ya NFT)

ERC-721
Alchemy
Solidity
mikataba erevu
Mwanzo
Sumi Mudgil
22 Aprili 2021
9 soma ndani ya dakika

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 walitengeneza NFT zao kwa kutumia API yenye nguvu ya Alchemy. Katika mafunzo haya, tutakufundisha jinsi ya kufanya vivyo hivyo kwa chini ya dakika 10.

“Kutengeneza NFT” ni kitendo cha kuchapisha tokeni ya kipekee ya ERC-721 kwenye mnyororo wa bloku. Kwa kutumia mkataba-erevu wetu kutoka Sehemu ya 1 ya mfululizo huu wa mafunzo ya NFT, hebu tuonyeshe ujuzi wetu wa Web3 na tutengeneze NFT. Mwishoni mwa mafunzo haya, utaweza kutengeneza NFT nyingi kadri moyo wako (na mkoba) unavyotamani!

Tuanze!

Hatua ya 1: Sakinisha Web3

Ikiwa ulifuata mafunzo ya kwanza kuhusu kuunda mkataba-erevu wako wa NFT, tayari una uzoefu wa kutumia Ethers.js. Web3 inafanana na Ethers, kwani ni maktaba inayotumika kurahisisha kuunda maombi kwenye mnyororo wa bloku wa Ethereum. Katika mafunzo haya tutakuwa tunatumia Alchemy Web3 (opens in a new tab), ambayo ni maktaba ya Web3 iliyoboreshwa inayotoa majaribio ya kurudia kiotomatiki na usaidizi thabiti wa WebSocket.

Katika saraka kuu ya mradi wako, endesha:

1npm install @alch/alchemy-web3

Hatua ya 2: Tengeneza faili la mint-nft.js

Ndani ya saraka yako ya maandishi, tengeneza faili la mint-nft.js na uongeze mistari ifuatayo ya msimbo:

1require("dotenv").config()
2const API_URL = process.env.API_URL
3const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
4const web3 = createAlchemyWeb3(API_URL)

Hatua ya 3: Pata ABI ya mkataba wako

ABI ya mkataba wetu (Kiolesura cha Mfumo wa Nambari) ni kiolesura cha kuingiliana na mkataba-erevu wetu. Unaweza kujifunza zaidi kuhusu ABI za Mkataba hapa (opens in a new tab). Hardhat hutengeneza ABI kiotomatiki na kuihifadhi katika faili la MyNFT.json. Ili kutumia hili, tutahitaji kuchanganua yaliyomo kwa kuongeza mistari ifuatayo ya msimbo kwenye faili letu la mint-nft.js:

1const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")

Ikiwa unataka kuona ABI unaweza kuichapisha kwenye koni yako:

1console.log(JSON.stringify(contract.abi))

Ili kuendesha mint-nft.js na kuona ABI yako ikichapishwa kwenye koni, nenda kwenye terminal yako na uendeshe:

1node scripts/mint-nft.js

Hatua ya 4: Sanidi metadata ya NFT yako kwa kutumia IPFS

Ikiwa unakumbuka kutoka kwa mafunzo yetu katika Sehemu ya 1, chaguo la kukokotoa la mkataba-erevu wa mintNFT huchukua kigezo cha tokenURI ambacho kinapaswa kutatua kwa hati ya JSON inayoelezea metadata ya NFT— ambayo ndiyo huleta uhai kwa NFT, na kuiruhusu kuwa na sifa zinazoweza kusanidiwa, kama vile jina, maelezo, picha na sifa nyingine.

Mfumo wa Faili baina ya Sayari (IPFS) ni itifaki iliyogatuliwa na mtandao wa rika-kwa-rika wa kuhifadhi na kushiriki data katika mfumo wa faili uliosambazwa.

Tutatumia Pinata, API na zana rahisi ya IPFS, kuhifadhi mali na metadata ya NFT yetu ili kuhakikisha kuwa NFT yetu imegatuliwa kikweli. 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 unapomaliza kuunda akaunti:

  • Nenda kwenye ukurasa wa "Faili" na ubofye kitufe cha buluu cha "Pakia" kilicho juu kushoto mwa ukurasa.

  • Pakia picha kwenye Pinata - hii itakuwa mali ya picha kwa NFT yako. Jisikie huru kuiita mali jina lolote unalotaka

  • Baada ya kupakia, utaona maelezo ya faili katika jedwali kwenye ukurasa wa "Faili". Pia utaona safu ya CID. Unaweza kunakili CID kwa kubofya kitufe cha kunakili kilicho karibu nayo. Unaweza kutazama upakiaji wako kwenye: https://gateway.pinata.cloud/ipfs/<CID>. Unaweza kupata picha tuliyotumia kwenye IPFS hapa (opens in a new tab), kwa mfano.

Kwa wanafunzi wanaoonekana zaidi, hatua zilizo hapo juu zimefupishwa hapa:

Jinsi ya kupakia picha yako kwenye Pinata

Sasa, tutataka kupakia hati moja zaidi kwenye Pinata. Lakini kabla ya kufanya hivyo, tunahitaji kuiunda!

Katika saraka yako kuu, tengeneza faili jipya liitwalo nft-metadata.json na uongeze msimbo ufuatao wa json:

1{
2 "attributes": [
3 {
4 "trait_type": "Aina",
5 "value": "Maltipoo"
6 },
7 {
8 "trait_type": "Rangi ya macho",
9 "value": "Mocha"
10 }
11 ],
12 "description": "Mtoto wa mbwa anayevutia na nyeti zaidi ulimwenguni.",
13 "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb",
14 "name": "Ramses"
15}
Onyesha yote

Jisikie huru kubadilisha data kwenye json. Unaweza kuondoa au kuongeza kwenye sehemu ya sifa. Muhimu zaidi, hakikisha sehemu ya picha inaelekeza kwenye eneo la picha yako ya IPFS - vinginevyo, NFT yako itajumuisha picha ya (mrembo sana!) mbwa.

Ukishamaliza kuhariri faili la JSON, lihifadhi na ulipakie kwenye Pinata, ukifuata hatua zilezile tulizofanya kupakia picha.

Jinsi ya kupakia nft-metadata.json yako kwenye Pinata

Hatua ya 5: Unda kielelezo cha mkataba wako

Sasa, ili kuingiliana na mkataba wetu, tunahitaji kuunda mfano wake katika msimbo wetu. Ili kufanya hivyo tutahitaji anwani yetu ya mkataba ambayo tunaweza kuipata kutoka kwa usambazaji au Blockscout (opens in a new tab) kwa kuangalia anwani uliyotumia kupeleka mkataba.

Tazama anwani yako ya mkataba kwenye Etherscan

Katika mfano ulio hapo juu, anwani ya mkataba wetu ni 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.

Ifuatayo tutatumia mbinu ya mkataba (opens in a new tab) ya Web3 kuunda mkataba wetu kwa kutumia ABI na anwani. Katika faili lako la mint-nft.js, ongeza yafuatayo:

1const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"
2
3const nftContract = new web3.eth.Contract(contract.abi, contractAddress)

Hatua ya 6: Sasisha faili la .env

Sasa, ili kuunda na kutuma miamala kwenye mnyororo wa Ethereum, tutatumia anwani ya akaunti yako ya umma ya Ethereum kupata nonce ya akaunti (tutaelezea hapo chini).

Ongeza ufunguo wako wa umma kwenye faili lako la .env - ikiwa ulikamilisha sehemu ya 1 ya mafunzo, faili letu la .env linapaswa kuonekana hivi sasa:

1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
2PRIVATE_KEY = "your-private-account-address"
3PUBLIC_KEY = "your-public-account-address"

Hatua ya 7: Tengeneza muamala wako

Kwanza, hebu tufafanue chaguo la kukokotoa liitwalo mintNFT(tokenData) na tutengeneze muamala wetu kwa kufanya yafuatayo:

  1. Pata PRIVATE_KEY na PUBLIC_KEY yako kutoka kwenye faili la .env.

  2. Ifuatayo, tutahitaji kufahamu nonce ya akaunti. Vipimo vya Nonce hutumiwa kufuatilia idadi ya miamala iliyotumwa kutoka kwa anwani yako - ambayo tunahitaji kwa madhumuni ya usalama na kuzuia mashambulizi ya kurudia (opens in a new tab). Ili kupata idadi ya miamala iliyotumwa kutoka kwa anwani yako, tunatumia getTransactionCount (opens in a new tab).

  3. Mwishowe 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 — Nonce ya akaunti na idadi ya miamala iliyotumwa kutoka kwa anwani yetu

  • 'gas': estimatedGas — Gesi inayokadiriwa inayohitajika kukamilisha muamala

  • 'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI() — Kukokotoa tunayotaka kufanya katika muamala huu - ambayo katika hali hii ni kutengeneza NFT

Faili lako la mint-nft.js linapaswa kuonekana hivi sasa:

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'); //pata nonce ya hivi karibuni
15
16 //muamala
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 }
Onyesha yote

Hatua ya 8: Saini muamala

Sasa kwa kuwa tumeunda muamala wetu, tunahitaji kuusaini ili kuutuma. Hapa ndipo tutatumia ufunguo wetu binafsi.

web3.eth.sendSignedTransaction itatupatia hashi ya muamala, ambayo tunaweza kutumia kuhakikisha muamala wetu umechimbwa na haukuachwa na mtandao. Utagundua katika sehemu ya kusaini muamala, tumeongeza ukaguzi wa hitilafu ili tujue ikiwa muamala wetu umefaulu.

1require("dotenv").config()
2const API_URL = process.env.API_URL
3const PUBLIC_KEY = process.env.PUBLIC_KEY
4const PRIVATE_KEY = process.env.PRIVATE_KEY
5
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") //pata nonce ya hivi karibuni
15
16 //muamala
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 signPromise
27 .then((signedTx) => {
28 web3.eth.sendSignedTransaction(
29 signedTx.rawTransaction,
30 function (err, hash) {
31 if (!err) {
32 console.log(
33 "Hashi ya muamala wako ni: ",
34 hash,
35 "\nAngalia Mempool ya Alchemy kutazama hali ya muamala wako!"
36 )
37 } else {
38 console.log(
39 "Kuna kitu kilienda vibaya wakati wa kuwasilisha muamala wako:",
40 err
41 )
42 }
43 }
44 )
45 })
46 .catch((err) => {
47 console.log(" Ahadi imeshindwa:", err)
48 })
49}
Onyesha yote

Hatua ya 9: Ita mintNFT na endesha node mint-nft.js

Unakumbuka metadata.json uliyopakia kwenye Pinata? Pata msimbo wake wa hashi kutoka Pinata na upitishe yafuatayo kama kigezo kwa chaguo la kukokotoa mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>

Hivi ndivyo jinsi ya kupata msimbo wa hashi:

Jinsi ya kupata msimbo wa hashi wa metadata ya nft yako kwenye PinataJinsi ya kupata msimbo wa hashi wa metadata ya nft yako kwenye Pinata

Hakikisha mara mbili kwamba msimbo wa hashi ulionakili 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 hapa chini:

Ukurasa wako unapaswa kuonyesha metadata ya jsonUkurasa wako unapaswa kuonyesha metadata ya json

Kwa pamoja, msimbo wako unapaswa kuonekana kama hivi:

1require("dotenv").config()
2const API_URL = process.env.API_URL
3const PUBLIC_KEY = process.env.PUBLIC_KEY
4const PRIVATE_KEY = process.env.PRIVATE_KEY
5
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") //pata nonce ya hivi karibuni
15
16 //muamala
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 signPromise
27 .then((signedTx) => {
28 web3.eth.sendSignedTransaction(
29 signedTx.rawTransaction,
30 function (err, hash) {
31 if (!err) {
32 console.log(
33 "Hashi ya muamala wako ni: ",
34 hash,
35 "\nAngalia Mempool ya Alchemy kutazama hali ya muamala wako!"
36 )
37 } else {
38 console.log(
39 "Kuna kitu kilienda vibaya wakati wa kuwasilisha muamala wako:",
40 err
41 )
42 }
43 }
44 )
45 })
46 .catch((err) => {
47 console.log("Ahadi imeshindwa:", err)
48 })
49}
50
51mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")
Onyesha yote

Sasa, endesha node scripts/mint-nft.js ili kupeleka NFT yako. Baada ya sekunde chache, unapaswa kuona jibu kama hili kwenye terminal yako:

1Hashi ya muamala wako ni: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
2
3Angalia Mempool ya Alchemy kutazama hali ya muamala wako!

Ifuatayo, tembelea Mempool yako ya Alchemy (opens in a new tab) ili kuona hali ya muamala wako (kama unasubiri, umechimbwa, au umeshuka na mtandao). Ikiwa muamala wako umeshuka, inasaidia pia kuangalia Blockscout (opens in a new tab) na utafute hashi ya muamala wako.

Tazama hashi ya muamala wako wa NFT kwenye EtherscanTazama hashi ya muamala wako wa NFT kwenye Etherscan

Na ndivyo hivyo! Sasa umeshapeleka NA kutengeneza NFT kwenye mnyororo wa bloku wa Ethereum

Kwa kutumia mint-nft.js unaweza kutengeneza NFT nyingi kadri moyo wako (na mkoba) unavyotamani! Hakikisha tu unapitia tokenURI mpya inayoelezea metadata ya NFT (vinginevyo, utaishia kutengeneza rundo la zinazofanana na vitambulisho tofauti).

Bila shaka, ungependa kuonyesha NFT yako kwenye mkoba wako - kwa hivyo hakikisha unaangalia Sehemu ya 3: Jinsi ya Kuona NFT Yako Kwenye Mkoba wako!

Ukurasa ulihaririwa mwisho: 3 Machi 2026

Umesaidika na mafunzo haya?