主页 > imtoken手机版下载 > 浅谈区块链——比特币网络的挖矿难度是多少?

浅谈区块链——比特币网络的挖矿难度是多少?

imtoken手机版下载 2023-03-16 06:24:03

几天前我想做一些小调查,它仍然有效。 请积极参与并为我提供一些参考。

1. 为什么在比特币网络中产生一个新区块大约需要十分钟?

我在《比特币网络运行过程原理》中提到了交易确认的概念。 关注比特币的人大概都知道(不关注的应该知道),比特币每个区块之间的间隔大概是十分钟左右。 没有具体原因为什么是十分钟而不是五分钟或二十分钟。 中本聪在他的比特币白皮书中给出了大约十分钟的第一次讨论。 他提到这十分钟来计算区块头信息的大小是否会导致存储问题1。

确定十分钟间隔除了与存储问题有关外,还与比特币网络处理交易的效率、区块链安全以及复杂的全球网络环境有关。 由于全球网络的信息传递有一定的滞后时间,在一个新的区块产生后,必须有一个延迟,直到所有节点都收到这个信息,而在这个延迟内,会消耗大量的电力和计算机资源进行计算。 显然是没用的。 有人计算过,间隔越短,资源浪费的比例越高2。

另外,在这个时间延迟内可能出现的同级别区块也会干扰最长区块链共识的形成。 如果出块的频率很高,比如每秒一个块或者每分钟一个块,可能是因为新的块还没有被全网接受和认可,其他节点会产生同级别的新块,或者一些更新的区块被发布,这会对全网达成最长链的共识造成刺眼的干扰,反而导致最长链的共识形成需要更多的时间。 另外,如果区块链的生成频率很低,新区块发布的时间间隔会很长,交易确认的效率也会大大降低。

以十分钟左右为一个区块发布的时间间隔,是由中本聪开发比特币时比特币网络软件代码中的一个常数决定的。 常数之所以如此确定,是因为没有特殊原因信息。 以上分析是基于比特币网络事后成功运行的结果。

2. 飞镖游戏了解挖矿计算比赛难度

每个人都应该知道飞镖游戏。 对面是一个大圆盘(我们假设半径为R),靶心处有一个红圈就是靶心区域(半径用r表示)。 我们的目标是尽可能多地把飞镖投进靶心。 这里有一个假设,就是每次随机投飞镖的人都是随机投的,这样飞镖的落点也是随机分布在大圆盘上的。 我们记下圆盘上的位置到圆心的距离为d,那么显然当d小于等于r时,目标就成功命中了。 可以看出,这款飞镖游戏的难度与靶心的半径直接相关,半径越大,难度越低。 只要调整靶心半径r,就可以调整飞镖游戏的难度。

比特币使用哈希值来计算游戏。 哈希值的输出有 2256 个数字。 我们在介绍哈希函数的特点的时候说过这个数字是非常巨大的。 我们用这个数字用一个非常大的飞镖圆盘半径R来表示。 比赛就是不断地计算哈希值,找到一种计算结果小于或等于某个目标值(target)的方法,即为成功。 而这个目标值(target)就相当于靶心半径r,每一次计算结果的hash值就相当于每次抛出时从盘上的位置到圆心的距离d。

这样的投掷方式命中靶心的概率,其实就是靶心面积与大盘总面积的比值。 现在有一个关键的细节你需要明白,就是如果每次都命中靶心的概率是1%,那么也可以说100次中有1次命中靶心。 后一种说法并不是说第100次就会出手,而是有时候第1次出手,有时候第200次出手也不会出,但是经过无数次的统计,就是100次的时候有1次出手. 这个细节非常重要。 理解这一点,就更容易理解挖矿计算的随机性和新区块以大致相同的速度生成的原理。

3.使用挖矿难度来调整新区块生成的速度

我们通过飞镖游戏来了解挖矿比赛的概况以及如何调整难度。 飞镖游戏调整靶心半径r,当r增大时,难度减小,反之亦然,那么对于挖矿比赛来说,调整的就是目标值(target),当目标值(target)越大时,难度为高低,反之亦然。 因此,调整难度实际上是在调整计算成功的概率。 如果挖矿难度调高(即目标值调小),则需要进行更多的哈希计算才能成功找到小于等于目标值(target)的计算结果。 .

区块链与比特币_区块链和比特币是不是一回事_区块链与比特币的关系

