区块链学习笔记6——BTC挖矿难度
Posted PolarDay.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链学习笔记6——BTC挖矿难度相关的知识,希望对你有一定的参考价值。
区块链学习笔记6——BTC挖矿难度
学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页
为什么要调整挖矿难度
挖矿:不断尝试nonce使整个block header的哈希值小于等于目标阈值 H(block header)<= target (target越小,挖矿难度越大)
调整挖矿难度就是调整目标空间在整个输出空间中所占的比例
比特币用的哈希方法是 SHA-256,产生的哈希值是256位,整个的输出空间是2256,调整目标空间所占比例,简单的说需要目标值前需要多少个0。
这里是引用
挖矿难度与目标阈值成反比
difficulty_1_target是挖矿难度等于1时所对应的目标阈值
挖矿难度最小为1,此时对应的target是一个很大的数
- 如果不调整挖矿难度会怎么样?
如果挖矿难度不变,那么随着算力增强,出块速度会变快,出块时间越来越短。 - 出块时间越来越短是好事吗?
如果出块时间缩短,那么交易可以很快便被写入区块链,并且提高了系统响应时间,增加了区块链系统效率。但是,出块时间并不是越短越好。出块时间太短,也会造成一定的问题。首先,区块在网络上传播具有时延,假如出块时间为1秒,但网络传播需要10秒,则会使得系统中节点经常性处于不一致的状态,增加了系统不稳定性,且系统经常性位于分叉状态(不仅二分叉,乃至多分叉)。分叉过多,则不利于系统达成共识,且会造成算力分散,使得黑客攻击成本大大降低(不再需要整个系统51%的算力)。 - 10min的出块间隔是最优吗?
当然不是,以太坊中平均出块时间仅为15秒左右,出块速度是比特币的四十倍,出块时间大幅减少后以太坊设计了新的共识协议Ghost,在此协议中,分叉产生的区块是orphan block,不会简单丢弃掉,而是给予一些奖励(uncle reward)。以太坊中同样需要调整挖矿难度,使出块时间稳定,不能无限的减小下去。
怎样调整挖矿难度
比特币协议中规定,每隔2016个区块要重新调整目标阈值,大概每两周调整一次。
这里上调下调都是有限的,如果actual time非常长,超过了八个星期,也按照八个星期来计算,即target一次性最多只会增大四倍。如果actual time非常短,不到半个星期,也按照半个星期来算,即target一次性最小只会减小四倍。
怎样让所有矿工同时调整目标阈值?
计算target的方法是写在比特币系统的代码里,每挖到2016个区块会自动调整,如果有某个有恶意的结点故意不调整,其他诚实结点会验证这个区块的nBits域(对目标阈值的一个压缩编码,target有32个字节,nBits只有4个字节)不合法,这个区块不会被接受
算力、挖矿难度、难度调整、出块时间的变化曲线
算力变化情况:
最近一年(2017年)呈指数增长,不是严格递增的,中间也有很多波动,需要注意的是,之前一段并非直线,而是之后增长太猛导致之前增长趋势看上去太低。
挖矿难度变化情况:
和系统算力变化基本同步
难度调整曲线:
每隔两个星期,难度上一台阶,反映出人们对比特币的热情越来越高
出块时间:
总的来说稳定在10分钟上下震动,难度调整达到了预期目的
以上是关于区块链学习笔记6——BTC挖矿难度的主要内容,如果未能解决你的问题,请参考以下文章