Deploy y test en múltiples redes con scripts

Introducción: Deploy y Test en Múltiples Redes con Scripts

En el ecosistema blockchain moderno, resulta esencial validar y desplegar contratos inteligentes de forma confiable en diferentes entornos: testnets, mainnets y redes layer-2. Automatizar este flujo con scripts mejora la rapidez, consistencia y confiabilidad de las versiones. En este artículo, desarrollaremos una guía completa y detallada sobre cómo configurar, desplegar y probar en múltiples redes usando herramientas como Hardhat, Truffle o Foundry.

1. Arquitectura de Despliegue

El flujo de despliegue se compone de tres capas fundamentales:

  • Configuración de Red: Variables de entorno, endpoints JSON-RPC (Infura, Alchemy).
  • Scripts de Deploy: Archivos JavaScript/TypeScript o Bash que invocan las herramientas de despliegue.
  • Pruebas Automatizadas: Suites de tests unitarios e integrados que se ejecutan en cada red.

2. Prerrequisitos

  • Node.js ≥ 16.x y npm o yarn.
  • Wallets: Mnemonic o claves privadas exportadas (dotenv).
  • Acceso a proveedores RPC: Infura, Alchemy o nodos propios.
  • Framework de desarrollo: Hardhat/Truffle/Foundry.

3. Configuración de Redes en Hardhat

En hardhat.config.js, definiremos un bloque networks:


require(@nomiclabs/hardhat-ethers)
require(dotenv).config()

module.exports = {
  defaultNetwork: hardhat,
  networks: {
    hardhat: {},
    goerli: {
      url: process.env.GOERLI_RPC_URL,
      accounts: [process.env.PRIVATE_KEY]
    },
    mainnet: {
      url: process.env.MAINNET_RPC_URL,
      accounts: [process.env.PRIVATE_KEY]
    },
    polygon: {
      url: process.env.POLYGON_RPC_URL,
      accounts: [process.env.PRIVATE_KEY],
      chainId: 137
    }
  },
  solidity: 0.8.17,
}

  

4. Ejemplo de Script de Despliegue

Creamos scripts/deploy.js para automatizar el deploy:


async function main() {
  const [deployer] = await ethers.getSigners()
  console.log(Desplegando con cuenta:, deployer.address)

  const MyContract = await ethers.getContractFactory(MyContract)
  const contract = await MyContract.deploy(/ argumentos /)

  await contract.deployed()
  console.log(Contrato desplegado en:, contract.address)
}

main()
  .then(() =gt process.exit(0))
  .catch(error =gt {
    console.error(error)
    process.exit(1)
  })

  

Ejecuta con: npx hardhat run scripts/deploy.js --network goerli.

5. Tabla Comparativa de Redes

Red Chain ID RPC URL (env) Finalidad
Goerli 5 GOERLI_RPC_URL Pruebas públicas
Polygon 137 POLYGON_RPC_URL Layer-2 producción
Ethereum Mainnet 1 MAINNET_RPC_URL Producción real

6. Suite de Pruebas Automatizadas

Para cada red, ejecuta tests unitarios con npx hardhat test --network goerli. Un ejemplo de test en test/MyContract.test.js:


const { expect } = require(chai)

describe(MyContract, function () {
  let contract

  beforeEach(async () =gt {
    const MyContract = await ethers.getContractFactory(MyContract)
    contract = await MyContract.deploy()
    await contract.deployed()
  })

  it(should return initial value, async function () {
    expect(await contract.value()).to.equal(0)
  })
})

  

7. Integración CI/CD

  • GitHub Actions: Define un workflow que instale dependencias, ejecute tests por red y, tras approval, despliegue en mainnet.
  • Variables Secretas: Configura GOERLI_RPC_URL, MAINNET_RPC_URL y PRIVATE_KEY en la sección de secrets.
  • Notificaciones: Integra con Slack o correo para alertas post-deploy.

8. Buenas Prácticas y Recomendaciones

  • Segregación de Entornos: Usa redes de prueba dedicadas antes de mainnet.
  • Control de Versiones: Etiqueta cada deploy con un log claro (versión, fecha, red).
  • Revisión por Pares: Realiza code reviews y auditorías antes de desplegar en producción.
  • Gestión de Costes: Monitoriza el gas gasto en cada red y optimiza el código.

9. Resolución de Errores Comunes

  • Invalid RPC URL: Verifica que las variables de entorno no tengan espacios ni comillas innecesarias.
  • Nonce too low: Aumenta manualmente el nonce o reinicia el contador en la wallet.
  • Contract Reverted: Inspecciona los revert reasons con herramientas como Etherscan o hardhat-gas-reporter.

Conclusión

Dominando el despliegue y testing en múltiples redes mediante scripts, agilizarás tu ciclo de desarrollo y aumentarás la fiabilidad de tus contratos inteligentes. Aplica estas prácticas, personaliza según tu stack y adopta integraciones CI/CD para llevar tus proyectos cripto a producción con la máxima confianza.

Artículo inspirado en la documentación oficial de Hardhat, Truffle y Foundry — confiables fuentes para desarrolladores blockchain.


Comentarios

Deja una respuesta

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