主页 > imtoken安卓app > 合并前夕,回顾以太坊协议层的七年变迁

合并前夕,回顾以太坊协议层的七年变迁

imtoken安卓app 2023-01-29 07:58:52

原文:《以太坊协议层的七年变迁》

什么是以太坊

什么是以太坊? 一千个人有一千个答案,而本文要讨论的是最一致的答案,即以太坊的协议是什么? 或者更技术性的描述——如果我要开发一个以太坊客户端(PoW链/ETH1),我需要遵循什么规则?

你找不到描述以太坊当前共识规则的规范,因为以太坊的协议是通过增量更新来描述的。 以太坊黄皮书在创建时描述了完整的协议,每一次协议变更都被称为一次硬分叉(当然,有些人试图使用“网络升级”的表达方式),要求所有客户端更新他们的代码。 简而言之,以太坊通过硬分叉实现协议层的变化。 最小的变更单位称为以太坊改进提案(EIP,Ethereum Improvement Proposal)。 硬分叉包含一组以太坊改进建议。 本文将回顾以太坊历次硬分叉以及其中包含的改进建议,试图展示以太坊在过去七年中所做的一切。

历次硬分叉介绍

可以通过这个页面查看以太坊历次硬分叉。 自2015年7月30日上线以来,共进行了14次硬分叉,包括39个EIP(“君士坦丁堡”和“彼得堡”算同一个)。 最近的两个硬分叉相隔 26 天,最远的两个硬分叉相隔 490 天。

硬分叉分为“主动升级”和“被动升级”。 主动升级是指开发团队主动修改以太坊协议,而被动升级是应对潜在安全风险“不得不”采取的行动。 被动升级至少包括“DAO Fork”、“橘哨”、“伪龙”、“Muir Glacier”、“Arrow Glacier”、“Gray Glacier”,要么对付黑客盗窃(DAO Fork),要么对付DDOS攻击(橘哨、伪龙),或者干脆处理难度炸弹(缪尔冰川、箭冰川、灰冰川)。 “主动升级”大致符合白皮书的规划(至少在命名上),边境(Frontier、Frontier Thawing)、家园、大都会(拜占庭、君士坦丁堡/圣彼得堡、伊斯坦布尔),而柏林和伦敦是在以太坊路线图改变之后。 过渡升级。 此外,一些主动升级还包括推迟难度炸弹的选项。

硬分叉如何达成共识? 虽然硬分叉的协商没有书面规定,但按照一定的社区惯例,其流程已经发生了变化。 具有里程碑意义的事件是 Martin Holst Swende 提出了“以 EIP 为中心的升级”。 这种新的硬分叉协商机制在柏林升级中首次使用,避免了一次重大失误,后面会详细介绍。

代表性硬分叉解读

以太坊1559协议_以太坊分叉 eip 1559_以太坊1559对散户

历次硬分叉背后都有一些具有代表性的事件,颇具戏剧性,包括DAO分叉、上海DOS、两堡奇缘、拆弹危机等。

道叉

DAO分叉事件是以太坊发展过程中影响最深远的事件。 自从DAO的智能合约被黑客攻击后,大约有360万个以太币被黑客盗走,但有28天的冻结期。 在此期间,在 Carbonvote 的帮助下,代币持有者表达了他们的意愿,以太坊基金会决定将这部分资金转移到一个新的智能合约中,允许投资者提取资金。 这次分叉产生了以太坊经典,也引发了很多社会争论。

上海DOS

Devcon 2期间,以太坊核心开发者云集上海,但以太坊网络遭到大量网络流量攻击,造成拒绝服务(DOS)。 由于EXTCODESIZE操作代码实际消耗的系统资源远高于攻击者需要支付的交易手续费,因此攻击者反复调用该操作代码,导致全网大部分节点无法赶上最新区块。 在协调矿池和全节点以启用受影响较小的 Parity 客户端的同时,开发人员协商减少区块气体(从 5 M 到 1.5 M)。 最终借助橘哨和伪龙两个硬分叉,调整了相关操作码的价格,清理了状态,缓解了DOS攻击的影响。 这次硬分叉也带来了后续影响,由于EIP-161(包含在Spurious Dragon中)执行不当(Go-ethereum和Parity各自错误执行),导致共识分叉。

两堡攻略

你可能会疑惑为什么在7280000这个高度会有“君士坦丁堡”和“彼得斯堡”两个分叉,仔细观察就会发现,两者的区别在于“彼得斯堡”去掉了EIP-1283。

根据 ChainSecurity 的报告,EIP-1283 将对部分合约引入重入攻击的风险。 TrailOfBits 提供了更全面的分析,并提供了一份可能受影响的合约列表。 硬分叉激活前32小时,以太坊基金会发文提醒节点升级或降级推迟君士坦丁堡升级,随后发布新版本引入彼得堡硬分叉。 一个高或禁用的君士坦丁堡硬分叉。

炸弹危机

以太坊1559对散户_以太坊1559协议_以太坊分叉 eip 1559

之所以Muir Glacier和Istanbul的两次硬分叉间隔只有26天,是因为核心开发者误算了难度炸弹的爆炸时间,导致延迟难度炸弹的提议没有被纳入Istanbul。 当发现难度炸弹即将影响网络时以太坊1559协议,第 76 届核心开发者会议迅速接受了 EIP-2384 并将其纳入 Muir Glacier 硬分叉。

硬分叉决策过程改变

硬分叉是如何决定的? 事实上,以太坊长期缺乏书面文件,更多依赖“社会共识”(如有错误请指正)。 EIP-233 试图将正式的分叉过程正式化,但没有被接受。

