以太坊之七挖矿难度调整

早过忘川 提交于 2020-02-10 14:05:32

正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。

7.挖矿难度调整

7.1 挖矿难度公式

D(H){D0D0131072if Hi=0max(D0,P(H)Hd+xζ2)+εotherwise D(H) \equiv \begin{cases} D_0(D_0\equiv131072) &if\text{ }H_i = 0\\ max(D_0,P(H)_{H_d} + x*\zeta_2) + \varepsilon &\text{otherwise} \end{cases}

HiH_i是区块序号,具体什么意思我也不清楚,难道创世区块的Hi=0H_i=0,其它的都是otherwise?

D(H)是本区块的难度,下面那个分为两部分,前者是max的成为基础部分,为了维持出块时间在15s左右,ε是难度炸弹,为了兼容后续的权益证明。P(H)HdP(H)_{H_d}是父区块的挖矿难度。

7.2 挖矿难度调整公式

xP(H)Hd2048ζ2max(yHSP(H)Hs9,99) x\equiv {\lfloor {\frac {P(H)_{H_d}}{2048}}\rfloor} \\ \zeta_2 \equiv max(y-{\lfloor \frac{{H_S}-{P(H)_{H_s}}}9 \rfloor},-99)

x是父区块挖矿难度的2048分之一,是难度调整的单位。

y是父区块的叔父区块个数加一。如果父区块没有叔父区块,那y就等于1。为啥出块时间要跟父区块的叔父区块个数有关呢?因为出块时间的修改一个原因是保证交易速度,还有一个就是有限时间内发行的以太币数量。前者可以通过闪电网络解决,后者在以太坊中就是通过调整出块时间实现的。

x一定是正数,如果max中y的减数大于y,说明ζ2ζ_2是负数,出块难度要下调,反之初会难度要上调。

HsH_s是本区块的时间戳,P(H)HsP(H)_{H_s}是父区块的时间戳(我也不知道为啥长得和父区块的挖矿难度很像),以秒为单位。差就是出块间隔。

-99的目的是防止出现黑天鹅事件,减少最小的不能少于-99。

假设没有叔父区块,即y=1。如果出块间隔在[1,8],除以9后等于0,即挖矿难度要加一;如果出块间隔在[9,17], ζ2ζ_2等于0,挖矿难度不需要改变;如果间隔在[18,26],挖矿难度要增加一。

7.3 难度炸弹

ε2Hi÷1000002Himax(Hi3000000,0) \varepsilon \equiv {\lfloor 2^{{\lfloor H^{\text{'}}_i÷100000 \rfloor}-2} \rfloor}\\ H^{\text{'}}_i \equiv max(H_i-3000000,0)

在以太坊挖矿算法出现的时候就打算把工作量证明变成权益证明,可是当时还没研发出来,还怕到时候矿工们不干就打算加上这个ε。因为如果矿工们发现自己的挖矿设备白瞎了,他们就有可能联合起来攻击以太坊,那样就会出现硬分叉,这不是以太坊所希望看到的,所以加上了这个指数上升的参数,到了若干代参数后,矿工们就是不想同意也没办法,因为后续这个值超级高,挖矿已经变成了几乎不可能。可是事实是以太坊的兄弟们目前还没研发出来,可是挖矿的指数难度已经开始了,所以以太坊就把区块数量减去300万计算ε,可以临时性解决这个问题。

下图就能看出在45的时候减了那300万,挖矿难度瞬间下来了。

avatar

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!