Flashbots 发布了 Builder Playground,这是一个开源框架,用于快速启动 L1 和 L2 的全面区块构建测试环境。它通过简化部署、优化性能和降低认知负荷,解决了现有工具在速度、灵活性和复杂性方面的挑战,旨在提高区块构建测试的效率和可靠性。
我们很高兴地宣布 Builder Playground,这是一个开源框架,用于快速启动 L1 和 L2 的全面区块构建测试环境。在与速度太慢、不够灵活或对于我们在 Flashbots 的专业需求来说过于繁琐的工具作斗争之后,我们构建了 Builder Playground。这种专门构建的解决方案使开发人员能够在几秒钟而不是几分钟内部署完整的区块链测试环境,具有最少的配置和最大的可靠性。
区块链的核心是区块,每个区块背后都有一个被称为“区块构建器”的角色。在 Flashbots,我们开发区块构建基础设施已经超过五年了。区块构建不是一项孤立的任务,它需要与众多基础设施交互,从共识机制到执行环境,一直到用户的钱包。测试 L1 区块构建器的最基本设置包括执行层客户端 (EL)、共识层客户端 (CL)、验证器和 MEV-Boost - 而这仅仅是个开始。当你向上发展到 L2 及以上时,这些环境会随着额外的组件和依赖项呈指数级增长,变得更加复杂。
虽然可以模拟某些类型的测试的某些组件,但拥有一种简单的方法来在本地部署完整的、类似生产的环境对于全面的测试和验证仍然至关重要。快速、可靠的本地部署使我们确信我们的实现可以正确处理真实组件之间的交互,从而暴露出无法通过模拟完全模拟的复杂性。
部署区块链测试环境最广泛使用的工具是 Kurtosis,它是一种支持 Ethereum 和 Optimism 的通用部署工具。但是,它的设计与我们的区块构建器开发工作流程不一致,原因如下:
考虑到替代方案,简单地直接使用 docker-compose 文件也不是一个可行的解决方案。虽然 Kurtosis 通过抽象增加了复杂性,但 docker-compose 对于我们的要求来说太基础了。区块链部署需要在容器启动之前对状态和工件进行大量的预设置。这个关键的准备步骤超出了 docker-compose 设计处理的范围。
此外,使用 docker-compose 将需要开发人员手动管理服务配置、处理端口映射、实施容器网络以及创建自己的健康监控系统 - 同时还要处理数十个特定于客户端的标志和参数。这种方法对于有效测试复杂的区块链环境来说太底层和手动了。
为了解决这些特定的挑战,我们创建了 Builder Playground - 一种专门构建的工具,可以简化区块构建器测试环境的部署。
Builder Playground 的核心是两个关键抽象概念:
Builder Playground 中的执行流程包括三个阶段:
整个系统是用 Go 编写的,没有使用单独的配置语言,尽管与特定领域语言相比,它确实使模块化和封装的某些方面更具挑战性。我们认为这是一种值得的权衡,因为我们的目标是特定的领域(区块构建场景),在这个领域中,性能、类型安全和开发人员对 Go 的熟悉程度的优势超过了可扩展性的限制。
这种基于组件的方法允许高度的重用性 - 同一个组件可以在具有不同配置的多个配方中使用。添加新的网络拓扑就像编写一个组合现有组件的新配方一样简单。
我们使用现有部署工具的经验为 Builder Playground 的几个关键设计决策提供了依据:
直接实现核心功能:与依赖于多层间接的工具不同,Builder Playground 直接在 Go 中实现关键功能。配置操作、网络设置和工件生成以原生方式处理,消除了容器执行简单任务的开销。这可以显着加快部署速度,从而缩短开发过程中的迭代时间。
认知负荷最小化:我们没有为每个服务公开数十个标志,而是提供了经过精心选择的、针对区块构建场景优化的默认值。通过仅公开必要的标志,我们减少了开发人员的认知负荷,使他们能够专注于区块构建逻辑,而不是基础设施细节。
模块化、可扩展的架构:Builder Playground 分为两个关键层,将服务配置与环境组合分开。这种分离使得添加新组件或创建新的测试场景更容易,而无需修改核心系统,从而更容易支持不同的网络配置。
特定领域的优化:通过专门关注区块构建器测试,我们应用了通用的工具中不切实际的有针对性的优化。我们硬编码了常用参数,为网络拓扑创建了专门的抽象,并消除了不必要的灵活性。这种专门的方法提高了我们特定工作流程的性能,同时故意牺牲了我们不需要的通用性。
要使用 Builder Playground:
cook
命令运行该工具:$ ./builder-playground cook l1
就是这样!这条命令部署了一个完整的 L1 链环境,其中包含 Lighthouse 信标节点和验证器、Reth 执行客户端和一个内存中的 MEV-Boost 中继。
Builder Playground 创建一个输出目录(默认:$HOME/.playground/devnet
),其中包含配置文件、创世文件和验证器密钥。每个服务都将日志写入 /logs
文件夹,从而可以轻松地调试问题。你还会找到一个 .dot
文件,显示服务之间的关系,从而可以清楚地了解组件如何连接和相互依赖。
所有服务都在具有 DNS 发现的 Docker 容器中运行,允许服务按名称相互查找。这些服务在可预测的接近其默认绑定的端口号上将端口暴露给主机,从而可以轻松地连接外部工具。
当你停止 Builder Playground (Ctrl+C) 时,它会自动停止所有正在运行的容器并清理资源。
Builder Playground 解决了我们在测试区块构建组件时面临的特定挑战。通过创建一个优先考虑速度、可靠性和简单性的专用工具,我们减少了测试复杂区块链基础设施的摩擦。
最初的内部工具已发展成为我们开发工作流程的关键组成部分。更快的反馈循环帮助我们更快地迭代开发过程。
我们邀请你尝试 Builder Playground 来进行你自己的区块构建开发,并欢迎你做出贡献,使其变得更好。我们希望这个工具可以帮助其他从事区块构建工作的人们简化他们的测试流程,就像它对我们所做的那样。
- 原文链接: writings.flashbots.net/b...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!