Migración de Truffle a Hardhat: guía práctica

Migración de Truffle a Hardhat: Guía Práctica

Publicado el 10 de junio de 2024

Introducción

En el ecosistema de desarrollo de contratos inteligentes de Ethereum, Truffle ha sido durante años el marco de referencia para compilar, implementar y probar. Sin embargo, Hardhat ha emergido como una alternativa más flexible y rápida, con un potente sistema de extensiones y mejor rendimiento. En esta guía detallada aprenderás los pasos esenciales para migrar un proyecto de Truffle a Hardhat sin perder productividad ni estabilidad.

¿Por qué migrar a Hardhat

  • Velocidad: Hardhat Network es una red local ultrarrápida.
  • Flexibilidad: Plugins oficiales y comunidad activa.
  • Error handling: Stack traces y mensajes más claros.
  • Integraciones: Compatibilidad nativa con TypeScript y frameworks de testing modernos.

1. Requisitos Previos

  1. Tener instalado Node.js gt= 16.x
  2. npm o yarn actualizado
  3. Proyecto inicial con Truffle configurado
  4. Conocimientos básicos de Solidity y JavaScript

2. Instalación de Hardhat

En la raíz de tu proyecto, ejecuta:

npm install --save-dev hardhat

A continuación, inicia la configuración interactiva:

npx hardhat

Selecciona quotCreate an empty hardhat.config.jsquot o la plantilla default según tus necesidades.

3. Estructura de Carpetas

Compara la estructura Truffle con la de Hardhat:

Truffle Hardhat
contracts/ contracts/
migrations/ scripts/
test/ test/
truffle-config.js hardhat.config.js

4. Configuración de hardhat.config.js

Ejemplo de configuración completa:

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

module.exports = {
  solidity: {
    compilers: [
      { version: 0.8.17 },
      { version: 0.6.12 }
    ]
  },
  networks: {
    hardhat: {},
    ropsten: {
      url: process.env.ROPSTEN_URL,
      accounts: [process.env.PRIVATE_KEY]
    }
  },
  paths: {
    sources: ./contracts,
    tests: ./test,
    cache: ./cache,
    artifacts: ./artifacts
  },
  mocha: {
    timeout: 200000
  }
}
  
  • .env: Define ROPSTEN_URL y PRIVATE_KEY para desplegar en testnets.
  • Plugins: Waffle, Etherscan, TypeChain, etc.

5. Migración de Scripts de Migraciones

En Truffle, las migraciones usan archivos numerados en migrations/. En Hardhat, trasladaremos esta lógica a scripts/:

// scripts/deploy.js
async function main() {
  const Token = await ethers.getContractFactory(MyToken)
  const token = await Token.deploy(MiToken, MTK)
  await token.deployed()
  console.log(Token desplegado en:, token.address)
}

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

6. Pruebas y Frameworks

Hardhat está preparado para trabajar con Mocha y Chai. Un ejemplo mínimo:

const { expect } = require(chai)

describe(MyToken, function () {
  it(Debe asignar el nombre correcto, async function () {
    const Token = await ethers.getContractFactory(MyToken)
    const token = await Token.deploy(MiToken, MTK)
    await token.deployed()
    expect(await token.name()).to.equal(MiToken)
  })
})
  
  • Configuración de timeout en hardhat.config.js.
  • Snapshots y revert instantáneos con network.provider.send(evm_snapshot).

7. Plugins Esenciales

  • @nomiclabs/hardhat-ethers
  • @nomiclabs/hardhat-waffle
  • @typechain/hardhat
  • hardhat-gas-reporter
  • @nomiclabs/hardhat-etherscan

Cada uno se instala con:

npm install --save-dev nombre-del-plugin

8. Consejos de Depuración

  • –show-stack-traces: Parámetro para obtener trazas completas.
  • console.log: Hardhat permite logs dentro de los contratos con hardhat/console.sol.
  • Hardhat Inspector: Herramienta experimental para explorar el estado de la cadena.

9. Despliegue a Producción

Usa la red principal configurada en hardhat.config.js:

npx hardhat run scripts/deploy.js --network mainnet

Verifica la dirección del contrato en Etherscan usando el plugin @nomiclabs/hardhat-etherscan:

npx hardhat verify --network mainnet 0xContrato... MiToken MTK

10. Recursos y Enlaces Útiles

Conclusión

La migración de Truffle a Hardhat no solo mejora el rendimiento de tu flujo de trabajo, sino que también abre la puerta a un ecosistema de herramientas más avanzado. Siguiendo esta guía práctica, podrás trasladar tu proyecto paso a paso, manteniendo la coherencia en pruebas, despliegues y scripts. ¡Pon a prueba Hardhat hoy y lleva tu desarrollo de smart contracts al siguiente nivel!


Comentarios

Deja una respuesta

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