PBFT即实用拜占庭容错算法,由Miguel Castro和Barbara Liskov在1999年提出,可以在作恶节点少于三分之一的情况下,保证系统的正确性(避免分叉)。与原始的BFT算法相比,算法复杂度从指数级降低到了多项式级,从而使得BFT算法的实际应用成为可能。实际上,Tenermint就是PBFT的一个简化版本的实现。
基本概念
首先了解一下几个基本概念:(从区块链的视角)
- replica:即区块链节点,提供“副本复制”服务
- client:向primary发起请求的客户端节点,在区块链中往往跟primary合二为一
- primary:区块发起者,在收到请求后生成新区块并广播
- backup:区块验证者,在收到区块后进行验证,然后广播验证结果进行共识
- view:一个primary和多个backup形成一个view,在该view上对某个区块进行共识
- sequence number(n):由primary指定的一个数字,可以理解为区块高度
- checkpoint:如果某个sequence number对应的区块收到了超过2/3的确认,则称为一个checkpoint
另外,primary是所有节点轮流做的,每个view上都会选出一个新的primary。
三阶段协议
三阶段协议是PBFT的核心,参见下图: