区块链共识机制

更多关于区块链技术和投资的文章,请关注公众号“币梭”

https://mp.weixin.qq.com/s/RkdSrkzBDWmpL9iUNCyBlg

 

什么是共识机制

共识机制的起源

共识机制的原理

    POW

    POS

    DPOS

    BFT

共识机制总结

    共识机制的评价指标

    共识机制对比

    共识机制展望

 

什么是共识机制

    

    区块链技术是去中心化分布式的P2P系统,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作的顺序和公平性,统一区块链的版本,并奖励提供资源维护区块链的使用者,以及惩罚恶意的危害者,这个制度就是共识机制。

 

共识机制的起源

 

    共识机制起源于拜占庭将军问题,拜占庭将军问题大概如下:

    拜占庭帝国即中世纪的土耳其,拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。

    在拜占庭问题里,各邻国最重要的事情是:所有将军如何能过达成共识去攻打拜占庭帝国。每个城邦向其他九个城邦派出九名信使,那么任何时间总计有90次信息传输,并且每个城市分别收到9条信息,可能每一条都写着不同的进攻时间,除此之外,信息传递的过程中,如果叛徒想破坏原有的进攻时间,就会自己修改相关信息,然后发给其他城邦亿混淆视听,这样结果是,部分城市收到结果后,会遵循一个或多个城市已经修改了的进攻时间,然后他们又会把错误的信息广播给其他城市,这样整个信息链中就充满了错误的信息,变成了一个相互矛盾的纠结体。

    针对这个问题,人们提出了两种解决方法

 

方案一:口头信息

口头信息即使将军们派人用口信传达消息,口头传达消息隐含了下面前提条件:

  • 每个被发送的消息都能够被正确投递

  • 信息接受者知道消息是谁发的

  • 沉默(不发消息)可以被检测

    口头协议的算法很简单,如果其中一个节点,比如1发布消息出去,其他九个节点接受到1的消息,然后分别转告给其他的节点,每个节点都是信息的转达者,一轮下来,每个节点手上都会有10个信息(进攻或者撤退),有叛徒的话,那信息可能有进攻或者不进攻的不一致消息。每个人相当于手里有一本消息的账本,该怎么决策呢?如果有一半以上的人说进攻,那么采取进攻行动就是能成功的,所以这时即便有叛徒,只要听大部分人的,少数服从多数来行动即是有利的。

 

举例:四位将军A、B、C、D,其中一位是叛徒

1)D是叛徒。

《区块链共识机制》

  • 信息有A发送出去,A是忠诚将军,发送都是正确的信息v

  • B接收到A信息后,B是忠诚将军,转发正确信息v给C

  • D接收到D信息后,D是叛徒,转发错误信息x给C

  • C接受的信息集为{v, v, x},因为正确信息占大多数,所以会选择正确信息v作为执行的行动

同理,B也是选择正确信息v作为执行的行动

 

2)A是叛徒

《区块链共识机制》

  • A是叛徒,为了防止B、C、D三位达成一致,分别发送了信息x、y、z

  • B、C、D都是忠诚的将军,互相转发信息

  • B、C、D最终信息集都是{x, y, z}。因为信息集是一样的,所以B、C、D三位的执行的动作也是一致的。

这种口头协议的算法也存在明显的缺点:口头协议并不会告知消息的上一个来源是谁,也就是消息不可追根溯源,出现信息不一致也很难找到叛徒在哪。

 

方案二:书面协议

书面协议相比口头协议,实际添加了下面两个隐含条件:

  • 将军们能够使用签名技术,签名不可伪造,一旦篡改即可发现。

  • 同时任何人都可以验证签名的可靠性。

书面协议相比口头协议,所有的消息都是有记录的,解决了追根溯源的问题。

 

