以太坊核心开发者会议笔记:上海升级进行到哪了?
原文:《》
编辑:Stephanie, ECN
编辑的话
有看 ECN 每周更新的 “以太七日谈” 的朋友可能会发现,“七日谈” 已经停更了将近一个月。除了由于前段时间编辑感染 Covid 无法保持更新外,ECN 也在思考是否应该继续 “七日谈” 的编辑。在新的一年,ECN 计划做一些内容运营上的调整,其中就包括 “七日谈”。
以太坊核心开发者会议的笔记编译一直是 “七日谈” 的重要组成部分,我们现在决定将其独立更新。
如果对以往“七日谈”中哪些部分的内容特别希望我们保持更新的,欢迎在各个社交媒体上私信我们,我们非常愿意听到大家的反馈,以提升我们的内容质量。
在第 152 次 ACDE 上,开发者们就从上海升级中移除与 EOF 实现有关的代码修改达成共识。关于 EOF 的更多信息,可阅读《以太坊核心开发者会议更新014 ⛓》。他们还就不再接受任何添加到上海升级的 EIP 达成共识,这主要是为了确保提款质押的 ETH 的时间表不会被推迟。作为上海升级唯一的大型代码修改,提款质押的 ETH 目前正在以开发者为中心的测试网络上进行测试。开发者的目标是在下个月 (2023 年 2 月) 上线用于上海/Capella 升级的公共测试网,然后在 3 月上线主网。开发者随后讨论了 EVM 升级的更周详考虑、以太坊执行层/共识层之间不同的序列化方法、以及引入 Poseidon 哈希函数作为 EVM 的预编译的 EIP。
以下为详细笔记👇
上海升级的进展
在上海升级方面,在圣诞节前已经上线了第一个开发者测试网,所有客户端组合都在上面运行,大家可以看看以太坊基金会 devops 的仪表盘👇。有些客户端组合出现了问题,但开发者们将尽快推出一个新的开发者测试网。
(https://t.co/HBkcidHvMq)
此外,Geth 团队的 Marius@vdWijden 提出对 EIP 3860 (对 initcode 的大小设限并引入 gas 计量) 设计上的小修改 —— 纠正该 EIP 中一个令人困惑的错误模式,即违反 initcode 限制导致的是零地址错误而不是 OOG (gas 不足) 错误。这项提议得到开发者们的认同,即将错误模式改为 OOG 错误,然后终止或中止执行,而不是返回一个零地址,这样将减少在客户端实现中的混乱和漏洞。以上是客户端团队的意见,如果智能合约开发者强烈反对这个修改,可能就不修改了。
EOF 相关 EIP 被移除出上海升级
接下来,会议主要讨论 EOF 相关话题。
Geth 团队的开发者@lightclients 给大家更新了 12 月进行的 EOF 小组会议的情况。(EOF 即 EVM 对象格式,它会为以太坊的代码环境引入一些变化。与之相关的 EIP 将更明确地区分智能合约的代码和数据,并使得 EVM 在未来更容易升级。) 简单来说,规范被敲定,并做了两个小型修改:删除 JUMPF 并使得数据 EOF 合约必须包含数据部分。
在测试方面,Geth 团队的 @mhswende 已经开始对实现做模糊测试,在所有客户端上都发现了漏洞并修复了。现在的模糊测试主要针对在客户端上 EOF container/结构的实现,但不包括部署的 EOF 代码。以太坊基金会测试团队的 Mario Vega@elbuenmayini 补充道,由于 EOF 的复杂性,可能很难对错误情况写静态测试用例,因为实现可能会在遇到确切测试用例前先遇到另一个错误。
在客户端团队方面,Geth 和 Besu 已经有完整实现并通过了大部分的测试。Nethermind 也已经有实现了,但不确定最好使用哪个测试套件。而 Erigon 将使用 Geth 的 EOF 实现。
基于 EOF 的实现和测试情况,Vitalik 也表达了对仓促实现 EOF 的担忧,并发表了 EOF 提案:禁用 EOF 账户的代码自省 (code introspection):https://ethereum-magicians.org/t/eof-proposal-ban-code-introspection-of-eof-accounts/12113
Vitalik 在会议上阐述了这个提案背后的思考,以及解释为什么修改 EVM 通常比其他协议修改更困难。他指出,从以太坊中删除工作量证明比弃用操作码来得更容易。这是因为以太坊应用/合约依赖 EVM 的特定行为,因此修改必须向后兼容,否则将破坏已部署的合约。而协议其他方面的修改只需要每个人在特定时间进行更新,除此之外,不会破坏网络上的任何东西。
这意味着,当我们改进 EVM,或引入新版本,例如 EOF,我们很可能需要永远与它们共存,因为我们不能弃用之前版本。理想情况下,我们想让 EVM 更简洁/简单,但如果我们只能在它上面添加东西而从不删除东西,这就会变得很难。删除东西最大的挑战之一是 EVM 中的代码自省。
因此,Vitalik 的提案是在 EOF v1 中添加更多内容,这将极大地限制 EOF 合约中的代码自省,从而有可能使其在未来更容易升级。Ipsilon 团队的@alexberegszaszi 提到,EOF 提案的作者们其实之前有考虑过类似的功能,决定放弃是想保持 EOF v1 简单。他还提出一个替代方案,将 Vitalik 的提案纳入到 EOF v2:https://ethereum-magicians.org/t/eofv2-aka-what-evm-2-0-could-look-like/12442
但是,对于这份在 EOF v1 基础上添加内容的提案,客户端团队担心整体的修改规模过大。@lightclients 也表示,基于目前 EOF 测试的进度,把它纳入上海升级可能会延迟大概一个月的时间。如果想要在二月初能上线主网测试网升级,EOF 的部分应该未能准备好。而且,这是一个很重要的决定,因为 EVM 的变更一旦部署了就不能修改。
经过讨论,开发者们最后决定要再多花时间考虑 EOF 的问题,因此将其从上海升级移除,但会保持 EOF 上的工作。他们应该能够在坎昆升级中部署某个版本的 EOF 与 4844。在这次会议上,开发者们没有对坎昆升级做出正式决定,并将在下次会议再讨论。
那上海升级是否需要补充其他的 EIP 呢?经过讨论,开发者们决定不再添加其他 EIP,免得延迟上海升级。
其他 EIP 的讨论
随后,开发者们还讨论了 Nimbus 团队的 Etan Kissling 的提案:在 ExecutionPayloadHeader 的交易列表里添加十六进制树根。https://github.com/ethereum/consensus-specs/pull/3078
简单来说,现在执行层区块头和共识层执行负载头 (ExecutionPayloadHeader) 之间使用不同的序列化格式编码的字段。这两个字段编码格式不同给钱包和以太坊轻客户端构建带来额外的开销和复杂性。Kissling 提议向执行层添加 CL 的 SSZ 序列化格式,或共识层客户端采用多种方式支持执行层的 RLP 序列化格式。这个提案与上海升级中的提款相关,因此相对紧急。这个问题将在这周的共识层会议 (ACDC) 上再次讨论,即 1 月 12 日。
会议最后还讨论了 EIP-5843 (EVM 模块化的算术扩展) 的和 EIP-5988 (添加 Poseidon 哈希函数预编译)。由于 EIP-5843 的作者未能与会,开发者们同意之后再对此 EIP 进行讨论。而 5988 由 StarkWare 提出,旨在在以太坊网络上提高运行零知识证明的效率。但这可能给以太坊的安全性带来未知后果。
编译来源为 @TimBeiko 和 @christine_dkim 的笔记
▶https://twitter.com/TimBeiko/status/1611042386611929089?s=20
▶https://www.galaxy.com/research/insights/ethereum-all-core-developers-execution-call-152/
会议视频:
会议议程:
https://github.com/ethereum/pm/issues/700