一分钟了解影响未来的技术-区块链(5):区块链共识机制(二)

这一篇我们来下说PBFT共识:

PBFT基本流程

在这里插入图片描述

算法的核心三个阶段分别是pre-prepare阶段(预准备阶段),prepare阶段(准备阶段),commit阶段(提交阶段)。图中的C代表客户端,0,1,2,3代表节点的编号,打叉的3代表可能是故障节点或者是问题节点,这里表现的行为就是对其它节点的请求无响应。0是主节点。整个过程大致是:

首先,客户端向主节点发起请求,主节点0收到客户端请求,会向其它节点发送pre-prepare消息,其它节点就收到了pre-prepare消息,就开始了这个核心三阶段共识过程了。

Pre-prepare阶段:节点收到pre-prepare消息后,会有两种选择,一种是接受,一种是不接受。什么时候才不接受主节点发来的pre-prepare消息呢?消息过期,消息超前

Prepare阶段:节点同意请求后会向其它节点发送prepare消息。这里要注意一点,同一时刻不是只有一个节点在进行这个过程,可能有n个节点也在进行这个过程。因此节点是有可能收到其它节点发送的prepare消息的。在一定时间范围内,如果收到超过2/3个不同节点的prepare消息,就代表prepare阶段已经完成。

Commit阶段:于是进入commit阶段。向其它节点广播commit消息,同理,这个过程可能是有n个节点也在进行的。因此可能会收到其它节点发过来的commit消息,当收到2/3个commit消息后(包括自己),代表大多数节点已经进入commit阶段,这一阶段已经达成共识,于是节点就会执行请求,写入数据。

两种命令发出方案:

cosmos —> leader出块

泰岳链—> 群发块

泰岳链 pbft 和链的交互

在这里插入图片描述

  1. pbft 委员会会产生一名leader, leader 节点负责pbft的消息的准备和发出
  2. leader 节点会通过 FetchFastBlock通过中间层pbft_agent 去链上产生一个fastblock ,获取到块后会打包 fastBlock 到Proposal(preprepare) 消息并分发给每一个委员会成员节点。(期间委员会节点会分发消息)
  3. 所有委员会节点会收到并验证Proposal消息中的块,收到并验证成功后进入prevote(prepare)
    消息中的块,收到并验证成功后进入prevote(prepare)
  4. prevote ,Precommit(commit) 这两个阶段会把自己对于块的验证结果(VerifyFastBlock)同意或反对发送给所有收到并统计收到节点票数,当超过2/3的节点数
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章