方案三:比特币

    区块链技术是去中心化分布式的P2P网络系统,同样也存在拜占庭将军问题,比特币作为第一个区块链项目,通过过下面几个措施,完美解决拜占庭将军问题。

    措施一,发送信息成本。如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致谁都可以发起进攻的信息,为此,中本聪巧妙地在个系统加入了工作量证明法,工作量证明法需要花费计算机的算力去寻找合适的哈希值,谁是第一个寻找到哈希值,谁就可以传播消息,一段时间内只有一个节点可以传播信息。这样就解决信息混乱无序的问题。

    措施二,时间戳。如果不同的将军先后解出了题,各自先后向这个网络发布消息,于是各个节点都会收到来自不同节点发起的进攻或者不进攻的消息。中本聪设计了时间戳,为每个将军在解好题的时间盖上时间印章。最早解出题目的信息才是有效的。

    措施三,奖励机制。将军们凭什么要一起做工作量证明呢?中本聪设置一个奖励机制,谁是第一个计算出哈希值的,就奖励一定了比特币给谁,同样,拜占庭将军问题的奖励机制可以是瓜分拜占庭获得的利益。

    措施四,加密技术。对于信息的加密,中本聪引用了非对称加密。非对称加密算法的加密和解密使用来”公开密钥”和”私有密钥”两个密钥,这两个密钥成对出现,如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密; 同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密.比如,将军A想给将军B发送消息,为防止消息泄露,将军A只需要使用B的公钥对信息加密,而B的公钥是公开的,B只需要用只有他自己只的私钥解密即可。非对称加密技术完美解决消息传送的私密性、身份确认和签名的不可伪造、篡改等问题。

    措施五,共同账本。如果其中有叛徒了,怎么办呢?在这个分布式网络里,每个将军都有一份实时与其他将军同步的消息账本,账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军,尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。

    由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情,比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识。比特币因此完美解决了拜占庭将军问题。

 

共识机制的原理

 

下图是目前共识机制,本文只介绍POW、POS、DPOS和BFT共识机制

《区块链共识机制》

 

POW

    POW,Proof Of Work,即工作量证明。最初是由中本聪提出来用于比特币系统,其核心思想是通过算力竞争来保证数据一致性和共识的安全性。比特币系统中,各节点(即矿工)基于各自的计算机算力相互竞争来公共同求解一个复杂但容易验证的SHA256数学难题,最快解决该难题的节点获得区块的记账权和系统自动生成的比特币奖励。

 

比特币交易记账过程

      在比特币平台中,中本聪就是运用的pow工作量证明来使全网节点达到51%及以上的共识记账,以下将介绍pow工作量证明共识是如何记账的

  • 客户端产生新的交易,向全网广播

  • 每个节点收到请求,将交易纳入区块中

  • 每个进行POW共识算法,寻找合适的目标哈希值

  • 当某个节点找到了合适的目标哈希值,向全网广播

  • 当且仅当该区块的交易是有效的且在之前中未存在的,其他节点才认同该区块的有效性

  • 接受该区块且在该区块的末尾制造新的区块

 

pow三要素

 1)工作量证明函数

     在比特币中使用的是SHA256算法函数,是密码哈希函数家族中输出值为256位的哈希算法。

  2)区块

    比特币的区块结构

《区块链共识机制》

3)难度值

关于难度值,如公式:

  • 新难度值=旧难度值*(过去2016个区块花费时长/20160分钟)

  • 目标值=最大目标值/难度值

        新难度值,撇开旧难度值,按比特币理想情况每10分钟出块的速度,过去2016个块的总花费接近20160分钟,这样,这个值永远趋近于1。

    目标值,最大目标值为一个固定数,若过去2016个区块花费时长少于20160分,那么这个系数会小,目标值将会被调大些,反之,目标值会被调小,因此,比特币的难度和出块速度将成反比例适当调整出块速度。

 

pow算法流程

《区块链共识机制》

    从流程图中看出,pow工作量证明的流程主要经历三步:

1)生成Merkle根哈希

    节点自己生成一笔交易,并且与其他所有即将打包的交易通过Merkle树算法生成Merkle根哈希

2)组装区块头

    区块头将被作为计算出工作量证明输出的一个输入参数,因此第一步计算出来的Merkle根哈希和区块头的其他组成部分组装成区块头

3)计算出工作量证明的输出

           i. 工作量证明的输出=SHA256(SHA256(区块头))

           ii. if(工作量证明的输出<目标值),证明工作量完成

           iii.if(工作量证明的输出>=目标值),变更随机数,递归i的逻辑,继续与目标值比对。

 

优点

