编者注:原文发表于 2019 年 5 月 13 号。初版译本在此处。修改很少,增补了最近几次硬分叉的信息。

纵观全局,区块链技术出现的时间并不久。尽管区块链相关的基本概念(密码学、去中心化、点对点网络和交易)已经被研究了数十年,但直到 2008 年比特币诞生之后,人们才相信这些概念确实可以组合到一起、创造出可用的产品。尤其是以太坊,直到 2015 年才以一种公开的、可用的面貌出现在人们的视野中。尽管预期的发展时间线和具体细节有所变化,以太坊仍坚持按照计划推进,不断升级协议,以确保提升可用性、安全性、功能性以及去中心化程度。

随着今年 2 月君士坦丁堡升级的完成,以太坊也就踩在了 Serenity(也被称为以太坊 2.0)阶段的门槛上,只待再经过一系列硬分叉和阶段性升级(包括 “以太坊 1.x”)便可实现。然而,为了更好地理解以太坊 2.0 的目标,我们先要回望一下当初是从何处启航。这里提供了一份以太坊大事记,回顾了以太坊历史上重要的计划内(外)的硬分叉和升级,为下一阶段的发展做准备。

Olympic | 2015 年 5 月 9 日

以太坊区块链于 2015 年7 月正式公开上线。而在这之前的临门一脚是 Olympic——第 9 个也是最后一个开放的测试网,用以进行概念验证(PoC),让开发者预先探索以太坊区块链发布后的运行情况。Vitalik 宣布将发放共计 25000 枚 ETH 来奖励对网络进行压力测试的开发者们。测试要求很明确:尝试让网络超负荷,并 “疯狂操作网络状态”,从而了解协议将如何处理流量过高的情况。开发者需要测试四个方面:交易动作、虚拟机运行、挖矿机制以及一般惩罚机制。

Frontier | 2015 年 7 月 30 日

经过几个月的压力测试后,以太坊网络已经做好了进正式主网发布的准备。7 月 20 日,以太坊的创世块被挖出,社区开始逐渐扩大。在 Frontier 发布前几个月,Vinay Gupta 发表了一份说明,阐述了以太坊的发布过程。慷慨激昂的陈词中不乏对以太坊潜在用户的警示,Gupta 表示 Frontier 是 “最原始形态” 的以太坊,开发者们应当谨慎行事。就在 Frontier 发布的前几天, Stephen Taul 也像 Gupta 一样对开发者发出了提醒:“与美国拓荒潮期间那些勇敢的开拓者们一样,以太坊社区的参与者将发现巨大的机会,同时也将面临许多挑战。”

Frontier 协议包含以下几个关键特性:

区块奖励:当矿工们在以太坊区块链上成功挖到一个区块时,他们将收到以 ETH 发放的奖励。在 Frontier 阶段,矿工的区块奖励是每区块 5 ETH。Gas:在 Frontier 发布后的初期,每个区块的 Gas 上限被硬编码为 5000 gas。说白了,这就意味着网络上不会有什么大动作。这样就留出了一段缓冲期,以便矿工开始在以太坊上工作,并让早期用户安装客户端。几天后,该 Gas 上限自动解除,网络可以按照计划开始处理交易和智能合约。Canary 合约:Canary 合约被纳入了 Frontier ,用以告知用户哪些链已遭受或易遭受攻击。Canary 合约被会赋予 0 或 1 的值。如果合约被赋值 1,客户端就能识别出这是一条出错的链,并在挖矿时避开这条无效链。本质上来说,Canary 合约的这些功能使得以太坊核心开发团队在网络出现问题时能够暂停网络的运行。在以太坊早期阶段,Canary 合约是一个极度中心化却又不可或缺的保护机制。可用性:所有开发者的操作均通过命令行来执行,因为没有图形用户界面。整个网络是可用的,但用户界面非常粗糙,只有熟悉以太坊并具备操作经验的人才有能力使用。

Homestead | 2016 年 3 月 14 日

