区块链实验室(3) – 用Go语言仿真PBFT算法

PBFT是一种容错算法或者共识算法,许多文章用下图来描述该算法。这个图的假设条件是4个节点构成1个全连通网络,能够彼此直接通信。实际的网络不是强连通图,因此一次共识的报文需要广播消息。

在这里插入图片描述

例如,上图新增1个节点4,该节点与其他对等节点没有直接连接,那么PBFT的每个阶段的报文需要广播消息。本文以100个节点为例,用GO语言仿真PBFT。这100个节点构成1个无标度网络,见下图。该网络是无向网络,用1个对称矩阵表示。

在这里插入图片描述

在GO工程里,用1个线程表示1个节点,共启动100个线程。每个节点与其邻居节点通信,向邻居节点发送广播报文。GO工程代码片段如下。

在这里插入图片描述
在这里插入图片描述

运行结果如下图。6次交易均已达成共识,但各自耗时不一样。

在这里插入图片描述

上述6次交易的网络流量如下图,达到了772176。此处所谓的网络流量是指报文数量。由此可见,PBFT共识的流量真是大啊。

在这里插入图片描述

改成4个节点的网络,发起3次交易,启动4个节点能达成共识,见下图。网络的规模小了,这3次交易的耗时明显不一样啊。

在这里插入图片描述

还是4个节点的网络,发起3次交易,但只启动3个节点,这时不能共达成共识,见下图所示。在线的3个节点均报告共识失败。

在这里插入图片描述

做这个有什么用?研究并改进共识算法,进行仿真,从完成时间、网络流量等对比实验。

欢迎探讨[email protected]

猜你喜欢

转载自blog.csdn.net/qq_18807043/article/details/130984483