拜占庭容错共识算法

一、PBFT

节点类型:

主节点:通过轮换或者随机算法生成

主节点索引通过公式(block_number + current_view) % consensus_node_num计算得出;

节点计算当前leader索引与自己索引相同后,就开始打包区块。

其余节点(副本节点和观察者节点)

其中:主节点以及副本节点参与共识

主节点未因发生故障导致切换时,则称整个共识过程发生在一个视图内

共识过程:

1、客户端发送交易到节点,节点将交易放入交易持中,并广播交易请求

2、主节点的sealer线程开始打包区块(交易池中获取交易,打包为一个区块),将新区块编入Prepare包中,广播给所有共识节点

3、通过以下三个步骤完成请求的共识过程

①Pre-Prepare 阶段,共识节点判断Prepare包的合法性(若为空包,请求视图轮换),缓存合法Prepare包(过滤重复收到相同包),执行区块中的交易并缓存执行后的区块,广播签名包。

② Prepare 阶段,共识节点判断签名包的合法性(与本地缓存的执行后区块做比较),缓存合法的签名包,若签名包达到2*f+1,广播commit包

③Commit 阶段,共识节点判断commit包的合法性(与本地缓存的执行后区块做比较),缓存合法的commit包,若commit包达到2*f+1,将新区块上链。

BCOS提出的Prepare包的优化,降低网络负载

在一个由(3*f+1)个节点构成的系统中,只要有不少于(2*f+1)个非恶意节点正常工作,该系统就能达成一致性

换言之:在 N≥3F+1 的情況下一致性是可能解決,N 为总计算机数,F 为有问题的计算机总数

猜你喜欢

转载自blog.csdn.net/m0_47233175/article/details/123715666
今日推荐