计算哈希值非常耗时。 全网的计算资源计算出一个成功的哈希值需要十分钟左右。 这个概率对应的目标值(target)就是我们需要的。 随着计算资源的不断投入或退出,十分钟的哈希计算次数也会增加或减少。 这就需要不断调整目标值(target)来调整计算成功的概率。 保持十分钟出块的速度。

在这里我将回顾一下挖矿难度如何成为调节新块生成速度的工具:

1、首先,十分钟出块是一个明确的目标,这是中本聪在发明比特币时就确定的;

2、然后我们需要找到一种机制,能够保持十分钟出新块的速度,同时保证去中心化;

3. 中本聪在设计使用工作量证明(挖矿)来争夺新区块发行权的同时,也确定了调整目标值(target)的方式来调整挖矿难度,从而调整成功率挖矿比赛。 可能性;

4、这个概率最终保证比特币网络的新区块在十分钟左右产生,达到稳定新区块速度的目的。

4、挖矿难度是如何自动调整的?

现在我们把目光转向比特币网络是如何让所有节点协调自动调整挖矿难度的。 首先要告诉大家的是,挖矿难度的调整是每个节点的决定,但是是按照一定的规则做出的决定。

确定挖矿难度程序的规则如下:

1.每个区块都有一个编号,从第0个区块开始,然后是第1个区块。 当我写这篇文章时,最新的块号是#523663;

区块链与比特币_区块链与比特币的关系_区块链和比特币是不是一回事

2、每个节点在准备新区块时,首先计算新区块的区块编号是否可以被2016整除,如果不能整除,则该区块不需要调整挖矿难度,直接使用该区块的编号前一个块。 目标值(target)很好;

3、如果可以整除,则计算前2016个区块的总时间,看是否正好是两周;

4、如果偏离两周,说明比特币网络的算力发生了变化。 根据一个公式,上一个区块的目标值(target)可以根据最后2016个区块的时间占两周的比例进行调整。 4;

5、新区块使用调整后的目标值(target)进行挖矿计算。

我先介绍一下这个程序,相信大家也只能是半懂半懂。 这里有两个小细节想说明一下。

(1) “2016”号是多少?

首先,“2016”这个数字是怎么回事? 中本聪确定十分钟出块后,他不得不考虑在计算资源变化的情况下,如何调整难度,让比特币网络维持这十分钟。 我们已经介绍了这一点。 这里有个细节,就是挖矿难度调整多长时间合适?

每个区块是否根据前一个区块的时间进行调整? 这显然是不可能的,因为十分钟内计算成功只是概率统计的结果。 有可能某个矿工运气好区块链和比特币是不是一回事,一分钟挖出一个区块。 这样就不是根据算力资源的变化进行调整,而是根据运气的变化进行调整。

那么如果延长的时间比较长,比如一个月或者一年,那么在难度调整周期中可能会有某种新的计算设备出来形成超强算力的时候,这会影响比特币网络的安全性。 可见调整难度的时间和出块的速度是一样的,也是一个权衡的问题。 最终,中本聪选择了两周作为难度调整周期,两周一共有2016十分钟,这就是数字“2016”的由来。

每个节点首先检查区块号是否可以被2016整除,如果可以,则需要计算一个新的目标值(target); 如果不能整除,说明还没有到难度调整期,不用担心。

区块链与比特币的关系_区块链和比特币是不是一回事_区块链与比特币

(2)目标值(target)存放在哪里?

我们之前说过,目标值(target)相当于飞镖游戏的靶心半径r。 调整这个数字就相当于增加或缩小靶心,挖矿难度自然会随之改变。 在比特币网络区块链中,目标值(target)存储在所有区块的头部信息中5。

每个节点可以获得前一个区块的目标值(target)和前2016个区块的生成时间。 相信所有小学毕业的人都能轻松算出接下来2016年的blocks to 2 Weeks的值,新的目标值(target)怎么算来呀?

5. 比特币网络中的“难度”是什么意思?

其实这篇文章的任务应该是上一段就已经完成了。 如果您有一个大概的了解,则无需继续阅读。 如果你很好奇,我想稍微深入地介绍一个更重要的概念。 很多人在阅读其他资料时区块链和比特币是不是一回事,会被“难度”这个概念搞糊涂。 我真是个傻子,费了好大劲才弄明白是怎么回事。

本节之前我们提到的“难度”这个词是一个定性的概念,而在比特币网络中,“难度”这个词是一个专有名词,指的是一个量化描述挖矿难度的概念。 从现在开始,为了防止混淆,“difficulty”这个词如果不加双引号和英文,表示普通的定性概念,加双引号和英文表示定量概念。

