0%

BTC六---挖矿难度

挖矿难度

为什么要调整挖矿难度

调整挖矿难度,就是调整目标空间在整个输出空间中所占的比例

比特币的哈希算法是SHA-256,256位的哈希值,所以输出空间位2^256个可能取值,调整目标空间占输出空间的比例,通俗的说,就是这个哈希值前面要多少个零,合法的哈希,算出来,前面至少要有70个零,但是严格的话还是按照定义来计算哈希值。

另外一种概念:挖矿难度,挖矿难度和目标阈值成反比

挖矿难度最小就是1,所以这时候target很大,那我们为什么要调整挖矿难度呢?如果不调,会有什么问题:系统中的总算力越来愈强,挖矿难度不变的话,出块时间就会越来越短,一开始没什么人,按照设计是十分钟出一个区块,后来一分钟就可以出一个区块,再到后来,用的设备越来越先进,不到一秒。

这么快不好吗?我每出现一个交易就可以及时的写入区块里,减少了系统的响应时间,这不是好事吗?其实不是件好事,这样会有什么问题吗?

如果两个结点同时发布了一个区块,那么这个时候可能会出现分叉,分叉就成了常态,可能不仅仅是二分叉,分叉如果过多,对于系统达成共识,是没有好处的,也危害到系统的安全性,比特币系统是假设,大部分算力都掌握在诚实的结点手里,系统当中的总算力越强,安全性就越好(发动51% attack的算力要求就更大)

这个时候,可能10%的算力就可以发动攻击了,所以出块时间,不是越短越好。比特币系统中设计的10分钟的出块原则是不是最优的呢?这个不一定,这个只是说,出块时间要有一个常熟的波动范围,不能无限的减少下去,这个对于支付系统来说,其实还是比较长了。

以太坊就将出块时间降低到了15秒,这样以太坊就要设计一个新的共识协议:ghost,这个之后会提到,以太坊同样也会调整挖矿难度,是出块时间保持稳定;所以,出块时间没有规定多长,但是不管多长,都要保持稳定,而不能无限地减少下去

如何调整挖矿难度

比特币中规定了,每隔2016个区块要重新调整目标阈值,大概是每两个星期调整一下

调整的公式:

实际的代码中,上调和下调实际上都是有4倍的限制的,最多增大,下调4倍

那么如何让所有的矿工,都调整目标阈值呢?怎么能让大家都听话?如果恶意的区块不调整target,那么诚实的结点不会认可:检查的内容包括nBits(target的编码版本)域

比特币系统中总算力的变化情况

算力难度的增长情况

符合难度调整的设计目标

难度调整曲线

说明挖矿的人越来越多,设备越来越先进

每天的出块时间

最近半年的出块事件