articles, resource-center

Desarrollo de contratos inteligentes: comparación de dos marcos líderes

October 31, 2025
8 min
Artem Zaitsev
Comparación entre los marcos de desarrollo de contratos inteligentes Hardhat y Foundry, que muestran editores de código y entornos de prueba.

Introducción

Cuando comencé a desarrollar con Solidity, pronto dejé los IDE en línea y adopté Hardhat como mi nuevo marco principal. Tras meses construyendo proyectos y creando un flujo de trabajo en torno a él, me sentí cómodo con su diseño de red, su estrategia de pruebas y la organización de los proyectos.

Sin embargo, cuando alguien dijo que las ventajas de rendimiento de Foundry eran impresionantes, me interesé lo suficiente como para hacer una comparación adecuada entre ambos marcos populares de desarrollo de contratos inteligentes.

Para llegar a una valoración justa, creé los mismos proyectos con la ayuda de ambos y apliqué el mismo contrato MiniBank y otros ajustes de prueba. Esta experiencia práctica demostró que el rendimiento, la experiencia de los desarrolladores y el flujo de trabajo difieren drásticamente entre estas dos herramientas, lo que merece la pena examinar por parte de cualquiera que tenga que decidir entre ambas.

Arquitectura y configuraciones del proyecto

La experiencia inicial al configurarlos es bastante diferente en los dos marcos. Foundry crea un archivo de configuración foundry.toml basado en pares clave-valor, que es análogo al archivo hardhat.config.js de Hardhat. Ambos también admiten la personalización de carpetas de origen, directorios de salida de compilación, etc.

La estructura predeterminada de carpetas es bastante diferente en Foundry, aunque no se pueden configurar directamente varias redes en el archivo de configuración, ya que Hardhat hace un trabajo fantástico manteniendo varias redes. El resto de los parámetros en foundry.toml están relacionados con opciones de prueba, incluyendo la verbosidad o la configuración de la cuenta y las opciones de precio del gas.

La función de reasignación de Foundry es especialmente interesante porque ofrece un enfoque sólido para la importación de dependencias. Puedes facilitar considerablemente la importación de contratos creando accesos directos en la configuración.

Por ejemplo, como alternativa a escribir rutas de importación largas, puedes escribir asignaciones abreviadas que ayuden a que tu código sea más legible y fácil de mantener.

Enfoques de gestión de dependencias

Los marcos difieren radicalmente en la forma en que gestionan las dependencias:

  • Hardhat utiliza el ecosistema npm establecido, que está abierto al instante a los desarrolladores de JavaScript.
  • La instalación de los contratos de OpenZeppelin es tan sencilla como ejecutar el comando npm install
  • Foundry se basa en la gestión de dependencias mediante el submódulo Git a través de la herramienta CLI forge.
  • Las dependencias se almacenan en una carpeta lib/ y se incluyen en un archivo .gitmodules, a diferencia de package.json.

Este método tomará cualquier repositorio de GitHub que incluya contratos inteligentes como dependencia y te permitirá ser más flexible en la elección de bibliotecas.

Puedes especificar la organización y el nombre del repositorio de GitHub y, opcionalmente, especificar la rama o la etiqueta que deseas instalar. Una vez instalado Forge, puedes utilizar el comando de reasignación de Forge para ver las rutas de importación predeterminadas que utilizará Foundry, las cuales se pueden personalizar aún más con archivos de configuración.

Herramientas de desarrollo y depuración

Una de las áreas en las que Hardhat destaca es en su experiencia de depuración. El marco también ofrece el uso de console.log de forma predeterminada, que se asemeja al estilo de depuración esperado en el desarrollo de JavaScript. Esta funcionalidad se promociona mucho como punto fuerte y los desarrolladores pueden seguirla fácilmente para comprender cómo se ha llevado a cabo la ejecución y qué es lo que falla.

Foundry necesita un método alternativo para registrar contratos. Aunque es posible instalar e importar Hardhat manualmente e instalar un contrato de consola, la mejor manera de hacerlo sería copiar un contrato de consola especializado en tu proyecto.

En el caso concreto de los archivos de prueba, el contrato DSTest incluido contiene eventos de registro como logstring, logint y logaddress, que pueden emitirse sin dependencias adicionales.

Metodologías de prueba

