本文介绍了在EigenLayer协议上构建测试用例的方法,特别是如何使用eigenlayer-fuzzing库来进行集成测试。作者详细阐述了如何将该库作为子模块添加到已有项目中,以及如何设置环境并集成目标函数,以便模拟EigenLayer的外部行为,确保兼容性和可靠性。文章还提供了代码示例和步骤指南,适合有一定基础的读者。
Jul 18, 2024
1
在 EigenLayer 之上构建协议时,你可能希望通过集成测试来测试你的系统在实际 EigenLayer 系统下的表现,或者你只想测试你的系统,而不太关心 EigenLayer 方面的实际正确行为,在这种情况下,你就会选择模拟 EigenLayer 系统。但你如何知道你的模拟不会引入一些意想不到的行为?并且你真的想经历设置整个 EigenLayer 系统的过程,只是为了测试你的系统吗?
现在,你可以通过使用 eigenlayer-fuzzing repo 获得两全其美的结果,而无需额外的工作。
在本篇文章中,我们将使用 renzo-fuzzing repo 作为如何集成 eigenlayer-fuzzing repo 以设置你的模糊/测试套件的示例。
请注意,此 repo 是使用 Foundry 构建的,并与使用 Foundry/Echidna/Medusa 进行不变性/单元测试的协议集成。
在你想要添加 EigenLayer 设置的项目中,使用以下命令将其作为 Foundry 子模块依赖添加:
forge install Recon-Fuzz/eigenlayer-fuzzing
在你的项目中,从 EigenLayerSystem
合约继承,以便在你的设置/测试合约中使用。
对于 renzo-fuzzing 示例,它是 使用 Recon 搭建的,因此包含一个用于定义 setup
函数的 Setup
合约,该函数用于以与 Foundry 和 Echidna/Medusa 兼容的方式部署系统:
由于 Renzo 系统的部署非常广泛,它已被分离到一个不同的合约 (RenzoSetup
) 中,因此它从 EigenLayerSystem
继承,允许在 Setup
合约中调用 deployEigenLayerLocal
函数。
现在两个系统都已部署并相互集成,剩下的就是在我们的 TargetFunctions
合约中添加处理函数,以允许模糊测试器模拟可能影响集成系统行为的 EigenLayer 外部性。
这些函数也由 EigenLayerSystem
合约暴露为 slashNative
和 slashAVS
,因为我们在 Setup
合约中继承了这些,因此将它们添加到 Renzo 模糊测试套件只是针对特定用户调用函数的问题。
在 Renzo 示例中,用户是一个 OperatorDelegator
,因为他们保持 Renzo 中由单个用户进行的所有存款的份额,这些存款在 EigenLayer 上执行。
在添加目标函数后,你拥有一个测试套件,可以使用实际的 EigenLayer 实现来测试你的集成系统的行为。此外,你可以直接通过 slashNative
和 slashAVS
函数操纵 EigenLayer 状态,或通过直接调用 EigenLayer 合约来定义其他潜在的外部性,从而操纵它们的状态。
接下来的唯一步骤是在定义目标函数和属性后允许模糊测试器运行,等待查看是否有任何行为不符合预期。
十个月前推出
Recon 帮助你构建和运行不变性测试
- 原文链接: getrecon.substack.com/p/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!