实用拜占庭容错算法,简称pBFT,是首个可以在实际应用场景中相对高效的解决拜占庭将军问题的BFT算法,由Miguel Castro和Barbara Liskov在1999年提出。
pBFT已经过多年的实践验证,算法成熟度高,网上有大量的资料和文章介绍拜占庭将军问题和pBFT算法原理,但大部分都只是关注于算法的流程和机制,却忽略了当中重要的设计。
因此,本文不再详细介绍拜占庭将军问题和pBFT的基本原理,而是重点介绍几个关键设计:
-
假设恶意节点数量为f个,为什么网络需要至少3f+1个节点?
-
为什么需要三个阶段?为什么两个阶段不行?
-
客户端为什么只需要f+1个确认即可?
本文中的概念和符号的定义,都尽可能保持与论文一致。但为了增加文章的可读性,我尽可能用简单的语言描述,方便大家理解。如果要进一步深刻理解,按需阅读原文。
01 为何至少3f+1?
拜占庭容错算法的目的是使得所有诚实的节点最终状态一致并且是正确的。要达到这样的目的,必须满足诚实的节点数量多于恶意的节点(少数服从多数)。
在实际的开放网络环境中,不仅有恶意节点,还有由于网络拥堵或机器故障等原因,存在部分短暂失联的节点,也需要作为考虑的因素。
因此,假设恶意