“难度”的概念是在比特币网络运行一段时间后引入的。 其实实际的目标值(target)已经可以说明挖矿的难易程度,这个值存在于每个区块中,只是这个数字太大了,区块中记录的是一个经过处理的数字。 想要看懂数字是多少,真的不是捏手指就能搞定的。

因此特引入一个量化的概念来描述比特币网络的挖矿难度,用“难度”来表示。 这个难度值并没有存储在每个区块中,但是现在几乎所有提供区块内容展示的网站都专门列出了这个值,看起来和存储在区块中是一样的。 现在我将以比特币的第一个区块,编号为 0(著名的创世区块)和撰写本文时的最新区块来解释“难度”的含义。

比特币创世块

比特币编号是区块#523663

区块链与比特币的关系_区块链和比特币是不是一回事_区块链与比特币

以上是两个区块的头部信息。 我已经用红框标记了与我们的问题相关的部分。 现在让我分别解释一下:

1. 区块的哈希值是小于或等于目标值的挖矿竞争成功计算的结果。 它也是区块的符号和区块链之间的指针。 这个散列值也被使用。 我们可以看到这两个区块的哈希值都是6:

创世块哈希值:0000 0000 0019 d668 9c08 5ae1 6583 1e93 4ff7 63ae 46a2 a6c1 72b3 f1b6 0a8c e26f

最近区块哈希值:0000 0000 0000 0000 0008 fdd5 5c63 d532 0363 b76a 2a10 ec29 cd23 8475 936f e517

2、目标值(target)由区块链中的“Bits”字段表示,是一个8字节的定长十六进制数。 正如我们之前所说,这是通过一些特殊的方式处理和保存的。 一个block里面长啥样,这里就不细说了。 我直接计算两个block的目标值(target):

创世区块目标值(target):0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

最新区块目标值(target):0000 0000 0000 0000 0043 eca9 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

我们可以看到每个区块的哈希值都小于该区块的目标值,相当于落镖点到圆心的距离d,小于靶心半径。

我们还可以看到创世块的目标值,其实是中本聪自己指定的,所以在定义“难度”这个概念的时候,定义创世块的难度为1,后续的“难度” blocks 是使用创世块的目标值/当前块的目标值计算的。 因此,“难度”的概念可以理解为当前区块挖矿难度大于创世区块挖矿难度的倍数。

那我们再看看最近的区块的“难度”,是4,143,878,474,754.19。 超过4万亿次,这不是一个可怕的数字吗? 从这里也可以看出,比特币网络在过去的十年里经历了算力的恐怖增长。

区块链与比特币的关系_区块链和比特币是不是一回事_区块链与比特币

比特币网络从开始到现在的“难度”变化

近两年比特币网络“难度”的变化

笔记:

1、中本聪在白皮书中写道:“一个没有转账交易的区块头大约是80字节。如果我们假设每十分钟产生一个区块,那么一年内产生的所有区块头都有4.2MB大小。考虑到2008年典型的计算机系统配置是2GB内存,摩尔定律预测内存每年增加1.2GB,如果所有的区块头都必须读入内存,没有问题。”

2. 其他加密货币后来采用其他技术将区块间隔缩短到秒级。

3、计算结果的随机性是去中心化的要求,这里提醒一下。

4.我觉得这个介绍到小白应该能看懂的程度。 我不会谈论具体的细节、公式甚至代码。 职业玩家不需要看我的文章。 网上还有很多专业的文章。

5.目标值在block中的存储方式比较有意思,因为这个数很大,不能直接存储,所以采用了定长的方式。 不过这涉及到代码层面的细节,这里就不赘述了。 有兴趣的朋友可以自行查找资料,也可以留言与我交流。

6、这里表示的数字都是二进制数,每4位用16进制数表示。 估计很多新手都不清楚不同基数的高度。 这里我简单做一个对应的表:

中心化基数对照表(我在文章中展示的区块链数字的每一位代表一个十六进制数,实际上对应一个4位二进制数。)

由于微信个人订阅号的环境非常封闭,这几天建立了一个个人博客站点(geekszone.info)。 以后两地都会发表文章。 小伙伴们可以根据自己的喜好选择方便的阅读方式。 博客提供了留言功能,微信已经明确表示不会了。

浅谈区块链系列目录

请长按以下二维码识别并订阅本公众号