区块链实验室(10) - 实例说明PBFT的共识过程

30 篇文章 5 订阅
11 篇文章 0 订阅

前面描述过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报文并发送

节点3为什么没收到其他节点的commit消息?节点3参与共识的时序靠后,共识已完成,没必要再向节点3发送commit消息。节点1,2,3为什么没有收到reply消息?reply消息直接发到目标节点,不广播reply消息。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值