Přeskočit na hlavní obsah

Jak vyrazit NFT (část 2/3 série tutoriálů o NFT)

ERC-721
alchemy
solidity
smart kontrakt účty
Začátečník
Sumi Mudgil
22. dubna 2021
8 minuta čtení

Beeple (opens in a new tab): 69 milionů 3LAU (opens in a new tab): 11 milionů Grimes (opens in a new tab): 6 milionů

Všichni z nich vyrazili svá NFT pomocí výkonného API od Alchemy. V tomto tutoriálu vás naučíme, jak udělat to samé za <10 minut.

„Ražba NFT“ je akt publikování jedinečné instance vašeho tokenu ERC-721 na blockchainu. Pomocí našeho chytrého kontraktu z 1. části této série tutoriálů o NFT si procvičíme naše dovednosti s Web3 a vyrazíme si NFT. Na konci tohoto tutoriálu si budete moci vyrazit tolik NFT, kolik jen vaše srdce (a peněženka) bude chtít!

Pojďme na to!

Krok 1: Nainstalujte si Web3

Pokud jste postupovali podle prvního tutoriálu o vytváření vašeho chytrého kontraktu pro NFT, máte již zkušenosti s používáním Ethers.js. Web3 je podobné Ethers, protože se jedná o knihovnu, která usnadňuje vytváření požadavků na blockchain Etherea. V tomto tutoriálu budeme používat Alchemy Web3 (opens in a new tab), což je vylepšená knihovna Web3, která nabízí automatické opakování pokusů a robustní podporu WebSocket.

V domovském adresáři vašeho projektu spusťte:

1npm install @alch/alchemy-web3

Krok 2: Vytvořte soubor mint-nft.js

V adresáři scripts vytvořte soubor mint-nft.js a přidejte následující řádky kódu:

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

Krok 3: Získejte ABI svého kontraktu

Naše ABI kontraktu (Application Binary Interface) je rozhraní pro interakci s naším chytrým kontraktem. Více informací o ABI kontraktů se můžete dozvědět zde (opens in a new tab). Hardhat pro nás automaticky generuje ABI a ukládá ho do souboru MyNFT.json. Abychom to mohli použít, budeme muset analyzovat obsah přidáním následujících řádků kódu do našeho souboru mint-nft.js:

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

Pokud chcete vidět ABI, můžete si ho vytisknout do konzole:

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

Chcete-li spustit mint-nft.js a vidět své ABI vytištěné v konzoli, přejděte do terminálu a spusťte:

1node scripts/mint-nft.js

Krok 4: Nakonfigurujte metadata pro své NFT pomocí IPFS

Pokud si pamatujete z našeho tutoriálu v části 1, naše funkce chytrého kontraktu mintNFT přijímá parametr tokenURI, který by se měl přeložit na dokument JSON popisující metadata NFT – což je to, co NFT skutečně oživuje a umožňuje mu mít konfigurovatelné vlastnosti, jako je název, popis, obrázek a další atributy.

Interplanetary File System (IPFS) je decentralizovaný protokol a peer-to-peer síť pro ukládání a sdílení dat v distribuovaném souborovém systému.

Použijeme Pinata, pohodlné IPFS API a sadu nástrojů, k uložení našeho NFT aktiva a metadat, abychom zajistili, že naše NFT je skutečně decentralizované. Pokud nemáte účet Pinata, zaregistrujte si bezplatný účet zde (opens in a new tab) a dokončete kroky pro ověření e-mailu.

Jakmile si vytvoříte účet:

  • Přejděte na stránku „Soubory“ a klikněte na modré tlačítko „Nahrát“ v levém horním rohu stránky.

  • Nahrajte obrázek do Pinaty – to bude obrazové aktivum pro vaše NFT. Aktivum si můžete pojmenovat, jak chcete

  • Po nahrání uvidíte informace o souboru v tabulce na stránce „Soubory“. Uvidíte také sloupec CID. CID můžete zkopírovat kliknutím na tlačítko kopírovat vedle něj. Váš nahraný soubor si můžete prohlédnout na: https://gateway.pinata.cloud/ipfs/<CID>. Obrázek, který jsme použili, najdete na IPFS například zde (opens in a new tab).

