Přejít na hlavní obsah

Jak razit NFT (Část 2/3 ze série tutoriálů o NFT)

ERC-721
Alchemy
Solidity
chytré kontrakty
Začátečník
Sumi Mudgil
22. dubna 2021
8 minut čtení

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

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

„Ražení NFT“ je proces publikování unikátní 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 NFT. Na konci tohoto tutoriálu budete schopni razit tolik NFT, kolik si jen vaše srdce (a peněženka) bude přát!

Pojďme na to!

Krok 1: Instalace Web3

Pokud jste postupovali podle prvního tutoriálu o vytváření chytrého kontraktu pro NFT, už máte zkušenosti s používáním Ethers.js. Web3 je podobné jako Ethers, protože jde 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í a robustní podporu WebSocketů.

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

npm install @alch/alchemy-web3

Krok 2: Vytvoření souboru mint-nft.js

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

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

Krok 3: Získání ABI vašeho kontraktu

ABI (Application Binary Interface) našeho kontraktu je rozhraní pro interakci s naším chytrým kontraktem. Více se o můžete dozvědět v glosáři. Hardhat pro nás automaticky generuje ABI a ukládá jej do souboru MyNFT.json. Abychom jej mohli použít, budeme muset načíst jeho obsah přidáním následujících řádků kódu do našeho souboru mint-nft.js:

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

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

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

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

node scripts/mint-nft.js

Krok 4: Konfigurace metadat pro vaše NFT pomocí IPFS

Pokud si pamatujete z našeho tutoriálu v 1. části, funkce našeho chytrého kontraktu mintNFT přijímá parametr tokenURI, který by měl odkazovat na JSON dokument 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.

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

Jakmile si vytvoříte účet:

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

  • Nahrajte obrázek na Pinata – 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 „Files“. Uvidíte také sloupec CID. CID můžete zkopírovat kliknutím na tlačítko kopírování vedle něj. Své nahrané soubory si můžete prohlédnout na adrese: https://gateway.pinata.cloud/ipfs/<CID>. Obrázek, který jsme použili na IPFS, najdete například zde (opens in a new tab).

Pro ty, kteří se učí spíše vizuálně, jsou výše uvedené kroky shrnuty zde:

How to upload your image to Pinata

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

V kořenovém adresáři vytvořte nový soubor s názvem nft-metadata.json a přidejte následující kód ve formátu JSON:

Data v JSON souboru můžete libovolně měnit. Můžete odebírat nebo přidávat položky do sekce atributů. Nejdůležitější je ujistit se, že pole image 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 úpravy JSON souboru, uložte jej a nahrajte na Pinata podle stejných kroků, které jsme provedli při nahrávání obrázku.

How to upload your nft-metadata.json to Pinata

Krok 5: Vytvoření instance vašeho kontraktu

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

View your contract address on Etherscan

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

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

const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"

const nftContract = new web3.eth.Contract(contract.abi, contractAddress)

Krok 6: Aktualizace souboru .env

Nyní, abychom mohli vytvářet a odesílat transakce do řetězce Etherea, použijeme adresu vašeho veřejného účtu na Ethereu 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 měl nyní vypadat takto:

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

Krok 7: Vytvoření vaší transakce

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

  1. Získejte své 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 pro prevenci replay útoků. 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ůvodcem naší transakce je naše veřejná adresa

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

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

  • 'gas': estimatedGas — Odhadovaný gas 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žení NFT

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

Krok 8: Podepsání transakce

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

web3.eth.sendSignedTransaction nám poskytne hash transakce, který můžeme použít k ověření, že naše transakce byla vytěžena a nebyla sítí zahozena. Všimnete si, že v sekci podepisování transakce jsme přidali kontrolu chyb, abychom věděli, zda naše transakce úspěšně prošla.

Krok 9: Zavolání mintNFT a spuštění node mint-nft.js

Pamatujete si na metadata.json, který jste nahráli na Pinata? Získejte jeho hash kód z Pinata 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 hash kód:

How to get your nft metadata hashcode on PinataJak získat hash kód metadat vašeho NFT na Pinata

Dvakrát zkontrolujte, že zkopírovaný hash kód 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:

Your page should display the json metadataVaše stránka by měla zobrazovat metadata ve formátu JSON

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

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

The hash of your transaction is: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8

Check Alchemy's Mempool to view the status of your transaction!

Dále navštivte svůj mempool na Alchemy (opens in a new tab), abyste viděli stav vaší transakce (zda čeká na vyřízení, byla vytěžena, nebo byla sítí zahozena). Pokud byla vaše transakce zahozena, je také užitečné zkontrolovat Blockscout (opens in a new tab) a vyhledat hash vaší transakce.

View your NFT transaction hash on EtherscanZobrazení hashe vaší transakce NFT na Etherscan

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

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

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