主页 > imtoken钱包官方苹果 > 《区块链技术第04期》共识机制:POW

《区块链技术第04期》共识机制:POW

imtoken钱包官方苹果 2023-07-05 05:41:32

比特币系统是一个基于互联网的去中心化账本。

从去中心化账本系统的角度来看,每个加入系统的节点都必须保存一个完整的账本,但每个节点不能同时记账,因为节点处于不同的环境,接收的信息不同。 如果同时记账,势必会导致账目不一致。

因此,需要有一个共识机制来达成哪个节点有记账权。

比特币系统设计了一种以各节点的算力(即“算力”)竞争记账权的机制。

但是,在去中心化的系统中,谁有权利决定竞争的结果呢?

比特币系统是通过工作量证明(POW)机制完成的。 POW是确认工作方已经完成一定工作量的证明。

POW的主要特点是计算的单向性:

工作方需要做一定的难度才能得到结果; 但验证者可以很容易地通过结果检查工作方是否做了相应的工作。

如果比特币系统中的任何一个节点想要产生一个新的区块并将其写入区块链,就必须解决比特币系统的问题(即完成一定的工作量)。 该问题的三个关键要素是:工作量证明功能、区块和难度值。

比特币系统中使用的工作量证明函数是 SHA-256。 比特币系统中的区块由区块头和区块中包含的交易列表组成。 比特币系统的难度值由区块哈希值中前导 0 的个数决定。 前导 0 的数量越多,难度值越大。

比特币POW的过程可以简单理解为以不同的nonce值作为输入,尝试进行SHA-256哈希运算,找出满足给定个数前导0的哈希值的过程。

比特币系统的难度值设置为每 10 分钟一个新区块的速率,与节点的计算能力无关。

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

由于哈希函数是单向函数,很容易根据随机数计算出哈希值,但从哈希值推导出随机数在计算上是不可能的,因此可以认为哈希结果为小于或等于目标难度值,最有可能通过计算(即通过做功)获得。

为什么可以用前导0数作为难度值呢?

例如,重复N次(N趋于无穷大)掷一个六面骰,每次都可以掷出6以下(含6)以下的数,但如果要掷3以下的数,则得到平均每个结果需要抛雪2次;

也就是说,投“3个以下(含3个)”的难度是投“6个以下(含6个)”的两倍,需要的“工作量”也要多一倍。

如果定义“6以下”规则的难度系数(difficulty)为“1”,那么“3以下”规则的难度系数为“2”,也就是说为了满足规则的要求,需要两倍的工作量; “低于1”的难度系数为6,即规则需要6倍的工作量。

比特币难度值是如何更新的?

在比特币协议中,一个256位的整数被指定为难度“1”,如下:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

在当时全网的算力下,需要10分钟左右的哈希计算工作量才能满足这个规则(挖掘哈希值小于等于这个数)。

如果要保证10分钟的工作时间不变,那么当算力增加n倍时,需要增加n倍的难度值。

比特币系统每2016个区块更新一次难度值,更新难度值的算法如下:

【new_target】=【prev_target】*【前2015个区块生成时间】/1209600

其中1209600是每10分钟出一个块需要的秒数,按照标准是2016个块。

POW的基本流程

比特币节点解决工作量证明问题的步骤大致概括如下:

值得一提的是:比特币系统的默克尔树记录了当前区块的交易; 以太坊的默克尔树记录了交易的全额,而账本只记录了每次变化的区块链的价值,需要全网回溯。 获取帐户中的货币值。

基于POW的共识记账

下面以比特币系统的记账过程为例,说明基于POW的共识记账步骤:

比特币系统将区块大小限制为 1MB,每个区块需要 6 次确认才能确认区块中包含的交易。

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

关于叉子

比特币系统采用的POW共识机制,就是让矿工之间相互竞争解决一道数学题。 谁先解决谁就广播他成功的消息,所有矿工都会过来复制那个页面。 把它贴在你的账本末尾,然后开始新的记账过程。

在这个过程中,经常会出现这样的情况:两个矿工同时解决问题。

由于每个矿工的区块数据不同,解决问题的结果也不同。 都是正确答案,只是方块不同。

因此,此时区块链中,出现了两个不同的、都符合要求的区块。 由于距离的原因,不同的矿工看到这两个区块的顺序。

一般情况下,矿工会先复制他们看到的区块,然后在这个区块上开始新的挖矿工作。

于是,就出现了这样的情况,我们称这种现象为分岔。

比特币挖完了怎么记账_除了挖比特币矿机还能挖什么_比特币 挖完

这个时候怎么办?

在以POW为共识算法的区块链系统中,这个问题是这样解决的:

从分叉的区块开始,因为不同的矿工跟随不同的区块,两条不同的分叉链的算力是不同的,所以两条链的增长速度也是不同的。 随着时间的推移比特币挖完了怎么记账,一条链将永远比另一条长。

当矿工发现全网有一条更长的链时,他会放弃自己当前的链,复制所有新的更长的链,并在这条长链的基础上继续挖矿。

所有矿工都这样操作,这条链成为主链,分叉弃链消失。

除了挖比特币矿机还能挖什么_比特币挖完了怎么记账_比特币 挖完

注意,区块链保证数据唯一性的前提是所有矿工遵循相同的机制。

还有一种情况是矿工不遵循同样的机制,那么也会出现分叉。 这种分叉有两种情况:

在比特币系统中比特币挖完了怎么记账,交易不能算作已确认,直到:

基于POW的共识机制算法分析

基于POW的共识机制能否解决拜占庭问题?

2015 年,Juan Garay 对比特币的 POW 共识算法进行了正式分析,并得出结论:

比特币的 POW 共识算法是一种概率拜占庭协议。

1.一致性

当不诚实节点的总算力小于50%且挖矿难度较高(10分钟左右出块)时,诚实节点有很大概率有相同的块。

2.正确性

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

3. 安全

恶意节点需要获得全网50%以上的算力,高昂的成本保证节点没有恶意。 此外,比特币通过巧妙的矿工奖励机制提高了网络的安全性。

矿工通过挖矿获得比特币奖励,通过记账获得交易手续费,使得矿工更愿意维护网络的正常运行,任何破坏网络的失信行为都会损害矿工自身的利益。

因此,即使一些比特币矿池拥有强大的算力,他们也没有作恶的动机,反而有动机维护比特币的正常运行,因为这关系到他们的真实利益。

基于POW的共识算法应用

比特币系统基于POW共识算法,不适用于私有链和联盟链。

原因首先是它是最终共识共识算法,不是强共识共识算法; 其次,它的共识效率低,提供共识效率会牺牲共识协议的安全性。

目前基于POW的共识机制主要被比特币、莱特币、莱特币等公链所采用。