如何使用表达式评估来加速调试

  • tenderly
  • 发布于 2022-06-14 11:39
  • 阅读 24

Tenderly 推出了 Evaluate Expression 功能,旨在简化和加速以太坊智能合约的调试过程。该功能允许开发者在调试会话期间高效地评估表达式,分析可读代码,收集合约状态信息,并测试各种自定义场景。通过 Evaluate Expression,开发者可以更便捷地检查变量、函数、条件等参数,从而更快地定位和解决问题。

Tenderly 推出 Evaluate Expression:一种加速调试过程的直接方法。通过探索 4 种常见的用例场景,了解如何使用此功能。

how do you evaluate an expressopm when debugging

调试是开发过程任何阶段的关键步骤,从创建业务逻辑和编写算法到代码测试。对于以太坊开发者来说,调试也是最耗时的任务之一。

调试区块链交易不同于调试使用 JavaScript 等编程语言构建的传统应用程序。使用 Web3 应用程序,你不是在实时运行代码。相反,区块链概述了与关联代码映射的历史交易执行,因此工程师需要全面了解此类数据才能调试交易。

此外,调试智能合约需要逐步分析交易。开发者需要检查智能合约内部函数的逻辑,确定交易失败的原因和位置,然后继续调试问题。如果手动完成,这将花费大量时间。

这就是为什么我们要在已经广为人知的 Tenderly Debugger 功能中引入一个新功能——Evaluate Expression

什么是 Evaluate Expression?

Evaluate Expression 是一个直接的功能,允许你在调试会话期间有效地评估交易表达式。你可以轻松分析人类可读的代码,收集有关合约状态的信息,并在运行时测试各种自定义场景。它还允许你检查全局和局部变量、函数、条件和其他重要的交易参数。

这种节省时间的功能结合了多个 Tenderly 功能,包括 Run SimulationEdit Contract Source。基本上,可以将 Evaluate Expression 视为在精确的跟踪点注入到你的合约源代码中的 console.log

此外,Evaluate Expression 在战情室场景中特别有用,因为它允许你显着加快调试过程。在过滤交易跟踪中的外部调用后,你可以使用此功能检查可疑的代码部分。在这些情况下,快速行动对于减轻损害和节省资金至关重要。Evaluate Expression 使这成为可能。

Evaluate Expression 是如何产生的

我们开始注意到始终使用 console.log 来读取合约状态是多么令人烦恼。要将 console.log 添加到 Tenderly,你需要单击 Re-Simulate 按钮 -> 单击 Edit Contract Source -> 添加 console.log -> 单击 Apply Changes,然后单击 Simulate Transaction 按钮。

你只能 console.log 原始类型,这也涉及相当多的点击次数。因此,我们提出了一个节省时间的想法,让你只需单击 Tenderly Debugger 中的一个按钮 Evaluate,即可轻松检查交易跟踪中的任何值。

Evaluate Expression 之前和之后

之前:要检查生产中合约的变量值,你需要手动收集数据。收集所有信息后,你需要完成多个计算。由于这涉及多个步骤和更多的点击次数,许多开发者因时间限制而中途放弃。

之后:要检查交易错误并调试问题,你只需转到 Tenderly Debugger 中的 Evaluate Expression。之后,输入一个表达式并单击 Evaluate 以获得人类可读格式的所需信息。就是这样!

如何评估

你可以将 Evaluate Expression 视为 hardhat 的 console.log,但你可以 console.log 任何内容,包括方法、结构体、枚举、函数、复杂表达式和状态变量。你无需编写代码或部署合约的新版本。相反,只需单击 Evaluate 并读取表达式结果。之后,你可以运行 Tenderly Simulation 来测试你的自定义场景或检查你是否已成功解决问题。

4 种常见的 Evaluate Expression 用例

Evaluate Expression 使你能够检查不同的表达式并测试许多自定义场景。以下是一些常见的示例,可帮助你入门:

1. 评估复杂表达式

例如,假设你想检查你的代码是否进入了 if block。你可以通过在跟踪调用时评估整个语句来做到这一点。

这是一个示例交易

evaluate expression

在这里,你可以检查你的代码是否进入了 if block。要查看 if 语句的结果,请单击 Evaluate -> 输入 step.tickNext < TickMath.MIN_TICK 表达式,然后单击 Enter。在此示例中,结果为 false,这意味着你没有进入 if block 逻辑。

how to evaluate the expression

另一个可能的用例是使用 Evaluate Expression 进行计算。例如,让我们检查以下交易步骤来计算下一个 feeGrowthGlobalX128

2. 评估动态数组、映射和其他状态变量

Evaluate Expression 功能还允许你检查整个结构的内容。例如,你可以评估 state

3. 评估函数

使用 Evaluate Expression,你还可以检查整个函数。让我们检查 _blockTimestamp 函数:

4. 评估全局和局部变量

此用户友好的功能使你能够评估全局和局部变量,包括枚举和结构。在以下示例中,你可以看到 Evaluate Expression 如何帮助你识别合约调用者

使用 Evaluate Expression 并加速你的调试

标准的调试过程涉及许多复杂且耗时的步骤,这些步骤通常会让你偏离轨道并在速度最重要时减慢你的速度。Evaluate Expression 可让你更快地到达目的地,让你更深入地了解交易和相关表达式。

此功能将帮助你充分利用 Tenderly Debugger 并处理各种场景,从调试交易错误和可能减少智能合约 gas 费用到在时间敏感的战情室场景中快速做出反应。使用 Evaluate Expression 完成后,调试将从一项耗时的任务变成一项简单的任务。准备好尝试了吗?

  • 原文链接: blog.tenderly.co/how-use...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
tenderly
tenderly
江湖只有他的大名,没有他的介绍。