O teste de contratos inteligentes é um aspecto crucial do processo de desenvolvimento para garantir que os contratos funcionem corretamente e sem erros. O Hardhat é um ambiente de desenvolvimento para aplicativos Ethereum que oferece várias ferramentas e bibliotecas para facilitar o teste de contratos inteligentes.
Aqui estão os benefícios de testar contratos inteligentes com o Hardhat:
- Teste rápido: O Hardhat permite que os desenvolvedores criem uma blockchain local da Ethereum para testes, resultando em testes mais rápidos do que em uma blockchain ativa.
- Economia de custos: O teste em uma blockchain local evita que os desenvolvedores paguem por transações reais na blockchain ativa, resultando em uma economia significativa de custo.
- Controle sobre o ambiente de teste: O teste em uma blockchain local oferece aos desenvolvedores controle total sobre o ambiente de teste, incluindo a opção de redefinir a blockchain a qualquer momento.
- Integração: O Hardhat se integra perfeitamente com as principais estruturas de teste, como o Mocha e o Chai, facilitando para os desenvolvedores escrever e executar testes para seus contratos inteligentes.
- Flexibilidade: O Hardhat fornece várias ferramentas e bibliotecas para testar contratos inteligentes, permitindo que os desenvolvedores selecionem a abordagem de teste que melhor atende aos seus requisitos.
Para ajudá-lo a começar rapidamente, configuramos tudo o que você precisa, desde o contrato até os scripts de teste, neste repositório.
1. Vamos clonar o Repo
1.1 Bifurcando o repositório do tutorial:
- Dirija-se ao nosso Repositório de Tutoriais e clique no botão “Fork” para criar uma cópia do repositório em sua própria conta. Aguarde o processo de bifurcação terminar antes de prosseguir.
1.2 Clonando o repositório localmente:
- Acesse seu repositório bifurcado no GitHub.
- Clique no botão “Code” (Código) e copie o URL HTTPS ou SSH.
- Abra seu terminal ou o Git Bash.
- Navegue até o diretório onde deseja clonar o repositório.
- Execute o comando abaixo para clonar o repositório.
git clone < cole a URL que você copiou>
- Aguarde a conclusão do processo de clonagem. Uma vez feito isso, você deve ver um novo diretório com o nome do repositório no diretório.
Para acessar o repositório clonado, use este comando cd <Name of the cloned Repo>
e, em seguida, navegue até a pasta MultiContractTutorial usando este comando: cd MultiContractTutorial
.
A estrutura de uma pasta de projeto do Hardhat normalmente inclui o seguinte:
- contracts/: Esta pasta contém o código-fonte do Solidity para os contratos do projeto.
- test/: Esta pasta contém os arquivos de teste do JavaScript para os contratos inteligentes.
- hardhat.config.js: Este é o arquivo de configuração primário para o projeto no Hardhat. Ele especifica várias opções, como a rede Ethereum a ser usada para implantação, o compilador Solidity e o executor de teste a ser usado.
- package.json: Este arquivo contém metadados sobre o projeto, como nome, versão, dependências e scripts do projeto.
- scripts/: Esta pasta inclui scripts de implantação para implantação de contratos inteligentes usando o Hardhat.
2. Compreendendo o script de teste
Na pasta de teste, existem vários scripts de teste que abordam diferentes contratos inteligentes.
2.1 Vamos começar entendendo o script simple-test.js
que está associado ao contrato SimpleStorage.sol
.
Nas duas primeiras linhas do script, estamos importando as dependências necessárias para o teste:
- Chai: Usado para escrever asserções para testes de contrato.
- Ethers: Usado para interagir com a blockchain Ethereum e implantar os contratos inteligentes.
O script define um bloco describe para um grupo de testes relacionados ao contrato SimpleStorage
:
- Ele obtém o contract factory usando code>ethers.getContractFactory("SimpleStorage").
- Implanta uma nova instância do contrato “SimpleStorage” usando
simpleStorageFactory.deploy().
Esse código define um bloco it, que é um teste único dentro do bloco describe do contrato SimpleStorage
. O teste faz o seguinte:
- Chama a função
retrieve
e armazena o valor de retorno emcurrentValue
. - Usa a função
assert
da biblioteca Chai para afirmar quecurrentValue.toString()
é igual a 0.
Em resumo, este teste verifica se o valor padrão de favoriteNumber
quando o contrato é implantado é igual a zero.
O segundo teste faz o seguinte:
- Chama a função
store
na instância do contrato com o argumento 7. - Chama a função
retrieve
e armazena o valor de retorno emupdatedValue
. - Usa a função assert da biblioteca Chai para afirmar que o
updatedValue.toString()
é igual a 7.
Em resumo, este teste verifica a função store
do contrato SimpleStorage
e verifica se ele atualiza corretamente o favoriteNumber
pelo número especificado.
Da mesma forma, no quarto bloco de teste, estamos testando a função addPeople
.
2.2 Teste do Token ERC20
Vamos entender o script Token-test.js
.
Neste script, estamos testando o contrato Token.sol
.
O script é dividido em dois blocos describe:
Implantação:
- Este bloco é usado para testar a implantação do contrato e suas propriedades após a implantação.
- Dois testes são definidos dentro do bloco describe.
- No primeiro teste, estamos verificando se o dono do contrato está com o saldo correto de tokens após a implantação, que deve ser de 1000 tokens.
- No segundo teste, estamos verificando se o fornecimento total do token está definido como 1000.
Transações:
- Este bloco é usado para testar a funcionalidade dos métodos de contrato de token, como
transfer
,balanceOf
eapprove
. - Três testes são definidos dentro do bloco describe.
- No primeiro teste, estamos verificando se o método
transfer
transfere tokens entre contas corretamente. - No segundo teste, estamos verificando se o método de transferência reverte se o remetente não tiver tokens suficientes para transferir.
- No terceiro teste, estamos verificando se o método de aprovação atualiza corretamente o abono para a conta do comprador.
Em resumo, este teste está verificando a implantação bem-sucedida do contrato Token e sua funcionalidade para transferir tokens entre contas, verificar o saldo do token e atualizar a permissão.
3. Executando o teste
Para instalar os pacotes necessários, execute o seguinte comando:
npm install
De acordo com as práticas padrão, os scripts de teste do Hardhat são executados localmente, e isso tem uma grande desvantagem, pois não podemos depurar a transação com falha. Então, vamos usar o BuildBear.io. Com o BuildBear, todas as nossas transações podem ser depuradas facilmente usando seu rastreador de transação embutido.
3.1 Para começar a usar o BuildBear, visite o aplicativo BuildBear.
3.2. Crie sua bifurcação de rede de testes privada a partir da rede principal da Ethereum, sinta-se à vontade para bifurcar qualquer cadeia.
3.3. Adicione sua rede de testes privada na sua carteira MetaMask usando o botão “Add to Metamask”:
3.4. Atualize o hardhat.config.js.
- Dirija-se ao seu Painel e clique em “verify contract”.
- Copie os objetos BuildBear e Etherscan e atualize o arquivo
hardhat.config.js.
Para executar todos os testes em seu projeto, abra seu terminal e digite o seguinte comando:
npx hardhat test
Este comando executará cada caso de teste no projeto e enviará os resultados para o terminal.
Se todos os testes forem bem-sucedidos, você deverá ver uma longa lista de resultados de testes aprovados exibidos no terminal, como no exemplo abaixo:
Esses resultados indicam que todos os nossos testes foram aprovados com sucesso.
PARABÉNS! VOCÊ APRENDEU A TESTAR CONTRATOS INTELIGENTES USANDO O HARDHAT!
Se você gosta do que estamos fazendo, siga-nos no Twitter, no LinkedIn e participe do grupo do Telegram, se ainda não o fez.
E por favor, nos aplauda 👏 se você gosta do nosso trabalho.
Github Repo: Tutoriais Buildbear
Sobre a BuildBear:
A BuildBear é uma plataforma para testar dApps em escala, para equipes. Ela fornece aos usuários sua própria rede de testes privada para testar seus contratos inteligentes e dApps, que podem ser bifurcados de qualquer cadeia EVM. Ela também fornece uma Torneira, Explorer e RPC para fins de teste.
A BuildBear visa construir um ecossistema de ferramentas para testar dApps em escala para as equipes.
Leia nossos artigos anteriores (em inglês) e continue aprendendo:
- Aprenda a criar, implantar um contrato inteligente NFT e desenvolver um aplicativo front-end em 15 minutos.
- Aprenda a criar, implantar um Soul Bound Token (SBT).
- Gere NFTs com IA e implante o contrato inteligente NFT e o aplicativo front-end.
- Aprenda, codifique e implemente sua própria carteira MultiSig.
- Vamos entender os NFTs de assinatura e cunhar alguns.
Artigo escrito por Chandan. Traduzido por Marcelo Panegali.
Latest comments (0)