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次交易的耗时明显不一样啊。
文章来源:https://www.toymoban.com/news/detail-744980.html
还是4个节点的网络,发起3次交易,但只启动3个节点,这时不能共达成共识,见下图所示。在线的3个节点均报告共识失败。
文章来源地址https://www.toymoban.com/news/detail-744980.html
做这个有什么用?研究并改进共识算法,进行仿真,从完成时间、网络流量等对比实验。
欢迎探讨goodlcp@163.com
到了这里,关于区块链实验室(3) – 用Go语言仿真PBFT算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!