区块链共识算法之BFT(4)

 (1)PBFT

    最常用的BFT共识机制是实用拜占庭容错算法PBFT(Practical Byzantine Fault Tolerance)。该算法是Miguel Castro和Barbara Liskov在1999年提出 来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由节点数的指 数级降低到节点数的平方级,使得拜占庭容错算法在实际系统应用中变得可行。
    PBFT是针对状态机副本复制为主的分布式系统执行环境开发的算法,旨在 让系统中大部分的诚实节点来覆盖恶意节点或无效节点的行为。PBFT算法的节 点数量是固定的,节点身份提前确定,无法动态添加或删除,只能适用于节点数 目固定的联盟链或私有链场景中。
    PBFT算法存在的问题:
      ◼  计算效率依赖于参与协议的节点数量,不适用于节点数量过大的区块链
  1. 系统,扩展性差。
  2. ◼  系统节点是固定的,无法应对公有链的开放环境,只适用于联盟链或私
  3. 有链环境。
  4. ◼  PBFT算法要求总节点数n>=3f+1(其中,f代表作恶节点数)。系统的失效节点数量不得超过全网节点的1/3,容错率相对较低。

(2)DBFT

    考虑到BFT算法存在的扩容性问题,NEO采用了一种代理拜占庭容错算法— —DBFT(Delegated Byzantine Fault Tolerant)。它与EOS的DPOS共识机制 一样,由权益持有者投票选举产生代理记账人,由代理人验证和生成区块,以此 大幅度降低共识过程中的节点数量,解决了BFT算法固有的扩容性问题。
    为了便于在区块链开放系统中应用,NEO的DBFT将PBFT中的将C/S(客户 机/服务器)架构的请求响应模式,改进为适合P2P网络的对等节点模式,并将静 态的共识参与节点改进为可动态进入、退出的动态共识参与节点,使其适用于区 块链的开放节点环境。
    DBFT的算法中,参与记账的是超级节点,普通节点可以看到共识过程,并 同步账本信息,但不参与记账。总共 n 个超级节点分为一个议长和 n-1 个议员, 议长会轮流当选。每次记账时,先有议长发起区块提案(拟记账的区块内容), 一旦有至少(2n+1)/3 个记账节点(议长加议员)同意了这个提案,那么这个 提案就成为最终发布的区块,并且该区块是不可逆的,所有里面的交易都是百分 之百确认的,区块不会分叉。
    NEO 的 DBFT 共识机制下只设置了 7 个超级节点,以一种弱中心化的模式 实现较高的共识效率。目前,这些代理节点是静态选出的,并完全由项目方部署, NEO 由此被外界质疑为过于中心化。
    DBFT 的优点一方面是效率高,NEO 每 15~20 秒生成一个区块,交易吞吐 量可达到约 1000TPS,通过适当优化,性能可达 10000TPS;另一方面是其良 好的最终性,区块不会分叉,以此来验证参与者的身份,保护网络安全,使区块 链能够适用于对交易确认实时性要求高的真实金融场景。
    DBFT 的缺点也不容忽视,一方面体现在较低的容错率,当有 1/3 或以上超 级节点为恶意节点或宕机后,系统将无法提供服务;另一方面体现在超级节点数 量过少,中心化程度高。
区块链共识算法之BFT(4)_第1张图片区块链、后端技术 交流!

你可能感兴趣的:(区块链)