PBFT解决了原始拜占庭容错算法效率不高的问题,将算法的复杂度由指数级降低到多项式级。
PBFT主要分为三个阶段:
- pre-perpare
- prepare
- commit
前两个阶段主要是为了将在同一个视图里发送的请求排序,且使得网络中的每个节点都认可这个序列并按序执行。
如上图所示,现在我们有四个节点,且没有故障节点和问题节点(坏节点个数记为 f f f),并假设R0为主节点,R1,R2,R3为从节点。
过程:
1.客户端(图中的左上角)首先发送请求到各个副本节点,主节点R0收到请求之后向所有从节点R1,R2,R3广播pre-prepare信息。
2.在各个节点接受了pre-prepare信息之后,就向其他节点发送prepare消息
3.如果接收到了至少 2 f + 1 2f+1 2f+1个来自不同节点(包括自身)的pre-prepare消息,则认为请求在该节点中达到了prepared状态
4.达到prepared状态的节点广播commit消息来告知其他节点该请求已经处于prepared状态
5.当节点收到至少 2 f + 1 2f+1 2f+1个来自不同节点(包括自身)的commit消息,则认为请求在该节点中达到了committed状态
6.副节点按照请求n由低到高的顺序执行请求并反馈给客户端,客户端收到来自 f + 1 f+1 f+1个节点的相同消息,意味着本轮共识正确完成。
PBFT要求网络总节点数N满足 N > = 3 f + 1 N>=3f+1 N>=3f+1
👁插眼后补