完全去中心化,节点自由进出,避免建立和维护中心机构的成本

 

缺点

POW共识机制会导致大量资源浪费,并且挖矿的矿池出现高度集中趋势,有违去中心化的初心。更大的问题是POW共识达成时间比较长,比特币每秒最多只能7笔,不适合商用。

 

POS

    POS,Proof Of Stake,即权益证明。2012年,PPCoin最先运用权益证明共识机制于区块链中。以太坊前三阶段均采用pow共识机制。第四阶段开始以太坊将采取权益证明机制。

    由于工作量证明消耗大量资源且计算资源越来越中心化,权益证明日益受到重视。如果工作量证明是将计算机的算力作为投票的份额,那么权益证明就是将与系统相关的权益作为投票的份额。PPCoin采用的POS的权益因子是币龄,所谓的币龄,就是根据钱包里面代币的数量和代币的时间来合成,比如你持有一百个币,总共持有了30天。那么此时你的币龄为3000。根据币龄计算挖矿难度,币龄越高,获得记账权的概率就越大。如果你发布了一个POS区块,你的币龄就会被清空。假如每被清空365个币龄,你将会从区块中获得0:05个币的。那么你将获得3000×5%÷365等于0.41个币作为奖励。

    假设网络同步性较高,系统以轮作为单位运行,每一轮开始,节点验证自己是否可以通过权益证明被选为代表,只有代表可以提出新的区块。代表在收到的最长的有效区块链后,提出新的待定区块,并将自己生成的新的区块广播出去,等待确认。下一轮开始时,重新选取代表,对上一轮的结果进行确认。诚实的代表会在最长的有效的区块链后面继续工作。如此循环,共同维护区块链。

 

优缺点

    POS权益证明机制在一定程度上解决了工作量证明机制消耗能量大的问题,缩短了共识达成的时间,提高系统的效率。权益证明每一轮产生多个通过验证的代表,也就是产生多个区块,在网络同步性很差的时候,系统很容易产生分叉,影响一致性。若恶意节点成为代表,就会通过控制网络通信,形成网络分区。向不同的网络分区发送不同待定区块,就造成了网络分叉,从而可进行二次支付攻击,严重影响系统安全。恶意敌手也可以通过对诚实代表进行贿赂,破坏一致性。权益证明的关键在于如何选择恰当的权益,构造相应的算法,以保证系统的一致性和公平性,不当的权益会影响系统公平性。比如,PPCoin,采用币龄作为权益因子,若部分节点在进入系统初期就保持一部分小额交易不用支付,则币龄足够大,该节点更容易被选为代表,影响系统公平性。

    POS容易遭受无利害攻击。假设系统中出现两个分链,那么对于持有币的“挖矿者”来讲,矿工的最佳策略就是同时在两个分支上进行挖矿,这样无论哪个分支胜出,对于持币者来讲,都会获得利益,而不会有利益损失,这导致的问题是,只要系统存在分叉,”矿工们”都会同时在这几个分支上挖矿;因此在某种情况下,发起攻击的分叉链极可能成功,因为所有也也可能都在这个分叉链上形成了共识,而且甚至不用持有51%的权益,就可以成功发起分叉攻击。

 

改良

    PoSV,针对PoS的币龄是时间的线性函数这一问题进行改进,致力于消除货币持有者的囤币现象。PoSV将POS中时间线性函数改为指数式的衰减函数,也就是,币龄的增长率随时间逐渐减少最后趋于零,因此新币的币龄比老币的币龄增长更快,直到达到上限阈值,这样在一定程度上缓和了货币持有者囤币现象。

    POA意为行动证明,也是POS的一种改良方案。它的本质是通过奖励参与度高的货币持有者而不是惩罚消极参与者来维护系统安全。主要思想是将挖矿生成币一部分以抽奖的方式分发给所有活跃节点,而节点拥有的股份与抽中的的概率成正比。

    Casper,是以太方后期使用权益证明共识机制,有来两个候选方案,分别是FFG和CBC。

    FFG,又名“Vitalik’s Casper” ,是一种混合 PoW/PoS 的共识机制,它是以太坊第一个 PoS 权益证明的候选方法。具体地说,FFG 在工作量证明(如以太的 ethash PoW 链)的基础上,使用了权益证明。块链继续用 ethash PoW 算法增加区块,但是每50个块有一个 PoS “检查点”,通过网络验证者来评估区块的最终有效性。

    CBC,又称“Vlad’s Casper”,与传统协议设计的方式不同:协议在开始阶段是部分确定的,其余部分 协议以证明能够满足所需/必需属性的方式得到。在这种情况下,得出完整协议的一种方法是实现所预计的安全性 (一个理想的对手) ,或者提出合理估计的错误的例外,或列举潜在的未来错误估计。更具体地说,Vlad 的工作侧重于设计协议,扩展单个节点对安全性估计的局限视角,以实现共识安全性。

 

