Despliegue de un contrato en Hardhat
Last updated
Last updated
Primero, asegúrate de tener Node.js y npm instalados. Luego, crea un nuevo proyecto y añade Hardhat:
Inicializa un nuevo proyecto de Hardhat:
Sigue las instrucciones para crear un archivo hardhat.config.js
vacío.
Esto te dejará con solo el fichero hardhat.config.js
en tu repositorio.
Hardhat funciona ejecutando tareas (tasks) y llamando a plugins.
Las tareas disponibles las puedes ver ejecutando
Como ejemplos de tareas tenemos: compilar, ejecutar scripts, habilitar un servidor JSON-RPC, habilitar la consola, verificar un contrato en Etherscan, etc.
Por otro lado, se utilizan plugins creados por Hardhat o terceros que contienen diferentes herramientas útiles para las diferentes etapas del desarrollo. Un plugin esencial es
@nomicfoundation/hardhat-toolbox
que contiene prácticamente todo lo que se necesita para desarrollar:
Usar ethers.js para interactuar con contratos.
Hacer pruebas con Mocha y Chai.
Desplegar contratos con Hardhat Ignition.
Interactuar con la red de prueba local de Hardhat.
Obtener métricas de gas utilizado.
Medir tu cobertura de pruebas.
Para instalarlo ejecuta la siguiente instrucción en la raíz del directorio de tu proyecto:
también debes añadir la siguiente línea al inicio de tu fichero hardhat.config.js
Crea un directorio llamado contracts/
y dentro de él un archivo Greeter.sol
con el siguiente código:
Para compilar tus contratos, ejecuta:
En nuestro ejemplo, la ejecución de esta tarea nos creará un directorio denominado artifacts
. El ABI de Greeter.sol
está ubicado en .artifacts/contracts/Greeter.sol/
y se llama Greeter.json
.
Al igual que Remix, Hardhat habilita una blockchain local. En esta red tendrás disponible 20 cuentas (addresses con sus claves privadas) con 10000 ETH de prueba cada una.
Para habilitar la blockchain local ejecuta desde el directorio raíz de tu repositorio:
Ten en cuenta que las claves addresses y sus claves privadas son públicas, dado que todos los usuarios de Hardhat las tienen a su disposición. Si utilizas esas addresses en mainnet o en alguna red pública perderás todo lo que tienes en ellas. Sólo debes usar estas addresses en el entorno de pruebas de Hardhat.
En la raíz principal de tu repositorio crea un directorio ignition
y dentro de él otro llamado modules
. Luego dentro de ignition/modules
crea el script de despliegue Greeter.js
con el siguiente contenido:
Este código hace lo siguiente:
Llama a la función buildModule
que requiere un ID de módulo y una función callback. Nuestro módulo se llamará "GreeterModule"
.
La función callback es donde ocurre la definición del módulo. El parámetro m
que se pasa al callback es una instancia de un ModuleBuilder
, que es un objeto con métodos para definir y configurar las instancias de contratos.
Cuando llamamos a los métodos del ModuleBuilder
se crea un objeto Future
, que representa el resultado de la ejecución de un paso que Hardhat Ignition requiere para desplegar una instancia del contrato o interactuar con una existente.
Esto no ejecuta nada contra la red, solo se representa internamente. Luego de que se crea el Future
, queda registrado dentro del módulo y el método lo devuelve.
En este módulo, se crean un objeto Future
llamando al método contract
que instruye a Hardhat Ignition que despliegue una instancia del contrato Greeter
especificando "Hola"
como el único parámetro del constructor.
Finalmente, se devuelve el objeto Future
representando la instancia del contrato Greeter
para hacerlo accesible a otros módulos y para realizar pruebas.
Para desplegar el smart contract en la red local ejecuta la siguiente instrucción en una nueva sesión del terminal.
Si todo funciona correctamente, obtendrás la dirección del contrato desplegado en la red local, en un mensaje como el siguiente: