WEB3DEV

Cover image for Implementação de airdrop/whitelist em NFT com MerkleTree
Isabela Curado Nehme
Isabela Curado Nehme

Posted on

Implementação de airdrop/whitelist em NFT com MerkleTree

Postado em 9 de Agosto de 2022

Neste artigo, detalharemos a implementação da prova da MerkleTree para o airdrop/whitelist da sua coleção NFT. (+ teste). Usando a Polygon Mumbai.

Se você não compreende como esse algoritmo funciona, aconselho você a ler o artigo anterior antes de começar a trabalhar (eu expliquei o algoritmo da Merkle em detalhes aqui).
Também o aconselho a ler este artigo antes de começar. Vai ajudá-lo a ter um entendimento mais profundo sobre como o código funciona.

Pré-requisito

Você precisará das seguintes ferramentas instaladas para arrebentar nessa construção:

Vamos nessa

Primeiro, vamos criar um contrato de NFT simples usando o openzeppelin wizard (assistente openzeppelin).

Um exemplo de como seu wizard deve ficar

Primeiro, colocamos a possibilidade de criar um novo NFT (propriedade cunhável) e adicionamos a propriedade AutoIncrementIds, para que o contador de NFTs cunhados aumente (incremente) automaticamente e nós não precisemos escrever funções adicionais. Adicione também a propriedade Roles (funções), para que tenhamos um administrador principal, assim como uma função de cunhagem, que vamos entregar ao contrato Airdrop (o contrato poderá criar NFTs e distribuí-los a endereços adequados). Copie esse código, precisaremos dele mais tarde.

Importante: na nova versão do openzeppelin, você precisa alterar _granRole em _setupRole

Usaremos também a biblioteca da MerkleProof - ela nos permite trabalhar convenientemente com a MerkleTree e verificar nossa prova de candidato na árvore.

Vamos começar a escrever o código

Copie o código do githab para seu diretório de trabalho e instale todas as dependências:

$ git clone https://github.com/kumancev/nft-merkle-tree.git
$ npm install
Enter fullscreen mode Exit fullscreen mode

Em seguida, crie e configure seu arquivo .env

PRIVATE_KEY=""  // sua conta da metamask 
POLYGONSCAN_API_KEY=""  // sua chave api da polygon
Enter fullscreen mode Exit fullscreen mode

Revisão do código

Existirão três contratos inteligentes em nosso projeto.

contracts-|
         |-nft-airdrop-|
                       |-Airdrop.sol
                       |-IERC721.sol
                       |-SuperNFT.sol
Enter fullscreen mode Exit fullscreen mode

O SuperNFT.sol é o código copiado do openzeppelin wizard. IERC721.sol é a interface do nosso contrato de NFT para podermos usar a função safeMint().

Vamos detalhar o contrato Airdrop.sol:

Agora precisamos fazer contratos de compilação:

$ npx hardhat compile

Ao escrever contratos inteligentes, certifique-se de escrever testes para eles. Testar contratos inteligentes é tão importante quanto escrevê-los.

Testando o contrato inteligente

Vá para a pasta test/nft-airdrop/, no arquivo Airdrop.test.ts.

Se você fizer alterações em seus contratos inteligentes, você deve recompilá-los.

$ npx hardhat clean
$ npx hardhat compile
Enter fullscreen mode Exit fullscreen mode

Agora, vamos detalhar o código de teste do nosso contrato Airdrop.sol.
Como usamos o TypeChain, ele gerou automaticamente Factory e Interfaces no tempo de compilação. Precisaremos deles para testar e futuramente implantar nosso contrato na rede.

Execute os testes em nossa rede local do Hardhat:

$ npx hardhat test test/nft-airdrop/Airdrop.test.ts

Os testes foram executados com sucesso, é hora de carregar os contratos na rede.

Implante contratos inteligentes para a rede de teste

Vá para a pasta scripts/nft-airdrop/ e implante o arquivo .ts.

O código será quase idêntico ao que escrevemos para os testes.

Você armazenará candidatos off-chain (mesas, bases de dados e provas serão também geradas off-chain). Como isso está fora do escopo do nosso artigo, vamos gerar a prova diretamente no script de implantação (a variável proof).

Primeiro, vamos testar nosso script de implantação na rede local.

$ npx hardhat run script/nft-airdrop/deploy.ts

Você deverá ver o seguinte:

Prova que precisaremos para a cunhagem de NFT.

Agora vamos implantar uma implantação na rede Mumbai da Polygon.

$ npx hardhat run script/nft-airdrop/deploy.ts --network matic

A última etapa: cunhar o NFT

Acesse a Polygon Mumbai, insira o endereço do contrato airdrop que você recebeu quando implantou. Na página de contrato inteligente, vá para a aba “write contract” (escrever contrato) e conecte sua carteira.

Em seguida, digite no campo (1.claim - merkleProof (bytes32[])) 4 hashes sem aspas, entre colchetes, que você obteve na exclusão.

Próxima reivindicação de NFT, observe que o preço do gas sai bem mais baixo se tivéssemos utilizado a confirmação de entrada na whitelist através do método “for” (“para”).

Agora, se formos para o endereço do nosso contrato de NFT e na aba “Read Contract” (Ler contrato) e no método “ownerOf” inserimos 0 (o proprietário do primeiro tolen NFT), vemos o endereço da nossa carteira.

Agora eu gostaria de recomendar a você um artigo descrevendo os problemas do desenvolvimento moderno na solidity e NFT.
O problema de copiar códigos e muitas outras coisas. Uma análise muito profunda com exemplos de soluções e códigos.
Este artigo foi escrito por um dos desenvolvedores da notória coleção NFT Nuclear Neadrs.
Se você quiser realmente compreender a otimização de códigos, tire um tempo e leia este post.

Além disso, enquanto eu escrevia esse artigo, encontrei provavelmente o único video que descreve a criação de coleção de NFT com um grande montante de modificações (Free mint (cunhagem gratuita) + Whitelist Mint (Merkle) (cunhagem na whitelist) + Public Mint (cunhagem pública) + PaymentSplitter (divisor de pagamento)). O único problema é o autor francês, mas nós escrevemos o código na mesma linguagem, então você deve entender.

É isso! Você é de tirar o fôlego! 😎

Junte-se ao Canal do Telegram e Canal do YouTube da Coinmonks e aprenda sobre negociação e investimento em criptomoedas.

Além disso, leia

Revisão WazirX NFT | Bitsgap x Pionex | Revisão Tangem
Como criar um dApp na Ethereum usando a Solidity?
Bots de negociação de criptografia | OKEx x Binance
Binance x FTX | Melhores carteiras Solana (SOL)
Como fazer trocas em cripto na Uniswap? | Revisão A-Ads

Esse artigo foi escrito por Alexandr Kumancev e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.

Latest comments (0)