Pular para o conteúdo
0%

Como mintar um NFT usando web3.js

Última atualização: 27 de agosto de 20215 min de leitura

Este tutorial descreve como mintar um NFT na blockchain Ethereum usando Web 3 e nosso smart contract da Parte I: How to Create an NFT

Tempo estimado para completar este guia: ~10 minutos

Além disso, não deixe de conferir o restante da nossa série de tutoriais sobre NFT:

"Mintar um NFT" é o ato de publicar uma instância única do seu token ERC721 na blockchain. Agora que já fizemos o deploy de um smart contract na rede Sepolia na Parte I desta série de tutoriais sobre NFT, vamos exercitar nossas habilidades em web3 e mintar um NFT!

Ao final deste tutorial, você poderá mintar quantos NFTs quiser com este código — vamos começar!

Passo 1: instalar o Web3

Se você seguiu o primeiro tutorial sobre criar seu smart contract de NFT, você já tem experiência usando o Ethers.js. O Web3 é parecido com o Ethers, pois é uma biblioteca usada para facilitar a criação de requisições para a blockchain Ethereum. Neste tutorial vamos usar o Alchemy Web3, que é uma biblioteca web3 aprimorada que oferece retries automáticos e suporte robusto a WebSocket.

No diretório raiz do seu projeto, execute:

Passo 2: criar um arquivo mint-nft.js

Dentro do seu diretório scripts, crie um arquivo mint-nft.js e adicione as seguintes linhas de código:

Passo 3: pegue a ABI do seu contrato

A ABI (Application Binary Interface) do nosso contrato é a interface para interagir com nosso smart contract. O Hardhat gera automaticamente uma ABI para nós e a salva no arquivo MyNFT.json. Para usá-la, precisaremos extrair o conteúdo adicionando as seguintes linhas de código ao nosso arquivo mint-nft.js:

Se quiser ver a ABI, você pode imprimi-la no console:

Para executar o mint-nft.js e ver sua ABI impressa no console, vá até o terminal e execute

Passo 4: configure os metadados do seu NFT usando IPFS

Se você lembra do nosso tutorial na Parte I, nossa função mintNFT do smart contract recebe um parâmetro tokenURI que deve apontar para um documento JSON descrevendo os metadados do NFT — o que é o que realmente dá vida ao NFT, permitindo que ele tenha propriedades configuráveis, como nome, descrição, imagem e outros atributos.

O Interplanetary File System (IPFS) é um protocolo descentralizado e uma rede peer-to-peer para armazenar e compartilhar dados em um sistema de arquivos distribuído.

Usaremos o Pinata, uma API e conjunto de ferramentas de IPFS convenientes, para armazenar o asset e os metadados do nosso NFT e garantir que ele seja verdadeiramente descentralizado. Se você ainda não tem uma conta no Pinata, crie uma conta gratuita em pinata.cloud e complete as etapas para verificar seu e-mail.

Depois de criar a conta:

  • Vá até o botão "Pinata Upload" no canto superior direito
  • Envie uma imagem para o pinata — esse será o asset de imagem do seu NFT. Fique à vontade para nomear o asset como quiser
  • Depois de enviar, no topo da página, deve aparecer um popup verde que permite visualizar o hash do seu upload —> Copie esse hashcode. Você pode visualizar seu upload em: https://gateway.pinata.cloud/ipfs/<hash-code>

Para quem aprende melhor de forma visual, os passos acima estão resumidos aqui: Agora, vamos enviar mais um documento para o Pinata. Mas antes, precisamos criá-lo!

Dashboard do Pinata: enviando o arquivo de imagem do NFT para o IPFS
Enviando arquivos para o Pinata

No seu diretório raiz, crie um novo arquivo chamado nft-metadata.json e adicione o seguinte código json:

​Fique à vontade para alterar os dados no json. Você pode remover ou adicionar itens na seção de atributos. O mais importante é garantir que o campo image aponte para a localização da sua imagem no IPFS — caso contrário, seu NFT vai acabar incluindo a foto de um cachorro (bem fofo, por sinal!).

Depois de terminar de editar o arquivo json, salve-o e envie-o para o Pinata, seguindo os mesmos passos que fizemos para enviar a imagem.

Dashboard do Pinata: enviando o arquivo JSON de metadata do NFT
Enviando arquivo json para o Pinata

Passo 5: crie uma instância do seu contrato

Agora, para interagir com nosso contrato, precisamos criar uma instância dele no nosso código. Para isso, vamos precisar do endereço do nosso contrato, que podemos obter a partir do deploy ou do Etherscan, procurando pelo endereço que você usou para fazer o deploy do contrato.

Etherscan: localizando o endereço do contrato do NFT implantado
Crie uma instância do seu contrato

No exemplo acima, o endereço do nosso contrato é 0x81c587EB0fE773404c42c1d2666b5f557C470eED.

