主页 > imtoken下载钱包 > 透视工作量证明(POW)在比特币网络中的应用

透视工作量证明(POW)在比特币网络中的应用

imtoken下载钱包 2023-12-20 05:10:58

现在是时候充分意识到一些简单但强大的东西了

文字 | 观鱼

这是术语科普系列的第一篇文章。 希望通过这个系列,让懂技术的朋友和不懂技术的朋友,都能了解基本的行业术语。 尝试每周发表一篇文章。 本周,我们来看看工作量证明 (POW)。

比特币主连比特币连续的区别_比特币分叉影响比特币总量_怎么证明自己有比特币

先听个故事

“六一”节将至,笨笨熊小学的聪聪老师遇到了难题。 学校里有130个孩子,但只有21颗糖果。 如何分配这些糖果。 于是他想到了一个很好的办法。 他布置了数学题,让所有的孩子一起解题。 谁先答对,谁就会得到一颗糖果作为奖励,然后所有小朋友继续回答下一题,直到所有的糖果都分发完为止。 完全的。 这个故事中的糖果分配方式涉及到工作量证明(POW)的思想,谁拥有最好的计算能力,谁就可以获得糖果。

在比特币的世界里,POW是如何应用的?

我们先来看比特币挖矿的过程,因为挖矿的过程就是POW申请的过程。 在比特币网络中,任何交易数据都需要打包才能写入区块。 负责打包这些交易数据的人称为矿工。 成功打包交易数据后,矿工将在比特币网络中获得奖励。 获得奖励的过程称为挖矿。

比特币分叉影响比特币总量_比特币主连比特币连续的区别_怎么证明自己有比特币

事实上,挖矿过程类似于故事中描述的解决问题的过程。 只有成功解出正确答案的矿工才能挖矿成功。 但严格来说,挖矿包括三个步骤:打包、解题和广播。 解决问题成功是挖矿成功的充分必要条件。 为了弄清楚挖矿的细节,我们先来看几个概念。

SHA256算法是比特币网络给出的一种解题算法。 SHA 是安全散列算法的缩写。 SHA256 算法是安全散列算法家族的一员。 通过SHA256算法输入任意长度(小于2^64bit),输出总是256位的消息摘要,我们称之为哈希值。 美妙之处在于这个过程是不可逆的,也就是说,我们无法通过输出哈希反编译输入消息。 至少到目前为止,还没有有效破解SHA256算法。 这要归功于SHA256算法的巧妙设计。 这里我们不作讨论,后面会写关于SHA256算法的话题。

怎么证明自己有比特币_比特币主连比特币连续的区别_比特币分叉影响比特币总量

比特币区块由区块头和区块中包含的交易列表组成。 交易列表附加在区块头之后,第一笔交易(coinbase交易)是与矿工奖励和费用相关的特殊交易。 区块头大小为80字节,其组成如下。

这个 80 字节的块头是 SHA256 算法的输入消息。

其中,版本号表示该区块遵守的验证规则; 父块哈希值使用SHA256计算(SHA256(parent block header)); 交易列表的默克尔根哈希值也使用SHA256(SHA256(默克尔根))计算; 时间戳是区块生成的大概时间; 目标难度值是指成功挖出区块的难度阈值; 随机数Nonce值是矿工随机输入的值,是决定矿工能否挖矿成功的关键。 我们会配图详细写出来。

比特币分叉影响比特币总量_怎么证明自己有比特币_比特币主连比特币连续的区别

挖矿难度值用于调整挖矿速度。 比特币网络将新块的速度设置为每 10 分钟一个。 根据全网旷工算力的波动,每两周(即2016个区块)调整一次难度。 如果这两周的平均出块时间小于 10 分钟,算法的难度就会增加,反之,算法的难度就会降低。 以下是新难度值的计算方式。

新难度值 = 旧难度值 *(20160

分钟 / 过去2016个区块出块总时长)

如果你细心,你会发现在写入区块头时,有一个参数叫做目标难度值。 它与挖矿难度值有什么关系? 我们用一个公式来说明。

目标值 =  最大目标值 / 挖矿难度值

其中最大目标值是一个常数值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 显然同时显然,目标值与难度值成反比。 在实际挖矿中,目标值通常是特定格式的哈希值,需要一定数量的前导0。 目标值要求的前导0越多,问题越难解决。 当矿工计算出区块的哈希值小于目标难度值时(即满足前导零个数时),问题成功解决!

怎么证明自己有比特币_比特币主连比特币连续的区别_比特币分叉影响比特币总量

下面我们描述一下具体的挖矿过程,

怎么证明自己有比特币_比特币主连比特币连续的区别_比特币分叉影响比特币总量

生成一笔Coinbase交易并与所有其他交易组成交易列表打包进区块,通过Merkle Tree算法生成Merkle Root Hash。

将Merkle Root Hash等相关字段组装成一个区块头,将区块头(Block Header)的80字节数据作为双SHA256运算的输入。

解决问题

不断改变区块头中的随机数Nonce,对新的区块头(即SHA256(SHA256(Block_Header)))进行两次SHA256哈希运算,并与当前难度的目标值进行比较。 如果小于目标难度(即矿工计算出的区块哈希值满足前导0数要求),则问题成功解决。

