BDS
articles, resource-center

Desenvolvimento de contratos inteligentes: comparando duas estruturas líderes

October 31, 2025
8 min
Artem Zaitsev
Comparação entre as estruturas de desenvolvimento de contratos inteligentes Hardhat e Foundry, mostrando editores de código e ambientes de teste

Introdução

Quando comecei a desenvolver com Solidity, logo deixei as IDEs online e adotei o Hardhat como minha nova estrutura principal. Após meses construindo projetos e criando um fluxo de trabalho em torno deles, senti-me confortável com o layout da rede, a estratégia de testes e a organização do projeto.

No entanto, quando alguém disse que os benefícios de desempenho do Foundry eram impressionantes, fiquei interessado o suficiente para fazer uma comparação adequada entre as duas estruturas populares de desenvolvimento de contratos inteligentes.

Para chegar a uma avaliação justa, criei os mesmos projetos com a ajuda de ambos e apliquei o mesmo contrato MiniBank e outras configurações de teste. Essa experiência prática mostrou que o desempenho, a experiência dos desenvolvedores e o fluxo de trabalho diferem drasticamente entre essas duas ferramentas, e isso vale a pena ser analisado por qualquer pessoa que esteja a decidir entre as duas.

Arquitetura e configurações do projeto

A experiência inicial na configuração é bem diferente nas duas estruturas. O Foundry cria um ficheiro de configuração foundry.toml com base em pares de chave-valor, que é parecido com o ficheiro hardhat.config.js do Hardhat. Ambos também permitem personalizar pastas de origem, diretórios de saída de compilação, etc.

A estrutura padrão das pastas é bem diferente no Foundry, mas várias redes não podem ser configuradas diretamente no ficheiro de configuração, já que o Hardhat faz um trabalho fantástico na manutenção de várias redes. Os restantes parâmetros no foundry.toml estão ligados a opções de teste, incluindo verbosidade ou configurações de conta e opções de preço do gás.

O recurso de remapeamento do Foundry é particularmente interessante porque oferece uma abordagem robusta para a importação de dependências. Você pode facilitar muito a importação de contratos criando atalhos na configuração.

Por exemplo, em vez de escrever caminhos de importação longos, você pode escrever mapeamentos curtos que ajudam o seu código a ficar mais legível e fácil de manter.

Abordagens de gestão de dependências

As estruturas diferem radicalmente na forma como gerem as dependências:

  • O Hardhat usa o ecossistema npm já estabelecido, que é instantaneamente aberto para desenvolvedores JavaScript
  • A instalação dos contratos OpenZeppelin é só um comando npm install
  • O Foundry depende da gestão de dependências pelo submódulo Git através da ferramenta CLI forge
  • As dependências são guardadas numa pasta lib/ e registadas num ficheiro .gitmodules, ao contrário do package.json

Este método aceita qualquer repositório GitHub que inclua contratos inteligentes como dependência e permite que você seja mais flexível na escolha de bibliotecas.

Podes especificar o nome da organização e do repositório GitHub e, opcionalmente, especificar o ramo ou a etiqueta a instalar. Depois de o forge estar instalado, o comando forge remapping pode ser usado para ver os caminhos de importação padrão que o Foundry vai usar, que podem ser personalizados com ficheiros de configuração.

Ferramentas de desenvolvimento e depuração

Uma das áreas em que o Hardhat se destaca é na sua experiência de depuração. A estrutura também oferece o uso do console.log por predefinição, que se assemelha ao estilo de depuração esperado no desenvolvimento JavaScript. Esta funcionalidade é fortemente promovida como um argumento de venda e pode ser facilmente rastreada pelos programadores para compreender a forma como a execução foi conduzida e o que está errado.

A Foundry precisa de um método alternativo para registar contratos. Embora seja possível instalar e importar o Hardhat manualmente e instalar um contrato de consola, a melhor maneira de fazer isso seria copiar um contrato de consola especializado para o seu projeto.