Homestead 升级是以太坊网络的第一个硬分叉计划,于 2016 年 3 月 14 日在第 1,150,000 个区块上开始实施。总的来说,Homestead 升级主要包括对以太坊的三大重要改进措施。首先,它移除了 Canary 合约,去除了网络中的中心化部分。其次,它在以太坊的合约编程语言 Solidity 中引入了新代码。最后,它引入了 Mist 钱包,让用户能持有/交易 ETH 并编写/部署智能合约。

Homestead 升级是最早实施的以太坊改进提案(EIP)之一。EIP 指的是向社区提出的建议,一旦它们得到认可,就会被纳入网络升级中。Homestead 升级包含三个 EIP:

EIP-2:Homestead 核心升级

EIP 2.1:将通过交易创建智能合约的成本从 21000 Gas 提高到 53000 Gas。之前,通过合约来创建合约(推荐办法)的成本比通过交易创建合约的成本更高。由于通过交易创建合约的 gas 成本提高,EIP 2.1 激励用户重新采用通过合约来创建合约的方法。

EIP 2.2:“所有 s 值大于 secp256k1n/2 的交易签名被视为无效。预编译的 ECDSA 复原合约保持不变并接受较高的 s 值;在有合约需要恢复旧的比特币签名之类的情况下,这一功能就派上用场了。” [来源]

EIP 2.3:明确规定了,如果一个合约没有收到足够的 Gas 来完成整个操作过程,合约创建将会“失败”,而非创建一个空白合约,使得交易可能的输出结果由原来的 [成功]、[失败] 或 [空] 变为 [成功] 或 [失败]。

EIP 2.4:取消了对用户创建难度值较高的区块的激励,从而提高了网络挖到区块的概率。这一升级将出块时间稳定在 10 秒到 20 秒,并将整个网络恢复到大约 15 秒的目标出块时间。

EIP-7

“在 0xf4 中新增了一个操作码,DELEGATECALL。该操作码与 CALLCODE 类似,不同之处在于它将发送方和数值从父作用域发送到子作用域,也就是说,被创建的调用与原始调用拥有相同的发送方和数值。”

EIP-8:面向未来的升级

EIP-8 是一项着眼于未来的网络升级计划改进提案。这一改进确保以太坊网络上所有的客户端软件都能适应未来的网络协议升级。

DAO 分叉 | 2016 年 7 月 20 日

除了计划内的以太坊升级和硬分叉之外,还有一次计划外的 DAO 事件值得被铭记。在 2016 年,一个

名为 The DAO 的去中心化自治组织

通过代币发售筹集了 1.5 亿美元资金。在6 月,The DAO 被黑客攻击,有价值 5000 万美元的 ETH 被一位不知名的黑客劫走。以太坊社区的大多数参与者决定实行硬分叉,恢复钱包中被盗的 ETH 并修补漏洞。然而,硬分叉没有得到社区内所有参与者的一致认可,还有部分参与者继续在那条 原始 链上挖矿并交易。未恢复被盗 ETH 的 原始 链被称为

以太经典(ETC)久而久之,其安全性逐渐降低,挖矿难度也在下降

。社区的大部分参与者以及核心开发者则继续在分叉链上工作 —— 被窃的 ETH 回到了它们原本的持有者手中 —— 这就是我们现在熟知的以太坊区块链。

大都会:拜占庭分叉 | 2017 年 10 月 16 日

以太坊路线图的下一步被称为大都会(Metropolis),它将分为两个阶段进行:拜占庭(Byzantium)和君士坦丁堡(Constantinople)。拜占庭分叉于 2017 年在 437 万区块高度上激活,包含了以下 9 个 EIP:

EIP 100

调整区块难度评估公式,将叔块纳入参考范围。新的公式使得货币增发率变得更加稳定,并确保无法通过操纵叔块来强制提高发行率。

EIP 658

对于拜占庭硬分叉升级后的区块,交易收据内会包含一个状态字段来标志成功(赋值为 1)或失败(赋值为 0)。

EIP 649

“难度炸弹”是这样一种机制:一旦被激活,每新挖出一个区块所需的成本(即难度)都会提高,直到难度达到不可能挖出新的区块为止。一旦达到这个难度,以太坊网络将 “冻结”。难度炸弹最初于 2015 年 9 月被纳入以太坊网络,旨在帮助以太坊网络从 PoW 转型为 PoS。一旦实行了 PoS 机制,矿工们从理论上来说依然可以选择支持旧的 PoW 链,这就会导致社区分裂并产生两条独立的链 —— 一条由权益所有者(staker)维护,另一条由矿工维护。为了防止这种情况发生,难度炸弹机制应运而生,它会让挖矿效率变得越来越低,最终确保整个网络完成向 PoS 机制的过渡,而不会出现硬分叉的情况。在该提案中,难度炸弹(也称冰河世纪)将推迟一年,此外区块奖励从 5 ETH 降至 3 ETH。

其余拜占庭分叉 EIP 的具体内容(140、196、197、198、211、214)

大都会:君士坦丁堡 | 2019 年 2 月 28 日

大都会升级的第二阶段君士坦丁堡(Constantinople)原定于 2019 年 1 月中旬在第 708 万个区块高度上线。1 月 15 日,一家名为 ChainSecurity 的独立安全审计公司发布了一份报告,指出五个主要的系统升级中有一个会让攻击者有窃取资金的机会。针对该报告提出的问题,以太坊核心开发者和社区的其他成员投票决定暂缓升级,直到该安全问题得到解决。在 1 月末,核心开发者们宣布将于 728 万区块高度上激活升级。2 月 28 日, 728 万区块高度上执行了君士坦丁堡硬分叉。以太坊网络目前正处于君士坦丁堡阶段。

EIP 145:按位移动指令

按位移动指令被添加至以太坊虚拟机(EVM)。这些指令让二进制信息中的比特可以以动到左边和右边。这一改进意味着智能合约的按位移动操作将便宜 10 倍。

EIP 1052:智能合约验证

智能合约能够通过检查另一个智能合约的哈希值来验证其本身。在君士坦丁堡分叉之前,智能合约必须提取另一个合约的完整代码才能进行验证,这种验证方式将耗费大量的时间和资源。

EIP 1014:CREATE2

状态通道的可实施性变得更强。状态通道是一种基于链下交易的以太坊扩容方案。

EIP 1283:SSTORE

降低 SSTORE 操作所需消耗的 Gas 成本。这一举措使得交易中多个更新操作的成本更低。

EIP 1234:区块奖励以及暂缓难度炸弹

由两部分组成:减少区块奖励以及暂缓难度炸弹。

区块奖励减少矿工得到的出块奖励从每区块 3 ETH 降至 2 ETH。这一举措被称为 “1/3 奖励削减(Thirdening)”。

难度炸弹暂缓EIP 1234 将难度炸弹的激活再次推迟了十二个月,届时将再一次进行投票。

前景:伊斯坦布尔(Istanbul)以及宁静(Serenity)

展望未来,“宁静(Serenity)” 将是以太坊区块链的最后阶段,不过要先经历伊斯坦布尔分叉和 “以太坊 1.x.” 阶段。伊斯坦布尔硬分叉将主要围绕关于 ProgPoW 的决策。Serenity 将完成从 PoW 到 PoS 的转化,以及其他一些重要升级。其中尤其要关注的是:信标链和分片概念的引入,以及用 eWASM(Ethereum-flavored Web Assembly)替代以太坊虚拟机(EVM)。Serenity 的所有升级将分阶段进行,与此同时,以太坊 1.x 也将不断完善,从而确保原 PoW 链的后续运行。我会在下一篇文章中讲解后续硬分叉计划和 Serenity ,敬请关注。

编者注:遗憾的是,作者在此处期望的未来,到本次校对(2021 年 7 月)为止,尚未成为现实。2020 年底,信标链正式推出,ETH 持有者可以在以太坊区块链上把资金锁定,从而成为信标链验证者、参与 PoS 的共识过程。但是,信标链还不具备任何的功能,甚至信标链验证者的奖励也无法转账,资金也无法退出。信标链仍需经历一个叫做 “Merge(合并)” 的过程,才能真正用于承载当前由 PoW 共识机制来承载的区块链上活动。(“Merge” 的实施尚无明确的时间表。乐观估计可能在明年的第一季度。)此外,在原文发表之后,以太坊区块链又经历了多次硬分叉,我们把这几次硬分叉的信息,增补如下:

“伊斯坦布尔” 升级伊斯坦布尔分叉的激活高度为 9, 069, 000 号区块,激活时间是 2019 年 10 月 8 号(UTC 时间)。升级内容:EIP-152:增加 BLAKE2 压缩函数 F 预编译功能增加在以太坊合约内验证 Equihash PoW 的功能。这就开启了 Zcash 和以太坊之间中继交易以及原子化互换交易的可能。EIP-1108:降低 alt_bn128 曲线的预编译 Gas 消耗量让 zk-SNARKs 运算变得更便宜,让更便宜的扩展和隐私应用能开发出来。例如 Matter labs、Aztec Protocol、Rollup 以及 Zether。EIP-1344:ChainID 操作码为合约增加一种跟踪自己所在以太坊链的方式,好让合约(尤其是 Layer-2 方案如 状态通道 和 Plasma 所用的合约)跟踪正确 Layer-1 链,尤其是在硬分叉期间。EIP-1884:给与默克尔树大小相关的操作码重新定价改变了一些 EVM 操作码的 Gas 耗用量,以防止滥发交易攻击并更好地平衡每个区块的计算开销。在以太坊网络上,一个操作所需耗用的 Gas 数量往往跟这个操作所需付出的计算开销相匹配。该 EIP 提高了一些计算密集但当前的 Gas 耗用量较少的操作码的耗用量,即 SLOAD、BALANCE 以及 EXTCODEHASH。EIP-2028:降低交易数据 Gas 消耗量通过降低在交易内调用数据的 Gas 消耗量来让 zk-SNARKs 和 zk-STARKs 的应用更便宜。这样做还可以帮助 Layer-2 解决方案提高吞吐量。Starkware 就是一个例子。EIP-2200:改变 SSTORE 操作的 Gas 净耗用量计量方式改变 EVM 数据存储操作的 Gas 耗用量计量方式,让合约能够引入一些新的函数,比如重入锁(re-entry lock)以及 same-contract multi-send。见:https://ethfans.org/posts/istanbul-upgrade-eip-explainer

“缪尔冰川” 升级伊斯坦布尔分叉的激活高度为 920 万号区块,激活时间是 2020 年 1 月 2 号(UTC 时间)。升级内容:EIP 2384将难度炸弹推迟 400 万个区块,约 611 天。见:https://ethfans.org/posts/ethereum-muir-glacier-upgrade-announcement

“柏林” 升级伊斯坦布尔分叉的激活高度为 1224 4000 号区块,激活时间是 2021 年 4 月 15 号(UTC 时间)。升级内容:EIP-2565:ModExp Gas Cost降低使用 ModExp (0x00..05) 预编译模块的 Gas 消耗量EIP-2929:提高状态访问操作码的 Gas 消耗量提高一笔事务(transaction)中首次使用 SLOAD、*CALL、BALANCE、EXT* 以及 SELFEDESTRUCT 的 Gas 消耗量EIP-2718:标准化的事务信封引入一种新的、作为信封的事务类型,从而能够更好地支持多种事务类型EIP-2930:可选的访问列表加入一种新的事务类型,该种类型的事务会包含一个访问列表:该事务计划访问的地址和存储项键的列表。这可以在一定程度上缓解由 EIP-2929 带来的 Gas 消耗量增加。详见:https://ethfans.org/posts/the-berlin-upgrade-overview

即将到来的 “伦敦” 升级时间未确定。内容已确定:EIP-1559:ETH 1.0 链的手续费市场改革EIP-3198:BASEFEE 操作码EIP-3541:拒绝以 0xEF 字节开头的新合约EIP-3554:难度炸弹推迟到 2021 年 12 月 1 日详见:https://ethfans.org/posts/london-upgrade-overview