目录
前言
比特币的挖矿难度调整
为什么要调整比特币的挖矿难度?
怎么调整比特币的挖矿难度?
前言
学习肖臻老师的《区块链技术与应用》公开课笔记,供学习参考。
比特币的挖矿难度调整
比特币使用的哈希算法是SHA-256,产生的哈希值是256位。所以整个输出空间是2的256次方。而比特币的挖矿难度调整就是调整target(目标预值)的大小,就是目标空间在整个输出空间中所占的比例。
挖矿的难度与目标预值是成反比的,其公式如下图:
为什么要调整比特币的挖矿难度?如果不调整难度,由于人数的增加,系统中的算力会变得越来越强,在这种情况下难度保持不变的话,出块时间会越来越短。当出块时间缩短到比区块在网路上的传播时间短的时候,由于网络的延迟,就会出现节点不能及时收到出块的消息还在沿着之前的区块链扩展的情况,如果这时有两个节点同时发布一个区块,就会出现分岔。随着出块时间越来越短,分岔越来越多,就会将系统的算力分散,这时就危害到了系统的安全性。因为这时恶意的节点不需要掌握51%的算力就可以攻击系统了,比如分岔攻击。
但是10分钟的出块时间也不一定是一个最优解,只要在一定的范围内就是可以的。比如以太坊系统的出块时间就降低到了15s,是比特币的40倍,但是以太坊对其出块时间设计了新的协议Ghost来解决由于过快的出块时间引起的问题。
怎么调整比特币的挖矿难度?比特币协议中规定,每2016个区块后就要调整目标预值,这大概是每两个星期调整一次
具体的调整公式为:
其中actual time指产生2016个区块实际花费的时间,expected time指产生2016个区块预计的时间,即2016×10min。
PS:上调和下调都有四倍的限制,也就是说不管实际时间怎么变化,实际时间和预计时间的比值一直如下图,防止较大幅度的变动导致其他的问题。
计算target的方法写在比特币系统的代码里,nBits是target一个编码的版本,在block header里没有直接存储target的域,因为target的域是256位,直接存target的话要32个字节。nBits在header里只有四个字节,所以可以认为是它的一个压缩编码。每挖到2016个区块会自动进行调整。如果有有恶意的节点故意不调或者投机取巧设计一个过大的目标预值,会怎么样?
如果不调,检查区块的合法性就通不过。因为每个节点要独立的验证发布的区块的合法性。检查的内容就包括:nBits,目标预值设的对不对。如果投机取巧,诚实的节点不会接受这个区块。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)