复用 Kurtosis Ethereum-package 作为 L2 开发网络的基础

本文介绍了如何利用 Kurtosis 平台上的 ethereum-package 作为基础,构建更复杂的工具和 L2 开发网络。

将 Kurtosis Ethereum-package 作为 L2 devnet 的基础进行复用

介绍

在我们最新的系列中,该系列以深入研究 Kurtosis(deep dive into Kurtosis)开始,我们探索了创建本地化 Ethereum 开发网络 (devnet) 的效用。 今天,我们将通过演示 ethereum-package 如何作为复杂工具以及 L2 devnet 的基础来扩展这一点。

基于 Kurtosis 的 package 方法的优势在于,package 可以在其他 package 中导入和链接。 这意味着可以创建一个新的 package,该 package 导入 ethereum-package 并期望始终以最小的维护工作启动基础层 Ethereum。 对于任何创建并非严格专注于 Ethereum 基础层,但仍依赖它进行数据或状态访问的工具的人来说,此功能将特别有用。 为了扩展此功能的使用方式,我们决定构建一个运行 L2 devnet 的示例,但基础层是 Ethereum,作为 package 导入。 对于此示例,我们将使用 Optimism 堆栈并创建 optimism-package,这仅仅是因为它重用了我们已经有定义的许多基础层组件。 但是,没有理由认为该示例不适用于任何其他依赖 Ethereum 作为基础层的 L2 或工具。

在 Kurtosis 中与导入的 package 交互

Kurtosis 采用 Starlark 来满足其脚本需求,允许你将每个文件夹视为一个模块,可以方便地将其导入到其他模块中,从而增强模块化和重用性。 让我们举一个两个模块的例子,一个定义常量(在 constants.star 中定义),另一个使用这些常量(在 main.star 中定义)。

然后,main.star 文件可以按如下方式导入 constants.star 中定义的常量:

constants = import_module("../constants/constants.star")

就像我们将一个模块中的文件导入到另一个模块中一样,我们也可以将整个 github 上的 package 导入到任何任意模块中。 看起来会像这样:

ethereum_package = import_module("github.com/ethpandaops/ethereum-package/main.star")

ethereum-package 包含一个 run 函数,需要使用启动 Ethereum devnet 的参数来调用它。 响应存储在一个名为 l1 的变量中,该变量包含 Ethereum devnet 的上下文。 然后,我们可以引用存储在此上下文中的任何变量,例如,我们可以获取 Ethereum 节点的 RPC URL,以便与底层链进行交互。 执行此操作的代码如下所示:

## 运行 Ethereum devnet 并将上下文存储在一个名为 l1 的变量中
l1 = ethereum_package.run(plan, ethereum_args)
## 读取 Ethereum devnet 中第一个参与者的 RPC URL 并将其存储在一个名为 l1_rpc 的变量中
l1_rpc = l1.all_participants[0].el_context.rpc_http_url

我们还在 ethereum-package 中包含预先注资的帐户,这些帐户可用于基础链上的交易。 可以通过调用 ethereum-package 上下文中的 pre_funded_accounts 来访问这些资金。 我们确实为特定目的保留了某些帐户,例如,第 12 个帐户保留给 L2 合约部署者。 完整的预分配列表可以在此处找到。 访问第 12 个帐户的私钥的代码如下所示:

l1_priv_key = l1.pre_funded_accounts[12].private_key  # 保留给 L2 合约部署者

Ethereum RPC 以及具有资金的私钥将是构建与 Ethereum 基础层交互的任何工具的组成部分,在 optimism-package 的情况下,我们将这些值传递给 optimism 合约部署者以及稍后在此过程中启动的 op-nodes。 如何与基础 ethereum-package 交互的完整示例可以在此 main.star 文件中找到。

Optimism package 概述

optimism 文档包含一个页面,其中包含创建 L2 rollup 测试网的所有要求,文档可以在此处找到。 从高层次上讲,optimism-package 部署了以下内容:

  • 智能合约
  • Sequencer 节点(共识和执行客户端)
  • Batcher
  • Proposer

一旦我们导入了 ethereum-package 并拥有 L1 上下文,我们就将所需的变量(例如预先注资的私钥、RPC、chainID 和其他一些值)传递给 contract_deployer.star 模块。 该模块包含用于部署和配置 optimism 合约的所有逻辑。 contract_deployer 模块等待 L1 完成,以避免出现问题,然后继续使用 castforge 部署合约,并使用 op-node genesis 命令创建 L2 genesis 文件。

然后,L2 链 genesis 文件在 contract_deployer 上下文中可用,可以通过 op_genesis.files_artifacts[0] 访问,供节点使用。 然后,该 package 继续启动 L2 网络参与者,此逻辑封装在模块 participant_network.star 中。 该模块启动 L2 网络中的所有参与者,包括 sequencer、batcher、proposer 和 op-nodes。 如果 L2 网络上已经设置了节点,则该模块会将新节点连接到现有节点。

一旦设置了节点、batcher 和 proposer,optimism-package 将转向设置工具。 目前,此工具仅包括 op-blockscout,但可以扩展为包括任何其他所需的工具。 op-blockscout 是原始 blockscout 的一个分支,配置为与 L2 网络一起使用。 op-blockscout 是模块方法的可扩展性的另一个示例,它引用 ethereum-package 中的 L1 RPC 以及 optimism-package 中的 L2 RPC,以为开发人员提供无缝体验。

optimism-package 执行的结果是一个功能齐全的 L2 devnet,以及访问它们的服务和 URL 列表。

配置示例

由于 optimism-package 旨在完全包含 ethereum-package,因此其配置文件无缝集成了 ethereum-package 中的所有参数以及其自身独特的设置。 为了区别于使用原始 ethereum-package,在配置文件中引入了一个名为 optimism_package 的新字段。 此字段将包含特定于 L2 devnet 的所有新配置参数。

optimism_package: # specific to the optimism package 的参数
  participants:
    - el_type: op-geth
      cl_type: op-node
  additional_services:
    - blockscout
ethereum_package: # 从 ethereum package 继承
  participants:
    - el_type: geth
    - el_type: reth
  network_params:
    preset: minimal
  additional_services:
    - dora
    - blockscout

使用 Kurtosis 进行工具和 L2 devnet 有哪些好处?

当前创建任何 L2 devnet/工具的方法是使用现有的 L1 测试网并在其上部署 L2 package/工具,或者使用自定义 bash 脚本执行本地测试。 这是一个繁琐的过程,并且仍然需要大量的维护工作才能确保 L1 通过升级按预期工作。 Kurtosis 方法允许你在几分钟内创建一个本地 L1 devnet,维护工作相对较少,并允许你将更多时间花在 L2 devnet/工具上 - 从而实现更快、更安全的原型设计。 Kurtosis 还适用于enclaves的概念,这些 enclaves 彼此完全隔离 - 允许并行运行多个测试,而不会产生干扰或网络问题。

使用 Kurtosis 进行 L2 devnet 有哪些缺点?

使用 Kurtosis 的主要缺点是 devnet 的本地性质。 这意味着向其他开发人员提供 devnet 访问权限并不像使用公共测试网那么容易,这是当前 kurtosis 工作方式中的一个根本瓶颈。 此外,Kurtosis 中缺少默认的持久存储意味着当你停止 devnet 时,你将丢失所有数据(除非提前保存)。 这对于测试目的来说不是问题,但这是需要记住的事情。

结论

为了充分理解将 Kurtosis 与 ethereum-package 结合使用的强大功能和灵活性,我们鼓励你启动自己的项目,将其重复用于工具或定义自己的 L2。 探索详细的文档,尝试配置,并加入 discord 分享你的经验!

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

0 条评论

请先 登录 后评论
EthPandaOps
EthPandaOps
https://ethpandaops.io