今天,我们继续聊区块链的起源,探索“拜占庭容错”PBFT(PracticalByzantineFaultTolerance)。拜占庭容错是一种基于严格数据证明的算法,至少需要经过三个阶段的信息交换和局部共识才能达到最终的一致性结果。简单来说,当系统中的可信节点超过三分之二,问题节点不超过三分之一时,无论这些节点如何传播和传递问题信息,可信节点必须能够达成共识;实际上,每个收到消息的节点都在相互反复交换消息,相互验证,从而使受信任的节点能够确认正确的消息,并找出少数有问题的节点。以拜占庭帝国为例,将军们不停地互相重复确认信息,以找出间谍,直到他们确认自己收到了正确的命令。因此,能保证达成共识的拜占庭系统节点数至少为4个,允许有1个坏节点。即:节点总数≥3问题节点总数+1,这就是“拜占庭容错”。光看全文,还是难以理解拜占庭容错的运行方式。让我们逐段解释它的图表。<区块链-共识机制的实战拜占庭容错PBFT>这篇文章是关于“拜占庭容错”猜测拆解的步骤,非常详细。对于拜占庭将军问题,PBFT算法至少经过三个阶段达成共识协议:,根据协议设计的不同,可能还包括A。首先,背景套用上面拜占庭将军的故事,PBFT算法至少需要4个参与者B.C:元帅,0:指挥官,1:一号将军,2:二号将军,3:二号将军3.C.胜利条件:2/3以上的部队联合发起“进攻”。拜占庭容错运行过程分解:拜占庭容错运行过程分解图片来源:https://www.samsonhoi.com/570/blockchain-pbft五个主要程序:1.元帅命令指挥官“进攻”(C发送“请求”“到0)2。指挥官收到“进攻”命令后,发送给所有将军(0向1、2、3发送“准备”)3.将军1收到指挥官和将军2的“进攻”通知,但没有收到三号将军半天的回应,他不理会三号将军,认为“进攻”是正确的,于是下令“进攻”。并将“进攻”命令传递给其余将领(1收到0和2发来的“准备”,但没有收到3,1向2和3发送“准备”,向0发送“确认”)将军2收到指挥官和1号将军“进攻”的通知,但没有收到3号将军的回应时,他们无视3号将军,认为“进攻”是正确的,于是下令“攻击”。并将“进攻”命令传递给其余将领(2从0、1收到“准备就绪”,但没有收到3,2向1、3、0发送“准备就绪”,向0发送“确认”)4.3号将军收到指挥官的“进攻”通知,1号将军,2号将军,这次不同的是3号将军没有将“进攻”请求传递给其他将军,而是跑了吓跑了(3没有给0、1、2发“准备好”,也没有给0发“确认”)5.最后全体将军亲自向元帅汇报执行情况(指挥官,将军1,军2),而3号将军没有反应,就当是逃跑或者被杀,不理会他的结果。元帅也认为大部分军队“出击”并取得了胜利,但同时他也发现三号将军有疑问。上述过程中,如果节点总数≥3且问题节点总数+1,即使其中一个将军跑了,没有进行“进攻”,最后还是赢了,只是造成了伤害对国家(其中一位将军因故障导致系统损坏),哪位将军有问题,在PBFT共识机制下,虽然有问题节点,但这是允许的,不影响最终的一致性结果。这就是所谓的PBFT算法的流程。