0°

以太坊区块是如何调整挖矿难度值的?

本文解释了自2016年3月14日Homestead发布以来在以太坊中使用的难度调整算法。下面将详细探讨如何在以太坊中实现平均15秒的出块时间。

概述

 

在Homestead发布之前,以太坊遇到了区块难度调整的问题:出块时间设置为13秒的中位目标,但平均值却越来越高

为什么?

矿工们发现他们可以挖掘时间戳比前一个区块(父块)高出一秒的区块,获得比解决其他区块更高的难度,从而使其解决方案优于其他分支。因此,使用这种求解区块的方法符合矿工的经济利益,即使这意味着平均出块时间会增加。

为了解决这个问题,社区提出了一种完全不同的难度调整算法作为EIP 2的一部分。

 

以太坊改进提案(EIPs)

 

以太坊改进提案(EIP)等同于以太坊的征求意见稿(RFC):它们是以太坊生态系统中提议的功能和改进标准。EIP官方网站包含所有EIP及其当前状态。

EIP 2包含四个不同的部分,每个部分对应以太坊的一个问题。第四部分(此处称为EIP2 / 4)是本文的重点:改变以太坊的难度调整算法。

 

新算法:10-20秒的窗口

 

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

注意://运算符指的是简单除法(例如6 // 2 == 3)

上面的公式可能看起来很复杂,但逻辑可以分解成如下步骤:

如果区块在不到10秒内解决,则增加难度; 如果区块在20秒内解决,则降低难度; 如果区块在10到20秒之间解决,则什么也不做; 在一段长的时间内实现10到20秒的出块时间,从而实现平均15秒的目标

时间窗口本身就在代码中:

max(1 – (block_timestamp – parent_timestamp)// 10,-99)

用d代表时间差,则用日常数学的方式写出来就是:max(1 – (d / 10), – 99)。公式中假设d / 10的结果是整数,而不是小数,因此在9秒的情况下,9/10求出的数值为0,而不是0.9。

求出block_timestamp – parent_timestamp的各种输入数值显示了可能的范围:

0-9秒求出max(1 – 0,-99)→max(1,-99)→1 10-20秒求出max(1 – 1,-99)→max(0,-99)→0 20秒以上则可求出直到-99最小界限的数值

 

将难度调整窗口可视化

 

以太坊区块是如何调整挖矿难度值的?

观察上方的阶梯式趋势,读者可能会注意到难度增加时每次增加的上限为1,但是难度下降时可以下调的范围很大,有利于以太坊在非常长的出块时间时快速降低难度。

实际上,这就是算法的重点。即使该因子乘以2,048来增加该区块的难度,但是降低难度的速度要快得多。

以太坊区块是如何调整挖矿难度值的?

 

难度炸弹

 

到目前为止,我们尚未提出的公式部分是:

int(2 **((block.number // 100000) – 2))

这是一个“难度炸弹”,每增加10万个区块就会增加难度。同样,由于这是整数数学,如果区块编号为302,000,则求出结果为2 ^(3-2)。

因此,此处的数值仅在100,000个区块的增量上才会改变,随着时间的推移增加难度,而不管区块挖掘之间的时间差异。

由于目标出块时间为15秒,难度炸弹平均每17.36天就会发生一次

 

小结

 

新的EIP 2/4难度算法成功地将以太坊的目标出块时间缩短到15秒或更短。在撰写本文时,实际的区块时间求解平均值为14.05秒。

15秒的目标出块时间是通过建立10-20窗口来实现的(10 20)/ 2 = 15。

以太坊的挖矿难度可以快速下降,但短期内的增长的速度却是很慢的。“难度炸弹”保证了挖矿难度在长时间内的增加。

原文:https://blog.cotten.io/ethereums-eip-2-4-15-second-block-target-98d4c11017e1
作者:Tim Cotten
编译:Apatheticco

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论