Attacknet 是一个结合 Kurtosis 和 Chaos Mesh 的工具,旨在通过模拟网络延迟、节点崩溃、文件系统错误等真实场景中的混乱和故障,对以太坊网络进行混沌测试。该工具能够摄取测试定义并执行,同时进行健康检查,以确定网络是否受到负面影响,从而帮助开发者发现潜在问题并提高以太坊客户端的健壮性。
混沌测试是一种通过主动模拟和识别故障来测试系统的严谨方法。野外的以太坊网络会受到许多现实生活中的变化的影响,而这些变化在历史上很难在本地测试中捕捉到。我们与 Trail of Bits 合作创建了一个工具,将这两个世界结合在一起,使我们能够创建可以模拟现实世界中的混乱和故障的本地网络。例如,在节点之间添加网络延迟、随机杀死节点、返回文件系统错误等。
这样的工具包含两个主要组成部分:
我们已经通过 Kurtosis 解决了 1.,它使我们能够可靠地部署以太坊网络(无论我们测试的是哪个分叉),以执行基于本地 Docker 的测试或基于远程 Kubernetes 的测试。为了解决 2.,我们使用了一个名为 Chaos Mesh 的 Kubernetes 测试框架,该框架允许我们配置多种故障,然后由编排器执行。虽然这些软件为我们提供了所需的功能,但它们并没有提供易用性。
Attacknet 的引入,弥补了缺失的部分,它是一个可以接收测试定义并为我们执行它的软件。这将允许我们配置我们想要看到的案例列表,并由它来处理测试的执行。该软件还可以执行健康检查,并尝试确定网络是否受到混乱的负面影响。
Attacknet 允许我们为任何我们喜欢的持续时间配置以下类型的混沌,有些还允许额外的随机性(即,仅在 x% 的时间内运行故障):
目前我们正在研究 3 个因素,即:网络中的客户端组合、混沌类型和混沌参数。以下是我们计划进行的一些初步测试:
测试编号 | 描述 | 混沌类型 | 参数 | 分析目标 | 备注 |
---|---|---|---|---|---|
1 | 单个 EL 类型,每个 CL 各一个。 | 网络延迟 | 延迟:100ms、500ms、1000ms、2000ms,抖动 10% | 分析错过的 slot 数量并与延迟相关联 | 使用每个 EL 重复 |
2 | 单个 EL 类型,每个 CL 各一个。 | 网络数据包丢失 | 数据包丢失:5%、10%、50%、100% | 分析错过的 slot 数量并与数据包丢失相关联 | 使用每个 EL 重复 |
3 | 单个 EL 类型,每个 CL 各一个。 | 时钟偏差 | 时钟偏差:100ms、500ms、1000ms、2000ms | 分析错过的 slot 数量并与时钟偏差相关联 | 使用每个 EL 重复(EL 在此测试中无关紧要) |
4 | 单个 EL 类型,每个 CL 各一个。一次将分区应用于一个 CL。 | 网络分区 | 不适用 | 分析 CL 在分割修复后是否可以重新加入网络 | 可能会使用静态 peer 来避免降分问题。可能需要重启 pod。为每个 EL 重复。 |
5 | 单个 EL 类型,每个 CL 各一个。将网络分成两半。 | 网络分区 | 不适用 | 分析网络是否可以自我修复 | 使用静态 peer 以避免降分问题。为每个 EL 重复。 |
我们尽量避免在混合中添加太多变量,我们没有很好的方法知道运行何时“失败”,所以我们更谨慎,并构建具有更多受控变更集的网络。
Attacknet 允许我们为 Dencun 分叉模拟许多边缘案例测试场景。我们将继续使用该工具来研究 peerDAS 以及加强以太坊客户端。团队的下一个重点将是设置使用 Attacknet 的自动化测试,以便我们能够在没有人工监督的情况下运行它。
在此处查找有关 Attacknet 的更多信息:https://github.com/crytic/attacknet
- 原文链接: ethpandaops.io/posts/att...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!