Depurar contratos con Hardhat

Depurar contratos de Solidity puede ser una tarea bastante compleja. Nuestros amigos de Hardhat han desarrollado un contrato de Solidity que nos permite escribir mensajes en la consola del nodo que se ejecuta en el entorno de desarrollo. En este pequeño tutorial aprenderás a utilizar esta pequeña utilidad.

npm init
npm install --save-dev hardhat
npx hardhat

captura1

Seleccionaremos “Create a JavaScript project” del menú de opciones y elegiremos la opción por defecto de las siguientes preguntas que nos presentará. Una vez terminado veremos que nos ha generado una serie de archivos y carpetas.

Dentro de la carpeta contracts hay un archivo llamado Lock.sol, es el contrato que Hardhat ha generado.
Descomentamos la línea 5 para que poder importar el contrato console.sol

import "hardhat/console.sol";

Descomentamos la línea 25 para poder mostrar el mensaje en la consola.

console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp);

Abrimos un nuevo terminal en nuestro IDE (Visual Studio Code por ejemplo) y ejecutamos el nodo.

npx hardhat node

De nuevo abrimos un terminal nuevo y ejecutamos el siguiente comando.

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

Debería aparecer el siguiente texto si el contrato se he desplegado correctamente.

Compiled 2 Solidity files successfully
Lock with 1 ETH and unlock timestamp 1704986058 deployed to 0x5FbDB2315678afecb367f032d93F642f64180aa3

Tan solo nos falta acceder a la consola de Hardhat para interactuar con nuestro contracto recién desplegado.

npx hardhat console --network localhost

Para acceder a los métodos del contrato tenemos que ejecutar los siguientes comandos. El segundo comando contiene una dirección, se debe introducir la que ha sido devuelta por el script que ha desplegado el contrato.

const Contrato = await ethers.getContractFactory('Lock');
const contrato = await Contrato.attach('0x5FbDB2315678afecb367f032d93F642f64180aa3');

Finalmente ejecutaremos el siguiente comando para interactuar con el método “withdraw” del contrato.

await contrato.withdraw();

La transacción es revertida debido a que no cumple con una de las condiciones “require”. Para poder ver el mensaje en consola que el contrato ha escrito, volvemos al terminal donde se está ejecutando el nodo y buscamos el texto que contengo el mensaje “console.log”.

captura2

Deja una respuesta

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