什么是以太坊

什么是以太坊?一千个人有一千个答案,而本文想评论的是最为一致的答案,即以太坊的协议是什么?或用更技能地描述——假如要开发以太坊的客户端(PoW链/ETH1),我需求按照什么规矩?

你没法找到一份标准描述以太坊当时的一致规矩,由于以太坊的协议是经过增量更新来描述的。以太坊黄皮书描述了创世时的完好协议,而每一次协议改动都称为一次硬分叉(当然,也有人尝试用「网络晋级」这个表述),需求一切的客户端更新代码。简而言之,以太坊经过硬分叉来完成协议层的改变,改变的最小单元被称为以太坊改善提案(EIP, Ethereum Improvement Proposal),一次硬分叉包含一组以太坊改善提案。 本文将回忆以太坊的每次硬分叉及其间包含的改善提案,企图展现过去的七年中以太坊终究做了什么。

每次硬分叉介绍

概略

以太坊的每次硬分叉能够经过此页面检查。自 2015 年 7 月30日上线起,共进行了 14 次硬分叉,包含 39 个 EIP(「君士坦丁堡」和「彼得堡」视为同一次)。距离最近的两次硬分叉是 26 天,距离最远的两次则是 490 天。

硬分叉分为「自动晋级」和「被动晋级」。自动晋级指的是开发团队自动对以太坊协议的修正,而被动晋级则是「不得不」采取的行动,以应对潜在的安全性危险。被动晋级至少包含「DAO Fork」、「Tangerine Whistle」、「Spurious Dragon」、「Muir Glacier」、「Arrow Glacier」、「Gray Glacier」,它们或处置黑客偷盗(DAO Fork),或应对 DDOS 进犯(Tangerine Whistle, Spurious Dragon),或只是处置难度炸弹(Muir Glacier, Arrow Glacier, Gray Glacier)。而「自动晋级」大致符合白皮书的规划(至少在命名上),Frontier(Frontier, Frontier Thawing)、Homestead、Metropolis(Byzantium, Constantinople/Petersburg, Istanbul),而 Berlin 和 London 则是以太坊路线图改动后的过渡性晋级。此外,多次自动晋级也包含了推延难度炸弹的选项。

硬分叉是怎么达到一致的呢?虽然关于硬分叉的洽谈并无成文规定,而是按照某种社区管理进行,但其流程发生过一次改动,标志性事情是 Martin Holst Swende 提出了「以 EIP 为中心的晋级」。这种新的硬分叉洽谈机制初次在 Berlin 晋级运用,并防止了一次大型失误,细节将在后文中介绍。

代表性硬分叉解读

每次硬分叉背面蕴含着一些代表性事情,颇具戏剧性,包含 DAO 分叉、上海 DOS、双堡奇缘和拆弹危机。

DAO 分叉

DAO 分叉事情是以太坊发展过程中最为深远的一次事情。由于 the DAO 的智能合约被黑客进犯,约 360 万 ether 被黑客盗走,但有 28 天的冻住时间。在这期间,凭借 Carbonvote ,持币者表达意愿,以太坊基金会决定将这部分资金转移到新的智能合约,允许投资者提款。此次分叉产生了 Ethereum Classic,也引发了很多的社会争辩。

上海 DOS

在 Devcon 2 期间,以太坊中心开发者们齐聚上海,但以太坊网络却遭受了很多的网络流量进犯,形成了拒绝服务(DOS)。由于 EXTCODESIZE 操作码所耗费的实践体系资源远高于进犯者所需付出的手续费,进犯者反复调用该操作码,形成全网大多数节点无法追上最新区块。开发者们一面和谐矿池和全节点启用受影响较小的 Parity 客户端,一面洽谈下降区块 gas(从 5 M 下降至 1.5 M)。终究,凭借 Tangerine Whistle 和 Spurious Dragon 两次硬分叉调整了相关操作码的价格,并做了状态建筑,才缓解了 DOS 进犯的影响。这次硬分叉还带来了后续影响,由于对 EIP-161(归入在 Spurious Dragon 中)的完成不当(Go-ethereum 和 Parity 各自过错地做了完成),形成了一致分叉。

双堡奇兵

你也许会猎奇为什么在 7280000 高度会有「君士坦丁堡」和「彼得堡」两个分叉,仔细观察会发现两者的差别就在于「彼得堡」移除了 EIP-1283。

根据ChainSecurity 的陈述,EIP-1283 会为部分合约引进重入进犯的危险。TrailOfBits 给出了更详尽的分析并提供了或许受影响的合约列表。在硬分叉激活前 32 小时,以太坊基金会发文提示节点晋级或降级以推延君士坦丁堡晋级,随后发布新版本引进彼得堡硬分叉,客户端需求将「双堡」装备在同一块高或禁用君士坦丁堡硬分叉。

拆弹危机