下图中的Hash值是对当前区块头进行两次SHA256运算的结果。 以区块2为例,我们假设区块2的目标难度值为00xxx...(前导0的个数为2),当区块2的Nonce值为35230时,则前导0的个数为哈希值为4,小于目标难度(即满足前导2个0的要求),求解成功。

比特币分叉影响比特币总量_比特币主连比特币连续的区别_怎么证明自己有比特币

当区块2的Nonce值为35231时,Hash值前导0为0,大于目标难度(即不满足前导2个0的要求),此时求解失败。

怎么证明自己有比特币_比特币分叉影响比特币总量_比特币主连比特币连续的区别

实际上,矿工需要使用专门的高性能计算机(即矿机)做大量的Nonce值碰撞,使Hash值满足目标难度要求。 Nonce值碰撞成功的概率与矿工当前掌握的算力(单位时间内Nonce值碰撞能力)成正比。

播送

比特币主连比特币连续的区别_怎么证明自己有比特币_比特币分叉影响比特币总量

区块打包并成功破解后,将向全网广播。 其他节点将验证其是否符合规则。 如果验证有效怎么证明自己有比特币,其他节点将接收该块并将其附加到现有区块链。 然后进入下一轮挖矿。

至此,我们对比特币挖矿有了一个大概的了解。 其中,打包区块,通过不断碰撞Nonce值获得满足难度要求的Hash,广播成功的代币奖励的过程就是工作量证明(POW)。 是不是类似于故事中解决问题和获得糖果的过程?

比特币网络中的 POW 算法是否存在可利用的漏洞?

挖矿本质上是在比特币网络中争夺记账权的过程。 下一个包含交易数据的区块通过旷工挖矿不断地安全连接到上一个区块,从而形成一条链。 没有中央组织,旷工完全由 POW 算法达成共识。 但是如果两个节点同时发现新区块会怎样呢? 为此我们引入另一个概念——fork。

如果两个节点同时发现一个新区块,网络中的节点将使用相同的前一个区块,主链上将出现一个短暂的分叉。 但是当下一个新区块被发现时,两个分叉的长度不同,所有节点都会去到最长的链上,分叉就会被淘汰。

比特币主连比特币连续的区别_怎么证明自己有比特币_比特币分叉影响比特币总量

事实上,POW 算法总是选择最长的链,所以如果攻击者想要进行双花攻击,他伪造的区块链长度必须比真实区块链的长度长。 假设当攻击开始时,攻击者在真正的区块链后面 z 个区块。 这个假设是合理的,因为攻击者只有在他的真实交易被确认后才能发起攻击,而交易确认通常需要几个区块。 假设忠诚节点找到下一个节点的概率为p,攻击者找到下一个区块的概率为q,攻击者在z个区块后攻击成功的概率为qz。 然后是:

比特币分叉影响比特币总量_怎么证明自己有比特币_比特币主连比特币连续的区别

即:如果攻击者的算力不低于忠诚节点,则攻击者最终会得逞; 如果攻击者的计算能力小于忠诚节点,那么攻击者成功的概率将呈指数下降。 在此过程中,z不断变大,使得攻击者的希望越来越渺茫。

综上所述,理论上,当攻击者拥有全网51%的算力时,他的攻击总能成功。 但是,如果攻击者掌握了全网50%以上的算力,他就可以通过挖矿和出售比特币获得长期稳定的收益。 一次攻击只会使比特币崩溃并使自己破产。 因此,51%算力攻击在理论上是可行的怎么证明自己有比特币,但在实践中是不可能的。 (下图中的家伙是目前唯一能够发动这种攻击的人)

比特币分叉影响比特币总量_怎么证明自己有比特币_比特币主连比特币连续的区别

怎么证明自己有比特币_比特币主连比特币连续的区别_比特币分叉影响比特币总量

最后,我们通过两种简洁的算法总结了工作量证明(POW)在比特币网络中的应用过程。

算法一:

1)计算当前区块所有交易Hash值的Merple树的根值。选择一个Nonce数

2)计算当前区块头的double SHA256值

3)如果该值小于设定值(此时我们称Nonce值为Nonce golden number),算法结束,将自己找到的区块广播到网络; 否则,选择另一个 Nonce 值并转到“2)”

算法 2:

1)确定网络中最长的链

2)并行执行以下操作:

A) 将最长链的最新区块作为上一个区块,将上一个区块的Hash值写入当前区块的prevHash字段。构建自己的当前区块,执行算法1

B) 如果从其他节点收到新的块消息,验证消息。 如果验证通过,则停止执行算法1,转“1)”

-结束-

怎么证明自己有比特币_比特币分叉影响比特币总量_比特币主连比特币连续的区别

参考:

精彩回顾往事

块前|

项目|

项目|

项目|

科学 |

科学 |

座君| 一个有温度的公众号

怎么证明自己有比特币_比特币分叉影响比特币总量_比特币主连比特币连续的区别

比特币主连比特币连续的区别_比特币分叉影响比特币总量_怎么证明自己有比特币