paint-brush
使用 Truffle 的 Console.log 轻松调试智能合约经过@MichaelB
994 讀數
994 讀數

使用 Truffle 的 Console.log 轻松调试智能合约

经过 Michael4m2023/01/30
Read on Terminal Reader

太長; 讀書

Truffle 现在 [支持](https://trufflesuite.com/blog/truffle-now-supports-console-logging-in-solidity-smart-contract/)** [Solidity. Console.log 是 JavaScript 中非常流行的功能,开发人员广泛使用它来轻松输出日志消息并从代码中提取详细信息。
featured image - 使用 Truffle 的 Console.log 轻松调试智能合约
Michael HackerNoon profile picture

如果您是 Solidity 开发人员,您会很高兴听到 Truffle 现在支持Solidity智能合约中进行控制台登录。虽然 Truffle 长期以来一直是智能合约开发工具的领导者——为创建、测试和调试智能合约提供易于使用的环境——但直接集成的 console.log 是它仍然需要的功能。


但没有了!开发人员现在可以在熟悉的 Truffle (Ganache) 环境中轻松记录消息和调试他们的智能合约。让我们看看如何。

什么是 Console.log?

Console.log 是 JavaScript 中非常流行的功能,开发人员广泛使用它来轻松输出日志消息并直接从代码中提取详细信息。在 web3 和智能合约开发的上下文中,console.log 起着类似的作用,允许开发人员从他们的智能合约中打印出 Solidity 变量和其他信息。


例如,您可以使用 console.log 来显示智能合约中变量的值或函数调用的输出。这在调试或测试您的智能合约时非常有用。

 console.log("Console Logging: The Smart Contract Developer's Best Friend");

如何在 Truffle 中使用控制台日志记录

使用 console.log 非常简单。首先,您必须确保您的计算机上运行的是最新版本的 Truffle。如果您有任何问题,您可能需要完全卸载该软件包,然后重新安装。对于本文中使用的命令,我们将使用 NPM 作为我们的包管理器。


 $ npm install -g truffle


安装成功后,建议修改truffle配置文件(即truffle-config.js )如下:

 module.exports = { . . . solidityLog: { displayPrefix: ' :', // defaults to "" preventConsoleLogMigration: true, // defaults to false }
  • displayPrefix :修饰 console.log 的输出,以区别于 CLI 显示的其他内容。
  • preventConsoleLogMigration :在测试或主网上进行筛选合同部署。如果您希望部署包含 console.log 的合同,您可以选择退出。但是,如果您选择这样做,请记住 console.log 在气体使用方面具有不可预测的行为。


现在您可以尝试一下了!像往常一样将contract.sol合约导入到您的 Solidity 代码中。现在您可以像在 JavaScript 中一样使用 console.log() 命令了。

这包括使用字符串替换,如%s%f

 pragma solidity ^0.8.9; import "truffle/console.sol"; contract BookStore { //... function transfer(address to, uint256 amount) external { console.log("Transferring %s tokens to %s", amount, to); require(balances[msg.sender] >= amount, "Not enough tokens"); balances[msg.sender] -= amount; balances[to] += amount; emit Transfer(amount, to, msg.sender); } }


上面的传输函数显示了 console.log 的运行情况。想象一下,对传输函数的调用因“没有足够的令牌”错误而失败。在这种情况下,console.log 行将显示调用尝试传输的令牌数。这允许开发人员查看正在转移的地址和代币数量。该消息将如下所示。


 ... Transferring 10 tokens to 0x377bbcae5327695b32a1784e0e13bedc8e078c9c

一个更好的调试方法可能是将balances[msg.sender]添加到 console.log 语句中或在单独的行中打印出来。这样,发件人的余额也可以在控制台中看到。你明白了!


您也可以在测试和主网中留下日志;这样,您将有一个很好的方式来观察您的智能合约。值得一提的是,像Tenderly这样的工具将集成日志的抓取功能,这在生产环境中调试和测试智能合约时非常有用。


最后,在使用控制台日志记录时,遵循您已知的所有良好使用规则非常重要,例如使用清晰的描述性日志消息。这将使理解输出和识别可能出现的任何问题变得更加容易。

Truffle 中的其他调试工具

虽然控制台日志记录是调试智能合约的强大工具,但请记住,Truffle 还提供其他调试工具。 Truffle 有一个强大的内置调试器 CLI 工具,可用于逐步执行智能合约并检查执行过程中不同点的变量状态。此外,事件是记录消息和跟踪智能合约行为的好方法。


也就是说,值得注意的是,将调试器用于像变量输出这样简单的事情可能有点矫枉过正。同样,事件日志仅在事务成功时才起作用,这在某些情况下可能是一种限制。


最重要的是,console.log 功能——与 Truffle 中的其他调试工具相结合——可以提供更好的开发人员体验,这要归功于它的简单性易用性。它使开发人员能够快速轻松地记录消息并监控其智能合约的行为,而其他调试工具可用于更高级的调试和故障排除。

试试看

Truffle 的新控制台日志记录功能是对智能合约开发的一个有价值的补充。它易于使用,可以简化调试和测试过程。实时记录消息和跟踪智能合约行为的能力可以减少效率低下和令人头疼的问题。这是您工具箱中的绝佳工具。