主页 > imtoken安装下载地址 > 比特币的PoW机制及挖矿原理

比特币的PoW机制及挖矿原理

imtoken安装下载地址 2023-12-08 05:10:16

从去中心化账本系统的角度来看,每个加入系统的节点都必须保存一份完整的账本,但每个节点不能同时保存账本,因为节点所处的环境不同,接收到的信息也不同。同时,也必然会导致账本不一致,造成混乱。因此,需要就哪个节点有权记账达成共识。比特币区块链通过竞争记账的方式解决去中心化记账系统的一致性问题,即与每个节点的算力,即“算力”竞争记账权的机制。

在比特币系统中,每10分钟左右举行一轮计算竞赛,竞赛获胜者将获得图书的预订权,并将图书信息同步添加到其他节点。然而,在一个去中心化的系统中,谁有权力判断竞争的结果呢?比特币系统是通过一种称为“工作量证明”(PoW)的机制完成的。

简单地说,PoW 是工人完成了一定工作量的证明。 PoW 系统的主要特点是计算的不对称性。工作方需要做一些困难的工作才能得到结果,但验证者可以通过结果轻松检查工作方是否做了相应的工作。

例如给定字符串“blockchain”,我们给出的工作量要求是可以在字符串后面拼接一个叫做nonce的整数值字符串,并且对拼接后的字符串进行SHA256哈希运算,如果得到的哈希结果(十六进制form) 以几个 0 开头,验证通过。为了实现这个工作量证明目标,我们需要不断增加 nonce 值并对生成的新字符串执行 SHA256 哈希运算。按照这个规则,前3位为0的hash值需要2688次计算,前6位为0的hash值需要620969次计算。

通过上面计算特定SHA256运算结果的例子,我们对PoW机制有了初步的了解。对于由特定字符串后跟随机nonce值组成的字符串,要找到这样一个满足前n位全为0的SHA256值的nonce值,需要多次计算hash值。一般来说,n的值越大,需要做的hash计算量就越大。由于散列值的伪随机性,预计将执行大约 216 次尝试以找到具有 4 个前导 0 的散列值。这个数学上预期的计算次数就是所需的“工作量”。

如果比特币网络中的任何一个节点想要生成一个新的区块并写入区块链,就必须解决比特币网络的PoW问题。这个问题的三个关键要素是工作量证明函数、区块和难度值。工作量证明函数是这个问题的计算方式,block决定了这个问题的输入数据,难度值决定了这个问题需要的计算量。

1.工作证明功能和区块数据计算过程

比特币系统中使用的工作证明函数是SHA256。

比特币会同时挖到币么

比特币的区块结构如下图所示:

比特币区块由区块头和区块内容组成。交易清单。块头的大小为 80 字节,由 4 字节的版本号、32 字节的前一个块的哈希、32 字节的默克尔根哈希和 4 字节的时间戳(当前时间)组成。 , 4 字节当前难度值和 4 字节随机数。块中包含的交易列表附加到块头中。第一笔交易是coinbase交易,是矿工获得奖励和费用的特殊交易。

固定长度为 80 字节的区块头是用于比特币工作量证明的输入字符串。因此比特币会同时挖到币么,为了使区块头反映区块中包含的所有交易,在区块的构建过程中,需要通过默克尔树算法生成默克尔根哈希值,生成区块的默克尔根哈希值。在构建区块期间要包含在区块中的交易列表。交易列表的哈希值存储在区块头中。 Merkle树的算法图如下图所示。

上图是一棵有 4 条交易记录的 Merkle 树的根哈希值的计算过程。首先以这4个交易为叶子节点构建完整的二叉树,然后通过计算哈希值将二叉树转化为Merkle树。

比特币会同时挖到币么

首先,对于四个交易记录:Txa~Txc,计算它们各自的哈希值HA~HC,然后计算两个中间节点HAB=Hash(HA+HB)和HCD=的哈希值Hash(HC+HD),最后计算出根节点的哈希值HABCD=Hash(HAB+HCD)。

构建的简化区块链结构如上图所示。

所有需要在给定时间范围内记录的交易信息都被构造成一棵默克尔树,区块中包含一个指向默克尔树的哈希指针,与区块相关的交易数据相关联。同时,该区块还包含一个指向前一个区块的哈希指针,从而将记录不同交易的各个区块关联起来,形成一个区块链。

2.挖矿难度

