资讯

以太坊硬分叉简史

来源 | MyCrypto
作者 | Luit Hollander
2020年5月4日,以太坊区块高度达到 1000 万。在过去五年中,计算1000万个区块的总算力为15 zettahashes (即15*10^21)。然而一些现代显卡如GTX 1080 Ti需要花费1.5亿年以上才能完成这项工作。

在我们迈向这个里程碑的过程中,发生了多次为大家所知的分叉。虽说分叉指的是新链与主链分离,但是旧链通常会被遗弃,因而人们也把分叉和“网络升级”联系起来。

现在,我们就一同回顾以太坊迄今为止经历的分叉,看看现在的以太坊主网是如何发展而来的。

以太坊历次分叉的日期和区块高度

 

测试版本:奥林匹克—#0

2015年5月9日,以太坊基金会发布奥林匹克:边疆测试版 (Olympic: Frontier pre-release)。

奥林匹克的发布作为概念证明,其赏金项目提供总额为25,000 ETH的奖励,用于奖励发送最多交易的用户、处理最多交易的矿工,或是用于激励矿工发现一些重大问题,如在Go和C++客户端之间发起一个 (实质性的) 分叉。

该版本历时14天。从技术上来说,奥林匹克完全不同于以太坊主网,因而不应该被列入硬分叉名单里。尽管如此,边疆版本的创世区块仍出自奥林匹克这一阶段。

 

边疆—#0

边疆 (Frontier) 的发布代表着以太坊“Eth 1.0”首次官宣。该次发布为创世区块的生成,区块里打包了在官方预售时用户购买ETH的8893笔交易。

总计预挖七千两百万ETH,其中将近一千两百万ETH为以太坊发展基金所有。

🔻 边疆解冻

在边疆诞生之初,每个区块的gas上限被硬编码为5000。由于每笔交易至少需花费21,000gas,因此彼时的以太坊区块链中只能进行挖矿操作。下面引用Ethereum.org发表的一篇博文

“‘解冻 (thawing)’阶段使得矿工们和早期应用者有序地地开始他们的挖矿工作和配置其客户端。几天之后 (或许3-4天,视情况而定),我们将会对软件进行一次略微的更新调整,所有客户端都需要安装更新。更新后,每个区块的Gas限制提高到3百万,这只是个初始数值,可以根据矿工的默认设置进行增减。”

主网发布了5天之后,gas限制变更为一个默认的目标数值3,141,592。

然而,由于矿工们在每个区块中,每次只能在前一个区块的基础上将gas限制提高或减少1024,因此这一改变需要一个过程。

区块#46,147内打包了以太坊的第一笔交易,价值为31337 wei。

以太坊第一笔手动交易 来源:etherscan.io

 

冰河时代— #200,000

在区块链领域,“difficulty” (难度) 这个词用以描述一台计算机需要花多少算力来生产下一个区块。

区块难度 (diffifulty) 会自动重新调整以稳定区块时间。在一个特定的时间段里,挖出的区块越多,区块难度越大,反之亦然。

为了确保另一硬分叉点在以太坊首次发布的16个月内从PoW向PoS过渡,这导致了区块难度呈指数增长,意味着大概一年后生产区块的速度大大减慢。

这之后,以太坊网络将进入“冰河时代”,在这一阶段,算力难度呈指数增长,直到矿工难以再生产新区块。

来源: etherscan.io.

上图描述了生产一个区块所需要的平均时间。如图所示,三个峰值意味着冰河时代开始来临。而每当一个峰值结束,便意味着有一个新的硬分叉出现,从而延迟了冰河时代。

虽然冰河时代需要中断几次,向PoS过渡的努力从不停歇。

 

家园— #1,150,000

家园是第二个主要的计划版本,包括三条以太坊改进提案 (EIPs)

  • EIP 2: Homestead硬分叉升级
  • EIP 7: DELEGATECALL
  • EIP 8: Homestead P2P开发兼容要求

 

DAO硬分叉— #1,920,000

2016年6月17日,the DAO合约上出现漏洞并被攻击者乘虚而入,导致约三百六十万ETH被盗取。根据该合约的设计,这些资金需要被冻结28天才能成功被转移。

如果没有采取任何措施的话,黑客会拥有ETH总额的4.4%。

为解决这个问题,备受争议的EIP 779被提出来,其目的在于修改攻击者的锁定合约。如此一来,ETH持有者便可以从the DAO合约上提出其ETH。

7月20日,以太坊大部分成员支持实行硬分叉,然而少数社区成员持反对意见,并决定实行硬分叉,分叉后的原链改名为以太坊经典 (Ethereum Classic)

 

橘子口哨 (Tangerine Whistle)— #2,463,000

橘子口哨是一次计划外的次要分叉,仅包括一条EIP-150。该提案对一些操作码 (opcodes) 重新定价,提高拒绝服务攻击 (denial-of-service) 的成本,以防止此类攻击。

 

伪龙 (Spurious Dragon)— #2,675,000

2016 年 11 月 22 日发生了另一次计划外的硬分叉“伪”,包括四项提案,用以解决一些攻击问题:

  • EIP 155: 简单重放攻击保护
  • EIP 160: 提升EXP操作码的费用
  • EIP 161: 状态树清理 (不变量保持替代)
  • EIP 170: 调整智能合约的最大字节数限制

 

拜占庭 (Byzantium)—#4,370,000

以太坊计划的第三阶段为“大都会”(Metropolis),而拜占庭是该阶段的前半部分。

其中包括许多更新:增加4个新操作码和4条预编译;减少区块奖励;推迟冰河时代难度炸弹 (difficulty bomb)。

以下是拜占庭硬分叉包含的完整EIP:

  • EIP 100: 将难度调整更改为包括块在内的目标平均区块时间
  • EIP 140: 恢复指令
  • EIP 196: 对椭圆曲线alt_bn128上的加法和纯量乘法 (addition and scalar multiplication) 预编译合同
  • EIP 197: 对椭圆曲线alt_bn128上的最佳配对 (optimal ate pairing) 预编译合同
  • EIP 198: 
  • EIP 211: 新操作码:RETURNDATASIZE和RETURNDATACOPY
  • EIP 214: 新操作码STATICCALL
  • EIP 649: 延迟大都会难度炸弹以及减少区块奖励
  • EIP 658: 在收据中嵌入交易状态码

 

君士坦丁堡/圣彼得堡 (Constantinople / St. Petersburg )— #7,280,000

大都会的第二个阶段便是君士坦丁堡硬分叉,分叉发生于区块高度7,080,000,包括以下五项EIPs:

  • EIP 145: 以太坊虚拟机 (EVM) 上的按位转换指令
  • EIP 1014: Skinny CREATE2
  • EIP 1052: EXTCODEHASH 操作码
  • EIP 1234: 延迟君士坦丁堡难度炸弹以及调整区块奖励
  • EIP 1283: 不需要dirty maps的SSTORE净gas计量 (net gas metering)

然而,在该分叉即将执行前32个小时,发现了EIP-1283带来的意外影响,即使许多已经部署在链上的合约面临重入攻击 (reentrancy attack)。于是,君士坦丁堡硬分叉推迟执行。

因此,EIP-1283从计划中移除,该分叉调整至区块高度7,280,000上进行。接着,君士坦丁堡分叉改名为圣彼得堡分叉

 

伊斯坦布尔 (Istanbul ) — #9,069,000

有了拜占庭分叉和君士坦丁堡前面这两个分叉,伊斯坦布尔分叉这个名字对大家来说也就不那么奇怪了。

此分叉更新了两条操作码、一条预编译和一些gas上的调整。

  • EIP 152: 添加BLAKE2压缩函数 (compression function) `F`预编译
  • EIP 1108: 减少alt_bn128预编译gas成本
  • EIP 1344: ChainID 操作码
  • EIP 1884: 对trie-size-dependent操作码重新定价
  • EIP 2028: 减少交易数据gas成本
  • EIP 2200: 对净gas计量结构化定义 (Structured Definitions for Net Gas Metering)

 如果想要了解该分叉的详细内容,可以阅读我另一篇文章“以太坊伊斯坦布尔分叉—技术讲解”。

 

缪尔冰川 (Muir Glacier) — #9,200,000

缪尔冰川分叉只包含EIP-2384,目的是再一次推迟难度炸弹。

 

宁静 (Serenity) / ETH 2.0 — ?

以太坊线路图的下一阶段便是宁静,也被称作ETH2.0。这次更新将包括加入PoS信标链、分片链、eWASM等等。

想要了解更多关于Eth 2.0的进程,请阅读由ConsenSys发布的文章“Serenity路线图”[1] 。(译者注:此篇路线图略微过时,读者们可以阅览此文https://news.ethereum.cn/wnie2-2020-3-20/了解Eth2.0的最新发展)。

ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ethereum.cn。