赞
踩
本篇文章开启区块链共识算法的普及——我以 PBFT (Practical-Byzantine-fault-tolerant)实用拜占庭容错共识算法打头阵。
为什么先是PBFT呢?
一个原因是觉得这个算法的名字很酷,实际上它也有着有趣的历史背景。另一个原因呢,就是最近在接触联盟链,而这个算法呢,正是联盟链的共识算法的宠儿。
联盟链有两个共识算法:一个是本章将去讲的PBFT,另一个就是DBFT(Delegated Byzantine fault tolerance)委托拜占庭容错共识算法。
在区块链中有一个著名的问题,就是拜占庭将军问题,对于拜占庭将军问题,这里不再做普及,因为网上相关的文章已经很多了。不了解的同学移步至此拜占庭将军问题。
PBFT 刚开始是在MIT的Miguel 和 Barbara Liskov在1999年的学术论文中提出的,他们的本意是为设计一个低延迟存储系统设计系统,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行,主要是为了应用于不需要大交易量但需要处理许多事件的数字资产平台,每个节点都可以发布公钥,这是被允许的。
节点将签名所有通过节点的消息,以验证其准确性。当得到一定数量的签名想用,此交易就被认定为有效。
解决了BFT(原始拜占庭容错算法)效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。
了解即可,后面会提到
f 是恶意节点数,N是总结点数
当节点数>3时,拜占庭将军问题的有解情况将会比较复杂;
For example:
当恶意节点数f = 1时,总结点数N = 3f = 3时,问题将会无解,如下图所示
显而易见,在f = N/3的时候,整个节点系统都将无法做出正确的决定;因为恶意节点恶意传递结果,导致无论恶意节点时发令者还是接令者,都会坏了整个结果的输出;
当恶意节点数f = 1时,总结点数N > 3f = 4时,问题将会得到解决,如下图所示:
无论恶意节点如何恶意地传递信息,由于还存在着其他三个公平节点,因此最后总是能够少数服从多数,得到最终的结果。
假定节点总数是N,作恶节点数为f,那么剩下的正确节点数为N - f
。
意味着只要收到N - f个消息且N - f > f
就能做出决定,但是这N - f
个消息里可能有f个是由作恶节点冒充的(或因网络延迟导致f个恶意节点的消息先被收到),那么正确的消息就是N - f - f
个。
为了多数一致,正确消息必须占多数,也就是N - f - f > f
,所以N最少是3f + 1
个。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。