主页 > imtoken钱包靓号地址软件 > 2 比特币如何使用PoW共识机制

2 比特币如何使用PoW共识机制

imtoken钱包靓号地址软件 2023-05-06 06:37:26

1 工作量证明机制

工作量证明 (PoW) 是一种针对服务和资源滥用或拒绝服务攻击的经济对策。 一般需要用户进行一些耗时且适当的复杂计算,答案可以很快被服务商核对。 所消耗的时间、设备和能源作为保证成本,以确保服务和资源被真正的需求所使用。

2 比特币如何使用PoW共识机制

比特币的共识机制是PoW共识比特币难度调整表,借鉴了HashCash的处理方式。 下面我们来谈谈比特币是如何实现 PoW 共识的。

比特币发展历程介绍表_比特币难度调整表_比特币挖矿难度周期

块状结构

从区块头的结构我们可以看到一个4字节的Nonce值。 Nonce值的变化会影响整个区块头的哈希值。 挖矿节点尝试不同的Nonce值(通常从0开始,每次加1),寻找小于Difficulty Target指定的难度值的哈希值。

大小字段描述

4字节

版本

区块版本号,目前为2

32字节

前一个区块哈希

前块(parent block)的块头哈希比特币难度调整表,Hash算法为double-SHA256

32字节

默克尔根

区块中的交易 Merkle 树根

4字节

时间戳

块创建 UNIX 时间戳

4字节

难度目标

工作量证明算法难度

4字节

随机数

通过改变计数器来达到工作量证明要求的结果

3 PoW证明过程

PoW证明过程,也就是俗称的挖矿过程,寻找合适的哈希值。

块打包过程这里不做详细描述。 区块是通过一定的算法生成的。 当然,一代需要一定的代价。

区块头中的每一个值都不是随机的,而是通过固定的算法得到的。 Merkle根哈希值是将交易打包成Merkle树,最终得到根哈希值。 难度值根据算法不断调整,保持每10分钟一个区块的出块率。

比特币发展历程介绍表_比特币难度调整表_比特币挖矿难度周期

PoW证明过程

首先我们将所有交易打包生成Merkle树,计算Merkle根的哈希值,然后组装区块头,不断对区块头进行SHA256(SHA256(区块头))双重哈希运算,然后进行判断是否小于网络目标值,这里其实就是把它转成二进制。 二进制前面没有0,因为如果有1,十进制值肯定很大,不符合条件。 如果大于这个目标值,说明前面的位数不满足第一个位数为0的条件,哈希不成功。 然后改变随机值,形成新的区块头,继续哈希。

这意味着该矿已经被挖出,其他节点也很容易验证,只需做一次SHA256(SHA256(验证区块头))即可判断。

挖矿难度

比特币挖矿的难度调整方法非常简单。 难度目标调整是不断降低256位的难度值。 例如区块277315的难度值用十六进制表示:0x0000000000000003A30C00000000000000000000000000000000000000000000

这个数字的前60位二进制表示都是0,如果想增加难度,只需要减小这个值即可。 随着难度值的降低,起始0的个数增加,可以找到的哈希值范围减少 。 越难开采。

难度调整

难度调整在每个完整节点内独立且自动发生。 每2016个区块,所有节点都会根据统一的公式自动调整难度。 如果出块速度快于 10 分钟,则增加难度,如果出块速度小于 10 分钟,则降低难度。

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

4 POW的优缺点

优势

缺点

思考

1:为什么在挖矿过程中会计算两次hash值?

中本聪在设计比特币挖矿算法时,就考虑了SHA2-256算法被破解的可能性,虽然理论上没有针对SHA2-256算法的攻击。 为了降低攻击威胁,区块头数据需要经过SHA2-256算法计算两次。

2:如果所有节点都从0开始尝试Nonce值,那岂不是永远都是算力高的节点先算出有效结果,算力低的节点就永远无望挖矿成功了?

区块头中的大部分信息是相同的,但是每个节点的Merkle Root一定是不同的,因为每个节点都会有自己的Coinbase交易,里面包含了节点矿工的地址,这个地址是给每个独立挖矿的节点都是不同的,根据散列函数的雪崩效应,每个独立节点的Merkle Root一定是显着不同的。

3:如何解决拜占庭问题?

通过工作量证明,增加发送信息的成本,降低节点发送消息的速率,从而保证一次只有一个节点在广播,同时会附加自己的广播时签名。 工作量证明实际上相当于增加了成为叛徒(发布虚假区块)的成本。 只有第一个完成证明的节点才能广播区块。 比赛难度很大,对计算能力要求很高。 白白浪费了,整个系统也因此更加稳定。