调试合同

您可以使用 Solidity 控制台日志来调试在模拟的 Hardhat 本地节点上运行的合同。

要调试合同,请将其部署到内置的 Hardhat Local Node 环境,并仅在本地调试分支或临时工作副本中进行所有日志记录更改。

内置的本地环境名为 hardhatnode,并使用链 ID 为 31337 的 http://127.0.0.1:8545。它不是已保存的 Oracle Blockchain Platform 或其他 EVM 环境。当选择它来部署或运行合同并且没有本地节点正在监听时,Blockchain App Builder for Besu 将为所选项目启动 Hardhat 节点并打开 Hardhat 本地节点终端。

  1. 在包含要检查的代码路径的 Solidity 文件的顶部,添加 Hardhat 控制台导入。
    import "hardhat/console.sol";
  2. 在函数或内部助手中添加临时日志以进行调查。
    console.log("value", value);
    以下代码显示了常见日志示例。
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    使用与要检查的变量匹配的值类型。这些示例涵盖字符串、地址、整数值和布尔值。使日志语句保持窄和临时;不要记录私钥、验证令牌或其他凭证。
  3. 在部署/执行表单中,如果需要放弃旧对象,请选择清除,然后选择编译。
  4. 选择 Hardhat Local Node 作为环境。
  5. 部署本地合同实例,或使用已部署的本地代理。满足本地网络中特定于项目的部署先决条件,例如治理合同。
  6. 打开执行窗格,选择本地令牌或帐户代理,输入函数参数,然后选择查询或调用。

    Query 完成本地调用, Invoke 发送本地事务处理。可以访问已记录的代码路径,但只有调用会更改模拟的链状态。

  7. 在 Visual Studio Code 中打开 Hardhat Local Node 终端并检查发出的日志行。
  8. 删除 hardhat/console.sol import 语句和每个临时 console.log 语句。
  9. 在提交代码或使用 Oracle Blockchain Platform Besu、其他 EVM 或生产环境之前,请进行清理和编译。

请勿尝试将仅硬帽检测用于 Oracle Blockchain Platform 或其他 EVM 环境。而是使用普通应用事件、链外事务跟踪或环境认可的可观测性。控制台日志记录不能替代生产诊断。

调试过程故障排除

条件 解决方法
找不到 hardhat/console.sol 在所选项目中运行安装依赖项,然后重新编译。导入由项目的 Hardhat 依赖性提供。
本地节点未启动 确认所选项目包含 hardhat.config.ts 或 hardhat.config.js,验证 Node.js 和 npm 是否可用于 Visual Studio Code,并检查 Hardhat Local Node 终端是否存在启动错误。
未显示日志 确认 Hardhat Local Node 是选定的环境,已调用的代码路径到达日志语句,并且您正在查看 Hardhat Local Node 终端而不是 Oracle Blockchain Platform 或项目终端。
应用程序正在使用旧代码 在重新部署或调用之前,先依次选择清除和编译。
调试后,非本地构建或部署失败 删除每个 hardhat/console.sol 导入和 console.log 调用,然后清除并再次编译项目。