Pular para o conteúdo
0%

Como criar um NFT (mint) com ethers.js

Última atualização: 30 de agosto de 20213 min de leitura

Este tutorial descreve como mintar um NFT na blockchain Ethereum usando Ethers através da biblioteca ethers.js e do nosso smart contract da Parte I: How to Create an NFT. Vamos também explorar testes básicos

Tempo estimado para concluir este guia: ~10 minutos

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

Em outro tutorial, aprendemos como mintar um NFT usando Web3 e a biblioteca de contratos OpenZeppelin. Neste exercício, vamos te guiar por uma implementação alternativa usando a versão 4 da biblioteca OpenZeppelin, além da biblioteca Ethereum Ethers.js em vez de Web3.

Também vamos cobrir os fundamentos de como testar seu contrato com Hardhat e Waffle. Neste tutorial estou usando Yarn, mas você pode usar npm/npx se preferir.

Por fim, vamos usar TypeScript. Isso já é bem documentado, então não vamos abordá-lo aqui.

Em todos os outros aspectos, este tutorial funciona da mesma forma que a versão com Web3, incluindo ferramentas como Pinata e IPFS.

Um lembrete rápido

Como lembrete, "mintar um NFT" é o ato de publicar uma instância única do seu token ERC721 na blockchain. Este tutorial pressupõe que você já fez o deploy de um smart contract na rede Ropsten na Parte I da série de tutoriais de NFT, o que inclui a instalação do Ethers.

Passo 1: crie seu contrato em Solidity

OpenZeppelin é uma biblioteca para desenvolvimento seguro de smart contracts. Você simplesmente herda suas implementações de padrões populares como ERC20 ou ERC721, e estende o comportamento conforme sua necessidade. Vamos colocar esse arquivo em contracts/MyNFT.sol.

Passo 2: crie tasks do Hardhat para fazer o deploy do nosso contrato e mintar os NFTs

Crie o arquivo tasks/nft.ts contendo o seguinte:

Passo 3: crie os helpers

Você deve ter notado que nossas tasks importaram alguns helpers. Aqui estão eles.

contract.ts

env.ts

provider.ts

Note que a função final getProvider() usa a rede ropsten. Esse argumento é opcional e assume "homestead" como padrão caso seja omitido. Estamos usando a Alchemy, claro, mas existem várias alternativas suportadas.

wallet.ts

Passo 4: crie os testes

No seu diretório de testes, crie estes arquivos. Note que esses testes não são exaustivos. Eles testam um pequeno subconjunto da funcionalidade ERC721 oferecida pela biblioteca OpenZeppelin, e têm como objetivo fornecer a você os blocos de construção para criar testes mais robustos.

test/MyNFT.spec.ts (unit tests)

tasks.spec.ts (integration specs)

test-helpers.ts Note que isso requer as bibliotecas NPM importadas, incluindo sinon, chai e sinon-chai. A chamada sinon.restore() é necessária devido ao uso de stubbing.

Passo 5: configuração

Aqui está nosso hardhat.config.ts bem simples.

Note o condicional que só invoca o dotenv se não estivermos executando testes. Você pode não querer fazer isso em produção, mas fique tranquilo, pois o dotenv vai ignorar silenciosamente caso o arquivo .env não esteja presente.

Executando nossas tasks

Agora que colocamos esses arquivos no lugar, podemos rodar o hardhat para ver nossas tasks (excluindo as tasks nativas, por questão de brevidade).

Esqueceu os argumentos da sua task? Sem problema.

Executando nossos testes

Para rodar nossos testes, executamos hardhat test.

Resumo

Neste tutorial, criamos uma base sólida para uma infraestrutura de NFT bem testada, baseada em Solidity. A wallet fornecida por waffle.provider.getWallets() está vinculada a uma conta fake local da Hardhat Network que convenientemente já vem pré-carregada com um saldo em eth que podemos usar para financiar nossas transações de teste.

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.