---
title: "Como criar um NFT (mint) com ethers.js"
description: "Veja o guia passo a passo para criar NFTs (mint) com Ethers.js. Crie seus ativos digitais únicos sem esforço e junte-se à revolução do blockchain!"
---

# Como criar um NFT (mint) com ethers.js

Este tutorial descreve como mintar um NFT na blockchain Ethereum usando Ethers através da biblioteca [ethers.js](https://www.alchemy.com/dapps/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:

- 🌟  [How to mint an NFT using Web3.js](https://www.alchemy.com/blog/how-to-mint-an-nft-using-web3-js)
- 👛  [How to view your NFT in your mobile wallet](https://www.alchemy.com/blog/how-to-view-your-nft-in-your-mobile-wallet)
- 💸  [How to set a price on an NFT](https://www.alchemy.com/blog/how-to-set-a-price-on-an-nft)
- 💻  [NFT minter tutorial: How to create a full stack DApp](https://www.alchemy.com/blog/nft-minter-tutorial-how-to-create-a-full-stack-dapp)

Em [outro tutorial](https://www.alchemy.com/docs/reference/nft-api-overview), aprendemos como mintar um NFT usando Web3 e a [biblioteca de contratos OpenZeppelin](https://docs.openzeppelin.com/contracts/erc721). Neste exercício, vamos te guiar por uma implementação alternativa usando a versão 4 da [biblioteca OpenZeppelin](https://docs.openzeppelin.com/contracts/4.x/erc721), além da biblioteca Ethereum [Ethers.js](https://docs.ethers.io/) em vez de Web3.

Também vamos cobrir os fundamentos de como testar seu contrato com [Hardhat](https://www.alchemy.com/dapps/hardhat) e [Waffle](https://www.alchemy.com/dapps/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](https://www.alchemy.com//blog/how-to-create-an-nft) da série de tutoriais de NFT, o que inclui a instalação do Ethers.

## Passo 1: crie seu contrato em Solidity

[OpenZeppelin](https://www.alchemy.com/dapps/openzeppelin) é uma biblioteca para desenvolvimento seguro de smart contracts. Você simplesmente herda suas implementações de padrões populares como [ERC20](https://www.alchemy.com/overviews/erc20-solidity) 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](https://docs.ethers.io/v5/api/providers/#providers-getDefaultProvider).

`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](https://www.alchemy.com/overviews/solidity). A wallet fornecida por **waffle.provider.getWallets\(\)** está vinculada a uma conta fake local da [Hardhat Network](https://hardhat.org/hardhat-network/) que [convenientemente já vem pré-carregada](https://hardhat.org/hardhat-network/reference/#initial-state) com um saldo em eth que podemos usar para financiar nossas transações de teste.