Pro vizuálněji založené studenty jsou výše uvedené kroky shrnuty zde:

Jak nahrát obrázek do Pinaty

Nyní budeme chtít nahrát do Pinaty ještě jeden dokument. Ale než to uděláme, musíme ho vytvořit!

Ve svém kořenovém adresáři vytvořte nový soubor s názvem nft-metadata.json a přidejte následující kód 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}
Zobrazit vše

Data v jsonu si můžete libovolně měnit. Do sekce atributů můžete přidávat nebo z ní odebírat. Nejdůležitější je, abyste se ujistili, že pole s obrázkem ukazuje na umístění vašeho obrázku na IPFS – jinak bude vaše NFT obsahovat fotku (velmi roztomilého!) psa.

Jakmile dokončíte úpravu souboru JSON, uložte ho a nahrajte na Pinata podle stejných kroků, jaké jsme provedli při nahrávání obrázku.

Jak nahrát soubor nft-metadata.json do Pinaty

Krok 5: Vytvořte instanci svého kontraktu

Nyní, abychom mohli s naším kontraktem interagovat, musíme v našem kódu vytvořit jeho instanci. K tomu budeme potřebovat účet našeho kontraktu, který můžeme získat z nasazení nebo na Blockscoutu (opens in a new tab) vyhledáním adresy, kterou jste použili k nasazení kontraktu.

Zobrazení účtu vašeho kontraktu na Etherscanu

Ve výše uvedeném příkladu je účet našeho kontraktu 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778.

Dále použijeme metodu kontraktu (opens in a new tab) Web3 k vytvoření našeho kontraktu pomocí ABI a adresy. Do souboru mint-nft.js přidejte následující:

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

Krok 6: Aktualizujte soubor .env

Nyní, abychom mohli vytvářet a odesílat transakce do řetězce Etherea, použijeme adresu vašeho veřejného účtu Ethereum k získání nonce účtu (vysvětlíme níže).

Přidejte svůj veřejný klíč do souboru .env – pokud jste dokončili 1. část tutoriálu, náš soubor .env by nyní měl vypadat takto:

1API_URL = "https://eth-sepolia.g.alchemy.com/v2/váš-api-klíč"
2PRIVATE_KEY = "adresa-vašeho-privátního-účtu"
3PUBLIC_KEY = "adresa-vašeho-veřejného-účtu"

Krok 7: Vytvořte transakci

Nejprve definujme funkci s názvem mintNFT(tokenData) a vytvořme naši transakci následujícím postupem:

  1. Získejte svůj PRIVATE_KEY a PUBLIC_KEY ze souboru .env.

  2. Dále budeme muset zjistit nonce účtu. Specifikace nonce se používá ke sledování počtu transakcí odeslaných z vaší adresy – což potřebujeme z bezpečnostních důvodů a k zabránění útokům opětovného přehrání (opens in a new tab). K získání počtu transakcí odeslaných z vaší adresy použijeme getTransactionCount (opens in a new tab).

  3. Nakonec nastavíme naši transakci s následujícími informacemi:

  • 'from': PUBLIC_KEY – Původ naší transakce je naše veřejná adresa

  • 'to': contractAddress – Kontrakt, se kterým chceme interagovat a odeslat transakci

  • 'nonce': nonce – Nonce účtu s počtem transakcí odeslaných z naší adresy

  • 'gas': estimatedGas – Odhadované palivo potřebné k dokončení transakce

  • 'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI() – Výpočet, který chceme v této transakci provést – což je v tomto případě ražba NFT

