主页 > imtoken官方版下载安卓最新版 > 【走进区块链5】比特币挖矿难度调整

【走进区块链5】比特币挖矿难度调整

前几章见合集_(绝命姬_嗨)

推荐课程:北京大学区块链技术与应用公开课bilibili

BTC(比特币)中的挖矿(mining)就是不断尝试区块头中的nonce和extra nonce的值,这样:

H(区块头)≤目标

目标阈值目标越小,越难挖掘。 因此,调整挖矿难度就是调整目标来调整目标空间在整个输出空间中的比例。

BTC使用的哈希函数是SHA-256,生成的哈希值是256位,所以整个输出空间是2^256

挖矿难度与目标门槛成反比

difficulty = difficulty-1-target / 目标

difficulty_1_target是指挖矿难度difficulty定义为1时目标阈值target的值。挖矿的最小难度为1比特币区块难度zhi,所以这个常数也是target允许的最大值。 难度变化最高为4倍,最低为1/4倍,这样设计是为了让难度变化不会太突然。

比特币区块难度zhi_比特币区块未确认交易_比特币区块记录查询

如果不调整比特币挖矿难度会出什么问题? _(Jessica Ji_Selfie)

系统内的总算力越来越强。 如果挖矿难度不变,平均出块时间会越来越短,这会造成一些问题。 假设平均出块时间减少到 1 秒,即每隔 1 秒左右,一个承载一系列交易的新区块被发布到 BTC 网络,这个区块被传播到 BTC 网络上的大多数节点。 点可能需要几十秒。 当两个节点几乎同时发布块时,就会发生分叉。

如果出块时间很短,就会导致这种分叉成为常态。 而且不只是二进制叉子,可能有很多叉子:10 个叉子是可能的。

过多的分叉不利于BTC系统达成共识,还会危及BTC系统的安全。 BTC 假设大部分计算能力都存储在诚实节点中。 如果出块时间很短,会导致分叉过多(因为与出块时间相比,可以认为网络上的传输时间变长了),这样诚实节点的算力就会被分散。 一个节点进行51%攻击很可能不需要50%以上的算力,或许十几%就足够了,这大大降低了BTC系统的安全性。

比特币区块未确认交易_比特币区块记录查询_比特币区块难度zhi

事实上,BTC 的平均出块时间可能不是最优的,后面要学习的以太坊的出块时间减少到 15 秒。 大大减少了阻塞时间。

因此,在不同的区块链账本系统中,无论设计出块时间多长,都必须保持稳定,不能让其无限减少。

比特币区块难度zhi_比特币区块未确认交易_比特币区块记录查询

如何调整比特币挖矿难度? _(Jessica Ji_Selfie)

BTC协议规定,目标阈值目标每2016个区块(大约每2周)重新调整一次。 具体的迭代更新公式为:

比特币区块记录查询_比特币区块难度zhi_比特币区块未确认交易

预期时间为两次调整之间的预期间隔,即2016年乘以10分钟; 而实际时间是系统实际花费的时间来生成最新的2016个区块。

实际时间越大,越难降低,即增加目标; 实际时间越小,增加难度越大,即降低目标

为避免系统出现一些意外情况,导致系统出现非常大的波动,每次对目标阈值target的调整最多不能超过4次,最小不能小于1/4。

如果恶意节点不调整挖矿难度怎么办? _(Jessica Ji_Selfie)

目标是用BTC系统的代码编写的,代码也是开源的。 如果有一个节点在该调整的时候没有调整目标怎么办。 这也是大多数节点诚实的问题。 如果target没有调整,则发布的区块头(32字节target的压缩版)中的4字节nBits字段不正确比特币区块难度zhi,是诚实节点。 这样的块将不被接受。

BTC中的一些参数,比如1M、10分钟等,不一定是最好的。 BTC比较保守,这些参数可能是创建者通过调查得到的。