一分钟了解影响未来的技术-区块链(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 和链的交互
- pbft 委员会会产生一名leader, leader 节点负责pbft的消息的准备和发出
- leader 节点会通过 FetchFastBlock通过中间层pbft_agent 去链上产生一个fastblock ,获取到块后会打包 fastBlock 到Proposal(preprepare) 消息并分发给每一个委员会成员节点。(期间委员会节点会分发消息)
- 所有委员会节点会收到并验证Proposal消息中的块,收到并验证成功后进入prevote(prepare)
消息中的块,收到并验证成功后进入prevote(prepare) - prevote ,Precommit(commit) 这两个阶段会把自己对于块的验证结果(VerifyFastBlock)同意或反对发送给所有收到并统计收到节点票数,当超过2/3的节点数