自学区块链(六)BTC-挖矿难度

我们来看下挖矿的计算公式

H(block header)target,这个target就是目标阈值

BTC用的哈希算法是SHA-256,它产生的哈希值是256位,那么就有2^256种取值,这个就是他的输出空间,要增大挖矿难度,就调节目标值在这个输出空间所占的比例

挖矿难度和目标阈值是成反比的,当算力强时,调节难度,使目标阈值变小

为什么要调节难度

不调节难度,随着矿工数量增多,随着算力的上升,那么挖到区块的时间就会变短,从10分钟缩短到1分钟甚至几秒钟,这个会带来什么样的问题呢?可能很多人觉得这不是挺好吗,交易等六个确认就会缩短时间了,交易就会变快了。其实出块时间缩到很短,风险是很大的,因为网络延迟,出块时间变短,不同节点很可能接到不同的区块信息,导致会有很多分叉节点出现。矿工会根据自己认为正确的区块接着挖。这种情况下,恶意节点发动分叉攻击就比较容易成功,因为诚实节点的算力被分散了。

导致不需要51%的算力就能成功,所以缩短出块时间是不利于BTC系统的稳定的。虽然10分钟不一定是最优的时间,但是也算是比较合理的。

下面是算力增长曲线

下面是挖矿难度曲线

下面是平均出矿时间


平均在10分钟

如何调节出块时间呢

我们来看下难度公式:每2016个区块调整一次挖矿难度,10分钟出一个平均算下来是两星期调整一次。

previous_difficulty是上一次的挖矿难度,分母是最近2016个区块花费的时间


每个节点挖矿是独立的,BTC的协议也是开源的,会不会有矿工不修改挖矿难度呢?可能性是存在的,但是不影响结果,因为广播给其他节点需要独立验证block header的哈希值,这个header里面有难度的一个压缩编码,修改难度产生的结果是不会被诚实的节点认可的。

你可能感兴趣的:(自学区块链(六)BTC-挖矿难度)