PBFT是一种容错算法或者共识算法,许多文章用下图来描述该算法。这个图的假设条件是4个节点构成1个全连通网络,能够彼此直接通信。实际的网络不是强连通图,因此一次共识的报文需要广播消息。
例如,上图新增1个节点4,该节点与其他对等节点没有直接连接,那么PBFT的每个阶段的报文需要广播消息。本文以100个节点为例,用GO语言仿真PBFT。这100个节点构成1个无标度网络,见下图。该网络是无向网络,用1个对称矩阵表示。
在GO工程里,用1个线程表示1个节点,共启动100个线程。每个节点与其邻居节点通信,向邻居节点发送广播报文。GO工程代码片段如下。