北京大学肖臻老师《区块链技术与应用》公开课笔记7——比特币的挖矿难度调整

简介: 北京大学肖臻老师《区块链技术与应用》公开课笔记7——比特币的挖矿难度调整

目标预值越小,挖矿的难度越大。调整挖矿的难度就是调整目标空间在整个输出空间中所占的比例。

比特币用的哈希算法是SHA-256,这个产生的哈希值是256位。所以整个输出空间是2的256次方。调整这个比例,即目标空间占输出空间的比例,通俗的说,就是哈希值前面要有多少个0。比如说256位的哈希值,要是合法的区块,要求算出来的哈希,前面至少有70个0。当然这只是通俗的说法,因为这个目标预值,并不是说前面都是0,从某一个位置开始,后面都变成了1。

挖矿的难度跟目标预值是成反比的,公式是:difficulty=difficulty 1 target / target。上面是指挖矿难度等于1的时候所对应的目标预值,挖矿难度最小就是1,这个时候对应的目标预值是个非常大的数。

即target越大,挖矿是越容易的。所以公式里很大的一个数,除以当前的目标预值,得到的就是当前的挖矿难度。所以difficulty和target大小是成反比的。

为什么要调整挖矿难度呢?如果不调会有什么问题呢?系统里的总算力越来越强,挖矿难度保持不变的话,出块时间是越来越短的。

出块时间越来越短,会有什么问题吗?
比如说不到一秒就出一个区块,区块在网络上传播的时间可能需要几十秒,底层的比特币网络可能需要几十秒才能让其他节点都收到。别的节点没有收到这个区块之前还是继续沿着已有的区块链往下扩展。如果有两个节点同时都发布一个区块,这个时候就会出现分叉。

出块时间如果越来越短的话,这种分叉会成为常态,而且不仅会出现二分叉,可能会出现很多的分叉。比如10个区块同时被挖出来,系统可能会出现10分叉。

分叉如果过多,对于系统达成共识是没有好处的,而且危害了系统的安全性。比特币协议是假设大部分算力掌握在诚实的矿工手里。系统当中的总算力越强,安全性就越好,因为有恶意的节点想掌控51%的算力就越难。如果掌握了51%的算力,它就可以干很多坏事,比如分叉攻击。

如果后面分叉多的话,前面某个区块里的某个交易,很可能就遭受分叉攻击,恶意节点会试图回滚。因为后面分叉多,算力就会分散,恶意节点得逞的概率更大。这个时候恶意节点就不需要51%的算力了,可能10%的算力就够了,因此出块时间不是越短越好。

那10分钟的出块时间是不是最优的呢?不一定。改成其他值也可以,有间隔只是说应该有个常数范围。以太坊系统出块时间就降低到了15s,所以以太坊的出块速度是比特币的40倍。

出块时间大幅度下降之后,以太坊就要设计新的协议,叫ghost。在该协议中,这些分叉,产生的orphan block(即产生最长合法链后另一个要被丢弃的区块)就不能丢弃掉了,而是也要给它们一些奖励,这叫uncle reward。以太坊也要调整挖矿难度,使出块时间保持在15s。

讲完了为什么要调整挖矿难度,现在讲一下怎么调整挖矿难度。比特币协议中规定,每2016个区块后就要调整目标预值,这大概是每两个星期调整一次。

具体的调整公式:target =target×(actual time/expected time)。actual time指产生2016个区块实际花费的时间,expected time指产生2016个区块应用的时间,即2016×10min。

如果实际花费时间超过了两周,即平均出块时间超过了10min。那么这时候挖矿难度要调的低一点,应该让出块更容易。因此该公式算出来的target会变大,则难度会下降。

实际上,上调和下调都有四倍的限制。假如实际时间超过了8个星期,那么我们计算公式时也只能按4倍算,目标预值增大最多只能增大4倍。

那怎么才能让所有的矿工同时调整目标预值呢?计算target的方法写在比特币系统的代码里,每挖到2016个区块会自动进行调整。如果有有恶意的节点故意不调,会怎么样?

如果一个节点不调,将区块发布出去,诚实的节点是不会认的。nBits是target一个编码的版本,在block header里没有直接存储target的域,因为target的域是256位,直接存target的话要32个字节。nBits在header里只有四个字节,所以可以认为是它的一个压缩编码。

如果遇到有恶意的矿工,该调的时候不调,这时检查区块的合法性就通不过。因为每个节点要独立的验证发布的区块的合法性。检查的内容就包括:nBits,目标预值设的对不对。如果投机取巧设计一个过大的目标预值,使得你自己挖矿容易了,但这个区块是不会被接受的。