为什么 Muir Glacier 和 Istanbul 两次硬分叉之间只有 26 天,这是由于中心开发者们过错计算了难度炸弹的爆破时间,导致在 Istanbul 中未归入推延难度炸弹的提案。等到发现难度炸弹行将要对网络产生影响时,第 76 次中心开发者会议敏捷承受了 EIP-2384,并归入到 Muir Glacier 硬分叉中。

硬分叉决议计划流程改动

硬分叉是怎么决定的?实践上以太坊长时间缺少成文文档,更多依靠「社会一致」(假如我错了请改正)。EIP-233 企图标准分叉的正式流程,但并未被承受。

虽然本文无法展现以太坊社区对硬分叉决议计划流程的评论,但以太坊的硬分叉决定流程显然发生过改变。在 Berlin 硬分叉之前,开发者首要确认硬分叉的时间,再决定要归入哪些 EIP,确认之后再进行完成和测验。Berlin 前的每次硬分叉都是一个 Meta EIP,例如 Istanbul 硬分叉经过EIP-1679界说(简称 HFM-1679)。

Martin Holst Swende 提出了EIP 为中心的硬分叉流程,其间心观念是将 EIP 的承受与硬分叉剥离,中心开发者聚集于单个 EIP 的认可、完成和测验,当单个 EIP 被承受后,后续的硬分叉可选择归入该 EIP。虽然在写作过程中没有找到该流程是怎么被以太坊中心开发者承受的,可是 Berlin 硬分叉弃用了HFM-2070,而是采用了 Martin 提出的流程。

决议计划流程的改动很快就发挥了效果,在 Berlin 硬分叉测验网激活前两周,环绕 EIP-2315 的废留,开发者们展开了剧烈的争辩并终究移除了 EIP-2315 。由于新流程的采用,最后时间的改动并未对硬分叉形成太大影响,并终究按期进行。更多细节可参阅自己编撰的《移除EIP-2315:以太坊柏林晋级前的紧迫刹车

不是改动的改动

值得一提的是,以太坊的区块空间上限(Block gas limit)并非一致的一部分。矿工有权更改区块空间上限,每个区块的上限改变最多为 0.1%。不去硬编码这个数值首要是为了防止潜在的进犯危险。该数值改变的历史可参见 MyCrypto 编撰的研究陈述

EIP 深入分析

这些 EIP 对以太坊终究形成了什么影响,又是谁影响着以太坊的决议计划呢。本文整理了以太坊硬分叉中归入的一切 EIP(不包含元提案),详见链接。https://primitiveslane.notion.site/cbd45cf0289c414b86715b8a9e71b28e?v=838baf2ac3a442a6b3fa03e58c5dc0ae

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) 等。

难度炸弹

共有 6 个 EIP 在推延难度炸弹,占 15.4 % 。有 2 次硬分叉伴随着经济模型的调整,即下降新区块奖赏。其间有 3 次仅为了推延难度炸弹而施行的分叉,即名字中带有 Glacier 的硬分叉。有关难度炸弹的历史,可见原语里弄的陈述

经济模型

有 4 个 EIP 对经济模型有影响,2 个下降了新区块奖赏,1 个调整了难度计算模型(EIP-100),此外引发较多争议的 EIP-1559 调整了手续费商场。

预编译

有 4 个 EIP 将一些密码学操作预编译,因此无需在 EVM 中履行,提高运转功率。包含 EIP-152, EIP-196, EIP-197, EIP-198。

安全考虑

有 3 个 EIP 是出于安全考虑的,包含重放进犯维护(EIP-155),状态前缀树清理(EIP-161),合约代码巨细约束(EIP-170)。

其它

其它 EIP 还包含网络协议改善(EIP-8),增加交易履行状态接口(EIP-658),增加新的交易类型(EIP-2718)等。此外,EIP-2 包含了 Homestead 的一切更新,较为杂乱。

谁为 EIP 做奉献

共有 43 人,77 人次参加了这些 EIP 的编撰,其间参加 2 个以上(含) EIP 的作者有 11 个。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 的参加度。Berlin之前,28 个 EIP,43 人次,均匀每个 EIP 有 1.54 个作者;Berlin之后,11 个 EIP,34 人次,均匀每个 EIP 有 3.09 个作者,增加了一倍。

总结

本文介绍了以太坊历史上的每次硬分叉,解读了几次硬分叉背面的代表性事情,并详细描述了以太坊硬分叉决议计划流程向 EIP 为中心的改变。文章还深入分析了每次硬分叉中的 EIP 所发挥的效果以及他们背面的奉献者。

以太坊行将迎来新的时代,往事涌上心头,读者朋友,你有何感触?

此时快讯

【2022-09-15 02:44】【数据:以太坊总量的11.3%已参与信标链质押】9月15日消息,BeaconScan数据显示,当前信标链质押以太坊总量达到1362万枚,占以太坊1.2亿枚总供应量的11.3%。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注