Jinsi ya Kuandika & Kupeleka NFT (Sehemu ya 1/3 ya Mfululizo wa Mafunzo ya NFT)
Huku NFTs zikiweka mnyororo wa bloku mbele ya umma, sasa ni fursa nzuri ya kuelewa mwenyewe msisimko huu kwa kuchapisha mkataba wako wa NFT (Tokeni ya ERC-721) kwenye mnyororo wa bloku wa Ethereum!
Alchemy inajivunia sana kuwezesha majina makubwa katika nafasi ya NFT, ikiwa ni pamoja na Makersplace (hivi karibuni iliweka rekodi ya mauzo ya sanaa ya kidijitali Christie's kwa Dola Milioni 69), Dapper Labs (watayarishi wa NBA Top Shot & Crypto Kitties), OpenSea (soko kubwa zaidi la NFT duniani), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable, na zaidi.
Katika mafunzo haya, tutapitia hatua za kuunda na kupeleka mkataba-erevu wa ERC-721 kwenye mtandao wa majaribio wa Sepolia kwa kutumia MetaMaskopens in a new tab, Solidityopens in a new tab, Hardhatopens in a new tab, Pinataopens in a new tab na Alchemyopens in a new tab (usisumbuke ikiwa bado huelewi maana ya yoyote kati ya haya — tutayaelezea!).
Katika Sehemu ya 2 ya mafunzo haya, tutapitia jinsi tunavyoweza kutumia mkataba-erevu wetu kutoa NFT, na katika Sehemu ya 3, tutaelezea jinsi ya kutazama NFT yako kwenye MetaMask.
Na bila shaka, ikiwa una maswali wakati wowote, usisite kuwasiliana nasi katika Alchemy Discordopens in a new tab au tembelea hati za API za NFT za Alchemyopens in a new tab!
Hatua ya 1: Unganisha na mtandao wa Ethereum
Kuna njia nyingi za kufanya maombi kwa mnyororo wa bloku wa Ethereum, lakini ili kurahisisha mambo, tutatumia akaunti ya bure kwenye Alchemyopens in a new tab, jukwaa la wasanidi wa mnyororo wa bloku na API inayotuwezesha kuwasiliana na mnyororo wa Ethereum bila kulazimika kuendesha nodi zetu wenyewe.
Katika mafunzo haya, tutatumia pia zana za msanidi programu za Alchemy za ufuatiliaji na uchanganuzi ili kuelewa kinachoendelea chinichini katika upelekaji wa mkataba-erevu wetu. Ikiwa huna tayari akaunti ya Alchemy, unaweza kujisajili bure hapaopens in a new tab.
Hatua ya 2: Unda programu yako (na ufunguo wa API)
Mara tu unapounda akaunti ya Alchemy, unaweza kutengeneza ufunguo wa API kwa kuunda programu. Hii itaturuhusu kufanya maombi kwa mtandao wa majaribio wa Sepolia. Angalia mwongozo huuopens in a new tab ikiwa unataka kujifunza zaidi kuhusu mitandao ya majaribio.
- Nenda kwenye ukurasa wa “Unda Programu” katika Dashibodi yako ya Alchemy kwa kuelea juu ya “Programu” katika upau wa kusogeza na kubofya “Unda Programu”
- Ipe programu yako jina (tulichagua “NFT Yangu ya Kwanza!”), toa maelezo mafupi, chagua “Ethereum” kwa ajili ya Mnyororo, na chagua “Sepolia” kwa ajili ya mtandao wako. Tangu muungano, testnets nyingine zimeacha kutumika.
- Bofya “Unda programu” na ndivyo hivyo! Programu yako inapaswa kuonekana kwenye jedwali lililo hapa chini.
Hatua ya 3: Unda akaunti ya Ethereum (anwani)
Tunahitaji akaunti ya Ethereum ili kutuma na kupokea miamala. Kwa mafunzo haya, tutatumia MetaMask, mkoba wa mtandaoni katika kivinjari unaotumika kudhibiti anwani ya akaunti yako ya Ethereum. Ikiwa unataka kuelewa zaidi jinsi miamala kwenye Ethereum inavyofanya kazi, angalia ukurasa huu kutoka kwa Msingi wa Ethereum.
Unaweza kupakua na kuunda akaunti ya MetaMask bure hapaopens in a new tab. Unapounda akaunti, au ikiwa tayari una akaunti, hakikisha umebadilisha hadi kwenye “Mtandao wa Majaribio wa Sepolia” upande wa juu kulia (ili tusishughulike na pesa halisi).
Hatua ya 4: Ongeza ether kutoka kwa Bomba
Ili kupeleka mkataba-erevu wetu kwenye mtandao wa majaribio, tutahitaji ETH bandia. Ili kupata ETH unaweza kwenda kwenye Bomba la Sepoliaopens in a new tab linalosimamiwa na Alchemy, ingia na uweke anwani ya akaunti yako, kisha bofya “Nitumie ETH”. Unapaswa kuona ETH katika akaunti yako ya MetaMask punde tu!
Hatua ya 5: Angalia Salio lako
Ili kuhakikisha salio letu lipo, hebu tufanye ombi la eth_getBalanceopens in a new tab kwa kutumia zana ya mtunzi ya Alchemyopens in a new tab. Hii itarudisha kiasi cha ETH katika mkoba wetu. Baada ya kuweka anwani ya akaunti yako ya MetaMask na kubofya “Tuma Ombi”, unapaswa kuona jibu kama hili:
1`{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}`Kumbuka Matokeo haya yako katika wei, sio ETH. Wei hutumika kama denomina ndogo zaidi ya ether. Ubadilishaji kutoka wei kwenda ETH ni 1 eth = 1018 wei. Kwa hivyo, tukibadilisha 0xde0b6b3a7640000 kuwa desimali tunapata wei 1*1018, ambayo ni sawa na ETH 1.
Phew! Pesa zetu bandia zote zipo.
Hatua ya 6: Anzisha mradi wetu
Kwanza, tutahitaji kuunda folda kwa ajili ya mradi wetu. Nenda kwenye mstari wako wa amri na uandike:
1mkdir my-nft2cd my-nftSasa kwa kuwa tuko ndani ya folda yetu ya mradi, tutatumia npm init kuanzisha mradi. Ikiwa huna tayari npm iliyosakinishwa, fuata maagizo hayaopens in a new tab (tutahitaji pia Node.jsopens in a new tab, kwa hiyo pakua hiyo pia!).
1npm initHaijalishi sana jinsi unavyojibu maswali ya usakinishaji; hivi ndivyo tulivyofanya kwa ajili ya marejeleo:
1 jina la kifurushi: (my-nft)2 toleo: (1.0.0)3 maelezo: NFT yangu ya kwanza!4 mahali pa kuingilia: (index.js)5 amri ya majaribio:6 hifadhi ya git:7 maneno muhimu:8 mwandishi:9 leseni: (ISC)10 Karibu kuandika kwa /Users/thesuperb1/Desktop/my-nft/package.json:1112 {13 "name": "my-nft",14 "version": "1.0.0",15 "description": "NFT yangu ya kwanza!",16 "main": "index.js",17 "scripts": {18 "test": "echo \"Error: no test specified\" && exit 1"19 },20 "author": "",21 "license": "ISC"22 }Onyesha yoteIdhinisha package.json, na tuko tayari kwenda!
Hatua ya 7: Sakinisha Hardhatopens in a new tab
Hardhat ni mazingira ya usanidi wa kuandaa, kupeleka, kupima, na kutatua programu yako ya Ethereum. Inasaidia wasanidi programu wanapojenga mikataba-erevu na dApps ndani ya nchi kabla ya kupeleka kwenye mnyororo hai.
Ndani ya mradi wetu wa my-nft, endesha:
1npm install --save-dev hardhatAngalia ukurasa huu kwa maelezo zaidi kuhusu maagizo ya usakinishajiopens in a new tab.
Hatua ya 8: Unda mradi wa Hardhat
Ndani ya folda yetu ya mradi, endesha:
1npx hardhatUnapaswa kisha kuona ujumbe wa kukaribisha na chaguo la kuchagua unachotaka kufanya. Chagua “unda hardhat.config.js tupu”:
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y8889👷 Karibu Hardhat v2.0.11 👷10? Unataka kufanya nini? …11Unda mradi wa sampuli12❯ Unda hardhat.config.js tupu13AchaOnyesha yoteHii itatutengenezea faili ya hardhat.config.js ambapo tutabainisha mipangilio yote ya mradi wetu (katika hatua ya 13).
Hatua ya 9: Ongeza folda za mradi
Ili kuweka mradi wetu ukiwa umepangiliwa, tutaunda folda mbili mpya. Nenda kwenye saraka ya mizizi ya mradi wako katika mstari wako wa amri na uandike:
1mkdir contracts2mkdir scripts-
mikataba/ ni mahali ambapo tutaweka msimbo wetu wa mkataba-erevu wa NFT
-
scripts/ ni mahali ambapo tutaweka hati za kupeleka na kuingiliana na mkataba-erevu wetu
Hatua ya 10: Andika mkataba wetu
Sasa kwa kuwa mazingira yetu yamewekwa, tuendelee na mambo ya kusisimua zaidi: kuandika msimbo wetu wa mkataba-erevu!
Fungua mradi wa my-nft katika kihariri chako unachopenda (tunapenda VSCodeopens in a new tab). Mikataba-erevu huandikwa kwa lugha inayoitwa Solidity ambayo ndiyo tutakayotumia kuandika mkataba-erevu wetu wa MyNFT.sol.
-
Nenda kwenye folda ya
contractsna uunde faili mpya inayoitwa MyNFT.sol -
Hapa chini kuna msimbo wetu wa mkataba-erevu wa NFT, ambao tumeutegemea kwenye utekelezaji wa ERC-721 wa maktaba ya OpenZeppelinopens in a new tab. Nakili na ubandike yaliyomo hapa chini kwenye faili yako ya MyNFT.sol.
1//Mkataba unategemea [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)2// SPDX-License-Identifier: MIT3pragma solidity ^0.8.0;45import "@openzeppelin/contracts/token/ERC721/ERC721.sol";6import "@openzeppelin/contracts/utils/Counters.sol";7import "@openzeppelin/contracts/access/Ownable.sol";8import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";910contract MyNFT is ERC721URIStorage, Ownable {11 using Counters for Counters.Counter;12 Counters.Counter private _tokenIds;1314 constructor() ERC721("MyNFT", "NFT") {}1516 function mintNFT(address recipient, string memory tokenURI)17 public onlyOwner18 returns (uint256)19 {20 _tokenIds.increment();2122 uint256 newItemId = _tokenIds.current();23 _mint(recipient, newItemId);24 _setTokenURI(newItemId, tokenURI);2526 return newItemId;27 }28}Onyesha yote -
Kwa sababu tunarithi madarasa kutoka kwa maktaba ya mikataba ya OpenZeppelin, katika mstari wako wa amri endesha
npm install @openzeppelin/contracts^4.0.0ili kusakinisha maktaba kwenye folda yetu.
Kwa hiyo, msimbo huu hufanya nini hasa? Hebu tuuchambue, mstari kwa mstari.
Juu ya mkataba-erevu wetu, tunaagiza madarasa matatu ya mkataba-erevu ya OpenZeppelinopens in a new tab:
-
@openzeppelin/contracts/token/ERC721/ERC721.sol ina utekelezaji wa kiwango cha ERC-721, ambacho mkataba-erevu wetu wa NFT utarithi. (Ili kuwa NFT halali, mkataba-erevu wako lazima utekeleze mbinu zote za kiwango cha ERC-721.) Ili kujifunza zaidi kuhusu kazi zilizorithiwa za ERC-721, angalia ufafanuzi wa kiolesura hapaopens in a new tab.
-
@openzeppelin/contracts/utils/Counters.sol hutoa vihesabio vinavyoweza kuongezwa au kupunguzwa kwa moja tu. Mkataba-erevu wetu unatumia kihesabio kufuatilia idadi jumla ya NFT zilizotolewa na kuweka kitambulisho cha kipekee kwenye NFT yetu mpya. (Kila NFT inayotolewa kwa kutumia mkataba-erevu lazima ipewe kitambulisho cha kipekee—hapa kitambulisho chetu cha kipekee kinabainishwa tu na jumla ya idadi ya NFT zilizopo. Kwa mfano, NFT ya kwanza tunayotoa kwa mkataba-erevu wetu ina kitambulisho cha "1," NFT yetu ya pili ina kitambulisho cha "2," na kadhalika.)
-
@openzeppelin/contracts/access/Ownable.sol huweka udhibiti wa ufikiajiopens in a new tab kwenye mkataba-erevu wetu, ili mmiliki pekee wa mkataba-erevu (wewe) aweze kutoa NFT. (Kumbuka, kujumuisha udhibiti wa ufikiaji ni upendeleo kabisa. Ikiwa ungependa mtu yeyote aweze kutoa NFT kwa kutumia mkataba-erevu wako, ondoa neno Ownable kwenye mstari wa 10 na onlyOwner kwenye mstari wa 17.)
Baada ya taarifa zetu za kuagiza, tuna mkataba-erevu wetu maalum wa NFT, ambao ni mfupi kwa kushangaza — una kihesabio tu, kiunda, na kazi moja! Hii ni shukrani kwa mikataba yetu tuliyorithi ya OpenZeppelin, ambayo hutekeleza mbinu nyingi tunazohitaji kuunda NFT, kama vile ownerOf ambayo inarudisha mmiliki wa NFT, na transferFrom, ambayo huhamisha umiliki wa NFT kutoka akaunti moja hadi nyingine.
Katika kiunda chetu cha ERC-721, utaona tunapisha mifuatano 2, “MyNFT” na “NFT.” Kigezo cha kwanza ni jina la mkataba-erevu, na cha pili ni alama yake. Unaweza kupa kila moja ya vigezo hivi jina lolote unalotaka!
Mwishowe, tuna kazi yetu mintNFT(address recipient, string memory tokenURI) inayoturuhusu kutoa NFT! Utaona kazi hii inachukua vigezo viwili:
-
address recipientinabainisha anwani itakayopokea NFT yako mpya iliyotolewa -
string memory tokenURIni mfuatano unaopaswa kuelekeza kwenye hati ya JSON inayoelezea metadata ya NFT. Metadata ya NFT ndiyo hasa inayoipa uhai, ikiruhusu kuwa na sifa zinazoweza kusanidiwa, kama vile jina, maelezo, picha, na sifa zingine. Katika sehemu ya 2 ya mafunzo haya, tutaelezea jinsi ya kusanidi metadata hii.
mintNFT huita baadhi ya mbinu kutoka kwa maktaba ya ERC-721 iliyorithiwa, na hatimaye inarudisha nambari inayowakilisha kitambulisho cha NFT mpya iliyotolewa.
Hatua ya 11: Unganisha MetaMask na Alchemy na mradi wako
Sasa kwa kuwa tumeunda mkoba wa MetaMask, akaunti ya Alchemy, na kuandika mkataba-erevu wetu, ni wakati wa kuunganisha vitu hivi vitatu.
Kila muamala unaotumwa kutoka kwa mkoba wako wa mtandaoni unahitaji sahihi kwa kutumia ufunguo wako binafsi wa kipekee. Ili kuipa programu yetu ruhusa hii, tunaweza kuhifadhi kwa usalama ufunguo wetu binafsi (na ufunguo wa API wa Alchemy) katika faili ya mazingira.
Ili kujifunza zaidi kuhusu kutuma miamala, angalia mafunzo haya kuhusu kutuma miamala kwa kutumia web3.
Kwanza, sakinisha kifurushi cha dotenv katika saraka ya mradi wako:
1npm install dotenv --saveKisha, unda faili ya .env katika saraka ya mizizi ya mradi wetu, na uongeze ufunguo wako binafsi wa MetaMask na URL ya HTTP ya API ya Alchemy.
-
Fuata maagizo hayaopens in a new tab ili kuhamisha ufunguo wako binafsi kutoka MetaMask
-
Angalia hapa chini ili kupata URL ya API ya HTTP ya Alchemy na uinakili kwenye ubao wako wa kunakili
Faili yako ya .env inapaswa sasa kuonekana hivi:
1API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"2PRIVATE_KEY="your-metamask-private-key"Ili kuunganisha hivi na msimbo wetu, tutarejelea vigezo hivi katika faili yetu ya hardhat.config.js katika hatua ya 13.
.env! Please make sure never to share or expose your .env file with anyone, as you are compromising your secrets in doing so. If you are using version control, add your .env to a gitignoreopens in a new tab file.Hatua ya 12: Sakinisha Ethers.js
Ethers.js ni maktaba inayorahisisha kuingiliana na kufanya maombi kwa Ethereum kwa kufunika mbinu za kawaida za JSON-RPC kwa mbinu ambazo ni rahisi zaidi kwa mtumiaji.
Hardhat hurahisisha sana kuunganisha Pluginsopens in a new tab kwa zana za ziada na utendakazi uliopanuliwa. Tutatumia fursa ya programu-jalizi ya Ethersopens in a new tab kwa usambazaji wa mkataba (Ethers.jsopens in a new tab ina mbinu safi sana za usambazaji wa mkataba).
Katika saraka yako ya mradi, andika:
1npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0Pia tutahitaji ethers katika hardhat.config.js yetu katika hatua inayofuata.
Hatua ya 13: Sasisha hardhat.config.js
Tumeongeza vitegemezi na programu-jalizi kadhaa hadi sasa, sasa tunahitaji kusasisha hardhat.config.js ili mradi wetu ujue kuhusu zote.
Sasisha hardhat.config.js yako ionekane hivi:
1 /**2 * @type import('hardhat/config').HardhatUserConfig3 */4 require('dotenv').config();5 require("@nomiclabs/hardhat-ethers");6 const { API_URL, PRIVATE_KEY } = process.env;7 module.exports = {8 solidity: "0.8.1",9 defaultNetwork: "sepolia",10 networks: {11 hardhat: {},12 sepolia: {13 url: API_URL,14 accounts: [`0x${PRIVATE_KEY}`]15 }16 },17 }Onyesha yoteHatua ya 14: Andaa mkataba wetu
Ili kuhakikisha kila kitu kinafanya kazi hadi sasa, hebu tuandae mkataba wetu. Kazi ya kuandaa ni moja ya kazi zilizojengewa ndani za hardhat.
Kutoka kwenye mstari wa amri, endesha:
1npx hardhat compileUnaweza kupata onyo kuhusu kitambulisho cha leseni cha SPDX hakijatolewa katika faili chanzo, lakini hakuna haja ya kuwa na wasiwasi kuhusu hilo — tunatumai kila kitu kingine kinaonekana vizuri! Ikiwa sivyo, unaweza kutuma ujumbe kila wakati katika discord ya Alchemyopens in a new tab.
Hatua ya 15: Andika hati yetu ya upelekaji
Sasa kwa kuwa mkataba wetu umeandikwa na faili yetu ya usanidi iko tayari, ni wakati wa kuandika hati ya kupeleka mkataba wetu.
Nenda kwenye folda ya scripts/ na uunde faili mpya inayoitwa deploy.js, ukiongeza yaliyomo yafuatayo:
1async function main() {2 const MyNFT = await ethers.getContractFactory("MyNFT")34 // Anza upelekaji, ukirudisha ahadi inayotatuliwa kuwa kitu cha mkataba5 const myNFT = await MyNFT.deploy()6 await myNFT.deployed()7 console.log("Mkataba umepelekwa kwa anwani:", myNFT.address)8}910main()11 .then(() => process.exit(0))12 .catch((error) => {13 console.error(error)14 process.exit(1)15 })Onyesha yoteHardhat hufanya kazi nzuri ya kuelezea kile kila mstari wa msimbo huu unafanya katika mafunzo yao ya Mikatabaopens in a new tab, tumechukua maelezo yao hapa.
1const MyNFT = await ethers.getContractFactory("MyNFT");ContractFactory katika ethers.js ni dhana inayotumika kupeleka mikataba-erevu mipya, kwa hivyo MyNFT hapa ni kiwanda cha matukio ya mkataba wetu wa NFT. Unapotumia programu-jalizi ya hardhat-ethers, matukio ya ContractFactory na Mkataba huunganishwa na mtia saini wa kwanza kwa chaguo-msingi.
1const myNFT = await MyNFT.deploy();Kuita deploy() kwenye ContractFactory kutaanza upelekaji, na kurudisha Ahadi inayotatuliwa kuwa Mkataba. Hiki ndicho kitu ambacho kina mbinu kwa kila moja ya kazi zetu za mkataba-erevu.
Hatua ya 16: Peleka mkataba wetu
Hatimaye tuko tayari kupeleka mkataba-erevu wetu! Rudi kwenye mzizi wa saraka ya mradi wako, na kwenye mstari wa amri, endesha:
1npx hardhat --network sepolia run scripts/deploy.jsUnapaswa kisha kuona kitu kama:
1Mkataba umepelekwa kwa anwani: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650Tukienda kwenye Sepolia etherscanopens in a new tab na kutafuta anwani ya mkataba wetu, tunapaswa kuona kwamba umepelekwa kwa mafanikio. Ikiwa huwezi kuiona mara moja, tafadhali subiri kidogo kwani inaweza kuchukua muda. Muamala utaonekana kitu kama hiki:
Anwani ya Kutoka inapaswa kulingana na anwani ya akaunti yako ya MetaMask na anwani ya Kwa itasema “Uundaji wa Mkataba”. Tukibofya kwenye muamala, tutaona anwani ya mkataba wetu katika sehemu ya Kwa:
Yasssss! Umepeleka mkataba-erevu wako wa NFT kwenye mnyororo wa Ethereum (testnet)!
Ili kuelewa kinachoendelea chinichini, hebu tuende kwenye kichupo cha Mvumbuzi katika dashibodi yetu ya Alchemyopens in a new tab. Ikiwa una programu nyingi za Alchemy hakikisha unachuja kwa programu na uchague “MyNFT”.
Hapa utaona simu chache za JSON-RPC ambazo Hardhat/Ethers zilifanya chinichini kwa ajili yetu tulipoiita kazi ya .deploy(). Mbili muhimu za kutaja hapa ni eth_sendRawTransaction, ambayo ni ombi la kuandika mkataba-erevu wetu kwenye mnyororo wa Sepolia, na eth_getTransactionByHash ambalo ni ombi la kusoma taarifa kuhusu muamala wetu kutokana na hashi (muundo wa kawaida wakati wa kutuma miamala). Ili kujifunza zaidi kuhusu kutuma miamala, angalia mafunzo haya kuhusu kutuma miamala kwa kutumia Web3.
Hayo ni yote kwa Sehemu ya 1 ya mafunzo haya. Katika Sehemu ya 2, tutaingiliana na mkataba-erevu wetu kwa kutoa NFT, na katika Sehemu ya 3 tutakuonyesha jinsi ya kutazama NFT yako katika mkoba wako wa Ethereum!
Ukurasa ulihaririwa mwisho: 15 Februari 2026