DPOS

    为了进一步加快交易速度,同时解决PoS中节点离线也能累积币龄的安全问题,Daniel Larimer于2014月提出DPoS。

    股份授权证明(DPoS)共识机制的基本思路类似“董事会决策”,即系统中每个股东节点可以将其持有的股份权益作为选票授予一个代表,获得票数最多且愿意为代表的前101个节点将进入“董事会”,按照既定的时间表轮流对交易进行打包结算并且签署(即生产)一个新区块,每个区块被签署之前必须缴纳一定量的保证金,其金额相当于生产一个区块的收入的100倍,授权代表节点必须对其他股东节点负责,如果其错过了签署相对应的区块,股东将会收回选票,从而将该节点“投出”董事会,因此授权节点通常必须保证99%以上的在线时间以实现盈利目标。

    DPOS目前用的项目有 BTS、EOS和ASCH,其中EOS的比较典型有名气。EOS系统中共有21个超级节点和100设备节点,超级节点和备用节点由EOS权益持有者选举产生。区块的生产按照21个区块为一轮。在每轮开始的时候会选出21个区块生产者,前20名区块生产者由系统根据网络持币用户的投票数自动生成,最后一名区块生产者根据其得票数概率生成。所选择的生产者会根据从区块时间导出伪随机数轮流生产区块。

 

DPOS安全证明

    假设有3个区块生产者A、B、C。分六种场景证明DPOS的安全性。

1)天下太平的正常情况:生产者按系统排序生产区块。

《区块链共识机制》

2)少数人的小分叉。

    由于生产者顺位由系统安排,所以少数人在出块速度上注定比多数人慢,恶意的少数节点产一个块时,正常的多数节点至少产两个。于是,诚实的2/3多数节点产的链永远比少数节点长。

《区块链共识机制》

3)断网:网络碎片化

    断网会导致任何分叉上都没有绝对多数的生成者。此时,最长的链将倒向最大的那个少数群体。但当网络恢复时,较小的少数群体会切换到最长的那条链,以恢复并修正共识。

《区块链共识机制》

    可能存在这样三个分叉:其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。只要块生产者总数为奇数,不可能长时间保持平局。另外,生产者的顺位会被系统“洗牌”,这使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。

4)双重生产:少数人多产两个块

    少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者C可以选择跟在B产生的任何一个区块后构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。所以,少数恶意节点企图广播再多的替代块也无关紧要,它们当最长链的光景永远不会超过一轮。

《区块链共识机制》

5)最后不可逆的区块

    在网络碎片化的情况下,多个分叉都可能持续变长。长远来看,最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。DPOS告诉观察者,应该视2/3多数块生产者的确认来决定。下图中,区块B已被C和A所确认,这代表了2/3多数确认,由此我们可以断定,只要恶意节点数量低于1/3,A-B-C-A这条链始终最长。

《区块链共识机制》

    这一规则类似于比特币的6块确认。但是,一些聪明人总能搞点事情出来,使得两个交易出现在不同的、且最后不可逆的区块上。这种边缘攻击要求攻击者能完全控制通信延迟,并且在几分钟内两次使用该控制。但即便这真的发生,那么“最长链胜出”的长期规则依然适用。所以,这种攻击的可能性无限接近0,并且经济后果无关紧要。

6)多数生产者舞弊

    多数生产者一旦腐败,他们就可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。但这种行为不会持续,因为利益相关方最终会投票替换生产者。

《区块链共识机制》

