区块链:3共识算法 非强一致共识算法PoW机制

Posted DonquixoteXXXXX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链:3共识算法 非强一致共识算法PoW机制相关的知识,希望对你有一定的参考价值。

区块链:3、共识算法 非强一致共识算法PoW机制

一、引入

比特币系统的重要概念是一个基于互联网的去中心化账本, 即区块链,每个区块相当于账本页,区块中记录的信息主体,即为相应的交易内容。

账本内容的唯一性要求记账行为是中心化的行为,然而,中心化所引发的单点失败,可能导致整个系统面临危机甚至崩溃。去中心记账可以克服中心化账本的弱点,但同时也会带来记账行为的一致性问题。

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

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

然而,在一个去中心化的系统中,谁有权判定竞争的结果呢?比特币系统是通过一个称为“工作量证明”(Proof of Work, PoW)的机制完成的。

二、概念

简单地说,PoW就是一份确认工作端做过一定量工作的证明。
PoW系统的主要特征是计算的不对称性

工作端需要做一定难度的工作得出一个结果, 验证方却很容易通过结果来检查工作端是不是做了相应的工作。

举个例子,给定字符串“blockchain",我们给出的工作量要求是,可以在这个字
符串后面连接一个称为nonce的整数值串,对连接后的字符串进行SHA256哈希运算,
如果得到的哈希结果(以十六进制的形式表示)是以若千个0开头的,则验证通过。为
了达到这个工作量证明的目标,我们需要不停地递增nonce值,对得到的新字符串进行
SHA256哈希运算。按照这个规则,需要经过2688次计算才能找到前3位均为0的哈希
值,而要找到前6位均为0的哈希值,则需进行620 969次计算。

blockchain1→4bfb943cba9fb9926df93f33c17a64b378d56714e8a29c6ba8bic9690cea8e27
blockchain2→01181212a283e760929f6b1628a903127c65e6 fb5a9ad7fe94b790e699269221
clockchain2688→0009b257eb8cf 9ebal79ab2bee74a446fa1c59f0adfa8814260f52ae0016dd50f
.....
blockchain6200969: 00000db7fa334aef

通过.上面这个计算特定SHA256运算结果的示例,我们对PoW机制有了一个初步
的理解。对于特定字符串后接随机nonce值所构成的串,要找到这样的nonce值.满足前n位均为0的SHA256值,需要多次进生行哈希值的计算。一般来说,n值越大,需要完成的计算量也越大。由于哈希值的伪随机特性,要寻找4个前导0的哈希值,预期大概要进行2^16次尝试,这个数学期望的计算次数,
就是所要求的“工作量”。

三、三个关键要素

解出比特币网络出的Pow问题。这道题关键的3个要素是工作量证明函数区块难度值
工作量证明函数是这道题的计算方法
区块决定了这这道题的输入数据
难度值决定了这道题所需要的计算量:

四、PoW的过程

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

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

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

3)不停地变更区块头中的随机数,即none的数值, 
并对每次变更后的区块头做双重SHA256运算(即SHA256(SHA256((BIock Heade))),
将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

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

五、基于PoW的共识记账

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

1)客户端产生新的交易,向全网进行广播要求对交易进行记账:
2)每一个记账节点一且收到这个请求,将收到的交易信息纳人一个区块中:
3)每个节点都通过PoW过程,尝试在自己的区块中找到一个具有足够难度的工作量证明;
4)当某个节点找到了一个工作量证明,它就向全网进行广播;
5)当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
6)其他节点表示它们接受该区块,
  而表示接受的方法则是在跟随该区块的末尾,制造新的区块以延长该链条,
  而将被接受区块的随机哈希值视为先于新区块的随机哈希值。

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

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

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

1 、一致性(Agreement)

在不诚实节点总算力小于50%的情况下,同时每轮同步区块生成的几率很少的情况下,诚实的节点具有相同的区块的概率很高。
用数学的严格语言说应该是:当任意两个诚实节点的本地链条截取K个节点,两条剩下的链条的头区块不相同的概率随着K 的增加呈指数型递减。

2、正确性(Validity)

大多数的区块必须由诚实节点提供。
严格来说,当不诚实算力非常小的时候,才能使大多数区块由诚实节点提供。

因此可以看到,当不诚实的算力小于网络总算力的50%时,同时挖矿难度比较高,在大约10分钟出一个区块情况下,比特币网络达到一致性的概念会随确认区块的数目增多而呈指数型增加。

但当不诚实算力具一定规模,甚至不用接近50%的时候,比特币的共识算法并不能保证正确性,也就不能保证大多数的区块由诚实节点来提供。

因此,比特币的共识算法不适合于私有链和联盟链
原因首先是它是一个最终一致性共识算法,不是一个强一致性共识算法。
第二个原因是其共识效率低。提供共识效率又会牺牲共识协议的安全性。

另一方面,比特币通过巧妙的矿工奖励机制来提升网络的安全性。矿工挖矿获得比特币奖励以及记账所得的交易费用使得矿工更希望维护网络的正常运行,而任何破坏网络的非诚信行为都会损害矿工自身的利益。
因此,即使有些比特币矿池具备强大的算力,它们都没有作恶的动机,反而有动力维护比特币的正常运行,因为这和它们的切实利益相关。

七、优点和弊端

1、优点

1)架构简明扼要、有效可靠;

2)由于要获得多数节点承认,那攻击 者必须投入超过总体一半的运算量 (51%攻击),才能保证篡改结果。这使得攻击成功的成本变得非常高昂,难以实现;

3)某种程度上是公平的,你投入越多 的算力,你获得打包权的机率也等比增加。

2、缺点

然而PoW机制存在明显的弊端。

一方面,PoW的前提是,节点和算力是均匀分布的,因为通过CPU的计算能力来进行投票,拥有钱包(节点)数和算力值应该是大致匹配的,然而随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC矿机挖矿,节点数和算力值也渐渐失配。

另一方面,PoW太浪费了。非常浪费能源。投入在一种加密货币上的能源,可能会超过一个小型国家的总使用量。比特币网络每秒可完成数百万亿次SHA256计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值。

当然,相对于允许世界上任何一个人在瞬间就能通过去中心化和半匿名的全球货币网络,给其他人几乎没有手续费地转账所带来的巨大好处,它的浪费也许只算是很小的代价。

同时由于加密货币在世界上已成为一 种投资标的,所以有技术者或富有者, 可以开发出由 ASIC 组成的特制计算 机,垄断算力。这与加密货币的去中 心化思想背道而驰。

有鉴于此,人们提出了一些工作量证明的替代者。权益证明( Proof of Stake, PoS)就是其中的一种方法。

权益证明要求用户证明拥有某些数量的货币(即对货币的权益),点点币( Peercoin)是首先采用权益证明的货币,尽管它依然使用工作量证明挖矿。

参考文献

[1]邹均.张海宁.唐屹.李磊.区块链技术指南.机械工业出版社
[2]教授玩币.CHIA(起亚)投研报告.https://xw.qq.com/cmsid/20210430A05WVL00

以上是关于区块链:3共识算法 非强一致共识算法PoW机制的主要内容,如果未能解决你的问题,请参考以下文章

区块链知识点索引

区块链 --- 共识算法

区块链:3共识算法 PoS机制DPoS机制

全面认识区块链

区块链实战区块链新发明:工作量证明,PoW共识算法

浅谈传统分布式一致性算法和区块链共识机制