本文介绍了 Visual Studio Code 的 Recon 扩展,它简化了不变性测试套件的设置和运行。该扩展提供了一系列工具,包括自动生成测试框架、快速创建处理器、自动生成模拟合约、生成 Echidna/Medusa 报告、生成精简的覆盖率报告,以及生成用于调试的单元测试。
Visual Studio Code 的 Recon 扩展允许你直接在代码编辑器中使用 Recon 的工具套件。 这些工具旨在使设置和运行不变性测试套件更加快速和简单。
使用此扩展,你可以:
搭建你的不变性测试套件
为你定位的每个函数快速创建处理程序
自动生成模拟合约
在你的套件上运行 Echidna/Medusa 后生成报告
生成精简的覆盖率报告
生成重现器单元测试以调试损坏的属性
从 Visual Studio Code marketplace 安装扩展后,你的 Foundry 项目将在代码编辑器的新窗口中打开时自动编译。
构建项目后,你可以选择要添加哪些合约函数的目标函数,方法是使用侧边栏中的 CONTRACTS 部分。
通过选中函数名称旁边的框,将函数添加到测试框架。
选择要添加到框架的合约函数后,该扩展将为你的项目生成一个 Chimera Framework 模板。
这将安装 Chimera 依赖项,生成必要的 fuzzer 配置文件,并使用 Create Chimera App 模板 为你的项目生成所有必要的测试文件。
有关如何使用 Chimera Framework 的更多信息,请查看 Chimera Framework 部分。
在选择要定位的合约函数时,你可以从三种“测试模式”中进行选择,以帮助定义你希望如何测试目标函数:
测试模式可帮助你设置要为每个处理程序执行的测试类型; 无论你是否要在函数调用后检查属性,仅在成功/失败时检查属性,或者不需要检查任何内容而只是直接调用该函数。
Normal Mode(普通模式)- 这只是在底层目标函数周围添加一个处理程序函数作为包装器。
Fail Mode(失败模式)- 这将添加一个处理程序函数,该函数在调用目标函数的末尾包含一个断言。 你可以用你想要测试的任何其他断言替换此断言。
Catch Mode(捕获模式)- 这将添加一个处理程序函数,该函数在调用目标函数的周围包含一个 try catch 块。 你可以将任何自定义逻辑添加到 catch 块,例如关于函数何时应该或不应该恢复的断言。
在我们第二个版本的 Create Chimera App 中,我们引入了 ActorManager 的概念,它允许你从一个在你的设置中继承的合约中跟踪系统中所有模拟用户。
我们已将此想法嵌入到扩展中,现在你可以使用演员模式来指定哪个演员应该调用给定的目标函数:
Actor(演员)- 这使用当前设置的由 `_getActor()` 返回的演员来恶作剧和调用目标函数。
Admin(管理员)- 这使用管理员角色来调用目标函数(默认为 `address(this)`)。
在设置测试套件时,很常见的情况是,你会有一些核心系统合约,你打算测试其行为,以及一些外围合约,需要部署这些合约才能使核心合约工作,但其行为与你尝试测试的内容无关。 在这种情况下,模拟外围合约通常是最佳选择,这样就不必部署实际实现及其所有后续依赖项以及所有必需的配置。
模拟通常很简单,但做起来很烦人,因为你需要确定何时需要返回值,以及何时可以让函数不执行任何操作。
Recon 扩展允许你使用 ABI to Mock 工具自动模拟设置所需的特定合约。 这将基于合约的参数和返回值生成任何系统合约的模拟。
构建项目后,右键单击合约以使用 Generate Solidity Mock 选项为其创建模拟。
在使用 Echidna 或 Medusa 运行你的套件后,会自动生成一个报告,其中显示了模糊测试运行中测试的所有属性以及它们是通过还是失败。
你可以通过单击清单图标在侧边栏的 COVERAGE REPORT 部分中打开报告:
当你使用下载的扩展运行 fuzzer 时自动生成的 markdown 报告。
默认情况下,Echidna 和 Medusa 生成的覆盖率报告包括在编译期间构建的所有文件。 这会导致一个非常大的 HTML 文件,手动解析它来检查某些行是否在构建套件的早期阶段被覆盖可能很困难。
你可以通过单击 COVERAGE REPORTS 部分中的在新标签页中打开按钮来查看覆盖率报告的精简版本,该版本删除了 fuzzer 未触及的合约。
精简的覆盖率报告,其中仅包括在测试期间 fuzzer 触及的合约。
当 Echidna/Medusa 破坏一个属性时,它们会输出一个调用跟踪,允许你重现破坏该属性的调用。 此调用跟踪难以阅读且不适合调试,因此最好将其转换为 Foundry 单元测试,以便你可以更轻松地识别损坏属性的来源。
我们已将其构建到扩展中,因此如果属性中断,该扩展将自动为该属性生成 Foundry 单元测试重现器。
使用扩展运行 Echidna/Medusa 时,会自动识别损坏的属性,你可以使用它们来生成 foundry 单元测试。
单击“是”会将重现器添加到生成 Chimera 模板时创建的 CryticToFoundry 合约。
构建 Recon 扩展是为了让不变性测试更容易。 有了它,只需点击几下即可轻松完成重复性和手动任务。
我们已经了解了如何使用该扩展:
使用 Chimera 框架为不变性套件添加所有必要的框架
生成具有不同“测试模式”的处理程序函数以及调用它们的 actor
自动生成模拟合约以加快设置速度
在运行 Echidna/Medusa 后生成报告以共享你的测试结果
生成精简的覆盖率报告,以便于搜索
生成重现器单元测试以调试损坏的属性
要查看使用该扩展的完整指南,请查看 Recon book。
更喜欢让其他人处理你的不变性测试?
在 Recon,我们提供由不变性测试驱动的精品审计。 有了它,你可以获得两全其美的优势,由精英研究人员完成的安全审计与前沿的不变性测试套件相结合。
听起来很有趣? 请在此处与我们联系:
- 原文链接: getrecon.substack.com/p/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!