所以,不管分叉多凌乱,只要利益相关方出手投票,链总能保持诚实。

 

优点

1)能耗更低:DPoS机制将节点数量进一步减少,在保证网络安全的前提下,整个网络的能耗进一步降低,网络运行成本最低。

2)更快的确认速度:每个区块的时间为10秒,一笔交易(在得到6-10个确认后)大概1分钟。

 

缺点

1)投票的积极性并不高:绝大多数持股人从未参与投票。这是因为投票需要时间、精力以及技能,而这恰恰是大多数投资者所缺乏的。

2)垄断性高:PoW下几乎没有门槛,任何人都可以投入算力,通过竞争获得区块奖励。而DPoS延续了PoS的弊端,只有持币者才可以获得区块链奖励,其实这就带来了一种制度性门槛,最终导致DPoS币的流动性大大减少,穷者越穷,富者越富。

3)牺牲了中心化的概念,选举固定数量的见证人作为记账候选人有可能不适合完全去中心化概念。

 

风险

1、对于坏节点的处理存在诸多困难:社区选举不能及时有效的阻止一些破坏节点的出现,给网络造成安全隐患。

2、超级节点易遭破坏:如果被选举出的超级节点没有强大的算力保护自身,很容易被DDOS(分布式拒绝服务攻击),这将会严重影响网络稳定。

 

BFT

    拜占庭将军问题提出以后,有很多算法提出来用于解决这个问题,下面主要介绍区块链中使用的PBFT和DBFT两种算法。

 

PBFT

    实用拜占庭容错算法PBFT是比较常用的解决拜占庭将军问题的算法,该算法主要是用来解决原来拜占庭算法效率不高的问题,将算法的复杂度从节点的指数级别降到节点的平方级别,是拜占庭算法在实际的应用中可行。

PBFT算法主要用于节点比较少的联盟链,或者像DPOS这样具有代理机制的公链中,比如EOS,只有21个超级节点,就可以使用PBFT。超级账本就是使用PBFT算法

 

PBFT的算法流程

    PBFT算法流程主要分为五个阶段:request、pre-prepare、prepare、commit和reply

    PBFT算法前提,采用密码学算法保证节点之间的消息传送是不可篡改的,PBFT容忍无效或者恶意节点数:f,为了保障整个系统可以正常运转,需要有2f+1个正常节点,系统的总节点数为:|R| = 3f + 1。也就是说,PBFT算法可以容忍小于1/3个无效或者恶意节点。

PBFT是一种状态机副本复制算法,所有的副本在一个视图(view)轮换的过程中操作,主节点通过视图编号以及节点数集合来确定,即:主节点 p = v mod |R|。v:视图编号,|R|节点个数,p:主节点编号。

PBFT算法主体实现流程图如下:

《区块链共识机制》

1) REQUEST:

    客户端c向主节点p发送<REQUEST, o, t, c>请求。o: 请求的具体操作,t: 请求时客户端追加的时间戳,c:客户端标识。REQUEST: 包含消息内容m,以及消息摘要d(m)。客户端对请求进行签名。

2)PRE-PREPARE:

    主节点收到客户端的请求,需要进行以下交验:

  • 客户端请求消息签名是否正确。

非法请求丢弃。正确请求,分配一个编号n,编号n主要用于对客户端的请求进行排序。然后广播一条<<PRE-PREPARE, v, n, d>,  m>消息给其他副本节点。v:视图编号,d客户端消息摘要,m消息内容。<PRE-PREPARE, v, n, d>进行主节点签名。n是要在某一个范围区间内的[h, H]。

3)PREPARE:

副本节点i收到主节点的PRE-PREPARE消息,需要进行以下交验:

  • 主节点PRE-PREPARE消息签名是否正确。

  • 当前副本节点是否已经收到了一条在同一v下并且编号也是n,但是签名不同的PRE-PREPARE信息。

  • d与m的摘要是否一致。

  • n是否在区间[h, H]内。

非法请求丢弃。正确请求,副本节点i向其他节点包括主节点发送一条<PREPARE, v, n, d, i>消息, v, n, d, m与上述PRE-PREPARE消息内容相同,i是当前副本节点编号。<PREPARE, v, n, d, i>进行副本节点i的签名。记录PRE-PREPARE和PREPARE消息到log中,用于View Change过程中恢复未完成的请求操作。

