主页 > imtoken冷钱包苹果版下载 > btcpow算法 5.2 PoW 机制

btcpow算法 5.2 PoW 机制

imtoken冷钱包苹果版下载 2023-03-24 05:46:07

比特币系统的重要概念是基于互联网的去中心化账本,即区块链。 每个区块相当于一个账本页,区块中记录的信息主体是对应的交易内容。 账本内容的唯一性要求记账行为是中心化的行为。 然而,中心化带来的单点故障可能会导致整个系统的危机甚至崩溃。 去中心化记账可以克服中心化记账的弱点,但同时也会带来记账行为的一致性。

从去中心化账本系统的角度来看,每个加入系统的节点都必须保存一个完整的账本,但每个节点不能同时记账,因为节点处于不同的环境,接收的信息不同。 如果同时记账,难免会造成账目不一致,混乱不堪。 因此,需要达成共识,确定哪个节点有记账权。 比特币区块链通过竞争记账解决了去中心化记账系统的一致性问题。

比特币系统设计了一种机制,通过每个节点的计算能力,即“算力”来竞争记账权。 在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛获胜者将获得一次记账权,并将新的账本信息同步到其他节点。

但是,在去中心化的系统中,谁有权利决定竞争的结果呢? 比特币系统是通过一种称为“工作量证明”(PoW)的机制来实现的。

简单来说,PoW 是一种证明工作方已经完成了一定工作量的证明。 PoW 系统的主要特点是计算的不对称性。 工作端需要做一定的难度才能得到一个结果,但验证者可以很容易地通过结果检查工作端是否做了相应的工作。

例如,给定字符串“blockchain”,我们给出的工作量需求是,在这个字符串之后可以串联一个叫做nonce的整型值字符串,对串联后的字符串进行SHA256哈希运算,如果得到的哈希结果(表示为十六进制)以几个0开头,验证通过。 为了达到本次工作量证明的目的,我们需要不断递增nonce值,并对得到的新字符串进行SHA256哈希运算。 按照这个规则,找到前三位全为0的哈希值需要2688次计算,找到前六位全为0的哈希值需要620969次计算。

blockchain1 →
4bfb943cba9fb9926df93f33c17d64b378d56714e8a29c6ba8bdc9690cea8e27  
blockchain2 →
01181212a283e760929f6b1628d903127c65e6fb5a9ad7fe94b790e699269221 ……blockchain515 →
0074448bea8027bebd6333d3aa12fd11641e051911c5bab661a9b849b83958a7……blockchain2688 →
0009b257eb8cf9eba179ab2be74d446fa1c59f0adfa8814260f52ae0016dd50f……blockchain48851: 00000b3d96b4db1a976d3a69829aabef8bafa35ab5871e084211a16d3a4f385c……blockchain6200969: 000000db7fa334aef754b51792cff6c880cd286c5f490d5cf73f658d9576d424

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

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

1.工作量证明功能

页面置换算法 第二次机会算法_btcpow算法_匈牙利算法 km算法

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

SHA 是 Secure Hash Algorithm 的缩写,它是密码哈希函数家族。 这套函数由美国国家安全局(NSA)设计,美国国家标准技术研究院(NIST)发布,主要适用于数字签名标准。 SHA256 是该函数族之一,它是一种哈希算法,输出值为 256 位。 到目前为止,还没有针对SHA256算法的有效攻击。 详见第四章的解释。

2.块

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

块的一般结构如图 5-2 所示。

image.png

图 5-2 块结构

固定长度为 80 字节的块头是比特币工作量证明的输入字符串。 因此,为了让区块头能够反映出区块中包含的所有交易,在构建区块的过程中,需要通过Merkle树算法为要包含的交易列表生成Merkle根哈希值块,并将这个作为交易列表的哈希值存储在块头中。 Merkle树的算法图如图5-3所示。

image.png

图5-3 4条交易记录计算Merkle树根哈希值

btcpow算法_页面置换算法 第二次机会算法_匈牙利算法 km算法

图 5-3 显示了具有 4 个交易记录的 Merkle 树的根哈希值的计算过程。 先以这4笔交易为叶子节点构造一棵完整的二叉树,然后通过计算哈希值将这棵二叉树转化为Merkle树。

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