虽然本文无法展示以太坊社区对硬分叉决策过程的讨论,但以太坊中的硬分叉决策过程已经发生了明显的变化。 在柏林硬分叉之前,开发者首先确定硬分叉的时间以太坊1559协议,然后决定包含哪些EIP,然后实施和测试。 柏林之前的每个硬分叉都是一个元 EIP。 例如,伊斯坦布尔硬分叉由EIP-1679(简称HFM-1679)定义。

Martin Holst Swende 提出了以 EIP 为中心的硬分叉过程。 其核心思想是将EIP的接受与硬分叉分开。 核心开发者专注于单个 EIP 的审批、实施和测试。 当单个 EIP 被接受时,后续的硬分叉,可以选择包含在这个 EIP 中。 虽然在撰写本文时尚未发现此过程如何被以太坊核心开发人员接受,但柏林硬分叉弃用了 HFM-2070 并采用了 Martin 提出的过程。

决策过程的变化很快就发挥了作用,在柏林硬分叉测试网激活前两周,开发人员就 EIP-2315 的弃用展开了激烈的争论,最终移除了 EIP-2315。 由于采用了新的流程,最后一刻的改动并没有对硬分叉造成太大的影响,最终如期进行。 更详细的可以参考我写的《EIP-2315的移除:以太坊柏林升级前的紧急刹车》

不改变改变

值得一提的是,以太坊的区块 gas limit 并不是共识的一部分。 矿工有权更改区块空间上限,每个区块最多可以变化 0.1%。 不对该值进行硬编码的主要原因是为了避免潜在的攻击。 该值的变化历史可以在 MyCrypto 撰写的研究报告中找到。

EIP深度解析

以太坊1559协议_以太坊1559对散户_以太坊分叉 eip 1559

这些 EIP 对以太坊有什么影响,谁影响了以太坊的决策。 本文整理了以太坊硬分叉中包含的所有EIP(不包括元提案),详见链接。

EIP 在做什么

硬分叉包含的EIP类型主要包括计费模型变更、引入新操作码、难度炸弹、经济模型、预编译、安全考虑等。

计费模式变更

计费模式变化是EIP数量最多的,共计10个,占比25.6%。 通过增减运行代码的单价来平衡gas消耗与实际系统资源的不匹配,可以消除系统被DOS攻击的隐患,或者方便特定类型应用的部署。 有些DOS隐患是由于对系统资源的错误估计造成的。 EIP-150和EIP-160解决了这个问题; 而另一部分DOS隐患则是系统固有的特性。 随着状态数据的增长,访问状态数据的实际资源消耗也随之增长,所以需要周期性调整相应操作码的单价,典型的是EIP-1884(我认为写得最好的EIP之一)。

由于以太坊的状态表示模型,计费模型必须定期调整,这是一个特性,而不是故障。

引入了新的操作码

共有 9 个 EIP 向以太坊虚拟机引入了新的操作码(不包括 EIP-1884),占比 23.08%。 比较有影响的有EIP-7(DELEGATECALL)、EIP-1014(CREATE2)、EIP-3198(BASEFEE)等。

难度炸弹

以太坊1559对散户_以太坊分叉 eip 1559_以太坊1559协议

延迟难度炸弹的EIP共有6个,占比15.4%。 伴随经济模型调整的硬分叉有2次,即新区块奖励的减少。 其中三个分叉的实施仅仅是为了延迟难度炸弹,即名称中带有 Glacier 的硬分叉。 难度炸弹的历史,见原文报道。

经济模型

对经济模型有影响的EIP有4个,2个降低了新区块奖励,1个调整了难度计算模型(EIP-100),引起较大争议的EIP-1559调整了手续费市场.

预编译

有4个EIP预编译一些密码操作,不需要在EVM中执行,提高运行效率。 包括EIP-152、EIP-196、EIP-197、EIP-198。

安全考虑

出于安全原因,EIP 共有 3 个,包括重放攻击保护(EIP-155)、状态前缀树清理(EIP-161)、合约代码大小限制(EIP-170)。

其他

其他EIP还包括网络协议改进(EIP-8)、增加交易执行状态接口(EIP-658)、增加新的交易类型(EIP-2718)等。此外,EIP-2包含了Homestead的所有更新,更复杂。

以太坊1559对散户_以太坊分叉 eip 1559_以太坊1559协议

谁为 EIP 做贡献

共有43人、77人参与了这些EIP的编写,其中11位作者参与了2个(含)以上的EIP。 Vitalik Buterin 参与写作最多,共计 17 篇,占比 43.6%。 Martin Swende和Christian Reitwiessner各参加5次,Alex Beregszaszi和James Hancock各参加3次,其余参加不超过2次。

Martin Swende 是以太坊基金会的安全总监,Go-ethereum 工程师,以 EIP 为核心的硬分叉流程的提出者; Christian Reitwiessner 是 Solidity 语言的发明者。

有趣的是,新的硬分叉流程实施后,EIP 作者的数量发生了显着变化,这可能表明新流程增加了 EIP 的参与度。 在柏林之前,有 28 个 EIP,43 人次,平均每个 EIP 有 1.54 位作者; 柏林之后,11 个 EIP,34 人次,每个 EIP 平均有 3.09 位作者,翻了一番。

总结

本文介绍了以太坊历史上的历次硬分叉,解读了几次硬分叉背后的代表性事件,详细描述了以太坊以EIP为中心的硬分叉决策过程的变化。 文章还深入分析了EIP在历次硬分叉中所扮演的角色以及背后的贡献者。

以太坊即将迎来新时代,往事浮现在脑海。 读者们,你们有什么感受呢?

延伸阅读

#r89548312

@holiman/S1ELAYY7S?type=view