4)COMMIT:

主节点和副本节点收到PREPARE消息,需要进行以下交验:

  • 副本节点PREPARE消息签名是否正确。

  • 当前副本节点是否已经收到了同一视图v下的n。

  • n是否在区间[h, H]内。

  • d是否和当前已收到PRE-PPREPARE中的d相同

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的PREPARE消息,则向其他节点包括主节点发送一条<COMMIT, v, n, d, i>消息,v, n, d,  i与上述PREPARE消息内容相同。<COMMIT, v, n, d, i>进行副本节点i的签名。记录COMMIT消息到日志中,用于View Change过程中恢复未完成的请求操作。记录其他副本节点发送的PREPARE消息到log中。

5)REPLY:

主节点和副本节点收到COMMIT消息,需要进行以下交验:

  • 副本节点COMMIT消息签名是否正确。

  • 当前副本节点是否已经收到了同一视图v下的n。

  • d与m的摘要是否一致。

  • n是否在区间[h, H]内。

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的COMMIT消息,说明当前网络中的大部分节点已经达成共识,运行客户端的请求操作o,并返回<REPLY, v, t, c, i, r>给客户端,r:是请求操作结果,客户端如果收到f+1个相同的REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给主节点。记录其他副本节点发送的COMMIT消息到log中。

PBFT的View Change协议

    如果主节点作恶,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续。备份节点应当有职责来主动检查这些序号的合法性。如果主节点掉线或者作恶不广播客户端的请求,客户端设置超时机制,超时的话,向所有副本节点广播请求消息。副本节点检测出主节点作恶或者下线,发起View Change协议。

    副本节点向其他节点广播<VIEW-CHANGE, v+1, n, C, P, i>消息。n是最新的stable checkpoint的编号,C是2f+1验证过的CheckPoint消息集合,P是当前副本节点未完成的请求的PRE-PREPARE和PREPARE消息集合。

    当主节点p = v + 1 mod |R|收到2f个有效的VIEW-CHANGE消息后,向其他节点广播<NEW-VIEW, v+1, V, O>消息。V是有效的VIEW-CHANGE消息集合。O是主节点重新发起的未经完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的选取规则:

  • 选取V中最小的stable checkpoint编号min-s,选取V中prepare消息的最大编号max-s。

  • 在min-s和max-s之间,如果存在P消息集合,则创建<<PRE-PREPARE, v+1, n, d>, m>消息。否则创建一个空的PRE-PREPARE消息,即:<<PRE-PREPARE, v+1, n, d(null)>, m(null)>, m(null)空消息,d(null)空消息摘要。

    副本节点收到主节点的NEW-VIEW消息,验证有效性,有效的话,进入v+1状态,并且开始O中的PRE-PREPARE消息处理流程。

 

DBFT

    PBF主要用于联盟链,并不能单独使用于公链中,NEO改进了PBFT共识算法,提出代理拜占庭容错算法DBFT。它和EOS的DPos共识机制一样,由权益持有者投票选举代理人记账人,又代理人验证和产生区块。

为了便于在区块链开放系统中应用,NEO的DBFT将PBFT的C/S构架的请求响应模式,改进为适合P2P网络的对等节点模式,并将静态的共识参与节点改为可动态进入、退出的动态共识参与节点,使其适合区块链的开放节点环境。

    DBFT的算法中,参与记账的是超级节点,普通节点可以 看到共识过程,并同步账本信息,但不参与记账。总共n个超级节点,分为一个议长和n-1个议员,议长会轮流当选。每次记账时,先有议长发起区块提案,一旦至少(2n+1)/3个记账节点同意这个提案,那么这个提案就成为最终发布的区块,并且该区块是不可逆的,所有里面的交易都是百分之百确认的,区块不会分叉。

 

共识机制总结

共识机制的评价指标

    区块链上采用不同的共识机制,在满足区块链数据一致性和有效性的同时会对系统整体性能产生不同的影响。综合考虑各个共识机制的特点,可以从一下5个维度作为共识机制的选择标准。

