主页 > imtoken下载app > BTC-挖矿难度调整(区块链技术与应用)

BTC-挖矿难度调整(区块链技术与应用)

imtoken下载app 2024-01-26 05:13:49

挖矿难度

挖矿就是不断尝试区块头中的nonce和extra nonce的值,这样:

$$

H(区块头)≤目标

$$

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

比特币使用的散列函数是SHA-256,生成的散列值是256位,所以整个输出空间是2256。调整目标空间的比例在这个问题中直观的看出是最终的结果。 hash值前面有多少个0(这只是通俗直观的看法,可能第一个非0位小于4),0越多,值越小,即难度越大挖矿。

挖矿难度与目标阈值的大小成反比:

$$

difficulty=\frac{difficulty_1_target}{target}

$$

上式中的常数 difficulty_1_target 是指挖矿难度 difficulty 定义为 1 时对应的 target 阈值 target 的值,最小挖矿难度为 1,所以这个常数也是 target 允许的最大值。

为什么要调整挖矿难度?

系统内的总算力越来越强。 如果挖矿难度不变,平均出块时间会越来越短,这会造成一些问题。

假设平均区块生成时间减少到 1 秒,即每隔 1 秒左右,一个承载一系列交易的新区块被发布到比特币网络,这个区块传播给比特币网络上的每个人。 大多数节点可能需要几十秒。 如果两个节点几乎同时发布区块,就会发生分叉:

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

太多的分叉不利于比特币系统达成共识,还会危及比特币系统的安全。

eg:分叉攻击:正常情况下,由于大部分节点是诚实的,恶意节点想用这段时间内计算出的新链覆盖6次确认后的最长合法链。 很难,因为诚实的节点也在集中算力扩展最长的合法链。

如果出块时间很短,会导致分叉过多(因为与出块时间相比,可以认为网络上的传输时间变长了),这样诚实节点的算力就会被分散。 此时,恶意节点可能不需要超过50%的算力就可以进行51%攻击,或许十几%就足够了,这大大降低了比特币系统的安全性。

以太坊的出块时间减少到15秒,大大减少了出块时间,所以以太坊需要设计一个新的共识协议GHOST。 在这个协议中,分叉产生的孤儿块不能简单的丢弃,还应该给予一些叔叔奖励。

总之,在不同的区块链账本系统中,无论设计出块时间多长,都尽量保持稳定,不能让它随着系统总算力的增加而无限减少。

如何调整挖矿难度?

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

$$

target=目标*\frac{实际\时间}{预期\时间}

$$

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

为避免系统出现一些意外情况,导致系统出现非常大的波动,每次对目标阈值target的调整最大不能超过4次btc分叉产物,最小不能小于$\frac{1}{4 }$,即上面公式中的$\frac{actual\time}{expected\time}$,即使超过4也按4,即使小于$\frac{1} {4}$,它只会作为 $\frac{1}{4}$ 使用。

恶意节点不调整目标怎么办

目标是用比特币系统的代码编写的,代码也是开源的。 如果一个节点在该调整的时候不调整目标怎么办?

这也是大部分节点的诚信问题。 如果target没有调整,则发布的区块头(32字节target的压缩版)中的4字节nBits字段不正确,是诚实节点。 不会接受这样的块