本文介绍了使用Shadow网络模拟框架来测试和改进以太坊客户端网络的方法。该项目旨在修复、更新和扩展ethereum-shadow
,以便能够使用最新的客户端版本(如Reth和Lighthouse)进行网络模拟,并进行一系列实验来评估和改进客户端网络的性能和安全性。最终目标是为客户端团队和研究人员提供一个方便易用的模拟框架。
修订版 1, 2024-07-14
启用并运行网络模拟,以快速测试和改进客户端网络。
网络自然是每个客户端中的一个关键组件。规范和实现都需要认真开发,以使 p2p 网络能够抵抗攻击并尽可能少地使用带宽(以使家庭质押在尽可能多的地区可行)。然而,测试网络更改非常困难:开发网络通常只在中心化网络中包含少量节点,而测试网络不适合进行适当的网络测试,因为它们无法通过新的客户端版本进行集中和快速的更新。手动创建具有实际节点数量(即数千个)的全球分布式测试网络在成本和精力上都是令人望而却步的。网络模拟通常不允许测试完整的软件,而是需要专门编写的代码,这降低了真实性。理想情况下,我们需要一种解决方案来运行具有实际客户端软件和真实网络参数(具有不同延迟和带宽的许多节点)的模拟。现有的方法是 EF DevOps 团队开发的 Kurtosis ethereum-package
,它可以与 Trail of Bits 的 Attacknet 结合使用,以测试以太坊网络如何对几种类型的故障做出反应。
Shadow 是一个网络模拟框架,它拦截程序的系统调用,以完全模拟这些程序之间的网络连接。由于进程睡眠和系统时间也可以被伪造,因此可以根据模拟节点的所需数量,尽可能快或尽可能慢地运行模拟。 Shadow 还允许定义复杂的网络结构。
ethereum-shadow
由 Pop Chunhapanya 在 2023 年初开发,它有助于设置涉及 Geth 和 Lighthouse 的 Shadow 模拟。Pop 已经运行了多达 1000 个节点的模拟,表明大规模模拟是可行的(前提是它们在具有足够内存的机器上运行)。然而,由于当时的技术限制,需要使用过时的 Lighthouse 版本。此外,Geth 最近的更新使得当前的测试设置无法启动,因为模拟是从 PoW 网络开始的,而 Geth 不再支持 PoW 网络。
在这个项目中,我将修复、更新和扩展 ethereum-shadow
。此外,我将运行网络模拟来协助当前的研发,并分析客户端网络的改进。
该项目大致分为三个阶段。
首先,必须更新 ethereum-shadow
以使用更新的客户端版本运行。我将从 Reth 和 Lighthouse 开始。此外,可能需要扩展 Shadow 本身以支持客户端使用的所有系统调用。
阶段 1 将持续大约三到四周。但是,如果需要比预期更多的精力,则该阶段可能会花费更长的时间。
在该项目的主要阶段,我将运行几个实验。这些实验尚未完全确定,但大致计划是使用当前的客户端版本测试几种攻击场景或网络状况,并使用修改后的客户端重新运行它们,以测试改进行为的潜在方法。收集到的所有数据将以开放许可发布,并且有趣的发现将与相关的客户端团队和研究人员讨论。任何可能被用来攻击实时网络的发现都将负责任地披露,并且在漏洞修复之前不会发布。
需要调查的问题包括但不限于:
如果实验证明有用,我想扩展模拟框架,使其尽可能方便使用,并支持所有主要客户端的模拟,以便客户端团队可以轻松地运行自己的模拟。
此阶段将在第 5 队列结束时甚至之后开始。其长度将取决于阶段 1 和阶段 2 期间 ethereum-shadow
的进展,但我预计至少需要两周时间。
很难估计需要多少精力才能使 Shadow 与客户端软件一起工作。 可能需要开发 Shadow 本身的扩展,因为可能需要实现更多的系统调用才能正确运行 Reth 和 Lighthouse。
根据实验的不同,可能需要模拟大量节点。出于经济原因,必须认真考虑和准备此类实验。以这种规模运行模拟也可能导致需要修复的性能和稳定性问题。
基于 Shadow 的方法是否比上面提到的基于 Kurtosis 的测试方法提供显着优势还有待观察。优势可能包括降低资源需求(因为不涉及 Kubernetes)以及可以比实时更快地运行模拟(或者对于大型模拟则更慢)。 缺点可能包括 Shadow 的真实性较低(Shadow 使用自己的 TCP 协议栈,并在确定性方面牺牲了真实性)。
目前没有计划与其他研究员合作,但是,将强烈考虑涉及其他感兴趣的研究员的项目相关的实验。
ethereum-shadow
模拟框架
- 原文链接: github.com/eth-protocol-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!