La experiencia de prueba es quizás el punto más notable de diferencia entre los dos marcos.

Enfoque de pruebas con casco de seguridad

Hardhat se basa en patrones de prueba estándar de JavaScript:

  • Utiliza bloques describe y it junto con Mocha como biblioteca de aserciones predeterminada
  • Los archivos de prueba pueden parecerse a este estilo más natural de los desarrolladores que están familiarizados con el desarrollo web.
  • Ofrece nombres de pruebas descriptivos que expresen claramente su finalidad
  • Patrones asíncronos familiares.
  • La curva de aprendizaje es mínima para quienes ya están familiarizados con el desarrollo web moderno

Enfoque de pruebas de Foundry

Foundry funciona de una manera completamente diferente:

  • Las pruebas se desarrollan como contratos inteligentes Solidity, que heredan DSTest.
  • Todas las pruebas tienen como prefijo la palabra test o testFail.
  • Todas las afirmaciones se realizan a través del contrato DSTest heredado
  • Los archivos de prueba son contratos inteligentes reales que se utilizan en las pruebas.

Dominar las pruebas de contratos inteligentes

Compara los marcos de trabajo y elige el mejor enfoque de pruebas para tu proyecto.

El método Foundry tiene varias implicaciones:

  • Los contratos de prueba deben instanciarse en un procedimiento setUp() análogo a beforeEach en clientes JavaScript
  • El método de despacho de contratos de ETH implica una sintaxis determinada con parámetros de valor entre llaves
  • La curva de aprendizaje inicial, que puede resultar pronunciada, se ve compensada por el hecho de que no requiere manejar operaciones asíncronas.

Funciones de prueba de Learning Foundry

Foundry introduce el concepto conocido como códigos de trucos, que ofrecen potentes utilidades de prueba. Se trata de funciones especiales en una dirección de contrato designada que te permiten acceder al estado de la cadena de bloques durante las pruebas.

Puedes:

  • Modifica el número de bloque actual.
  • Suplantar otras cuentas.
  • Reclamar cierto comportamiento contractual

Para usar códigos de trucos, debes definir una interfaz e instanciarla como una variable de estado en la dirección especial del truco. Después de la configuración, es posible hacer trampas con funciones como:

  • vm.prank() para establecer la siguiente llamada de contrato a un receptor diferente.
  • vm.roll() para avanzar la cadena de bloques hasta un punto determinado

Uno de los códigos de trucos más interesantes es vm.expectRevert(), que debe llamarse antes de la transacción que deseas que falle. Esta inversión de los patrones estándar de afirmación puede ser contraria a la intuición, pero proporciona un control claro de las posibles condiciones de fallo.

Resultados de la comparación de rendimiento

La variación de rendimiento entre los marcos es significativa y se aprecia al instante. Con los mismos contratos y escenarios de prueba, obtuve resultados reveladores en cuanto al tiempo de compilación y ejecución de las pruebas:

Resultados de la comparación de rendimiento

EscenarioFundiciónCasco de seguridad
Proyectos limpios (sin caché)1.44 segundos5.17 segundos
Con el almacenamiento en caché habilitado.0.45 segundos3,98 segundos
proyecto de 26 contratos inteligentes8.53 segundos14,56 segundos

Estas diferencias de rendimiento son más pronunciadas cuando aumenta la complejidad del proyecto.

Pruebas de fundición: ventajas y desventajas

Ventajas y desventajas de las pruebas de fundición

VentajasContras
Sin complejidad async/awaitLos nombres de las pruebas no son tan descriptivos como en las pruebas de JavaScript
Las pruebas se ejecutan muy rápidoLa afirmación expectRevert es contraria a la intuición.
Informe de gas generado automáticamenteCurva de aprendizaje para los códigos de trucos.
Todo lo escrito en SolidityLas herramientas de implementación aún están en desarrollo

Las ventajas en cuanto al rendimiento son indiscutibles, y los nombres de las pruebas de Solidity no pueden ser tan descriptivos como los de JavaScript, lo que puede dificultar la comprensión del objetivo de la prueba. El sistema de códigos de trucos, aunque potente, requiere un esfuerzo inicial de aprendizaje.

Estrategias de implementación de contratos

