Depuración de contratos con Foundry

Introducción a la depuración de contratos con Foundry

En el ecosistema de Ethereum y otras blockchains compatibles con EVM, la complejidad de los contratos inteligentes exige herramientas de depuración potentes y ágiles. Foundry se ha consolidado como uno de los frameworks más robustos para desarrollo, testing y depuración. En este artículo exploraremos con detalle cómo aprovechar sus funcionalidades para identificar y solucionar errores en tu lógica Solidity.

1. ¿Qué es Foundry y por qué elegirlo

Foundry es un conjunto de herramientas open-source escrito en Rust, diseñado especialmente para desarrolladores de contratos inteligentes. Sus principales componentes son:

  • forge: compilación, testing y depuración.
  • cast: interacción con nodos y llamadas low-level.
  • anvil: nodo local ligero que simula la EVM.

Las ventajas clave incluyen:

  • Velocidad: compilación y pruebas ultrarrápidas.
  • Traceabilidad: rastreo profundo de transacciones (stack traces).
  • Integración: compatible con existing tools como Hardhat o Truffle.

Para más información oficial, visita la documentación de Foundry en https://book.getfoundry.sh.

2. Configuración inicial

2.1 Instalación de Foundry

Foundry se instala con un simple script de Shell:

curl -L https://foundry.paradigm.xyz bash

foundryup

2.2 Inicializar un proyecto

Crea un directorio y ejecuta:

mkdir MiProyecto cd MiProyecto

forge init

Esto genera una estructura básica:

Carpeta/Archivo Descripción
src/ Contratos Solidity
test/ Tests en Solidity
foundry.toml Configuración del proyecto

3. Fundamentos de la depuración en EVM

Depurar contratos inteligentes implica entender la ejecución paso a paso de bytecode en la EVM. Los puntos clave son:

  • Transparencia del stack: ver cada operación y su efecto en el stack.
  • Reversión y revert messages: ubicar exactamente dónde y por qué se lanza un revert().
  • Estado de almacenamiento: inspeccionar valores en storage y variables locales.

Foundry facilita estas tareas a través de comandos especializados y cheatcodes.

4. Depuración con forge test

4.1 Ejecución básica

Para correr tests y ver errores simples:

forge test

Con –trace obtienes un registro detallado de cada llamada:

forge test –trace

4.2 Cheatcodes para pruebas avanzadas

Foundry provee cheatcodes que se usan en tests Solidity para manipular contexto y tokens:

  • vm.prank(address): simula transacciones desde otra dirección.
  • vm.expectRevert(bytes): espera que la próxima llamada reviente con un mensaje específico.
  • vm.roll(uint256): avanza el número de bloque para simular mining.
  • vm.warp(uint256): modifica la timestamp del bloque.
Ejemplo:

// test/ErrorTest.t.sol
import forge-std/Test.sol
contract ErrorTest is Test {
function testRevert() public {
vm.expectRevert(bytes(NotAuthorized))
myContract.onlyOwnerFunction()
}
}

5. Análisis de transacciones con cast trace

El comando cast trace consume artefactos JSON generados por forge y muestra un trace detallado:

forge build –sizes

cast trace txHash

A través de esta salida podrás visualizar:

  • Opcodes ejecutados.
  • Valores antes y después de cada SSTORE o SLOAD.
  • Rutas de llamada internas (internal calls).

6. Depuración interactiva con Anvil

Anvil expone un nodo local con JSON-RPC que admite debugging por bloques:

  1. Ejecuta anvil en un terminal.
  2. Configura tu tests o scripts para usar --rpc-url http://127.0.0.1:8545.
  3. Usa clientes como Remix o VSCode EVM Debugger para establecer breakpoints.

Esto te permite detenerte en instrucciones específicas, ver el stack y el memory frame en tiempo real.

7. Buenas prácticas de depuración

  • Especificar revert messages claros en require y revert.
  • Modularizar contratos y testear unidades pequeñas.
  • Documentar cada cheatcode y su propósito en el test.
  • Automatizar la ejecución de forge fmt y forge lint.

8. Recursos y enlaces de referencia

Conclusión

La depuración de contratos inteligentes es un arte que combina entendimiento profundo de la EVM con herramientas especializadas. Foundry ofrece una suite completa para trazar, testear y depurar de forma ágil y profesional. Adopta estas prácticas en tu flujo de trabajo para reducir riesgos, optimizar gas y garantizar la seguridad de tus dApps.


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *