以太坊不易的开发升级之路(君士坦丁堡升级)


【前言】

曾在12月份的时候介绍过《以太坊的硬分叉升级——君士坦丁堡》的具体内容,本次旨在《捋一捋以太坊社区在做啥》的基础上进一步介绍一下以太坊升级的模式和本次君士坦丁堡升级里面影响颇大的难度炸弹推迟12个月和出块奖励从3ETH减少到2ETH的来龙去脉。

【君士坦丁堡分叉】

2015年7月30日下午3时26分(UTC),以太坊第一个创世区块诞生,在以太坊的整个生命周期里,代码的迭代也在同时进行以提高系统性能,主要分成四个阶段:Frontier(前沿)、Homestead(家园)、Metropolis(大都会)和Serenity(宁静),前三个阶段以太坊共识算法采用工作量证明机制(POW),在第四阶段计划切换至权益证明机制(POS)。

第一阶段:Frontier(前沿)阶段始于2015年7月30日,该阶段用途是:将挖矿和交易所交易运行起来,建立一个让人们可以在里面测试分布式应用(DApps)的应用。

第二阶段:2016年3月14日,以太坊发布Homestead(家园),与前沿相比,家园没有明显的技术性变革;以太坊提供了图形界面的钱包,易用性得到改善,普通用户也可以方便地体验和使用以太坊。

第三阶段:Metropolis(大都会)旨在将以太坊的共识算法将会从工作量认证(PoW)转变成工作量认证和权益认证(PoS) 的混合共识算法,以提高整个以太坊区块链效率、降低费用,并最终过渡到第四阶段的纯权益共识算法。它实现起来较为复杂,所以又分成拜占庭(Byzantium)君士坦丁堡(Constantinople)两个硬分叉升级。2017年10月16日,以太坊按照原定计划于第437万个区块高度进行了拜占庭的硬分叉;

EIP140:增加‘REVERT’操作符,允许处理错误不需要花费掉所有的gas

EIP658:现在交易接收方可以包括一个状态字段,用以指出交易成功还是失败

EIP196 & EIP197 :在alt_bn128和配对检查上增加椭圆曲线和标量乘法,允许ZK-Snarks等

EIP 198:支持大数模幂,实现RSA签名验证和其它加密应用。

EIP211 :支持可变长度返回值

EIP214:增加‘STATICCALL’操作符,允许对其它合约进行非状态改变调用

EIP100:修改难度调整公式,将叔块计算在内

EIP649:冰河期/难度炸弹延期1.4年,区块奖励从5个以太坊降到3个以太坊

君士坦丁堡硬分叉升级原本最初定于今年11月份,最终确认为第7,080,000区块高度,根据当前出块速度大约在2019年1月16日左右(区间在14-18日),具体变化涉及5个EIP:EIP145,EIP1014,EIP1052,EIP1283,EIP1234。其中:

EIP 145给EVM增加移位相关指令,包括左移SHL,逻辑右移SHR,算术右移SAR;

EIP 1014产生合约地址的一种新规则,与状态通道有关。规则为keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:];

EIP 1052为EVM增加EXTCODEHASH指令,这个指令可以获得一个合约bytecode的keccak256的hash值;

EIP 1283修改EVM的SSTORE指令gas计算方式,预计会减少许多合约的gas消耗,需要硬分叉支持;

EIP1234:将是潜在最有争议的提案,也需要硬分叉支持,它包括难度炸弹(Difficulty Bomb)协议推迟12个月和挖矿奖励调整,难度炸弹使挖矿难度随时间推移越来越高,挖矿奖励调整将挖矿奖励从3个降低到2个

【难度炸弹是个啥?为啥要降低收益?】

第二阶段Homestead(家园)中,100%采用PoW挖矿,但是挖矿的难度除了因为算力增长而增加之外,还有一个额外的难度因子呈指数级增加,这就是难度炸弹(Difficulty Bomb)为了防止PoW转PoS的过程中矿工联合起来抵制,从而分叉出两条以太坊区块链,难度炸弹被引入。难度炸弹指的是计算难度时除了根据出块时间和上一个区块难度进行调整外,加上了一个每十万个区块呈指数型增长的难度因子。计算公式如下,最右侧加粗的相加项即为难度炸弹:

block_diff=parent_diff+parent_diff/2048*max(1-(block_timestamp-parent_timestamp)/10, -99)+int(2^((block.number/100000)-2))

随着区块高度的增加,呈指数增长的难度因子比重将会显著提高,使得出块难度大大增加,矿工将难以挖出新的区块,这也将导致平均15秒的出块时间越来越长,每天总出块数也会下降,随着出块越来越艰难,到最后区块将被完全冻结,这个过程又被称作“冰川时代”(Ice Age),有了这个预期,一直使用PoW挖矿的矿工会逐渐发现转移到PoS上挖矿收益会更好,从而主动放弃PoW挖矿,将已购入的矿机做为沉没成本处理掉而不是发起分叉行动,同时难度炸弹也将在第三阶段Metropolis(大都会)时解除