Váš soubor mint-nft.js by nyní měl vypadat takto:

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'); //získat nejnovější nonce
15
16 //transakce
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 }
Zobrazit vše

Krok 8: Podepište transakci

Nyní, když jsme vytvořili naši transakci, musíme ji podepsat, abychom ji mohli odeslat. Zde použijeme náš privátní klíč.

web3.eth.sendSignedTransaction nám poskytne haš transakce, který můžeme použít k ujištění, že naše transakce byla vytěžena a nebyla sítí zahozená. Všimnete si, že v sekci podepisování transakcí jsme přidali kontrolu chyb, abychom věděli, zda naše transakce proběhla úspěšně.

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") //získat nejnovější nonce
15
16 //transakce
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 "Haš vaší transakce je: ",
34 hash,
35 "\nZkontrolujte Mempool Alchemy a zobrazte stav vaší transakce!"
36 )
37 } else {
38 console.log(
39 "Při odesílání transakce se něco pokazilo:",
40 err
41 )
42 }
43 }
44 )
45 })
46 .catch((err) => {
47 console.log(" Promise selhal:", err)
48 })
49}
Zobrazit vše

Krok 9: Zavolejte mintNFT a spusťte node mint-nft.js

Pamatujete si na metadata.json, který jste nahráli do Pinaty? Získejte jeho hašovací kód z Pinaty a předejte následující jako parametr funkci mintNFT https://gateway.pinata.cloud/ipfs/<metadata-hash-code>

Zde je návod, jak získat hašovací kód:

Jak získat hašovací kód metadat vašeho NFT na PinatěJak získat hašovací kód metadat vašeho NFT na Pinatě

Dvakrát zkontrolujte, že hašovací kód, který jste zkopírovali, odkazuje na váš metadata.json načtením https://gateway.pinata.cloud/ipfs/<metadata-hash-code> do samostatného okna. Stránka by měla vypadat podobně jako na snímku obrazovky níže:

Vaše stránka by měla zobrazovat metadata jsonVaše stránka by měla zobrazovat metadata json

Celkově by váš kód měl vypadat nějak takto:

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") //získat nejnovější nonce
15
16 //transakce
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 "Haš vaší transakce je: ",
34 hash,
35 "\nZkontrolujte Mempool Alchemy a zobrazte stav vaší transakce!"
36 )
37 } else {
38 console.log(
39 "Při odesílání transakce se něco pokazilo:",
40 err
41 )
42 }
43 }
44 )
45 })
46 .catch((err) => {
47 console.log("Promise selhal:", err)
48 })
49}
50
51mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP")
Zobrazit vše

Nyní spusťte node scripts/mint-nft.js pro nasazení vašeho NFT. Po několika sekundách byste měli v terminálu vidět odpověď podobnou této:

1Haš vaší transakce je: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8
2
3Zkontrolujte Mempool Alchemy a zobrazte stav vaší transakce!

Dále navštivte svůj mempool Alchemy (opens in a new tab) a podívejte se na stav vaší transakce (zda je čekající, vytěžená, nebo ji síť zahodila). Pokud byla vaše transakce zahozená, je také užitečné zkontrolovat Blockscout (opens in a new tab) a vyhledat haš vaší transakce.

Zobrazení haše vaší NFT transakce na EtherscanuZobrazení haše vaší NFT transakce na Etherscanu

A to je vše! Nyní jste nasadili A vyrazili NFT na blockchainu Etherea

Pomocí mint-nft.js můžete vyrazit tolik NFT, kolik jen vaše srdce (a peněženka) bude chtít! Jen se ujistěte, že předáváte nový tokenURI popisující metadata NFT (jinak skončíte výrobou spousty identických s různými ID).

Pravděpodobně byste si chtěli své NFT vystavit ve své peněžence – takže se určitě podívejte na 3. část: Jak si zobrazit své NFT ve vaší peněžence!

Stránka naposledy aktualizována: 23. února 2026

Byl tento tutoriál užitečný?