La implementación es un aspecto en el que Hardhat ofrece una mejor experiencia para los desarrolladores en este momento. El marco acepta:

  • Scripts de implementación basados en JavaScript
  • Conexión con una variedad de redes
  • Carga la configuración a través de variables de entorno
  • Maneja con elegancia las situaciones de implementación complicadas

Actualmente, Foundry requiere scripts de implementación basados en JavaScript, pero pueden resultar engorrosos cuando los constructores tienen que proporcionar sus argumentos. La solución sugerida es crear scripts bash de implementación para gestionar la complejidad de las implementaciones, pero el equipo de desarrollo está trabajando en soluciones de implementación más avanzadas.

Este es uno de los puntos débiles más graves de Foundry en relación con Hardhat, que cuenta con un ecosistema de implementación desarrollado.

Herramientas de interfaz de línea de comandos

Foundry cuenta con la herramienta CLI cast para interactuar con la cadena de bloques y consultar contratos inteligentes. Se trata de una potente utilidad que te permite:

  • Llama a las funciones del contrato.
  • Consultar el estado de la cadena de bloques.
  • Realiza una serie de acciones de cadena de bloques en la línea de comandos

Aunque cast ofrece todas las funciones necesarias para interactuar con la cadena de bloques, requiere una compleja construcción de la línea de comandos para realizar operaciones complejas. Al igual que en la implementación, esto puede requerir scripts bash para evitar tener que escribir comandos largos repetidamente.

Resumen comparativo de marcos

Comparación de características del marco

CaracterísticaFundiciónCasco de seguridad
InstalaciónA través del comando curl de la CLI.No es necesario con npx ni a través de npm.
Herramientas CLIforge para gestionar el proyecto, cast para interactuar con los contratos.Hardhat gestiona el proyecto (crea/compila/ejecuta scripts).
Crea y prueba el rendimiento.Velocidad excepcional.Rendimiento moderado.
DependenciasSubmódulos Gitpaquetes npm
Configuraciónfoundry.tomlhardhat.config.js
Aislamiento de pruebasSí, mediante -match-test -match-contractSí, solo a través de o omitir en los archivos de prueba.
Implementaciones de contratosA través de la herramienta CLI de Cast.Scripts basados en JavaScript.

Tomar la decisión correcta

Foundry demuestra un enorme potencial gracias a su excelente rendimiento, su comunidad comprometida y su método creativo de prueba de contratos inteligentes. La estructura es excelente en ciclos de desarrollo rápidos y cuenta con excelentes utilidades de prueba que podrían acelerar enormemente el desarrollo una vez que se comprende cómo utilizarlas.

No obstante, Foundry sigue desarrollándose, especialmente en lo que respecta a las herramientas de implementación y las mejoras en la experiencia de los desarrolladores. Foundry tiene algunas ventajas interesantes para aquellos desarrolladores que prefieren un modelo híbrido con:

  • Fundición para el desarrollo y las pruebas de contratos.
  • Casco de seguridad para la implementación y los scripts.

Los usuarios que estén más acostumbrados a las herramientas estándar de JavaScript y a las prácticas de implementación establecidas pueden ser más prolíficos con Hardhat ahora, aunque la decisión depende nuevamente de tu experiencia y de tu capacidad para adoptar herramientas más nuevas.

Ambas arquitecturas siguen cambiando rápidamente, y el ecosistema de desarrollo de contratos inteligentes cuenta con una variedad de alternativas viables que satisfacen las necesidades de diversos desarrolladores y casos de aplicación.

FAQ

##desarrollo_de_contratos_inteligentes
##casco_de_seguridad
##fundici_n
##solidez
##desarrollo_de_cadenas_de_bloques
##pruebas
##implementaci_n
BDS

Pioneros en el futuro de la tecnología blockchain con soluciones innovadoras que empoderan a empresas y particulares de todo el mundo.

+1 929 560 3730 (EE. UU.)
+44 2045 771515 (Reino Unido)
+372 603 92 65 (Estonia)
Harju maakond, Tallin, Lasnamäe linnaosa, Katusepapi tn 6-502, 11412, Estonia

Manténgase al día

Reciba las últimas noticias y actualizaciones sobre blockchain en su bandeja de entrada.

© {{año}} BDS, parte de Idealogic Group. Todos los derechos reservados.