本文档概述了以太坊执行层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/<FORK NAME>/fork.py
中提供的 state_transition
函数是每个分叉的转换函数。
在任何给定时间,只有一个分叉正在开发中。任何新的 EIP 都必须在用于该分叉的文件夹(src/ethereum/<FORK_NAME>
文件夹)中实现。
例如,在撰写本文时,Prague Fork 仍在开发中,而之前的分叉是 Cancun,它已在主网上线。因此 src/ethereum
下的 prague 文件夹本质上只是 Cancun 分叉,其中的变量值已更新以反映 Prague 及其正在开发中的状态。此文件夹 (src/ethereum/prague
) 用作进一步开发的基线,所有新的 EIP 都在此文件夹中实现。
当前在主网上线的所有分叉的最终稳定规范都在 master
分支中。
在任何给定时间,只能有一个分叉处于积极开发中。开发中的分叉的分支结构如下:
forks/<FORK_NAME>
:开发中分叉的主分支。例如,forks/prague
是 Prague 分叉的分支。在分叉在主网上线后,此分支将合并到 master
中。eips/<FORK_NAME>/<EIP_NUMBER>
:开发中分叉中每个 EIP 的分支。例如,eips/prague/eip-7702
是 Prague 分叉的 EIP-7702 的分支。在确认 EIP 将在分叉中发布后,此分支将合并到 forks/prague
中。在 execution-specs
存储库中实现新的 EIP 涉及以下步骤:
eips/<FORK_NAME>/eip-<EIP_NUMBER>
下创建一个新的分支。src/ethereum/<FORK_NAME>
文件夹中实现 EIP。tox -e static
以运行基本的格式化和代码检查。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 编写测试。
- 原文链接: github.com/ethereum/exec...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!