前面描述过PBFT的仿真方式,见区块链实验室(3) – 用Go语言仿真PBFT算法,本文以上述仿真程序说明PBFT的共识过程。
为叙述方便,首先给出1个简化的网络,共4个节点,构成如下图所示的网络。这样的网络可以避免冗余的网络报文。从0节点开始,利用PBFT算法对1条消息完成共识。

完成该消息的共识后,各节点的报文如下所示。首先是节点0的网络报文。

 1:表示节点0的报文
 2:这是发出消息的共识请求,本文从0节点开始进行共识
 3:从0节点开始的共识请求,马上向它的邻居节点1节点发送preprepare报文
 4:0节点向其邻居1节点发送commit报文。这条消息在时序上靠后,结合其他节点的报文来阅读。
节点1的网络报文

 1:表示节点1的报文
 2:来自0节点的preprepare报文,由1节点转发给2节点
 3:节点1验证preprepare报文后,创建自己的prepare报文,发给节点0和节点2
 4:同上
 5:向节点0转发prepare报文,该报文由节点2或者节点3创建,由节点2转发而来
 6:向节点0转发prepare报文,该报文由节点3或者节点2创建,由节点2转发而来
 7:节点1创建commit报文,发送到邻居节点0和节点2
 8:同上
 9:向节点0转发commit报文,该报文来自节点2。此时节点1已经收到足够多的commit报文,不必等节点3的commit报文。
 10:节点1创建reply报文,该报文不再广播,而是直接发给目标节点0
 11:节点1转发其他节点的reply报文
 12:同上
节点2的网络报文

 1:节点2的报文
 2:来自节点1的preprepare报文,由节点2转发给节点3
 3:创建prepare报文,转发给邻居节点1和3
 4:同上
 5:转发prepare报文,该报文来自节点3
 6:转发prepare报文,该报文来自节点1
 7:创建commit报文,发给节点1
 8:同时发给节点3
 9:转发节点3的commit报文给节点1
 10:创建reply报文,发给节点1
 11:向节点1转发节点3的reply报文
节点3的网络报文

 1:节点3的报文
 2:创建prepare报文并发送
 3:创建commit报文并发送
 4:创建reply报文并发送



