构建的区块链如图 5-4 所示。

image.png

图 5-4 区块链简化结构

从图5-4所示的简化区块链结构中,我们可以发现,在给定的时间范围内,所有需要记录的交易信息被构造成一棵Merkle树,而区块中包含一个指向这棵Merkle树的哈希指针,关联区块相关的交易数据。 同时,区块中还包含一个指向前一个区块的哈希指针,从而将记录不同交易的单个区块关联起来,形成区块链。

3.难度值

难度值是比特币系统中节点出块时的重要参考指标。 它决定了节点需要经过多少次哈希运算才能生成一个合法的区块。 比特币区块大约每 10 分钟生成一次。 如果新区块的生成要在不同的网络算力条件下都保持这个速率,则必须根据网络算力的变化调整难度值。 简单地说,难度值设置为每 10 分钟一个新块的速率,与节点的计算能力无关。

难度调整在每个完整节点内独立且自动发生。 每2016个区块,所有节点都会根据统一的公式自动调整难度。 这个公式是根据最近2016个区块花费的时间和预期时间(预期时间为20160分钟,即两周,按每10分钟一个区块计算。根据实际持续时间与预期持续时间的比值,做相应的调整(或者变难或者变容易),也就是说出块速度快于10分钟,难度就会增加,慢于10分钟,难度就会降低。

这个公式可以总结如下:

匈牙利算法 km算法_btcpow算法_页面置换算法 第二次机会算法

新难度值=旧难度值×(过去2016个区块耗时/20160分钟)

工作证明需要有一个目标值。 比特币工作量证明的目标值(Target)计算公式如下:

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

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

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

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

4. PoW的过程

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

1)生成一个铸币交易并与所有其他要打包到区块中的交易组成交易列表,通过Merkle树算法生成Merkle根哈希;

2)将Merkle根哈希和其他相关字段组装成一个区块头,将区块头的80字节数据作为工作量证明的输入;

页面置换算法 第二次机会算法_匈牙利算法 km算法_btcpow算法

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

比特币的工作量证明就是俗称的“挖矿”的主要工作。 理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制打下基础。

5、基于PoW的共识记账

我们以比特币网络的共识记账为例,来说明基于PoW的共识记账过程。

1)客户端产生新的交易并向全网广播,请求交易记账;

2)每个记账节点收到这个请求后,会将收到的交易信息合并到一个区块中;

3)每个节点尝试通过PoW过程在自己的区块中找到一个具有足够难度的工作量证明;

4)当一个节点找到一个工作量证明时,它向全网广播;

5)当且仅当区块中包含的所有交易都有效且之前不存在,其他节点同意该区块的有效性;

6) 其他节点表示接受该块,接受的方式是跟随块的末尾,创建一个新的块来扩展链,并将接受块的随机哈希值作为第一个随机哈希新块的价值。

匈牙利算法 km算法_btcpow算法_页面置换算法 第二次机会算法

通过上述记账过程,将客户所需的交易信息写入各个记账节点的区块链中,形成分布式高概率一致性账本。

六、比特币PoW能否解决拜占庭将军问题

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

1)一致性(Agreement)

当不诚实节点的总算力小于50%,每轮同步出块的概率很小时,诚实节点出块的概率就很高。 用严格的数学语言来说应该是:当任意两条诚实节点的本地链截取K个节点时,剩余两条链的头部区块不同的概率随着K的增加呈指数下降。

2)正确性(有效性)

大多数区块必须由诚实节点提供。 严格来说,大部分区块只能由诚实节点在不诚实算力很小的情况下提供。

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

因此,我们可以看出,比特币的共识算法并不适用于私有链和联盟链。 原因是它是最终共识算法,而不是强共识算法。 第二个原因是它的共识效率低。 提供共识效率将牺牲共识协议的安全性。

另一方面,比特币通过巧妙的矿工奖励机制提高了网络的安全性。 矿工通过挖矿获得比特币奖励,通过记账获得交易手续费,使得矿工更愿意维护网络的正常运行,任何破坏网络的失信行为都会损害矿工自身的利益。 因此,即使一些比特币矿池拥有强大的算力,他们也没有作恶的动机,而是有动机维护比特币的正常运行,因为这关系到他们的真实利益。