No caso de ficheiros de teste em particular, o contrato DSTest incluído inclui eventos de registo como logstring, logint e logaddress, que podem ser emitidos sem dependências adicionais.

Metodologias de teste

A experiência de teste é talvez o ponto de diferença mais notável entre as duas estruturas.

Abordagem de teste Hardhat

O Hardhat é baseado em padrões de teste JavaScript padrão:

  • Usa descrições e blocos it junto com o Mocha como biblioteca de asserção padrão
  • Os ficheiros de teste podem se parecer com esse estilo mais natural dos desenvolvedores que estão familiarizados com o desenvolvimento web
  • Oferece nomes descritivos para os testes que deixam claro o objetivo
  • Padrões assíncronos familiares
  • A curva de aprendizagem é mínima para quem já está familiarizado com o desenvolvimento web moderno

Abordagem de teste da Foundry

O Foundry funciona de uma maneira totalmente diferente:

  • Os testes são desenvolvidos como contratos inteligentes Solidity, que herdam DSTest
  • Todos os testes têm a palavra test ou testFail no nome
  • Todas as afirmações são feitas através do contrato DSTest herdado
  • Os ficheiros de teste são contratos inteligentes reais que são usados em testes

Domine os testes de contratos inteligentes

Compare as estruturas e escolha a melhor abordagem de teste para o seu projeto.

O método Foundry tem várias implicações:

  • Os contratos de teste têm de ser instanciados num procedimento setUp() análogo ao beforeEach em clientes JavaScript
  • O método de despacho de contratos da ETH envolve uma certa sintaxe com parâmetros de valor entre chaves
  • A curva de aprendizagem inicial íngreme pode ser compensada pelo facto de não exigir o manuseamento de operações assíncronas

Recursos de teste do Learning Foundry

A Foundry apresenta o conceito conhecido como cheat codes, que oferece utilitários de teste poderosos. São funções especiais num endereço de contrato designado que permitem que você acesse o estado na blockchain durante os testes.

Podes:

  • Altere o número do bloco atual
  • Não se faça passar por outras contas
  • Reivindique determinado comportamento contratual

Para usar códigos de trapaça, você deve definir uma interface e instanciá-la como uma variável de estado para o endereço especial da trapaça. Após a configuração, é possível trapacear com funções como:

  • vm.prank() para definir a próxima chamada de contrato para um destinatário diferente
  • vm.roll() para avançar a blockchain até um determinado ponto

Um dos códigos de trapaça mais interessantes é o vm.expectRevert(), que precisa ser chamado antes da transação que você quer que falhe. Essa inversão dos padrões padrão de afirmação pode ser contraintuitiva, mas dá um controle claro das condições prováveis de falha.

Resultados da comparação de desempenho

A variação de desempenho entre as estruturas é significativa e fica evidente imediatamente. Nos mesmos contratos e cenários de teste, obtive resultados reveladores sobre o tempo de compilação e execução do teste:

Resultados da comparação de desempenho

CenárioFundiçãoCapacete de segurança
Limpa os projetos (sem cache)1,44 segundos5,17 segundos
Com o cache ativado0,45 segundos3,98 segundos
26 projetos de contratos inteligentes8,53 segundos14,56 segundos

Essas diferenças de desempenho são mais pronunciadas quando a complexidade do projeto aumenta.

Testes de fundição: vantagens e desvantagens

Prós e contras dos testes de fundição

PrósContras
Sem complexidade async/awaitOs nomes dos testes não são tão descritivos como nos testes JavaScript
Os testes são executados muito rapidamenteA afirmação expectRevert é contraintuitiva
Relatório de gás gerado automaticamenteCurva de aprendizagem para códigos de batota
Tudo escrito em SolidityFerramentas de implementação ainda em desenvolvimento

Os benefícios do desempenho são indiscutíveis, e os nomes dos testes Solidity não podem ser tão descritivos quanto os do JavaScript, o que pode tornar a intenção do teste obscura. O sistema de códigos de trapaça, embora poderoso, exigirá um custo inicial de aprendizagem.

