精华内容
下载资源
问答
  • 区块链共识机制

    千次阅读 2019-01-13 16:50:45
    更多关于区块链技术和投资的文章,请关注...什么是共识机制 共识机制的起源 共识机制的原理  POW  POS  DPOS  BFT 共识机制总结  共识机制的评价指标  共识机制对比  共识机制展望   什么是共...

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

    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。随着全球对区块链的关注,越来越多人投入其中研究开发,未来会有更多工作高效设计巧妙的共识机制被设计出来。

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

     

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

    展开全文
  • DPOS共识机制

    千次阅读 2019-04-01 10:59:00
    EOS在第一版白皮书中使用的DPOS共识机制,而在新一版的白书中,对共识机制进行了改进,使用BFT+DPOS混合共识机制。使出块速度从原来的3秒变为0.5秒,tps显著提高,达到测试3590次/秒。 EOS第一版共识机制DPOS EOS...
    想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
    链客,有问必答!
    

    EOS在第一版白皮书中使用的DPOS共识机制,而在新一版的白书中,对共识机制进行了改进,使用BFT+DPOS混合共识机制。使出块速度从原来的3秒变为0.5秒,tps显著提高,达到测试3590次/秒。

    EOS第一版共识机制DPOS
    EOS现在系统运行的链用的共识机制是第一版白皮书的,也就是纯DPOS共识机制。
    DPOS即授权权益证明共识机制。相比于比特币的POW机制,DPOS不用浪费算力资源去争夺记账权,而是通过赋予EOS通证持有人的投票选举,选出21个超级节点担任记账人的角色,保证整个网络的正常运行。值得一提的是,人们的投票所占的比重取决于他们持有多少token。这意味着拥有更多token的人将比拥有极少token的人更多地影响网络。这其实很好理解,因为持有网络的运行的好坏会对持有更多token的人的利益产生更大的影响,这使得他们的投票更谨慎。
    21个超级节点轮流负责记账。每轮都会随机打乱他们的出块顺序,每个超级节点作为出块节点时,只负责出一个块。每一个区块产生后会按照顺序传递给下一个超级节点中。第二个超级节点要负责打包新的区块,同时还要确认上一个区块的内容。当某一个区块被超过2/3的超级节点确认后,则该区块将成为不可逆转区块,即上链区块。

    该算法有些地方明显需要改良。比如容易出现漏块现象。21个超级节点分布世界各地,如果随机打乱顺序,导致总是依次顺序的节点相距地理位置很远,如中国和美国,这两国的网络传输单向时间是300毫秒,一来一回总共600毫秒。那么中国这边出块,然后经过其他20个节点确认后返回,假设时间总共是4秒;而接下来美国出块,反馈回来的时间是3秒,比中国快1秒,肯定是先上链的,结果中国出的块就被丢弃掉了。当前目前设的出块时间是3秒,理论上能够解决这种漏块现象,但想提高eos的性能,这块肯定是要改进的。

    EOS最新版共识机制BFT-DPOS
    BFT即拜占庭容错算法。EOS引入这个算法,主要是赋予出块节点更大的权力,加快出块速度,解决节点出的块都被漏掉的问题。

    EOS共识算法的升级,势必需要超级节点们更新代码,使用新的程序,然后在当前链上继续运行。但如果超过1/3的节点拒绝更新代码,可能会出现硬分叉问题。所以如何很好地做好过渡是EOS最大难题。

    我们一起分析下改进后的共识机制是如何工作的。

    EOS使用BFT+DPOS共识机制后,不再按照出块顺序让超级节点一个个验证区块内容,而是让出块节点成为主节点。出块后,同时向其他20个超级节点进行广播该区块,并获得他们的验证。如果超过2/3的节点验证通过后,则该区块将成为不可逆转区块。

    BFT可以使EOS出块速度显著增加。目前使用BFT+DPOS共识机制的EOS,可以实现0.5秒的出块速度,1秒实现区块的不可逆转。为避免因出块速度过快而漏块,EOS的超级节点按照其他的地理位置依次轮流成为主节点,尽可能减少超级节点的网络延迟。比如超级节点有中国、美国、加拿大、日本,那么成为主节点的顺序是中国>日本>美国>加拿大或者反过来,总之保证相邻最近的超级节点要依次交接主节点角色。

    同时规定每个主节点连续生产6个区块,至少保证6个区块的前几个能确认完成,不存在整个超级节点被跳过的现象。可以看出每轮记账节点的出块总时间还是3秒钟,在这3秒里,因为他对他自己出的块是信任的,所以可以持续出块。一边出块一边广播,3秒之内率先广播的区块肯定能够得到确认,在网络通畅的情况下,6个区块都会可能得到确认。

    EOS共识处理分叉问题非常简单,和比特币一样,节点只会认可最长的链作为合法链。假如某个节点开始作恶,自己出块并生成自己的链,也就是每次轮到它就产生6个块。但是超级节点总共21个,每轮产生理论126个块。根据选择最长链作为主链原则,肯定作恶的链得不到认可。所以EOS不会发生分叉问题。

    在这里插入图片描述

    展开全文
  • 一般而言,在介绍区块链时经常会提到两个例子:一是由古老的记账模式延伸到分布式账本,二是...区块链上的共识机制主要解决由谁来构造区块,以及如何维护区块链统一的问题,该问题的理论基础是拜占庭容错(Byza...

    一般而言,在介绍区块链时经常会提到两个例子:一是由古老的记账模式延伸到分布式账本,二是拜占庭将军问题(Byzantine Generals Problem)。使用分布式账本目的是让每个节点都能够验证交易,而拜占庭将军问题与账本的一致性有关,即本文要讨论的共识机制(Consensus)。

    区块链上的共识机制主要解决由谁来构造区块,以及如何维护区块链统一的问题,该问题的理论基础是拜占庭容错(Byzantine Fault-Tolerant,BFT)。BFT从上世纪80年代开始被研究,目前已经是一个被研究得比较透彻的理论,存在解的前提条件及具体实现都已有现成算法。不过本文不打算从BFT说起,因为要分析的是区块链共识机制的演进过程,而中本聪并没有采用BFT。其实在我研究比特币伊始,即便在理解了POW机制之后的很长一段时间内,并不了解拜占庭将军问题。后文分析 HyperLedger Fabric的PBFT以及小蚁项目的DBFT时再全面阐述拜占庭将军问题及传统分布式一致性算法(PAXOS、RAFT)。

    共识机制的核心是区块的构建和检验,POW系统构建区块的过程一般称为“挖矿”(mine),POS 系统PPC的区块构建方式一般称为“铸造”(mint),而NXT的区块构建方式一般称为“锻造”(forge)。

     

    POW

     

     

    共识机制在以前一般被称为证明方式(Proof),因为比特币采用工作量证明(即Proof-Of-Work,简写为POW)。随着大家对分布式账本一致性问题的不断探索,很多方法被提出来,尤其近期有很多区块链项目回归了对传统BFT算法的改进,在思路上已经跳出了“证明”的语义,因此进一步高度概括为共识机制。我记得第一次碰到工作量证明这一概念时感到很费解,对这种表述方式很头疼,掌握了POW机理后才真正明白,通俗讲就是“通过工作以获得指定成果,用成果来证明曾经付出的努力”。其实我们日常工作生活中经常使用工作量证明,比如学生考试成绩,毕业证以及驾照等,这种证明方式的一个显著特征是往往需要很大的工作量才能拿到指定成果,但这个成果很容易验证。因为我们一般很难去实时监督一个人是否真的付出了这些工作量,所以只能使用工作量的结果来证明。

    再回到比特币的设计思路,中本聪已经使用非对称密码解决了电子货币的所有权问题,用区块时间戳解决了交易的存在性问题,用分布式账本解决了剔除第三方结构后交易的验证问题,剩下需要解决的问题是双重支付,这要求所有节点账本统一,而真正的平等又必须赋予人人都有记账的权利,记账是一件简单的事情,每个人都可以做,显然最终会存在众多大同小异的账本,但我们只需要其中的一个账本就够了。

    中本聪想到给记账加入成本,总账本由各个分页按照时间先后排序,给每个账本分页设立一个评判标准,以区分账本分页是否合格,这给记账增加了难度,同时给每个账本分页加入一个随机元素,用以调节记账难度以保证一定时间段内只有一个人生成合格的账本分页。增加的成本就是工作量,合格的账本分页就是工作量证明。对于比特币而言,所谓的账本分页就是一个区块,区块通过巧妙设计形成区块链,合格的区块可以表述为:

    F(Nonce) < Target

    其中Nonce是随机元素,Target是合格区块的量化,每个记账节点的Target一致。此外POW的成功运行还需要配合如下两条约定, Best chain原则:将最长的链条视为正确的链条。

     

    激励原则:找到合格的区块有奖励收益。

    第1条约定为硬性规则,无条件遵守,大家要么不玩,要玩就遵守这条原则,毕竟共同的目标是找到一致性账本,而最长的链条代表最大的工作量,如果没有这条约定,每个人都只会构造自己的区块链,无法统一。第2条为工作量激励,既然记账有成本,那唯有收益才能驱动大家都去记账,参与记账构造区块变成投资行为,其成本和收益风险在第1条约束下形成博弈,驱动所有节点按约定规则老老实实够造区块,最终达到纳什均衡。

    具体实现方式,比特币采用哈希(Hash)算法,关于哈希算法的原理和特点在前一篇文章(挖矿演进)已经详细讨论。逻辑上比特币是对整个区块进行哈希运算,但真正实现并非将整个区块数据作为哈希函数的参数,区块大体可分为区块链头和交易列表两部分,交易列表通过构造成Merkle树最终浓缩成Merkleroot内置于区块头,区块头只有6个字段,共80字节,如此设计首先带来的好处是方便哈希运算,每次运算只需要80字节的参数输入,而不是整个区块的数据,但交易列表的任何变化又能体现在哈希运行结果上。

    p1

    比特币采用SHA256哈希运算,且每次都是连续进行两次SHA256运算才能作为最终结果,前一次运算的结果作为后一次运算的输入,即Double SHA256,一般简称SHA256D,扩展上面的公式,比特币合格区块判断依据如下:

    SHA256D(nVersion,hashPreBlock,hashMerkleRoot,nTimes,nBits,Nonce)<MAXTARGET/Diff

    其中式子左边的6个参数(区块头)在前一篇文章已经解释,MAXTARGET为最大目标值,常量;Diff代表难度,全网难度一致。MAXTARGET/Diff即通常所说的当前目标值。

     

    很显然,POW的核心要义为:算力越大,挖到块的概率越大,维护区块链安全的权重越大。相对其他共识机制而言,POW逻辑简单,容易实现,容错达50%,其安全有严格的数学论证。

     

    POS

     

     

    POW并非完美,其中被指责最多的主要有两点,一是浪费能源,二是风险和收益博弈必然导致联合挖矿,而大算力矿池可能会对系统的去中心化构成威胁。

    于是在2011年,一个名为Quantum Mechanic的数字货币爱好者在Bitcointalk论坛提出Proof-of-Stake(POS)证明机制,该机制被充分讨论之后证明具有可行性。如果说POW主要比拼算力,算力越大,挖到一个块的概率越大,POS则是比拼余额,通俗说就是自己的手里的币越多,挖到一个块的概率越大。POS合格区块可以表述为:

    F(Timestamp) < Target * Balance

    与POW相比,式子左边的搜索空间由Nonce变为Timestamp,Nonce值域是无限的,而Timestamp极其有限,一个合格区块的区块时间必须在前一个区块时间的规定范围之内,时间太早或者太超前的区块都不会被其他节点接纳。式子右边的目标值引入一个乘积因子余额,可见余额越大,整体目标值(Target * Balance)越大,越容易找到一个区块。因为Timestamp有限,POS铸造区块成功率主要与Balance有关。

     

    POS只是代表一种共识机制理念,具体有多种实现方式,下面重点解析两种比较经典的实现思路。

     

    Peercoin

     

     

    Peercoin(点点币,PPC)于2012年8月发布,最大创新是其采矿方式混合了POW工作量证明及POS权益证明方式,其中POW主要用于发行货币,未来预计随着挖矿难度上升,产量降低,系统安全主要由POS维护。目前区块链中存在两种类型的区块,POW区块和POS区块。PPC的作者为同样不愿意公开身份的密码货币极客Sunny King,同时也是Primecoin的发明者。

    要掌握Peercoin的POS机制,需要重点理解Sunny King专门为PPC设计的几个核心概念:Coinstake,Kernel,Stake Modifier,Modifier Interval,Stake Reward,Coinage等。

    Coinstake

    为了实现POS,Sunny King专门设计了一种特殊的交易,叫Coinstake,Coinstake的设计借鉴于中本聪的Coinbase设计。本质上Coinbase和Coinsake都是一笔交易,只是对他们的输入输出做了一些硬性限制。

     

    而Coinstake的设计又需要有别于Coinbase,这样才不会扰乱系统原有的POW机制,简单对比一下两者结构上的不同,

    Coinbase结构要求:

    输入数量必须等于1,且输入的prevout字段(指定前一笔交易的输出)必须置空值。 输出数量必须大于等于1。

    p2

    Coinstake结构要求:

    输入数量大于等于1,且第一个输入的prevout字段不能为空,即要求Kernel必须存在。 输出数量大于等于2,且第一个输出必须置空值。

    这两种特殊交易在区块链中存放的位置也有特殊要求,中本聪规定每个区块的第一笔交易必须放置Coinbase,反之,Coinbase不能出现在区块的其他位置。Sunny King显然不想破坏这个规则,他增加了一条规则,对于POS区块,第二笔交易必须放置Coinstake,反之,Coinstake不能出现在其他地方。换言之,只要第二笔交易是Coinstake,那么这个区块就当POS区块来处理。

    Coinbase和Coinstake都不会被单独广播,而只存在于区块中,因此客户端节点一般都不允许进入内存池,当花费这两种交易时,都需要检测是否已经成熟。

    Kernel Protocal

    Coinstake的第一个输入(Input 0)叫Kernel,Kernel在POS机制里确实起到核心作用,合格区块的判定与之息息相关。PPC合格区块判断条件为:

    SHA256D(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime)< bnTarget * nCoinDayWeight

    式子左边的每一个参数都有明确的设计目的,其中,

     

    nStakeModifier:专门为POS设计的调节器,按照以上公式,如果没有参数nStakeModifier,当一个人收到一笔币得到网络确认之后,他立即就能提前计算得知自己在未来何时可以锻造区块,这显然不符合设计目标,Sunny King希望POS矿工和POW矿工一样做盲目探索,以实时在线维护区块链,nStakeModifier的设计就是为了防止POS矿工提前计算。nStakeModifier可以理解为POS区块的一个属性,每一个区块对应一个nStakeModifier值,但nStakeModifier并不是每个区块都变动,不过协议规定每隔一定时间(Modifier Interval)必须重新计算一次,取值与前一个nStakeModifier以及最新区块哈希值有关,因此POS矿工无法提前计算,因为他不知道未来的区块哈希值。

    也就是说,在PPC系统中,除了存在区块链,币链(币的交易签名历史),还隐藏着一个很少被提及的链条——权益调节器链条。

    值得一提的是,Sunny King是在PPC后来的版本才加入这个调节器的,一开始他使用nBits。

    txPrev:Kernel对应的前一笔交易。

    txPrev.block.nTime:txPrev所在区块的时间戳,一笔交易被纳入区块的时间是交易发起者不能确定的,节点有可能通过提前计算预估到未来对自己有利的时间戳,这个参数就是为了防止节点利用这种预估优势提前生成大批交易。

    txPrev.offset:txPrev在区块中的偏移量,用以降低网路节点同时生成coinstake的概率。

    txPrev.nTime:txPrev构造时间,设计目标如txPrev.offset。

    txPrev.vout.n:Kernel在txPrev中的输出下标,设计目标如txPrev.offset。

    再看等式右边, bnTarget:全网当前目标难度基准值,类似POW中的当前难度值,由nbits记录。 nCoinDayWeight:Kernel的币龄。

    由以上式子可知,Sunny King一方面希望能给POS矿工提供充足的随机性,另一方面搜索空间严格局限于Coinstake的时间戳字段,以保证影响找到合格区块链的最大因素是Kernel的币龄。

    节点在锻造区块时,首先从自己所有的UTXO中选定一个作为Kernel,构造coinstake,计算hash,如果不合格,重新构造coinstake,重构时时间戳Time会改变,也可以改变Kernel,以得到不同的Coinstake,如此往复,直到找到合格区块。

    Coinage

    上面提到了币龄,也叫币天,假如1.5个币存在于区块链中10天,币龄数值为:

    Coinage = 1.5*10 = 15

    PPC采用币龄,而不是直接采用余额(Balance)来计算。一个UTXO一旦被花费,其币龄被清零,新的UTXO币龄从0开始算起。

    stakeReward

    权益激励,俗称获得利息,计算公式如下:

    stakeReward = nCoinAge * 33 / (365 * 33 + 8) * 0.01 * COIN

    公式可简化为:

    stakeReward = (0.01 * nCoinAge / 365) * COIN

    其中nCoinAge是Coinstake所有输入的币龄总和,由公式可知收益按1%年率计算。理想状态下,假设所有的币全年都参与挖矿,代币总量每年有1%通胀率,这一设计为很多人所诟病,而且,这一设计并不能激励矿工积极参与挖矿以维护区块链的安全,因为如果不考虑手续费,持币用户每隔几个月打开节点铸币,或者实时在线铸币,理论上收益都是一样的。

    stakeMinAge

    POS系统也存在51%币龄攻击风险,为了增加攻击难度,Sunny King对每一笔UTXO的铸币资格做了最小年龄(stakeMinAge)限制:一个UTXO在区块链存在的时间小于stakeMinAge则没有铸币资格,PPC最小币龄为8小时。

     

    后来有些竞争币种加入了最大年龄(stakeMaxAge)限制:一个UTXO在区块链存在的时间大于stakeMaxAge则币龄始终按stakeMaxAge计算。

    在Sunny King设计的POS机制中,一笔UTXO就像是一个矿工,该矿工每成功铸造一个区块后必须休息一段时间,因此,整套系统必须保证足够多的“矿工”同时在线铸造区块,才有可能获得平滑的出块速度。

     

    Nextcoin

     

     

    2013年9月,一个名为BCNext的用户在Bitcointalk论坛发起一个帖子,宣布将发行一种全新的纯POS币种,后来取名为Nextcoin,简称NXT。与当时其他山寨币直接Fork自Bitcoin源码的开发思路不同,BCNext另起炉灶,采用JAVA语言从头开发NXT,并对区块结构,交易结构,非对称密码等做了很多改进。NXT有很多创新点,这里只讨论其中最重要的创新——透明锻造(Transparent Forging)。

    NXT的POS实现方式与PPC完全不同,合格区块判定方法为:

    hit < baseTarget * effectiveBalance * elapseTime

    其中, hit: NXT抛弃中本聪的UTXO设计方案,采用账户(Account)余额方案,每一个账号对应一个私钥。每一个区块都有一个生成签名(generationSignature)字段,hit的生成与这个字段有关。当用户需要锻造区块时,首先计算自己独一无二的hit,计算过程如下:

    用户用自己的私钥对上一个区块的generationSignature进行签名,获得自己本区块的generationSignature。 对上一步结果进行SHA256运算,得hashdata。 取hashdata的前8个字节(共64比特位)作为hit变量。

     

    生成签名的设计有点类似于PPC的stakeModifier,也就是说,NXT区块链下隐藏着一个签名链条。

    式子右边, baseTarget:全网难度基准值,这个难度按照每分钟一个区块目标调节。 effectiveBalance:账户有效余额,一笔币转到账户需要足够多的确认才有铸币权利,叫有效余额。 elapseTime:当前时间与上一个区块时间间隔,按照currentTime-lastBlockTime计算。

    分析以上式子,如果依然将式子左边视为挖矿,右边视为目标值,可知用户压根就没有搜索空间,因为当全网产生一个最新区块时,对于锻造下一个区块,每个用户自身的hit就固定了。式子右边,每个用户的目标值与自身的账户有效余额成正比关系,而且,随着时间往前推移,目标值不断变大,不等式最终一定会成立,即理论上每个节点都可以挖那个区块,但规定优先选择最早生成的区块。p3

    用上图类比NXT的锻造机制,每个圆柱体自身高度(hit)是固定的,假设限高杆不断升高(目标值target随着时间不断增大),最终所有圆柱体都能通过(合格区块),但高度最矮的圆柱体可以率先通过。

    节点段造区块流程为:账户必须实时在线,当全网有最新区块产生时,每个账户立即计算自己对应的hit,然后根据公式elapseTime = hit/(baseTaret * effectiveBalance)计算得知自己锻造区块的期望时间值,并将这个期望时间广播给网络其他节点,如此,全网每个节点都知道其他节点的期望时间,从而也就得知下一个区块优先由谁来锻造。账户在自己的时间窗口锻造好区块并立即广播全网,其他节点检验一个新区块是否有效,首先要检验证区块的生成签名是否有效,还要检验新区块的时间戳是否与产生区块的节点之前发布的期望时间吻合。每次客户端检测到网络中有新的区块产生,都会重新计算自己的期望时间并向全网发布。

    因为hit是用户用自己的私钥签名的结果,因此对于不同用户来说具有很大随机性,即便余额很少的用户,如果运气足够好,hit值很小,也有可能快速锻造区块。

    NXT区块的生成完全摒弃了竞争的理念,有点“上帝早已安排好一切”的味道,下一个区块由谁来生成冥冥中早就注定了,全网节点能做的就是静静等待那一刻的到来。

    p4

    如图,如果节点A没有在自己的锻造时间窗口内广播区块怎么办,没问题,网络会等B的区块,但是如果A和B间隔不远,或者由于网络传输原因部分节点先收到A的区块,部分节点先收到B的区块呢,网络就分叉了,此时Bestchain的原则依然是首选最长的链条,长度一致的分支,优先选择最高区块时间戳最小的分支。那如果节点对所有分支都锻造并广播区块呢,那就变成了一种攻击行为,网络最新区块附近的分叉会加剧。缓解问题的办法是让节点只挖最优分支,这一点没法体现在协议中,只能依靠诚实节点的自律。

    摒弃了竞争的理念,NXT共识不得不高度依赖于时间轴,节点虽可预知自己在未来何时可生成区块,但必须要等到那个时候才能广播区块,如果节点提前广播,网络其他节点将不会接受,BCNext在客户端实现上做了限制:对于最新区块,客户端只接受本机当前时间前后15秒范围内广播的区块,这种限制也没法体现在协议上,只能依靠客户端实时辅助实现。

    也难怪,NXT代币全部预挖,如果采用类似比特币那样由矿工慢慢发行模式,免不了竞争段造区块,而一旦竞争,区块链将立即陷入分叉。NXT整套共识规则的成功运行其实背后有一个潜在的利益博弈,即,持币者就是系统使用者,也是系统的受益者,大家应该联合起来共同维护区块链,做一个诚实的节点。

    也许你会想到一种攻击方法:即便手里持币量很少,但可通过生成大批账号并往每个账号转少量币,以每次都能找到很小的hit,也能快速锻造区块,如此一来POS就退化到类似POW的尴尬境地。BCNext首先从非对称签名算法下手,采用ED25519代替比特币的ECDSA,前者的计算难度比后者大。此外成熟期提高到1440个区块(1天),即一个账号有效余额一旦成功锻造一个区块,该部分余额需要等1天才能重新获得锻造资格。

    短暂的分叉还是不可避免的,NXT最新区块附近会有很多分支,一笔交易需要多一些确认才足够安全,NXT官方推荐10个确认。

     

    POS2.0

     

     

    PPC的成功运行很快就吸引了一批追随者,其中较为出名的包括新星币(Novacoin,NVC)、黑币(blackcoin,BLK)等。黑币社区认为币龄可能会被恶意的节点滥用以获得更高的网络权重并成功实施双花攻击,于是发布POS2.0白皮书,对PPC做了几个细节优化,解决了一些潜在的安全问题,其中最重要的改进是用余额代替币龄,合格区块的条件由:

    F(Timastamp) < Target * 币数 * 币的年龄

    变为:

    F(Timastamp) < Target * 币数

    如此一来,一笔UTXO无论放置多久其锻造区块的能力不变,此举可激励节点必须更多的保持在线进行铸币,提高系统安全性,将攻击途径减少到最低限度,并且能够显著提高网络保持运行的节点数量。

     

     

    POS3.0

     

     

    黑币社区后来进一步升级,推出POS3.0版本,对交易手续费,难度调整做了一些优化,其中最显著的改变是将1%年利率奖励机制变为固定数额奖励(每个区块固定奖励1.5BLK),此举不但降低代币通胀率(考虑到会有代币永久丢失,低额奖励机制回归总量恒定的设计思路),同时意味着持币节点必须实时在线才能获得收益。

     

    DPOS

     

     

    比特股(Bitshares)项目于2013年8月开始启动,这是一个野心勃勃的项目,对区块链做了很多改造,并引入许多新概念和特征,尤其令人眼花缭乱的 Bitshares X、多态数字资产交易平台、资产锚定等新名词,一时令人无比兴奋而又困惑。此时POW和POS都已成功运行许久,彼此优劣已被反复讨论,两大阵营时至今日依然争论不休。按照项目规划,比特股对交易容量和区块速度有极高要求,显然POW或POS都达不到要求,于是比特股发明了一种新的共识机制——Delegated Proof-Of-Stake(DPOS),即股份授权股权证明。

    DPOS很容易理解,类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表,然后由这些代表负责产生区块。那么需要解决的核心问题主要有:代表如何被选出,代表如何自由退出“董事会”,代表之间如何协作产生区块等。

    持币者若想成为一名代表,需先拿自己的公钥去区块链注册,获得一个长度为32位的特有身份标识符,用户可以对这个标识符以交易的形式进行投票,得票数前101位被选为代表。 代表们轮流产生区块,收益(交易手续费)平分。如果有代表不老实生产区块,很容易被其他代表和股东发现,他将立即被踢出“董事会”,空缺位置由票数排名102的代表自动填补。

    从某种角度来说,DPOS可以理解为多中心系统,兼具去中心化和中心化的优势。

     

    总结

     

     

    最后从几方面来简单对比分析以上几种共识机制的优劣和特点:

    安全性

    POW的安全性存在完整的数学证明,这一点是POS和DPOS无可比拟的优势。区块链共识机制一般要同时考虑抵御DDOS攻击和双重支付攻击,POW存在51%算力攻击威胁,比特币目前超强的算力使得破坏该系统需付出巨大代价。POS也会存在51%币龄攻击,而DPOS安全性完全取决于代表的诚实程度。NXT理论可以实现快速交易,但需要锻造节点曝光自己的IP,如此一来容易成为DDOS攻击对象,DPOS的代表也容易成为DDOS攻击对象。

    环保性

    在不可能三角理论(去中心化,安全,环保不能同时兼备)中,POW彻底抛弃节约能源的需求,通过巨大算力来维护系统安全和去中心化特征。POS和DPOS几乎不费多余电力,但不可避免在另外两个特性做出牺牲。

    共识速度

    POW很难缩短区块时间,POS相对而言可以缩短区块时间,尤其NXT会比PPC的实现方式更快,DPOS也可以在很短时间内达成共识,比特股目前30秒产生一个区块。不过POS更容易产生分叉,尤其NXT,所以交易需要等更多确认才被认为安全。

    交易容量

    这是区块链未来发展需要解决的核心问题,巨大的交易容易意味着巨大的带宽和存储空间,POW的交易容量很难扩展,而NXT由于每个节点都可以预知下一个区块由谁锻造,可以直接将交易发给锻造节点,因此NXT交易容量有很大扩展性。从某种角度来说,DPOS可以理解为多中心系统,兼具去中心化和中心化的优点,如果代表节点都运行强大的服务器且彼此带宽足够大,理论上交易处理能力可比拟传统中心化系统,比如Visa。

    出块平滑度

    POW由于哈希算法特性,可以得到平滑出块速度,而且可以间隔一段时间再调整全网难度,POS出块主要与余额有关,而用户余额差距梯度比较大,所以POS一般每个块都要调整全网基础难度。DPOS依靠有限代表人的协同作用,如果代表人不会频繁进出,几乎可以做到固定死出块间距。

    最终性

    POW和PPC通过竞争达成共识,不存在最终性,理论上如果有足够算力,现在可以从头挖比特币区块链,不过可以依靠检测点实现最终性。NXT和DPOS严格依赖时间轴,依靠节点实时在线检测,所以存在最终性。

     

    综合各方优势,个人认为POW适合应用于公链,如果搭建私链,因为不存在验证节点的信任问题,可以采用POS比较合适,而联盟链由于存在不可信局部节点,采用DPOS比较合适。

     

    展开全文
  • 对于一个公链来说,是否足够安全,是否更有效率,共识机制是关键。 共识机制设计好了,一是能够保证网络的安全,保证记账的安全,免于遭受恶意攻击。二是能够让社区有效的运转,特别是在如何激励方面,是否有好的...

    对于一个公链来说,是否足够安全,是否更有效率,共识机制是关键。

    共识机制设计好了,一是能够保证网络的安全,保证记账的安全,免于遭受恶意攻击。二是能够让社区有效的运转,特别是在如何激励方面,是否有好的设计是自治社区能否进入良性循环的关键。


    区块链底层技术平台还处于探索期,以目前的技术水平还没有进入到实际的大规模商用阶段。公链项目InterValue则是采用自主设计的分层分片的基于DAG的Gossip共识机制,该共识机制综合运用了包括DAG、BA-VRF、分层、分片等多种技术。

    互联价值(InterValue)项目以提供全球价值互联网基础设施为目标,针对现有区块链基础设施普遍存在的实用化程度较低,尤其是交易拥堵、交易费高、交易确认时间长、抗量子攻击能力较弱、通信层节点匿名性不高、交易匿名保护、跨链通信和多链融合能力较弱、存储空间较大等问题,优化提升区块链技术在各个层面的协议和机制,实现价值传输网络各层次的支撑协议。

    InterValue作为真正的区块链4.0基础设施,为各类价值传输应用提供基础设施,为各类 DApp 开发提供底层开发平台,为构建全球价值互联网提供现实可行的技术途径。

    InterValue项目团队接受了专访。为了让大众深入了解InterValue团队的技术实力,我们就InterValue共识机制如何在一众纷繁复杂的共识机制中脱颖而出进行了深入探讨。以下是专访内容:

    采用双层共识机制的InterValue是如何解决当前区块链存在的痛点的?

    InterValue:目前已有的区块链技术多数无法进入到实际的大规模商用阶段,其主要原因在于共识机制难以在去中心化和可扩展性之间取得较好的权衡考虑,例如比特币、以太坊具有较好的去中心化程度,但TPS较低;EOS具有较高的TPS,但中心化程度较高。

    InterValue双层共识机制的主要创新点在于将分片与共识分离。具体来说,InterValue的顶层全节点负责对参与共识的下层局部全节点周期性地动态分片,局部全节点在片内对交易达成共识,片间通过gossip协议同步全局账本。
    基于双层 Gossip 的 HashNet 共识框架

    这样设计的主要优点在于顶层全节点之间采用DAG和BA-VRF协议保证分片的公平性和去中心化程度;底层局部全节点采用DAG共识实现高交易吞吐率,且分片数量不受限制。

    目前InterValue团队已经在2.0测试版中实现了HashNet共识机制,并请工信部信通院泰尔实验室对2.0测试版进行了测试,测试结果为:纯性能测试10分片TPS大于240万,实际交易性能测试10分片TPS大于20万,不同地域分布测试TPS大于42万,签名验证后性能测试10分片TPS大于10万,单笔交易确认时间小于3秒,数据污染对交易性能无影响,系统容错性符合预期目标。

    根据CAP理论,完全去中心化、安全、高可扩展性的公链理论上是不存在的。作为全球首个支撑大规模应用的实用化区块链4.0项目,InterValue如何平衡去中心化、安全性和可扩展性?

    InterValue:如何在去中心化、安全、高可扩展性之间取得较好的平衡是本项目在设计之初一直在讨论的问题。

    InterValue分层分片的HashNet共识机制是达成这一平衡的关键因素。HashNet采用基于双层gossip拓扑框架,通过“片内自治,片间协作”的方式形成一个分而治之的分布式账本系统。顶层全节点负责维护节点拓扑和分片,下层局部全节点负责交易验证、交易共识、交易存储以及账本一致性维护。通过将分片和共识的解耦在去中心化和可扩展性之间取得较好的平衡。

    如果预览失败,可能是归档类型的文件没有解冻或者该 Bucket 设置了 Refer 反盗链。

    HashNet数据结构图

    为了提高系统安全性,InterValue采用抗量子的哈希和签名算法、交易匿名保护等多种手段保护交易安全和用户隐私。

    我们看到,InterValue交易并发量高、交易确认速度快、可快速构建面向不同应用场景的生态体系。您认为作为区块链4.0InterValue的共识机制相比区块链3.0有哪些进步?

    InterValue:InterValue的HashNet共识机制主要优势包括:(1)高交易吞吐率,有望实现大规模商业应用的落地,目前已实现百万量级的峰值TPS交易速度。(2)通过双层分片机制,在去中心化和可扩展性之间取得较好的平衡。

    我们注意到,DAG的数据模型的确可以打造一个高TPS的主网,InterValue是如何保障主网内节点数据最终的一致性的?简单来说,当InterValue上一笔交易完全被确认,需要几次确认?也就是需要经过几个节点呢?又是如何解决节点作恶问题的?

    InterValue:InterValue节点数据的一致性本质上是一种异步PBFT,节点通过gossip协议同步已产生的交易,通过验证交易被见证的路径以达成交易一致性的共识。

    InterValue上一笔交易被确认,需要经过片内至少2/3的局部全节。InterValue中恶意节点数量小于1/3时,不会影响共识达成。为了防止片内恶意局部全节点串谋,InterValue周期性用候选节点替换已有分片中的局部全节点。为了防止双花交易,每个轻节点根据ID后缀匹配的结果只能向某一个特定片的局部全节点发送交易请求,片间账本数据根据其共识时间戳实现交易全排序,从而保证各局部全节点账本一致性。

    为了防止节点恶意同步大规模数据造成服务不可用问题,每个连接自动限制其发送的事件数量。

    哈希算法原理图
    就公链的安全性来讲,目前还没出现一条让大家满意的公链。InterValue很可能就是下一个独角兽公链。InterValue独特的自我进化的生态系统是否体现了它的共识机制优势?

    InterValue:是的。InterValue生态系统的顶层目标是能够将其应用于数字货币、分布式社交平台、分布式存储、分歧合约等金啥融和非金融领域,同时实现跨链通信和多链融合。

    从金融和非金融领域应用来看,其特点是用户规模巨大,需要高TPS,这就需要InterValue的共识机制做支撑。从跨链通信和多链融合来看,共识机制的双层架构模式,可以将其他公链当作InterValue的特殊分片,通过顶层全节点实现InterValue与其他公链的无缝连接。

    InterValue的整个主网是基于DAG数据传输模式进行传递、DPOS机制的全节点、POS+POW+POB+POO混合的局部全节点,此外也加入了以太坊还没有完全实现的分片技术,以及拜占庭容错。可以说InterValue具备了构建行业公链的众多技术优势,团队是如何做到兼收并蓄这些最先进的技术并统筹发挥最大技术优势的?

    InterValue:团队在开启InterValue项目时,其初衷并非是追求大而全、也并非是为了吸引眼球而搞创新。

    区块链本质上是一个分布式账本系统,公链的挑战性难题是如何在去中心化、可扩展、安全性之间取得最佳的平衡效果。由于去中心化、可扩展、安全性相互制约,以此为目标就不得不综合考虑各个层面上的具体设计难点,而不能只关注某一个特定点上的问题。

    团队在开发InterValue的过程中,会遇到各种各样的具体问题,通过不断研讨和调整技术方案,最终形成了目前的技术方案。在后续开发过程中,我们仍然会紧跟技术前沿,通过多种途径提升系统的安全性、可扩展性和去中心化程度。

    共识机制至关重要,是区块链技术的核心,很大程度上决定了整个区块链系统节点间的相互信任程度,也决定了其他使用者对于区块链上数据的信任程度。

    一个区块链系统,共识机制设计得好与坏直接决定了系统的工作效率、运行成本、安全性、稳定性,甚至毫不夸张地说,直接决定了系统存在的价值。

    对于一个公链项目来说,将技术钻研到每一个细节就是对项目本身最大的褒扬。InterValue团队做到了,他们对共识机制侃侃而谈。每一次对技术的深入探讨,都彰显了他们对于区块链4.0公链的无比热忱和坚定决心。

    InterValue必将用共识打动人心,用技术征服用户。我们期待着InterValue引领公链潜力的爆发。

    展开全文
  • 然而在实际运行中,怎么解决因为去中心化后,保证整个系统能有效运行,各个节点诚实记账,在没有所谓的中心的情况下,互相不信任的个体之间就交易的合法性达成共识的共识机制共识机制的目标 区块链作为一种按时间...
  • 什么是共识机制

    万次阅读 2019-05-15 18:35:43
    区块链是比特币的底层技术,类似于一个数据库账本,由分布在不同区域的节点共同参与决策,并记载所有的交易记录,而这些决策规则的核心就是共识机制。 所谓共识机制就是用来决定按照哪个参与节点记账,以及确保交易...
  • 原创 | 本体社区成员@风吹一池皱 ...inviter=m7kp&VNK=9eac334b ----------------------...今天主要是和大家聊一聊本体的的共识机制。 在现实社会里几乎所有的环节都是中心化运作的结果,参与者只需要遵守中...
  • 然而在实际运行中,怎么解决因为去中心化后,保证整个系统能有效运行,各个节点诚实记账,在没有所谓的中心的情况下,互相不信任的个体之间就交易的合法性达成共识的共识机制共识机制的目标 区块链作为一种按时间...
  • 由于区块链是去中心化分散网络,所以必须设计一套维护系统的运作顺序和公平性的机制,即共识机制,用来决定谁取得区块链的记账权并获得系统新币奖励。比特币的POW共识机制是一种多劳多得的模式,其优点是算法简单,...
  • 区块链共识机制有哪些

    万次阅读 2019-05-17 21:16:32
    作者:李爱林 ...来源:知乎 ...首先,没有一种共识机制是完美无缺的,各共识机制都有其优缺点,有些共识机制是为解决一些特定的问题而生。 1.pow( Proof of Work)工作量证明 一句话介绍:干的越多,...
  • 区块链共识机制介绍

    2020-06-22 10:02:15
    作者:qinyutong、chengyueqiang共识机制(Consensus Mechanism)是区块链事务达成分布式共识的算法,随着区块链这一技术不断被推广,共识机制作为区块链的...
  • 共识机制

    万次阅读 2019-05-14 09:13:33
    实现并执行共识是加密货币得以存在的核心。那么共识是什么,又是如何实现的呢?让我们从字典上的定义开始。 共识:名词,指普遍认可的协议。 这看起来很简单。我们可以将共识理解为普遍的或全局的协议。达成共识...
  • 区块链的共识机制

    2019-09-16 17:54:12
    在区块链系统中没有像银行一样的中心化机构,所以在进行传输信息、价值转移时,共识机制解决并保证每一笔交易在所有记帐节点上的一致性和正确性问题。区块链的这种新的共识机制使其在不依靠中心化组织的情况下,依然...
  • DNA 共识一种新的区块链共识机制 摘要: 区块链技术是人类智商的一次爆表,它将对我们的生活产生... 区块链目前使用的共识机制主要为:POW、POS、DPOS、PBFT,RAFT等。这几种共识机制有一个核心逻辑就是“它证...
  • FLP不可能原理(FLPimpossibility):在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。1985年 FLP原理实际上说明对于允许节点失效情况下,纯粹异步...
  • 从比特币诞生以来,POW的设计理念成为数字货币和区块链的主流共识机制,但是由于其对能源的消耗巨大,2013年点点币(Peercoin)系统中提出并实现了另一种共识机制——权益证明。目前点点币和量子链等都采用POS共识...
  • NEO共识机制图解

    2018-12-19 16:07:37
    共识机制 术语说明 权益证明 PoS :一种利用网络协商一致来处理容错的算法。 工作量证明 PoW :一种利用计算能力来处理容错的算法。 拜占庭错误 BF: 一个节点保持功能,但以不诚实甚至是恶意的方式来工作...
  • 区块链共识技术二:pos共识机制  上一节,我们介绍啦pow共识机制,本章将对区块链... pos全称为proof of stake,中文翻译为权益证明,其最早使用在点点币中,它主要解决pow中资源浪费的问题。  一. pos的实现...
  • 前序 本人版暂名为《区块链以太坊DApp实战开发》一书,...PoW 共识机制 以太坊目前所使用的共识算法 Ghost 协议 选择最优链 分叉块处理 Casper PoS变种共识机制 如何成为验证人 验证人如何获取保证金...
  • 区块链的共识机制(序)

    千次阅读 2017-07-12 16:26:52
    一、前言 本文是一篇针对的是区块链的共识机制的序言,也可以说是“杂烩”。之后,还会详细地针对...区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的
  • 共识机制主要用于解决分布式计算的根本问题数据的一致性,所谓共识,简单理解就是指参与方都达成一致。 在区块链系统中,如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案...
  • 区块链的共识机制,已有无数的文章分析过了,本文的目的,不在于对各种共识机制的原理做多么深入的解读,而是主要从时间线角度,梳理比特币第一个十年间,共识机制的发展历程。 一、为何需要共识机制:维护一致性 ...
  • DPOS(委托权益证明)共识机制区块链去中心化的生命之源:“DPOS(委托权益证明)共识机制”引语:媳妇,说好的民主呢!吃过晚饭,来福紧张的对媳妇说:“媳妇,为什么每次都是我洗碗,我想要民主。”媳妇考虑了一下...
  • 区块链共识机制总结

    2020-03-20 16:47:25
    共识机制:区块链网络中节点就某件事情达成一致的方式。 PoW机制: 工作量证明机制:系统中节点通过计算一个问题(比如符合条件的hash值),并给出符合要求的答案。最先得出结果的节点就可以获得记账权以及适当...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,292
精华内容 8,916
关键字:

共识机制主要解决了