Deploy automático con Foundry y Forge

Despliegue Automático con Foundry y Forge

En el ecosistema Ethereum y más ampliamente en la industria de las blockchains, la eficiencia y la seguridad en el despliegue de contratos inteligentes son fundamentales. Foundry (junto con su herramienta de CLI Forge) ofrece un flujo de trabajo moderno, ligero y de alto rendimiento que permite compilar, testear y desplegar de forma automatizada.

¿Qué es Foundry y Forge

  • Foundry: Un conjunto de herramientas de desarrollo para contratos inteligentes escrito en Rust, diseñado para ser rápido y modular.
  • Forge: El componente de línea de comandos de Foundry que proporciona compilación, testeo, scripting y despliegue.

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

1. Ventajas del Despliegue Automático

  1. Reproducibilidad: Cada despliegue se realiza de la misma manera, eliminando errores manuales.
  2. Rapidez: Con comandos sencillos o scripts, aceleramos el proceso.
  3. Integración Continua (CI): Fácil de encadenar con servicios como GitHub Actions, GitLab CI o CircleCI.
  4. Seguridad: Almacenar y gestionar claves de forma segura en entornos CI/CD.

2. Requisitos Previos

  • Sistema Operativo: Linux, macOS o Windows (con WSL2).
  • Rust nbsp(opcional para compilar Foundry desde código fuente).
  • Git para control de versiones.
  • Node.js (para herramientas complementarias, no imprescindible).

3. Instalación de Foundry

Foundry puede instalarse rápidamente con el siguiente comando (Unix/macOS):

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

Esto instalará forge, cast y otras utilidades. Para comprobarlo:

forge --version

4. Creación y Configuración del Proyecto

  • Inicializamos un nuevo proyecto con forge init MiProyecto.
  • Se crea la estructura:
Carpeta/Archivo Descripción
src/ Contratos inteligentes en Solidity
script/ Scripts de despliegue
foundry.toml Configuración del proyecto

5. Desarrollo de un Script de Despliegue

Dentro de script/, creamos Deploy.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15

import forge-std/Script.sol
import ../src/MiContrato.sol

contract Deploy is Script {
    function run() external {
        vm.startBroadcast()
        new MiContrato()
        vm.stopBroadcast()
    }
}

Para desplegar en Goerli:

export GOERLI_RPC_URL=https://goerli.infura.io/v3/TU_INFURA_KEY
export PRIVATE_KEY=0xTU_CLAVE_PRIVADA
forge script script/Deploy.sol:Deploy --rpc-url GOERLI_RPC_URL --private-key PRIVATE_KEY --broadcast

6. Integración con GitHub Actions

Automatiza el flujo de despliegue en tu repositorio con el siguiente ejemplo de .github/workflows/deploy.yml:

name: Deploy on Push

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Foundry
        run: curl -L https://foundry.paradigm.xyz  bash  foundryup
      - name: Deploy to Goerli
        env:
          GOERLI_RPC_URL: {{ secrets.GOERLI_RPC_URL }}
          PRIVATE_KEY:   {{ secrets.PRIVATE_KEY }}
        run: forge script script/Deploy.sol:Deploy --rpc-url GOERLI_RPC_URL --private-key PRIVATE_KEY --broadcast

Guarda GOERLI_RPC_URL y PRIVATE_KEY en los Secrets del repositorio.

7. Buenas Prácticas

  • Seguridad de Claves: Utiliza servicios como HashiCorp Vault, AWS Secrets Manager o Azure Key Vault.
  • Multired: Define redes en foundry.toml para facilitar varios entornos (mainnet, testnets, forks).
  • Verificación Automática: Integra etherscan-verify con Forge para verificar en Etherscan:
    forge verify-contract 
      --chain-id 5 
      --num-of-optimizations 200 
      --constructor-args (cast abi-encode constructor() ) 
      MiContrato DEPLOYED_ADDRESS 
      ETHERSCAN_API_KEY
  • Control de Versiones: Etiqueta versiones de desplegables, script y configuración.

8. Comparativa Foundry vs Otras Herramientas

Característica Foundry/Forge Hardhat
Velocidad de Compilación Muy Rápido (Rust) Moderado (JS/TS)
Testing forge test (nativo) mocha/chai
Scripting Con Solidity JS/TS

9. Troubleshooting Común

  • Error: RPC Rate Limit: Cambia a endpoint privado o usa múltiples proveedores.
  • Claves Inválidas: Verifica formato 0x….
  • Fallos en Tests: Asegúrate de tener las versiones de Solidity correctas en foundry.toml.

10. Recursos Adicionales

Conclusión

El despliegue automático con Foundry y Forge no solo agiliza el ritmo de desarrollo, sino que refuerza la reproducibilidad y la seguridad. Integrar estos procedimientos en un pipeline de CI/CD como GitHub Actions te permitirá mantener tus contratos inteligentes actualizados y tus despliegues libres de errores manuales.


Comentarios

Deja una respuesta

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