Estratégias de implementação de contratos

A implementação é um ponto em que o Hardhat oferece uma melhor experiência para o programador no momento. A estrutura aceita:

  • Scripts de implementação baseados em JavaScript
  • Ligação com uma variedade de redes
  • Carregue a configuração através de variáveis de ambiente
  • Lida com situações complicadas de implementação com elegância

Atualmente, os scripts de implementação baseados em JavaScript são necessários no Foundry, mas podem ser complicados quando os construtores precisam ter os seus argumentos fornecidos. A solução sugerida é criar scripts bash de implementação para lidar com a complexidade das implementações, mas a equipa de desenvolvimento está a trabalhar em soluções de implementação mais avançadas.

Este é um dos pontos fracos mais sérios da Foundry hoje em dia em relação ao Hardhat, que tem um ecossistema de implementação bem desenvolvido.

Ferramentas de interface de linha de comando

A Foundry tem a ferramenta CLI cast para interagir com a blockchain e consultar contratos inteligentes. Esta é uma ferramenta poderosa que permite:

  • Chame funções de contrato
  • Consulte o estado da blockchain
  • Realize uma série de ações de blockchain na linha de comando

Embora o cast ofereça funcionalidade completa na interação com a blockchain, ele requer uma construção complexa da linha de comando para realizar operações complexas. Semelhante à implementação, isso pode exigir scripts bash para evitar digitar comandos longos repetidamente.

Resumo da comparação entre estruturas

Comparação de funcionalidades da estrutura

RecursoFundiçãoCapacete de segurança
InstalaçãoAtravés do comando curl da CLINão é necessário com npx ou através do npm
Ferramentas CLIuse o forge para gerir o projeto e o cast para interagir com os contratosgerir o projeto hardhat (construir/compilar/executar scripts)
Construa e teste o desempenhoVelocidade excepcionalDesempenho moderado
DependênciasSubmódulos Gitpacotes npm
Configuraçãofoundry.tomlhardhat.config.js
Isolamento de testeSim, através de -match-test -match-contractSim, apenas via ou ignorar nos ficheiros de teste
Implementações de contratosAtravés da ferramenta CLI CastScripts baseados em JavaScript

Fazendo a escolha certa

A Foundry demonstra um enorme potencial com o seu excelente desempenho, comunidade envolvida e método criativo de testar contratos inteligentes. A estrutura é excelente em ciclos de desenvolvimento rápidos e tem ótimas utilidades de teste que podem acelerar bastante o desenvolvimento depois de entender como usá-las.

No entanto, o Foundry ainda está em desenvolvimento, especialmente nas ferramentas de implementação e melhorias na experiência do programador. O Foundry tem alguns pontos fortes interessantes para os programadores que preferem um modelo híbrido com:

  • Fundição para desenvolvimento e teste de contratos
  • Hardhat para implementação e scripts

Os utilizadores que estão mais habituados às ferramentas JavaScript padrão e às práticas de implementação estabelecidas podem ser mais produtivos com o Hardhat agora, embora a decisão dependa novamente da sua experiência e da capacidade de adotar ferramentas mais recentes.

Ambas as arquiteturas ainda estão a mudar rapidamente, e o ecossistema de desenvolvimento de contratos inteligentes tem uma variedade de alternativas viáveis que atendem às necessidades de vários programadores e casos de aplicação.

FAQ

##smart_contract_development
##hardhat
##foundry
##solidity
##blockchain_development
##testing
##deployment
BDS

Pioneiros no futuro da tecnologia blockchain com soluções inovadoras que capacitam empresas e indivíduos em todo o mundo.

+1 929 560 3730 (EUA)
+44 2045 771515 (Reino Unido)
+372 603 92 65 (Estónia)
Harju maakond, Tallinn, Lasnamäe linnaosa, Katusepapi tn 6-502, 11412, Estónia

Mantenha-se atualizado

Receba as últimas notícias e atualizações sobre blockchain diretamente na sua caixa de entrada.