难度值是比特币系统中节点出块时的重要参考指标,它决定了一个节点需要经过多少次Hash运算才能出块合法。比特币区块大约每 10 分钟生成一次。如果要在全网不同的算力条件下以这个速率产生新的区块,难度值必须根据全网算力的变化进行调整。

比特币会同时挖到币么

简单地说,难度值设置为每 10 分钟一个新块的速率,与节点计算能力无关。难度调整在每个完整节点中独立且自动发生。每 2016 个区块,所有节点都会根据统一的公式自动调整难度。根据实际时长与预期时长的比例,进行相应的调整(或变得更难或更容易)。即出块速度快于10分钟,难度增加,小于10分钟,难度降低。

这个公式可以概括为:新难度值=旧难度值×(过去2016个区块花费的时间/20160分钟)

工作量证明需要一个目标值。比特币工作量证明的目标值(Target)计算公式:目标值=最大目标值/难度值

其中最大目标值是一个常数值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目标值的大小与难度值成反比。比特币工作量证明的实现是矿工计算的区块哈希值必须小于目标值。

3.PoW 过程

比特币会同时挖到币么

比特币PoW过程,可以简单理解为,成就是用不同的nonce值作为输入,尝试进行SHA256哈希运算,找出满足给定数量的前导0哈希的过程。需要的前导零越多,难度就越大。比特币节点解决工作量证明问题的步骤大致总结如下:

1)生成造币交易,与所有其他交易形成交易列表,打包成一个区块,由默克尔树算法默克尔根哈希生成;

2)将Merkle root hash等相关字段组装成块头,将块头的80字节数据作为工作量证明的输入;

3)不断改变块头中的随机数,即nonce的值,每次改变后对块头进行双SHA256运算(即SHA256(SHA256(Block_Header))),将 result 值与当前网络的目标值进行比较。如果小于目标值,则问题成功解决,工作量证明完成。

比特币的工作量证明是主要工作,俗称“挖矿”。

4.PoW 能解决拜占庭一般问题吗?

比特币会同时挖到币么

比特币PoW共识机制能否解决拜占庭普遍问题,业内一直存在争议。 2015 年,Juan Garay 对比特币的 PoW 共识算法进行了形式化分析,得出的结论是比特币的 PoW 共识算法是一种概率拜占庭协议(Probabilistic BA)。 Garay 对比特币共识协议的两个重要属性的分析如下。

1)协议

在不诚实节点的总算力小于50%,且每一轮产生同步块的概率很小的情况下,诚实节点有很大概率拥有相同的块。用严格的数学语言应该是:当任意两个诚实节点的本地链截取K个节点时,剩余两条链的头块不同的概率随着K的增加呈指数下降。

2)有效性

大多数区块必须由诚实节点提供。严格来说,当不诚实算力很小的时候,大部分区块可以由诚实节点提供。

因此可以看出,当不诚实的算力低于全网算力的50%,且挖矿难度较高时,10分钟左右出块时,比特币网络达到共识性的概念随着确认区块的数量呈指数增长。但是当不诚实算力有一定规模,甚至不接近50%时,比特币的共识算法就不能保证正确性,即不能保证大部分区块都是由诚实节点提供的。

因此,我们可以看到比特币的共识算法并不适合私有链和联盟链。原因是它是最终共识共识算法比特币会同时挖到币么,而不是强共识共识算法。第二个原因是它的共识效率低。提供共识效率将牺牲共识协议的安全性。此外,比特币通过巧妙的矿工奖励机制增强了网络的安全性。矿工通过记账获得挖矿和交易费用的比特币奖励,使矿工更愿意维护网络的正常运行,任何破坏网络的不诚实行为都会损害矿工自身的利益。所以,即使一些比特币矿池拥有强大的算力,他们也没有作恶的动机,而是有维持比特币正常运行的动机,因为这关系到他们的真实利益。

PoW 机制存在明显的缺陷。一方面,PoW 的前提是节点和算力均匀分布,因为投票是基于 CPU 的算力,所以钱包(节点)的数量和算力值要大致匹配。但是随着人们挖矿CPU挖矿逐渐升级到GPU、FPGA,直到ASIC矿机挖矿,节点数量和算力逐渐不匹配。另一方面,PoW 太浪费了。比特币网络每秒可以执行数百万亿次 SHA256 计算,但这些计算除了使恶意攻击者无法轻易伪装成数百万个节点并破坏比特币网络之外,几乎没有实际或科学价值。

当然,与让世界上任何人通过去中心化和半匿名的全球货币网络瞬间向他人转账几乎不收取任何费用的巨大好处相比,浪费可能只是一个很小的代价。