ERC7540 金库的可重用属性

  • Recon
  • 发布于 2024-08-18 21:37
  • 阅读 26

本文详细介绍了ERC7540 vault规范的背景及其实现,重点展示了如何使用Recon团队与Centrifuge合作开发的工具进行ERC7540 vault的测试。文章通过示例逐步引导,阐明了如何设置测试环境,使用可重用属性进行断言测试,并提供必要的代码示例和图片,呈现了一条明确的逻辑脉络。

动机

ERC7540 vault 规范 是由 Centrifuge 协议团队开发的,因为他们需要一种处理来自 ERC4626 vault 的异步存款/取款的方法。

他们的系统使用自己的 Centrifuge 链首先处理存款/取款请求,然后将消息发送回以太坊,发起请求的用户将收到其 vault 代币(份额代币)或基础资产。该过程中异步的特性需要额外的保障,以确保用户在其请求被 Centrifuge 链处理之前不会立即收到代币。

在这个示例中,我们将展示如何使用 Recon 团队在与 Centrifuge 的合作中开发的 erc7540-reusable-properties 仓库。

开始使用

在我们的示例中,我们将使用 Centrifuge 定义的包含 ERC7540 vault 的 liquidity-pools 仓库,以便我们可以在其基础上搭建我们的测试(要跟随我们的示例,请参见 这个仓库)。

在克隆现有仓库并删除现有测试以便实现我们自己之后,我们可以使用 Recon builder 为 ERC7540Vault 合约添加一个测试工具。然后我们只需要将我们的 ERC7540Vault 合约添加到 Setup 合约中,以便可以进行目标操作:

然后,我们选择目标合约中感兴趣的函数,将其添加到 TargetFunctions 合约中:

一个基本的 TargetFunctions 合约,仅公开了 vault 的核心功能:存款和取款的处理程序。

接下来,通过以下方式将可重用的属性添加为依赖项:

forge install Recon-Fuzz/erc7540-reusable-properties --no-commit

要使用这些属性,我们只需在基础 Properties 合约中继承 ERC7540PropertiesCallTestAndUndo(提供用于撤销状态更改的实用程序,以便在与 Echidna 的布尔属性测试中以相同的方式使用断言测试)合约,以便每次运行 Echidna 时都可以在我们的 TargetFunctions 上进行测试。

此外,ERC7540Properties 合约要求我们为模糊测试器添加一种方法,以切换其中定义的 actor 状态变量,在我们的示例中,我们通过添加一个目标函数在每次模糊测试器调用时切换 actor

由于我们的设置只使用一个演员,我们只需使用 admin 值来设置 actor,该值在 Setup 合约中被设置为 CryticTester(我们的 echidna 入口点),我们可以随后扩展为多演员设置,如果我们选择这样做,则允许模糊测试器在不同的演员之间循环,并更真实地评估依赖于多个用户存入 vault 的属性。

仅使用所需的部分

为了允许模糊测试器在断言测试模式中调用 ERC7540Properties 合约中的函数,我们只需用处理程序函数将它们包装起来:

上面的处理程序使用 CallTestAndUndo 中定义的 _doTestAndReturnResult 函数以断言模式测试 ERC7540Properties 中的属性,同时撤销可能因测试执行而发生的任何状态更改,因此允许它们像 Echidna 中的布尔属性测试一样运行。使用断言定义这些测试的好处在于,由于 Echidna 每次只能以一种测试模式运行(与 Medusa 不同),因此可以在一次运行中评估这些和其他断言测试,而不必在断言和属性模式中进行单独运行。

由于 ERC7540Properties 中的属性旨在普遍适用于符合 ERC7540 vault 规范的实现,因此在实际实现中,某些属性可能因与规范不同而不成立。为了排除在这些情况下可能不成立的某些属性,从而避免在它们上浪费模糊测试运行,可以简单地将它们从 ERC7540Properties 合约中删除。

就这样!一旦你按照上述步骤操作,你就可以轻松将更多属性直接添加到 Properties 合约中,以测试你特定的 vault 实现,同时了解到你所包含处理程序的任何属性将自动被测试。

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

0 条评论

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