然而当真正进入到Metropolis(大都会)阶段时转换到权益证明(PoS)的开发时间远比原计划的要长,工作量证明(PoW)仍然是以太坊当前挖矿主要的机制,此时以太坊的平均出块时间为15秒,并因为难度炸弹的作用开始出现增长趋势。为了不堵塞交易,维持系统稳定运行,在PoS还未上线时,难度炸弹拆除需要被相应地延迟,实现方式是将挖矿难度按照回退300万个区块的高度去计算达到维持平均15秒的出块速度,同时我们会发现,这样操作后ETH的供应量会明显超出按原本难度炸弹时间表规划的供应量,这会导致通货膨胀,降低ETH的价值,为了使ETH的供应量与原本计划的数量相当,于是需要减少每个区块的奖励拜占庭(Byzantium)升级就将原本的5个ETH减少为3个ETH,叔块的奖励也将相应减少。这样冰川时代(Ice Age)到来时间就被推迟了4200万秒,大约是1.4年,预计到2018年年底的出块速度在平均30秒(EIP649)。

fake_block_number = max(0, block.number - 3_000_000) if block.number >= BYZANTIUM_FORK_BLKNUM else block.number

new_block_reward = 3_000_000_000_000_000_000 if block.number >= BYZANTIUM_FORK_BLKNUM else block.reward

new_uncle_reward = (8 - k) * new_block_reward / 8

new_nephew_reward = new_block_reward / 32

然而,随着权益证明(PoS)的开发进一步滞后,这次君士坦丁堡(Constantinople)升级不得不再一次重复拜占庭的操作,将难度炸弹解除再推迟12个月,实现方式是将挖矿难度按照回退500万个区块的高度。,并进一步从3个ETH减少为2个ETH,叔块的奖励也将进一步减少(2E18 wei, or 2,000,000,000,000,000,000 wei, or 2 ETH)。这样,冰川时代(Ice Age)也就被顺延了2900万秒,大约是12个月,预计到2019年冬季时的出块速度在平均30秒(EIP1234)

fake_block_number = max(0, block.number - 5_000_000) if block.number >= CNSTNTNPL_FORK_BLKNUM else block.number Adjust Block, Uncle, and Nephew rewards

new_block_reward = 2_000_000_000_000_000_000 if block.number >= CNSTNTNPL_FORK_BLKNUM else block.reward

new_uncle_reward = (8 - k) * new_block_reward / 8

new_nephew_reward = new_block_reward / 32 

【总结】

综述,以太坊Frontier(前沿)、Homestead(家园)、Metropolis(大都会)和Serenity(宁静)四个阶段的定位和升级策略在一开始就是计划好的,最终实现由工作量证明机制(POW)切换至权益证明机制(POS),然而权益证明(PoS)的开发却没有计划中的那么顺利,于是Metropolis(大都会)阶段不得不分成两个阶段来实施,同时减缓难度炸弹对ETH生态的影响,我们可以把以太坊整个升级之路用下表表示:

第一阶段Frontier(前沿):实验阶段,测试阶段;

第二阶段Homestead(家园):大规模生态建设,同时考虑第三阶段由PoW转向PoS过渡,引入难度炸弹并计划下一阶段PoS过渡成功后拆除难度炸弹;

第三阶段上半场Metropolis(大都会)——拜占庭(Byzantium):PoS开发滞后,拆除难度炸弹推迟1.4年,降低区块奖励由5ETH减少为3ETH; 

第三阶段下半场Metropolis (大都会)——君士坦丁堡(Constantinople):PoS开发进一步滞后,拆除难度炸弹推迟12个月,降低区块奖励由3ETH减少为2ETH; 

第四阶段Serenity(宁静) :成功切换成POS

不难看出,Metropolis (大都会)在某种意义上开发是远远落后于计划的而且到目前为止也是没有完成既定目标的,按照最新ETH2.0的规划路线:


ETH2.0主体内容

笔者估计Serenity(宁静)也会再细分成上下半场,上半场将完成Metropolis (大都会)未完成的工作同时实现ETH2.0的目标:Casper FFG + Sharding = shasper,主链PoW + 信标链(Beacon Chain )PoS,这是一个混合PoW/PoS共识机制;


ETH 2.0架构图

下半场将完成Serenity(宁静)成功切换成POS的规划(Casper CBC?),当然也存在最终以太坊就是混合PoW/PoS共识机制的可能,以主链PoW做为安全信任链,将信标链PoS作为可扩展性链的最终状态,这也是符合分层思想的(参见《区块链技术可扩展方案分层模型》《【火币区块链产业专题报告】区块链技术可扩展方案分层模型》

当然,ETH2.0发展之路也很长,并不是2019年就能看到希望的,的确也是非常熬人的,如下图所示,

ETH2.0草版时间规划

最后,笔者断定君士坦丁堡不会出现分叉问题,但是会有不少没名气的项目来蹭热度,说不定就蹭出名气了呢?据笔者了解:蹭君士坦丁堡升级热度的已经有两个糖果项目了,一个是准备2019年1月11日分叉的Ethereum Classic Vision(ETCV),网站为https://ethereumcv.io/,1个ETH将获得3个ETCV;另一个是准备2019年1月12日分叉Ethereum Nowa (ETN),分配比例为1:1,网站为http://ethereum-nowa.com/,同时支持1c0模式,也是醉了!



应大家建议开通微信公众号方便交流,目前公众号已与简书同步更新。喜欢的朋友可以关注,以后仍会以简书为主,微信公众号同步的方式,可以搜索公众号名“Putin学习区块链”或者“PutinBlockchain”,二维码如下:

推荐阅读更多精彩内容