文章介绍了一个名为create-chimera-app的工具,该工具基于现有的测试框架,允许开发者通过单一命令快速启动一个带有不变性测试的Foundry项目。它集成了Chimera框架并提供了一套易于使用的测试结构,简化了测试的设置过程,从而使开发者能够更高效地进行不变性测试,减少了复杂性和时间成本。
2024年5月13日
受到 Create React App 的启发,Recon 创建了一个模板,允许你使用单个命令引导一个不变性测试项目,利用最流行的不变性测试工具:
forge init --template https://github.com/Recon-Fuzz/create-chimera-app
运行上述 forge init 命令后,你可以使用 Foundry + Echidna + Medusa 在创建的项目上自动运行不变性测试。
Create-chimera-app 本质上是三者的结合: Chimera 框架、随 Foundry 附带的默认模板,以及围绕这个模板构建的 Recon 脚手架。
Chimera 让你使用单一接口进行不变性测试,搭配 Foundry + Echidna + Medusa,因此你无需以半意见化的方式重写测试或其设置。Recon 脚手架则将该框架实现为一个测试工具,便于定义测试及其辅助工具。所有这些都会被添加到默认的 Foundry 模板中,你可以修改现有的源代码和测试文件,或从头开始完全创建。
就像 Create React App 允许你创建一个默认的 React 应用,该应用作为 Web 应用的基础,没有任何配置开销,Chimera 的设计旨在促进创建一个已预先配置不变性测试的 Foundry 项目,以便你可以与智能合约系统一起开发不变性测试。
如果不使用 create-chimera-app,你通常会通过运行 forge init
创建一个新项目,该命令创建围绕 Counter
合约结构的新项目,一个简单的单元 + 无状态模糊测试套件,并提供所需的实用程序以使一切正常工作。
Foundry 的本地不变性模糊测试器非常有用,但不如其他一些工具(如 Echidna 或 Medusa)功能丰富。在使用上述方法初始化 Foundry 项目后,如果你决定需要这些模糊测试器带来的额外好处,这可能会为你的项目结构引入额外复杂性,并要求在集成时做出仔细决策,否则可能会随时间降低代码库的可维护性。
由于 Echidna 和 Medusa 的接口与 Foundry 不同,因此在将它们添加到系统时必须考虑更多因素。
是否使用内部或外部测试设置:
如果是内部的,在你的入口合约中继承目标合约
如果是外部的,实例化你的目标合约并从你的入口合约调用它
重构 Foundry 的 setUp
函数,以便使用入口合约构造函数与 Echidna/Medusa 设置一起工作
创建并设置你的配置文件,使 Echidna 和 Medusa 正确指向你的入口合约。
我可以继续,但希望你现在可以理解,添加所有测试结构确实是可行的,且在初级开发人员的能力范围内,但需要额外的心理开销和时间来整理测试套件的结构以及如何让一切很好地配合在一起。
设置测试工具花费的时间是我们认为更值得用于实际编写测试和证明不变性的时间,这就是为什么 create-chimera-app 让你通过一个命令完成所有上述操作的原因。
通过这个单一命令,你可以获得:
一个用于编写 Echidna + Medusa + Foundry 测试的单一接口。
一个你只需编写一次的 setup
函数,它就能正常工作。
在整个项目中导入 vm
从 Chimera,使所有 HEVM 兼容的作弊码有效。
Recon 脚手架在此基础上帮助你通过提供关注点分离来指导不变性测试套件的布局,从而使代码库更易于维护和理解,使用以下文件结构:
recon/
│
├── BeforeAfter
├── CryticTester
├── CryticToFoundry
├── Properties
├── Setup
└── TargetFunctions
这允许通过在 TargetFunctions
(断言属性测试)或 Properties
(布尔属性测试)中定位不变性/属性测试,来分隔你的测试,所有所需的实用程序或设置可以在其它合约中完成,这些合约被继承以通过 CryticTester
和通过 CryticToFoundry
进行 Foundry 模糊测试提供单一入口。
除了所有这些,你还可以轻松地使用 Foundry 构建过程通过 forge build
查找编译错误,其提供的语法高亮优于 Echidna 和 Medusa 的 Crytic-Compile 构建过程标准。同样,通过将输出日志转换为可以在 CryticToFoundry
中运行的 Foundry 单元测试,简化了查找已被某个模糊测试器破坏的属性的原因,这提供了更好的调试功能,如控制台日志记录。
如果你对使用 create-chimera-app 或 Recon 有问题或困难,请随时通过我们的 discord 联系我们。
- 原文链接: getrecon.substack.com/p/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!