06 BTC-挖矿难度
《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click
06 BTC-挖矿难度
调整目标空间占输出空间的比例,来调整计算难度值。
difficulty_1_target:难度目标为1时候的目标阈值,是一个很大的值。
必须调整挖矿难度,不然随着设备的先进,出块时间会变得越来越短。
出块时间变短,增加了系统的响应时间,提高了系统的throughput,那这不是好事吗?
这个如果是好事的话,那么我们没必要把出块时间设置成10分钟了。
出块时间太短:分叉会成为常态,不仅是二分叉,可能出现很多的分叉,比如说10个区块被同时挖出来,会出现10分叉。
分叉如果过多的话,对于系统达成共识是没有好处的,而且也危害到系统的安全。
比特币协议是假设,大部分算力是掌握在诚实的矿工手里。
系统中的总算力越强,安全性就越好,因为要发动51%攻击(51% attack)所需要的算力就越大。
如果分叉过多,系统中的总算力会被分散,这个时候,可能就不需要51%的算力去发动攻击了,可能百分之十几就够了。
比特币10分钟的出块间隔就是最优的呢?出块时间必须有一个常数的波动范围,不能无限的减少下去。
以太坊中的出块时间降低到了15s,所以,以太坊的出快速度是比特币的40倍,出块时间大幅度下降之后,以太坊就要设计一个新的共识协议,叫做GHOST,将orphan block叫做uncle block,会给一定的奖励,以太坊同样需要调整挖矿难度,使得出块时间保持稳定。
平均出块时间设置多长,都需要保持稳定,而不能无限的减少下去。
怎么调整挖矿难度?
每隔2016个区块,调整挖矿难度。大概14天。
调整难度共识如下所示:
实际代码中,上调和下调最多有4倍的限制,一次调整不能超过4倍。
如果有恶意的节点,并没有调整自己的挖矿难度,那么怎么办?
如果不调,诚实的矿工不认可恶意节点产生的矿工。
nBits(4个字节),target(32个字节),nBits是target的一个压缩编码。
以太坊的挖矿难度调整,不是每隔多少个区块进行调整,而是每隔新出的区块都有可能进行难度调整。
出块时间10分钟是不是最好的?每个块最多1M字节是不是合适?为什么2016个区块调整难度?
比特币系统中的实际情况:
比特币系统中总算力的变化情况:
挖矿难度变化情况:
最近180天的挖矿难度变化:
比特币的出块时间:
下图公式与target的公式是反的: