北京大学肖臻老师《区块链技术与应用》公开课笔记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个区块用的时间(注意:前面的公式是目标预值的公式,不要混淆了)

相关文章
|
2月前
|
机器学习/深度学习 存储 算法
《基于区块链技术的虚假新闻检测方法》文献阅读笔记+总结
《基于区块链技术的虚假新闻检测方法》文献阅读笔记+总结
59 0
|
存储 算法 安全
区块链系列教程之:比特币中的网络和区块链
区块链系列教程之:比特币中的网络和区块链
区块链系列教程之:比特币中的网络和区块链
|
存储 供应链 算法
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
|
算法 Java 程序员
区块链系列教程之:比特币中的共识
区块链系列教程之:比特币中的共识
区块链系列教程之:比特币中的共识
|
存储 算法 安全
区块链系列教程之:比特币的钱包与交易
区块链系列教程之:比特币的钱包与交易
区块链系列教程之:比特币的钱包与交易
|
算法 Java 程序员
区块链系列教程之:比特币的世界
区块链系列教程之:比特币的世界
区块链系列教程之:比特币的世界
|
4天前
|
供应链 安全 分布式数据库
探索区块链技术在供应链管理中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术如何在供应链管理中发挥关键作用,通过具体案例分析,揭示了区块链提高透明度、降低成本和增强安全性的潜力。文章首先概述了区块链技术的基本原理及其对传统供应链模式的挑战,接着详细讨论了区块链如何在不同供应链环节中实施,并分析了其带来的变革。最后,文章提出了企业在采纳区块链技术时可能面临的挑战和应对策略,为供应链管理者提供了宝贵的参考。
|
14天前
|
存储 安全 物联网
未来已来:区块链技术在物联网与虚拟现实中的应用
随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、安全和沉浸式的体验。
|
15天前
|
存储 供应链 算法
深入探索区块链技术:原理、应用与未来展望
本文将带你深入了解区块链技术的基本原理,探讨其在金融、供应链、医疗等多个领域的应用案例,并展望其未来的发展趋势。通过本文,你将对区块链技术有一个全面的认识,理解其背后的技术逻辑和应用场景。
|
21天前
|
供应链 安全 区块链
探索区块链技术在数据安全中的应用
本文深入探讨了区块链技术如何革新数据安全领域,特别是在保护个人隐私、增强数据完整性和透明度方面的作用。通过分析区块链的去中心化特性、加密技术以及智能合约的功能,文章阐述了这一技术如何有效防止数据篡改、确保交易记录的不可逆性,并促进跨组织间的信任建立。此外,还讨论了当前区块链技术面临的挑战及未来发展趋势,为理解其在数据安全领域的潜力提供了全面视角。
下一篇
DataWorks