使用Recon构建测试工具

  • Recon
  • 发布于 2024-05-04 21:10
  • 阅读 33

这篇文章详细介绍了如何使用Recon工具为智能合约创建不变性测试环境,涵盖了公共和非标准仓库的设置过程。文章结构清晰,提供了丰富的示例和图片,适合开发者快速上手。

五月 02, 2024

Recon 自动为任何公共(免费版本)智能合约仓库或任何使用 Foundry 的私人仓库(专业版)构建一个不变性测试工具。通过这个功能,你可以在几分钟内开始编写不变性测试,本文将介绍如何连接 Foundry 仓库,以让 Recon 为我们构建必要的框架。

为公共仓库构建

在使用 Foundry 设置好项目并确保你的仓库是公共的之后,导航到左侧菜单中的 添加仓库 选项卡。在那里,你将看到以下表单,用于上传你的仓库并自动生成测试工具。

当使用源文件(智能合约所在的位置)位于默认分支根目录的仓库时,我们只需将仓库的 URL 粘贴到顶部表单字段中,所有后续字段将自动填充。

为非标准仓库构建

对于符合以下一条或多条标准的非标准仓库,你需要在上面提到的表单中指定更多信息:

  • 使用 main 以外的分支名称作为默认分支,或你想要将测试添加到不同的分支

  • 将源合约位于除了根目录以外的目录中

  • 在其 foundry.toml 中指定了 out 以外的输出目录

竞争仓库如 Code4rena、Sherlock 等平台常常使用这些非标准格式的仓库,因此我们将使用来自 Jala Swap 竞赛 的仓库来进行演示。

构建非默认分支

对于使用名称不是 main 的仓库分支,你需要在分支字段中指定分支名称。

使用命名为 dev 的默认分支来构建我们的 Recon 框架

源合约不在根目录

如果你为其构建框架的项目的源合约(从哪里运行 Foundry)位于除仓库根目录以外的目录中,你需要在 目录 表单字段中指定此项。如果你不确定该目录是哪个,请查找 foundry.toml 文件所在的目录,因为这是项目中运行 Foundry 的位置。

要为 Jala Swap 示例指定这一点,我们需要获取合约所在目录的名称,在本例中为 jalaswap-dex-contract,我们将其添加到 目录 表单字段中。

Foundry 项目源文件的位置

自定义输出文件夹

如果正在构建的项目对 out 配置(指定放置合约工件的路径,相对于项目根目录)使用了非默认设置,则你需要在 自定义输出文件夹 表单字段中指定。

要判断你的项目是否是这种情况,你需要检查 foundry.toml。查看 Jala Swap 的 foundry.toml 文件,我们看到该项目的工件目录被设置为 artifacts

然后我们在 自定义输出文件夹 表单字段中指定这一点。

运行构建

在所有所需信息都准备好后,我们只需点击 开始作业 按钮,我们的构建作业将提交给 Recon 的云服务,该服务使用合约的 ABI 生成构建测试处理器所需的框架。我们将会在屏幕底部收到成功创建带有唯一 ID 字符串作业的通知。

你可以在 公共仓库 页面右下角的作业信息菜单中跟踪作业的状态:

如果同一仓库的其他用户已构建了框架,Recon 将使用现有的 ABI,你会看到以下消息,你的作业将立即可访问:

一旦运行的作业完成,它们将显示在左侧菜单的 构建你的处理程序 标签下。当我们点击 Jala Swap 作业的标签时,我们将看到关于要将哪些合约添加到测试套件的选项。有关如何从此页面设置测试套件的更多信息,请参阅 本教程

添加到项目

安装依赖项(Chimera)

在将我们的测试框架文件添加到项目之前,我们需要安装 Chimera 依赖项,以便使用 Recon,使用以下命令:

forge install Recon-Fuzz/chimera

添加 Chimera 后,我们需要将 Chimera 的重映射添加到 foundry.toml 中的重映射数组中,对于 Jala Swap 示例,这将如下所示:

remappings = [\
  '@chimera/=lib/chimera/src/'\
]

因为没有已经定义的重映射。

将 Recon 文件添加到项目

现在,我们可以使用 下载所有文件 按钮将 Recon 为我们创建的框架添加到项目中,并将文件添加到名为 test 的目录中,在那里我们解压 recon.zip 文件以提取我们的测试框架。

然后,我们只需将 echidna.yaml 和 medusa.json 配置文件移动到 jalaswap-dex-contract 目录中,并在 Setup 合约中传入被测试合约构造函数的必要部署参数,我们就准备好开始编写不变性测试了!

常见构建问题

构建私人仓库

Recon 的免费版只允许构建公共 GitHub 仓库,因此如果你尝试构建私人仓库,你将收到以下错误消息:

要启用对私人仓库的框架构建,请升级到 Recon Pro。

没有指定自定义输出文件夹

如果你未能指定在 foundry.toml 文件中定义的自定义输出文件夹,而项目使用了非默认输出文件夹 out,则 Recon 将成功构建你的项目,但在尝试运行 Echidna 时,你将遇到以下错误:

你将收到类似的 Medusa 错误。要解决此问题,你需要按照上面的步骤重新构建 Recon 框架,并在表单中正确指定输出文件夹。

错误地指定分支

对于使用默认分支名称不是 main 的仓库,如果你未能在 Branch 表单字段中正确指定分支名称,则将收到以下错误:

名称中包含“/”的分支

对于默认分支名称中包含“/”的仓库,Recon 在自动填充表单字段中的分支名称时,仅会识别分支名称的前半部分。例如,如果我有如下的仓库,其默认分支名称为 main/slash,则仅识别到 main 并添加到表单中:

如果你尝试使用上述设置进行构建,将在屏幕底部显示以下错误消息,指示未在仓库中找到指定的分支:

你需要将完整的分支名称指定为 main/slash,并成功提交构建。

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

0 条评论

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