Em seguida, vamos usar o contract method do web3 para criar nosso contrato usando a ABI e o endereço. No seu arquivo mint-nft.js, adicione o seguinte:

Passo 6: atualize o arquivo .env

Agora, para criar e enviar transações para a chain Ethereum, vamos usar o endereço público da sua conta Ethereum para obter o nonce da conta (explicaremos abaixo).

Adicione sua chave pública ao seu arquivo .env — se você completou a parte 1 do tutorial, nosso arquivo .env agora deve estar assim:

Passo 7: crie sua transação

Primeiro, vamos definir uma função chamada mintNFT(tokenData) e criar nossa transação fazendo o seguinte:

  1. Pegue sua PRIVATE_KEY e PUBLIC_KEY do arquivo .env.
  2. Em seguida, precisamos descobrir o nonce da conta. A especificação de nonce é usada para controlar o número de transações enviadas a partir do seu endereço — o que precisamos por motivos de segurança e para prevenir replay attacks. Para obter o número de transações enviadas a partir do seu endereço, usamos o getTransactionCount.
  3. Por fim, vamos configurar nossa transação com as seguintes informações:
  4. 'from': PUBLIC_KEY : A origem da nossa transação é nosso endereço público
  5. 'to': contractAddress : O contrato com o qual desejamos interagir e para o qual enviamos a transação
  6. 'nonce': nonce : O nonce da conta com o número de transações enviadas a partir do nosso endereço
  7. 'gas': estimatedGas : O gas estimado necessário para concluir a transação
  8. 'maxPriorityFeePerGas': estimatedFee : A taxa estimada a ser oferecida por gas.
  9. 'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI() : A computação que desejamos executar nesta transação — que, neste caso, é mintar um NFT

Seu arquivo mint-nft.js deve estar assim agora:

Como posso mintar vários NFTs: Para mintar x NFTs em um único comando, podemos usar um simples for loop, indo de 0 a x-1, dentro de uma função que envolve o processo de minting. Isso nos permitiria mintar efetivamente x NFTs toda vez que a função wrapper de mint for chamada.

Passo 8: assine a transação

Agora que criamos nossa transação, precisamos assiná-la para poder enviá-la. É aqui que vamos usar nossa chave privada.

web3.eth.sendSignedTransaction vai nos dar o hash da transação, que podemos usar para confirmar que nossa transação foi minerada e não foi descartada pela rede. Você vai notar que, na seção de assinatura da transação, adicionamos alguma verificação de erros para sabermos se nossa transação foi concluída com sucesso.‍

Passo 9: chame mintNFT e execute node contract-interact.js

Lembra do metadata.json que você enviou para o Pinata? Pegue o hashcode dele no Pinata e passe o seguinte em uma chamada para mintNFT https://gateway.pinata.cloud/ipfs/​

Veja como obter o hashcode:

Dashboard do Pinata: copiando o hash IPFS do metadata enviado
Pegue seu hashcode no Pinata

Verifique novamente se o hashcode que você copiou leva ao seu metadata.json carregando https://gateway.pinata.cloud/ipfs/ em uma janela separada. A página deve ficar parecida com a captura de tela abaixo:

JSON de metadata do NFT retornado pelo gateway IPFS do Pinata
Hashcode retornado no Pinata

No geral, seu código deve ficar parecido com este:

Agora, execute node scripts/mint-nft.js para fazer o deploy do seu NFT. Depois de alguns segundos, você deve ver uma resposta assim no seu terminal:

Em seguida, visite seu Alchemy mempool para ver o status da sua transação (se está pendente, minerada ou foi descartada pela rede). Se sua transação foi descartada, também é útil verificar o Sepolia Etherscan e procurar pelo hash da sua transação.

Busca no block explorer pelo hash da transação de mint do NFT
Busque o hash da sua transação

E é isso! Agora você fez o deploy E mintou um NFT na blockchain Ethereum 🎉

Usando o mint-nft.js, você pode mintar quantos NFTs seu coração (e sua carteira) desejarem! Só não se esqueça de passar um novo tokenURI descrevendo os metadados do NFT — caso contrário, você vai acabar criando vários NFTs idênticos com IDs diferentes.

Presumivelmente, você vai querer mostrar seu NFT na sua wallet 😉— então não deixe de conferir a Parte III: How to View Your NFT in Your Wallet.

Newsletter da Alchemy

Seja o primeiro a saber sobre lançamentos

Assine nossa newsletter

Receba as últimas atualizações de produtos e recursos da Alchemy

A
O
D
+
Mais de 80.000 inscritos

Ao inserir seu endereço de e-mail, você concorda em receber nossas comunicações de marketing e atualizações de produtos. Você reconhece que a Alchemy processa as informações que recebemos de acordo com nosso Aviso de Privacidade. Você pode cancelar a inscrição a qualquer momento.