Depuración de un contrato

Puede utilizar los logs de la consola Solidity para depurar los contratos que se ejecutan en el nodo local de Hardhat simulado.

Para depurar un contrato, despliéguelo en el entorno Nodo Local de Hardhat incorporado y realice todos los cambios de registro solo en una rama de depuración local o una copia de trabajo temporal.

El entorno local incorporado se denomina hardhatnode y utiliza http://127.0.0.1:8545 con el ID de cadena 31337. No se trata de un entorno guardado de Oracle Blockchain Platform ni de otro EVM. Cuando lo selecciona para desplegar o ejecutar un contrato y no se escucha ningún nodo local, Blockchain App Builder para Besu inicia un nodo de Hardhat para el proyecto seleccionado y abre el terminal de nodo local de Hardhat.

  1. En la parte superior del archivo Solidity que contiene la ruta de código que desea inspeccionar, agregue la importación de la consola Hardhat.
    import "hardhat/console.sol";
  2. Agregue un registro temporal en la función o un asistente interno para investigar.
    console.log("value", value);
    El siguiente código muestra ejemplos de log comunes.
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    Utilice el tipo de valor que coincida con la variable que está inspeccionando. Estos ejemplos abarcan cadenas, direcciones, valores enteros y valores booleanos. Mantenga las sentencias de log restringidas y temporales; no registre claves privadas, tokens de autenticación u otras credenciales.
  3. En el formulario Desplegar/Ejecutar, seleccione Limpiar si necesita desechar artefactos antiguos y, a continuación, seleccione Compilar.
  4. Seleccione Nodo Local de Hardhat como entorno.
  5. Despliegue la instancia de contrato local o utilice un proxy local que ya esté desplegado. Cumpla los requisitos previos de despliegue específicos del proyecto, como los contratos de gobernanza, en la red local.
  6. Abra el panel Ejecutar, seleccione el token local o el proxy de cuenta, introduzca los parámetros de función y, a continuación, seleccione Consulta o Llamar.

    La consulta completa una llamada local y la llamada envía una transacción local. Puede acceder a una ruta de código registrada, pero solo una llamada cambia el estado de la cadena simulada.

  7. Abra el terminal Hardhat Local Node en Visual Studio Code e inspeccione las líneas de log emitidas.
  8. Elimine la sentencia de importación hardhat/console.sol y cada sentencia console.log temporal.
  9. Limpie y compile de nuevo antes de confirmar el código o utilizar Oracle Blockchain Platform Besu, otro EVM o entorno de producción.

No intente utilizar la instrumentación solo de Hardhat para Oracle Blockchain Platform u otros entornos de EVM. En su lugar, utilice eventos de aplicación ordinarios, rastreo de transacciones fuera de la cadena o observabilidad aprobada por el entorno. El registro de la consola no sustituye el diagnóstico de producción.

Solución de problemas del proceso de depuración

Condición Resolución
No se puede encontrar hardhat/console.sol Ejecute Instalar dependencias en el proyecto seleccionado y, a continuación, vuelva a compilar. La importación es proporcionada por la dependencia Hardhat del proyecto.
El nodo local no se inicia Confirme que el proyecto seleccionado contenga hardhat.config.ts o hardhat.config.js, verifique que Node.js y npm estén disponibles para Visual Studio Code y compruebe si hay errores de inicio en el terminal Hardhat Local Node.
No se muestra ningún log Confirme que Nodo Local de Hardhat es el entorno seleccionado, que la ruta de código invocada alcanza la sentencia de log y que está viendo el terminal Nodo Local de Hardhat en lugar de un terminal de proyecto o Oracle Blockchain Platform.
La aplicación está utilizando un código antiguo Seleccione Limpiar y, a continuación, Compilar, antes de desplegar o llamar de nuevo.
Una compilación o despliegue no local falla después de la depuración Elimine cada importación de hardhat/console.sol y cada llamada de console.log y, a continuación, limpie y compile el proyecto nuevamente.