区块链技术与应用(北大公开课,肖臻)-ETH 难度调整

20. ETH 难度调整

1. 以太坊难度

BTC每隔2016个区块就会重新调整一次挖矿难度来保证平均出块时间是10min。以太坊的每个区块都有可能调整区块难度,具体调整方法以代码为准的原则进行讲解。

以太坊难度调整的公式:H是指当前区块,H_i{} 是当前区块的序号。这个区块难度调整的公式有两个部分,前面的max()是第一部分,又叫基础部分,目的是为了维护平均出块时间15s左右,第二个部分是\varepsilon,被称为难度炸弹,主要是为了向权益证明过渡,以太坊想把机制从工作量证明转移到权益证明。

基础部分

第一部分调整的方法是在父区块的难度基础上加上一些自调整的部分,P(H)就是父区块的难度,父区块就是当前区块链的最后一个区块,对于正在挖的区块来说它是这个区块的父区块,第一部分难度调整有下限D_{0},保证挖矿难度最小值。

自调整部分的x是调整力度,不论是难度上调还是下调,都是按照力度的整数倍进行调整,即父区块难度的/1/2048作为调整单位。\varsigma的值是与出块时间和父区块的叔父区块相关,因为叔父区块会增加货币的总量,为了维护系统总供应量的稳定,所以当前正在挖的区块的难度要提高一个单位。-99是难度调整系数部分的下限,y-这个部分可正可负,如果是负值难度需要往下调,最多一次性只能调整99个单位,所以一次性下调难度最多是99/2048。

难度炸弹

PoW转入到PoS,权益证明不挖矿,已经投资了大量资金用来挖矿的矿工可能会联合抵制PoS,共识协议的改变会产生硬分叉,为了避免这样情况的发生,加了难度炸弹。早期的难度炸弹没有H',公式是当前的区块号除以100000,向下取整,作为2的指数,指数型函数增长。早期的时候,以太坊的区块号都比较小,所以难度炸弹算出来的这一部分值可以基本忽略不计,难度调整还是由第一部分基础部分决定的,或者是由系统中的出块时间来决定的,随着时间的推移,区块号增加,难度炸弹的“威力”逐渐显现,挖矿的难度指数型增加,所以挖矿越来越难,那么矿工就更愿意从PoW转移到PoS,然而实际情况是PoS的共识机制有很多问题需要被解决,不能使用,没有别的办法达成共识。出块时间由稳定的15s增加到30s。以太坊最后在一个EIP(Ethereum improvement proposal)当中决定计算难度炸弹的时候要把区块号回退减去三百万个区块来计算得到一个假的区块号。

2. 以太坊发展阶段

现在是在拜占庭阶段,难度的调整也是拜占庭阶段,因为难度的降低,之后为了公平起见把区块奖励从五个币变成三个币。BIP(Bitcoin improvement proposal)。

3. 具体代码实现 

难度计算公式

这里的fakeBlockNumber要减去2999999而不是3000000,是因为这里用的是父区块不是正在挖的区块。

4. 相关图表

难度的调整使得挖矿难度出现了一次断崖式下跌,之后挖矿难度又逐渐恢复到原来的水平,是因为更多矿工的加入竞争更激烈了。

挖矿难度的调整主要是为了稳定出块时间,这里的峰值是因为之前的指数难度增加出块时间变长,难度调整之后出块时间又恢复稳定到15s。 

Difficulty 是当前区块的难度,Total Difficulty 是把当前的区块所在的这条链上所有区块的难度加在一起,也就是这条链的总难度。最长合法链,对于以太坊来说应该是最难合法链,就是总难度最大合法链,每个区块的难度反应的是挖出这个区块所需要的工作量,总难度最大就是挖出这条链上所有区块需要的总工作量最大,一般来说靠后的区块挖出来的工作量也是比较大的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值