安全性

    指共识机制防攻击、防欺诈的能力,即是否可以防止双重支付(即双花)、自私挖矿等攻击,是否有良好的容错能力。以金融交易为驱动的区块链系统在实现一致性的过程中,最主要的安全问题就是如何防止和检测双重支付行为。另外,自私挖矿通过采用适当的策略发布自己的区块,可以获得更高的相对收益,也是一种威胁比特币系统安全和公平性的攻击方法

扩展性

    指区块链是否支持网络节点扩展,扩展性是区块链设计要考虑的关键因素之一。根据对象不同,扩展性又分为系统成员数量的增加和待确认交易数量增加两部分。扩展性主要考虑当系统成员数量、待确认交易数量增加时,随之带来的系统负载和网络通信量的变化。

性能效率

    指区块链交易达成共识被确认的效率。即从交易达成共识被区块链中至被最终确认的时间延迟,也可以理解为系统每秒处理确认的交易数量。

资源消耗

    指达成共识的过程中,系统所要耗费的资源大小,包括共识过程中耗费的CPU、网络输入输出、存储等计算机资源。区块链共识机制借助计算机资源或者网络通信资源达成共识,以比特币系统为例,基于工作量证明的共识机制需要消耗大量计算资源进行挖矿来提供信任证明完成共识

共识机制对比

    巴比特创始人提出了区块链“不可能三角”理念:去中心化、安全、环保构成一个不可能三角形,设计一个符合其中特别特性的数字货币,则必然会使得第三个特性无法达成。

    对于共识机制而言,去中心化、效率与降低能耗和安全性三个方面,也不可能面面俱到,想要完全去中心化,则会牺牲一定的效率与降低能耗和性能,想要达到很高的可扩展,也必然面临着去中心化的危险,在这两者之外,还要权衡系统的安全性,就目前的共识机制来看,都无法完美实现三者的融合。如下图所示:

《区块链共识机制》

    上图常见4种共识机制PoW、PoS和PBFT,在去中心化、安全性和效能与降低能耗上面都有自己的不足。

    比如比特币和以太坊采用的POW共识算法,造成大量资源浪费,同时PoW共识算法的网络性能太低,需要等待多个确认,容易产生分叉,区块的确认共识达成的周期较长,现在每秒交易量的上限是7笔,不适合商用

    比如PoS虽然在效率和去中心化达到了较好的效果,但是在安全性上偏弱。主要是PoS容易遭受无利害关系攻击和远程攻击等。

    比如EOS采用DPOS共识算法,虽然在可扩展性、效率等方面大大提高,但是这是以牺牲去中心化作为前提的。

 

共识机制展望

    共识机制作为区块链技术中至关重要的一个组成部分,备受学术界和企业界关注。良好的共识机制有益于区块链技术在理论和实践上的推广。

    在达成一致性的前提下,平衡去中心化、效率和资源是共识机制的痛点。比特币采用完全区中心,但是效率低下,EOS效率提高了,但是却牺牲了去中心化,未来应该在因地制宜,结合实际应用场景,设计最佳共识机制。另外可以借鉴各个共识机制的优缺点,尝试将不同的共识机制结合起来,形成一种新的共识机制,比如将PoW和PoS结合,将PoS和BFT结合。

    对于现存区块链的一些问题,要结合加密算法和底层存储技术的改进,共识机制才能发挥最大效果,比如零知识证明、环签名、闪电网络、DAG、HashGraph。随着全球对区块链的关注,越来越多人投入其中研究开发,未来会有更多工作高效设计巧妙的共识机制被设计出来。

    目前区块链的匿名性与弱中心化架构,与现有的监管体系存在某种程度的天然冲突,所以,比特币才会被用于暗网黑市交易、跨国境洗钱等场景。未来,区块链技术最终必然演化为”监管融入技术”的模式。区块链的难以篡改、共享账本、分布式的特性,更易与监管的接入,获得更加全面实时的监管数据。让监管机构本身也参与到技术中去,通过技术本身实现对技术的监管,将最终化解区块链与监管的冲突。

 

更多关于区块链技术和投资的文章,请关注公众号“币梭”

《区块链共识机制》

    原文作者:币梭
    原文地址: https://blog.csdn.net/chyMX/article/details/86424687
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