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
Em seguida, crie e configure seu arquivo .env
PRIVATE_KEY="" // sua conta da metamask
POLYGONSCAN_API_KEY="" // sua chave api da polygon
Revisão do código
Existirão três contratos inteligentes em nosso projeto.
contracts-|
|-nft-airdrop-|
|-Airdrop.sol
|-IERC721.sol
|-SuperNFT.sol
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
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)