区块链知识系列 - PBFT 共识

了解 BFT

拜占庭容错(Byzantine Fault Tolerance), 是算法的属性

共识协议要解决的核心问题是在网络中有节点作恶时如何能够达成共识。
要解决这个困难,首先需要了解“拜占庭将军问题”。 1982 年, Leslie Lamport、Robert Shostak 和 Marshall Pease 发表论文《拜占庭将军问题》 [23] ,提出一项思维实验:假设一组将军分别统领拜占庭军队的一部分,共同围困一座城市。这些将军只能通过信使将自己的策略相互传递。但是,这组将军中有一人或多人可能已经叛变,并试图传递错误信息以破坏作战计划。该实验的问题就在于,这支军队最多允许存在多少名叛变的将军,使得作战仍然可以顺利完成?数字货币运行机制可类比于拜占庭将军问题场景。在分布式账本中,各参与者节点可近似看作将军。此问题即转化为,分布式系统可容许多少作恶节点,使得交易仍可正常进行,且不损害整体系统的可靠性? Lamport 本人已经给出了达到拜占庭容错的架构 [24] ,但算法复杂,难以投入应用。此后,Miguel Castro 和 Barbara Liskov于 1999 年提出实用拜占庭容错算法(PBFT) [25] ,此系统能够提供高性能的运算,可以每秒处理成千的请求。

  • 两轮2/3投票: pre-prepare, prepare, commit
  • 具有1/3的容错性,防止双花攻击问题,吞吐量高,稳定性较强

了解 PBFT

实用拜占庭容错(Practical Byzantine Fault Tolerance), 是算法

算法经过三个阶段达成一致性

  • Pre-prepare:负责执行区块,产生签名包,并将签名包广播给所有共识节点;

  • Prepare:负责收集签名包,某节点收集满2*f+1的签名包后,表明自身达到可以提交区块的状态,开始广播Commit包;

  • Commit:负责收集Commit包,某节点收集满2*f+1的Commit包后,直接将本地缓存的最新区块提交到数据库。

假设节点总数为3f+1,f为拜赞庭错误节点:

  1. 当节点发现leader作恶时,通过算法选举其他的replica为leader。

  2. leader通过pre-prepare 消息把它选择的 value广播给其他replica节点,其他的replica节点如果接受则发送 prepare,如果失败则不发送。

  3. 一旦2f个节点接受prepare消息,则节点发送commit消息。

  4. 当2f+1个节点接受commit消息后,代表该value值被确定

优点

  • 系统运转可以脱离币的存在,pbft算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。

  • 共识的时延大约在2~5秒钟,基本达到商用实时处理的要求

  • 共识效率高,可满足高频交易量的需求

  • 适用于联盟链/许可链,应用于区块链的话,不会出现分叉情况

缺点

  • 可扩展性差,通讯的复杂度是节点的平方,很难支持大规模网络节点,参与共识的节点数达到100个已经是极限,共识时间约6秒(采用Tendemint共识的Cosmos的数据)

  • 不能直接用于公链,因为公链的节点数量很多,无法达成这种巨大的通信量,需要配合其它共识先选出共识节点

  • 应用于联盟链需要知道参与共识节点的数量和他们对应的公钥

  • 收集不到足够的票数,网络将停止出块

确定性类型

概率确定性 是指基于链的协议提供的确定性类型(例如,比特币的中本聪共识),其中包含该交易的区块越深地进入该链,则该交易将不被还原的可能性越大。区块越深,包含该区块的分支越可能是最长的链。这就是为什么我们建议等到一笔交易进入比特币区块链深6块之后(大约需要一个小时),然后再进行该交易,以确保该交易被还原的可能性很小。

绝对确定性 是指基于PBFT的协议(例如Tendermint)提供的确定性类型,其中一旦将交易包含在区块中并添加到区块链中,便立即将其视为最终完成。在这种情况下,由一个leader提议一个区块,并且必须经过大部分验证者的批准该区块才能最终添加到链上。

猜你喜欢

转载自blog.csdn.net/wcc19840827/article/details/111320600