如图(第七节视频  第26分钟)显示的是比特币系统中总算力的变化情况。在比特币没有流行前,有很长一段时间,算力没有太明显的增长,前面这些年的hash rate几乎是0。其实这些年算力也是增长的,只是后面这些年算力增长的太快了,所以前面部分看上去像是一条直线。去年是涨得非常猛的一年,这也体现在了hash rate 的增长上,算力呈现出指数级的增长。即使在这段黄金时期,算力也不是单调递增的,中间也是有很多波动。

如图(第七节视频  第27分钟)是挖矿难度的变化情况,跟算力的增长基本上是同步的,这也符合难度调整的设计目标。通过调整挖矿难度,使得出块时间保持稳定。注意这个图显示的是挖矿难度,不是目标预值。

如图(第七节视频 第27分第27秒)是最近半年的难度调整曲线,可以看出很明显是一段一段的。每隔两个星期,难度上一个台阶,说明挖矿的人越来越多,用的设备越来越先进,反应出大家对比特币的热情越来越高。如果出现相反的情况,比如某个加密货币的挖矿难度越调越小,说明挖矿变得越来越容易了。但这不是好事,说明大家对币的热情是逐渐减小的。持续出现这种情况说明这个币将被淘汰。

如图(第七节视频 第28分第13秒)显示的是每天的出块时间。可以看出,总的来说出块时间稳定在10分钟上下振动。

如图(第七节视频 第28分第36秒)显示最近半年的出块时间,也是维持在10分钟左右。

挖矿难度的公式:下一个难度=前一个难度*两周/挖前2016个区块用的时间(注意:前面的公式是目标预值的公式,不要混淆了)

相关文章
|
机器学习/深度学习 存储 算法
《基于区块链技术的虚假新闻检测方法》文献阅读笔记+总结
《基于区块链技术的虚假新闻检测方法》文献阅读笔记+总结
150 0
|
存储 算法 安全
区块链系列教程之:比特币中的网络和区块链
区块链系列教程之:比特币中的网络和区块链
区块链系列教程之:比特币中的网络和区块链
|
存储 供应链 算法
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
|
算法 Java 程序员
区块链系列教程之:比特币中的共识
区块链系列教程之:比特币中的共识
区块链系列教程之:比特币中的共识
|
存储 算法 安全
区块链系列教程之:比特币的钱包与交易
区块链系列教程之:比特币的钱包与交易
区块链系列教程之:比特币的钱包与交易
|
算法 Java 程序员
区块链系列教程之:比特币的世界
区块链系列教程之:比特币的世界
区块链系列教程之:比特币的世界
|
5月前
|
存储 供应链 API
区块链技术在电商API中的应用:保障数据安全与交易透明
区块链技术在电商API中的应用,为数据安全与交易透明提供了新方案。通过数据加密、分布式存储、智能合约管理、商品溯源及实时结算等功能,有效提升电商数据安全性与交易可信度。然而,技术成熟度、隐私保护和监管合规等挑战仍需克服。未来,随着物联网、大数据等技术融合及政策支持,区块链将在电商领域发挥更大潜力,推动行业智能化发展。
|
1月前
|
供应链 安全 算法
区块链技术探索与应用:从密码学奇迹到产业变革引擎
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。以代码为舟,算法为帆,在区块链的浩瀚星河中探索去中心化的未来。从智能合约到DeFi,用极客精神谱写信任新篇章。
区块链技术探索与应用:从密码学奇迹到产业变革引擎
|
6月前
|
传感器 人工智能 算法
聚焦“以技术集成支撑单亩价值创造”与“增加值分配机制区块链存证确权”两大核心本质
“振兴链-技术集成科技小院”以技术集成与区块链为核心,推动农业现代化。通过多维度技术整合(如精准农业、物联网等),突破资源约束,最大化单亩产值;同时利用区块链确权存证,建立透明分配机制,解决传统农业中收益不均问题。技术赋能生产,制度重塑分配,实现效率与公平的平衡,助力乡村振兴与产业升级。典型场景显示,该模式可显著提升单亩价值并确保增值公平分配。
|
2月前
|
人工智能 安全 数据可视化
数字孪生 + 区块链:MyEMS 引领能源管理技术融合新趋势
MyEMS融合数字孪生与区块链技术,打造可信、透明、高效的能源管理新范式。通过实时镜像、智能预测与数据上链,实现能耗可追溯、碳排可验证、交易可信任,推动能源管理迈向智能化与价值化新时代。(238字)
93 1

热门文章

最新文章