以太坊 - 介绍

  • ethereum
  • 发布于 2025-06-30 23:47
  • 阅读 19

本文档概述了以太坊执行层EIP的规范和测试流程,目标读者为EIP作者、研究人员和实施者。文章详细介绍了EIP的各个阶段,包括草案、审查、最终草案、最终确定等,并描述了如何在execution-specs仓库中实现新的EIP,以及如何使用execution-spec-tests编写测试。

介绍

本文档概述了为以太坊执行层指定和测试 EIP 的过程。它适用于 EIP 作者、研究人员和实施者。一个 EIP 通常会经历以下阶段:

阶段 活动 输出
Pre‑Draft 潜在的 EIP 作者构思了一个改进以太坊的想法,并与社区讨论。 <ul><li>在 Ethereum Magicians 上的模糊共识</li></ul>
Draft <p>EIP 作者编写一份技术性的、人类语言的文档来描述改进,最初是概括性的,然后随着时间的推移变得更加具体。</p><p>同时,他们开发一个 Python 参考实现,使 EIP 可执行,并识别任何直接/明显的实现问题。例如,EIP 可能与当前以太坊虚拟机的某些细节不兼容。</p><p>最后,在这个阶段,作者开始为 EIP 编写测试方案。拥有参考实现应该有助于识别各种要测试的逻辑流程,从而为更强大的测试提供支持。一旦编写了测试方案,就可以使用参考实现来填充测试并生成测试向量。</p> <ul><li>EIPs Repository 中完整(但不是最终)的文档</li><li>EELS 中的参考实现</li><li>EEST 中的初始测试</li></ul>
Review <p>更广泛的以太坊社区讨论并提供对提案的意见。</p><p>尽管可以在所有生命周期阶段寻求社区的反馈,但拥有参考实现和测试可以作为研究和客户端实现之间的良好桥梁。它还有助于核心开发人员(他们的时间和资源有限)更好地理解 EIP 并提供更明智的反馈。</p> <ul><li>EIPs Repository 中完整且最终的文档</li><li>EEST 中的综合测试</li></ul>
Last Call 通常在被提名为包含在分叉中之后,EIP 作者发出信号,表明提案实际上已经完成,并开始最后的评论/讨论期。 <ul><li>EELS 中完整的参考实现</li><li>EEST 中完整的测试</li><li>EIPs Repository 中不可变的提案</li></ul>
Final 该提案现在是不可变的(无法更改),并且存在以供参考。 <ul><li>主网客户端实现</li></ul>

本文档将重点介绍上述生命周期的第 3 阶段和第 4 阶段。

可执行规范

此存储库包含以太坊执行层的可执行规范。

文件夹结构

在主网上线的分叉

src/ethereum 文件夹包含不同执行层分叉的规范。每个分叉都有自己的文件夹。例如,src/ethereum/frontier 文件夹包含 Frontier 硬分叉的规范。src/ethereum/&lt;FORK NAME>/fork.py 中提供的 state_transition 函数是每个分叉的转换函数。

开发中的分叉

在任何给定时间,只有一个分叉正在开发中。任何新的 EIP 都必须在用于该分叉的文件夹(src/ethereum/&lt;FORK_NAME> 文件夹)中实现。

例如,在撰写本文时,Prague Fork 仍在开发中,而之前的分叉是 Cancun,它已在主网上线。因此 src/ethereum 下的 prague 文件夹本质上只是 Cancun 分叉,其中的变量值已更新以反映 Prague 及其正在开发中的状态。此文件夹 (src/ethereum/prague) 用作进一步开发的基线,所有新的 EIP 都在此文件夹中实现。

分支结构

在主网上线的分叉

当前在主网上线的所有分叉的最终稳定规范都在 master 分支中。

开发中的分叉

在任何给定时间,只能有一个分叉处于积极开发中。开发中的分叉的分支结构如下:

  • forks/&lt;FORK_NAME>:开发中分叉的主分支。例如,forks/prague 是 Prague 分叉的分支。在分叉在主网上线后,此分支将合并到 master 中。
  • eips/&lt;FORK_NAME>/&lt;EIP_NUMBER>:开发中分叉中每个 EIP 的分支。例如,eips/prague/eip-7702 是 Prague 分叉的 EIP-7702 的分支。在确认 EIP 将在分叉中发布后,此分支将合并到 forks/prague 中。

编写新的 EIP

execution-specs 存储库中实现新的 EIP 涉及以下步骤:

  1. 创建一个新分支:在适当的分叉下为 EIP 创建一个新的分支。例如,如果要为 Prague 分叉实现 EIP,请在 eips/&lt;FORK_NAME>/eip-&lt;EIP_NUMBER> 下创建一个新的分支。
  2. 实现 EIP:在 src/ethereum/&lt;FORK_NAME> 文件夹中实现 EIP。
  3. 基本健全性检查:运行 tox -e static 以运行基本的格式化和代码检查。
  4. 提出 PR:针对适当的分支提出 PR。例如,如果要为 Prague 分叉实现 EIP,请针对 forks/prague 分支提出 PR。

只有当 EIP 具有参考 execution-specs 实现时,才能将其 CFI(考虑纳入)。EIP 作者负责使他们的 EIP 与最新更改保持同步。例如,如果作者在 eips/cancun/eip-x 下为 Cancun 编写了他们的 EIP,但由于某种原因它没有进入 Cancun,他们将需要重新调整他们的 EIP 以反映 eips/prague/eip-x 下 Prague 的更改。

请参考以下教程,了解如何编写新的 EIP。它将引导你完成一个示例 EIP,该 EIP 用于向规范添加一个新的操作码。 教程

使用 execution-spec-tests 编写测试

除了拥有参考实现之外,如果 EIP 作者构思并编写 EIP 的测试向量,对社区和核心开发也非常有帮助。有一个非常用户友好的框架,用于在 execution-spec-tests 存储库中编写以太坊测试。请参考以下指南,了解如何为你的 EIP 编写测试。

使用 execution-spec-tests 编写测试

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

0 条评论

请先 登录 后评论
ethereum
ethereum
江湖只有他的大名,没有他的介绍。