当前位置:首页 > 区块链新闻 > 正文

共识机制研究 | 见出知入,观往知来,加密经济回溯与展望

来源: 互联网时间:2019-09-06 14:29:06

见出知入,观往知来,加密经济回溯与展望——共识机制

表1 共识体制分类

来源:袁勇, 倪晓春, 曾帅, 王飞跃,《区块链共识算法的发展现状与展望》

图4 共识算法发展沿革

来源:网络资料整理

前言

共识机制是区块链的重要要素之一,也是分布式账本正常运行的核心规则,主要用于解决人与人之间的信任问题,以及在区块链系统中决定谁负责生成新区块并维护系统的有效统一,因此成为了区块链领域恒久不变的研究热点。

本文从共识机制的概念和作用入手,首先让读者对共识机制整体有一个初步的认识;然后从两军问题和拜占庭将军问题出发,按照共识机制提出时间的先后顺序介绍了共识机制的发展沿革;接着对目前主流的共识机制从概念、工作原理和代表项目三个方面进行了简单的介绍,并对主流共识机制的优势和劣势进行对比;最后对区块链项目如何选择共识机制给出了建议,并指出了共识机制未来发展的可能性趋势。

目录

一、共识机制的概念和作用1.1 概念:分布式账本正常运行的核心规则

1.2 作用:解决信任问题,决定新区块的生成和维护

1.2.1 用于解决人与人间的信任问题

1.2.2 用于决定在区块链系统中谁负责生成新区块并维护有效统一

1.3 共识算法的主流模型

二、共识机制的缘起

2.1 两军问题与拜占庭将军问题

2.1.1 两军问题

2.1.2 拜占庭将军问题

2.2 共识机制发展史

2.2.1 共识机制分类

2.2.2共识机制发展前沿

三、常见共识体制

四、共识机制的选择与现状总结

4.1 如何挑选一个适合自己的共识机制

4.1.1 判断最终结果是否很重要

4.1.2 判断申请流程需要有多快

4.1.2 判断应用对去中心化的需求程度

4.1.3 判断系统是否可以终止

4.1.4 优劣权衡后选择适合的共识算法

4.2 共识机制的未来发展

第一章 共识机制的概念和作用

1.1 概念:分布式账本正常运行的核心规则
      由于加密货币多数采用去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性,统一区块链的版本,并奖励提供资源维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励;又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。

1.2 作用:解决信任问题,决定新区块的生成和维护
1.2.1 用于解决人与人间的信任问题
共识机制之所以在区块链技术中能够处于核心位置,最大的作用在于它从非对称加密和时间戳等密码学技术的角度制定好一套规则,所有参与者及其参与方式都必须遵守这套规则,且规则透明、无法人为随意修改,因此,无需第三方权威机构的背书,它也能够发动全网的节点去共同监督、去记录所有的交易情况,并以代码的形式公布,有效地实现价值信息转移,解决或者更确切的说是很大程度上改善了两个毫不相干、彼此互不信任的陌生人之间的信任问题,毕竟信任一个客观技术比信任一个主观的人风险更小。

1.2.2 用于决定在区块链系统中谁负责生成新区块并维护有效统一另一方面,在区块链系统中,由于点对点网络下存在较高的网络延迟性,使得各个节点所观察到交易事务的先后顺序出现一定差异,因此共识机制可以在很短一段时间内,对这段时间内发生的交易事务进行先后顺序达成共识,来决定在区块链系统中谁负责生成新区块,以及维护区块链的有效统一。

1.3 共识算法的主流模型区块链系统建立在P2P网络之上, 其全体节点的集合可记为PP, 一般分为生产数据或者交易的普通节点, 以及负责对普通节点生成的数据或者交易进行验证、打包、更新上链等挖矿操作的"矿工"节点集合(记为M), 两类节点可能会有交集;矿工节点通常情况下会全体参与共识竞争过程, 在特定算法中也会选举特定的代表节点、代替它们参加共识过程并竞争记账权, 这些代表节点的集合记为D;D;通过共识过程选定的记账节点记为A.A.共识过程按照轮次重复执行, 每一轮共识过程一般重新选择该轮的记账节点.共识过程的核心是"选主"和"记账"两部分, 在具体操作过程中每一轮可以分为选主(Leader election)、造块(Block generation)、验证(Data validation)和上链(Chain updation, 即记账) 4个阶段.如图 1所示, 共识过程的输入是数据节点生成和验证后的交易或数据, 输出则是封装好的数据区块以及更新后的区块链. 4个阶段循环往复执行, 每执行一轮将会生成一个新区块。

图1 区块链共识过程的基础模型

来源:袁勇, 倪晓春, 曾帅, 王飞跃,《区块链共识算法的发展现状与展望》

第1阶段:选主

选主是共识过程的核心, 即从全体矿工节点集MM中选出记账节点AA的过程:我们可以使用公式f(M)→f(M)→ AA来表示选主过程, 其中函数ff代表共识算法的具体实现方式.一般来说, |A|=1,|A|=1,即最终选择唯一的矿工节点来记账.

第2阶段:造块

第一阶段选出的记账节点根据特定的策略将当前时间段内全体节点PP生成的交易或者数据打包到一个区块中, 并将生成的新区块广播给全体矿工节点MM或其代表节点D.D.这些交易或者数据通常根据区块容量、交易费用、交易等待时间等多种因素综合排序后, 依序打包进新区块.造块策略是区块链系统性能的关键因素, 也是贪婪交易打包、自私挖矿等矿工策略性行为的集中体现.

第3阶段:验证

矿工节点MM或者代表节点DD收到广播的新区块后, 将各自验证区块内封装的交易或者数据的正确性和合理性.如果新区块获得大多数验证/代表节点的认可, 则该区块将作为下一区块更新到区块链.

第4阶段:上链

记账节点将新区块添加到主链, 形成一条从创世区块到最新区块的完整的、更长的链条.如果主链存在多个分叉链, 则需根据共识算法规定的主链判别标准, 来选择其中一条恰当的分支作为主链.

第二章 共识机制的缘起

2.1  两军问题与拜占庭将军问题
2.1.1 两军问题
图2 两军问题示意图

选自袁勇, 倪晓春, 曾帅, 王飞跃,《区块链共识算法的发展现状与展望》,自动化学报, 2018, 44(11): 2011-2022

如图所示,蓝军分支1、2部分别驻扎两边坡上,不能够远程沟通,而白军恰好驻扎在两军中间必经之路,。假设白军比蓝军两支部队的其中任意一支都要强大,但不如两支蓝军联合起来强大。如果蓝军两支部队需要联合同时进攻,就需要相互通信,但白军处在中间必经之路上,无法确认蓝军信使是否真的将进攻信号送到对面,也暂时不考虑信息是否有被篡改的可能性。在此情况下,由于相互之间没法达到完全确认,最终都不能达成有效共识,形成“两军悖论”。

2.1.2 拜占庭将军问题
图3 拜占庭将军问题示意图

由于当时的拜占庭罗马帝国国土辽阔,为了更好的达到防御的目的,在帝国周围分散驻扎了军队,每个军队都相隔很远,只能靠信使传递消息。在战争期间,所有的将军必须达成一致,或者以大多数一致作为决定,选择是否攻打敌人阵营。但是,由于完全依赖于人,如果存在有将军谋反或传令官传递错误信息的情况,如何保证忠诚的将军在不受叛徒的影响下达成一致呢?于是有了拜占庭问题。

两军问题和拜占庭将军问题都在阐述一个问题:在信息交互不可靠的情况下,达成共识、协同行动存在很大的困难。而拜占庭将军问题也更像是“两军悖论”的泛化。

从计算机网络的角度来看,两军问题和拜占庭问题都是计算机网络课程的常见内容:网络上的两个节点直接通信存在失败的可能性,因此TCP协议不可能完全保证两个终端网络自始至终百分百保持一致的状态。但是,共识机制可以利用经济激励等其他方式去降低这种不确定性到大部分人可以接受的程度。

正是因为存在两军问题和拜占庭问题这类问题,所以共识机制开始呈现出其发展的必要性。

2.2 共识机制发展史
2.2.1 共识机制分类
由于不同的区块链项目类型对信息记录和区块的生成有不同的要求,以及随着区块链技术的发展对共识机制的不断改善,目前一共约有超过30种共识机制。这些共识机制可以按照其拜占庭容错性能主要分成两类:拜占庭容错系和非拜占庭容错系。

表1 共识机制分类

来源:袁勇, 倪晓春, 曾帅, 王飞跃,《区块链共识算法的发展现状与展望》

2.2.2 共识机制发展沿革
〉共识算法的发展

根据共识算法的提出时间,我们可以相对清晰的看到共识算法的发展。

图4 共识算法发展沿革

来源:网络资料整理

图5 区块链共识算法的历史演进

来源:袁勇, 倪晓春, 曾帅, 王飞跃,《区块链共识算法的发展现状与展望》

共识算法为区块链的共识机制奠定了基础。最初,共识算法的研究主要是计算机科学家和计算机教授用于改善垃圾邮件问题或是学术探讨。

比如1993年美国计算机科学家、哈佛大学教授Cynthia Dwork就为了解决垃圾邮件问题,首次提出了工作量证明的思想;1997年,英国密码学家Adam Back为了解决垃圾邮件问题,也独立地提出并于2002年正式发表了用于哈希现金的工作量证明机制;1999年, Markus Jakobsson正式提出了"工作量证明"的概念,为后续中本聪对比特币共识机制的设计奠定了基础。

第三章 常见共识机制

 
图6 相对主流的共识机制归纳

来源:Hasib Anwar, “Consensus Algorithms: The Root Of The Blockchain Technology”

上图为一名极客Hasib Anwar归纳的其中14种相对主流的共识机制,包括PoW(工作量证明)、PoS(权益证明)、DPoS(委托权益证明)、LPoS(租用权益证明)、PoET(过去时间证明)、PBFT(实用拜占庭容错)、SBFT(简单拜占庭容错)、DBFT(委托拜占庭容错)、DAG (有向非循环图)、Proof-of-Activity(活动量证明)、Proof-of-Importance(重要性证明)、Proof-of-Capacity(容量证明)、Proof-of-Burn (燃烧证明)、Proof-of-Weight (重量证明)。

接下来,我们主要针对目前区块链最主流的十大共识机制进行介绍分析。

》POW

概念:

工作量证明机制。即对于工作量的证明,意味着消耗一定的计算机时间来确认做过的工作量。

实现原理:

图7 PoW工作量证明原理

以比特币为代表的PoW使用的是SHA-256算法函数,是密码哈希函数家族中输出为256位的哈希算法:

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

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

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

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

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

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

代表应用:BTC等

》POS

概念:

权益证明。即依据各人持币权益来达成共识的机制,持币越多越久,获得奖励的概率越大。

实现原理:

PoS实现算法公式:hash(block_header) =<target * coinage

币龄计算公式:coinage = 币的个数*币的剩余使用时间

其中,coinage表示币龄,这将意味着,币龄越大,越容易得到答案。而其中币龄的计算是通过挖矿者拥有的币乘以每个币的剩下使用时间得到,这也将意味着拥有的币越多,也越容易得到答案。这样,pos解决了pow中浪费资源的问题,同时挖矿者不可能拥有全网51%的币,所以也解决了51%攻击的问题。

代表应用:ETH等

DPoS

概念:

委托权益证明。即持有币种的投资者通过投票选举超级节点来运营整个网络,类似于人民代表大会制度。

实现原理:

DPOS算法被分为了两部分。选举一组区块生产者和调度生产。

选举:只有拥有被选举权的永久节点才能够被选举,最终只有前N名见证人可以被选举出来。这N个人都要获得50%以上的票数才能够顺利当选,除此之外,这个名单会按照固定的时间间隔进行重新选举。

调度生产:在正常情况下,区块生产者轮流每3秒产生一个区块。假设没有生产者错过自己顺序,那么他们生产的链条势必是最长的链条。见证人生产区块时,每2s需要产生一个区块,如果超过了规定的时间,那么当前见证人就会失去生产权利而转交给下一个人。那么见证人不仅没有报酬,还可能会失去见证人身份。

代表应用:EOS等

DPoW

概念:

延迟工作量证明。建立在PoB与DPoS基础上的新一代共识机制。矿工使用自己的算力,通过哈希算法,最终证明自己的工作量之后,获取对应的wood,wood不可交易。当wood积攒到一定量之后,可以前往燃烧场地燃烧wood。这样可以让算力和出矿权利达到一个平衡。

实现原理:

在基于DPoW的区块链中,矿工mining所获得的不再是奖励的代币,而是可以焚烧的“wood”,燃木。矿工使用自己的算力,通过哈希算法,最终证明自己的工作量之后,获取对应的wood,wood不可交易。当wood积攒到一定量之后,可以前往燃烧场地燃烧wood。通过一组算法,燃烧较多wood的人或者BP或者一组BP可以获取下个事件段出块的权利,成功出块后获取奖励(代币)。由于一个时间段内可能会有多人燃烧wood,下一个时间段出块的概率由自己燃烧wood数量决定。焚烧的越多,下一段时间可以获得出块权利的概率越高。

两个节点类型:公证人节点和正常节点。

64 个公证人节点是由 dPoW 区块链的权益持有者选举产生,可从 dPoW 区块链向所附加的 PoW 区块链添加经公证确认的块。一旦添加了一个块,该块的哈希值将被添加到由 33 个公证人节点签署的 Bitcoin 交易中,并创建一个哈希到 Bitcoin 区块链的 dPow 块记录。该记录已被网络中的大多数公证人节点公证。为避免公证人节点间在挖矿上产生战争,进而降低网络的效率,Komodo 设计了一种采用轮询机制的挖矿方法,该方法具有两种运行模式。在“无公证人”(No Notary)模式下,支持所有网络节点参与挖矿,这类似于传统 PoW 共识机制。而在“公证人激活”(Notaries Active)模式下,网络公证人使用一种显著降低的网络难度率挖矿。“公证人激活”模式下,允许每位公证人使用其当前的难度挖掘一个区块,而其它公证人节点必须采用 10 倍难度挖矿,所有正常节点使用公证人节点难度的 100 倍挖矿。

图8 DPoW在没有公证人节点的运工作流程

代表应用:Komodo等

PBFT

概念

实用拜占庭容错算法。即将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。

实现原理

图9 PBFT的算法原理

首先,客户端向主节点发送请求调用服务操作,然后主节点通过广播将请求发送的其他副本。所有副本都执行请求并将结果发回客户端。客户端需要等待f+1个不同副本节点返回相同的结果,作为整个操作的最终结果。

两个限定条件:1、所有节点必须是确定性的。也就是说,在给定状态和参数相同的情况下操作执行的结果必须相同。2、所有节点必须从相同的状态开始执行。在这两个限定条件下,即使有失效的副本节点存在,PBFT算法对所有非失效副本节点的请求执行总顺序达成一致,从而保证安全性。

代表应用:Tendermint Consensus等

DBFT

概念:

授权拜占庭容错。改进的拜占庭容错算法,使其能够适用于区块链系统。该系统由节点、委托人(谁可以批准区块)和发言人(谁提议下一个区块)组成。是一种在NEO区块链内部实现的保证容错的共识算法。

实现原理:

在这个机制当中,存在两个参与者:专业记账的“记账节点”和系统当中的普通用户。

普通用户基于持有权益的比例来投票决定记账节点,当需要通过一项共识时,在这些记账节点中随机推选出一名发言人拟定方案,然后由其他记账节点根据拜占庭容错算法,即少数服从多数的原则进行表态,如果超过66%的节点表示同意发言人方案,则共识达成;否则,重新推选发言人,重复投票过程。

代表应用:Neo等

PoA

概念:

权威证明。即由一些经认可的账户认证的,这些被认可的账户称为“验证者”(Validator)。验证者运行的软件,支持验证者将交易(transaction)置于区块中。

实现原理

三个条件:

1、身份必须在链上得到正式验证,信息可在公有可用域中交叉验证;

2、其资格必须难以获得,这样所得到的验证块的权利才足够珍贵;3、建立权威的检查和程序必须完全统一。

使用 PoA,每个个体都具有变成验证者的权利,因此存在一旦获取就保持验证者位置的动机。通过对身份附加一个声誉,可以鼓励验证者去维护交易的过程。因为验证者并不希望让自己获得负面声誉,这会使其失去来之不易的验证者地位。

代表应用:VeChain等

DAG

概念

有向无环图。DAG中每个新加入的单元不仅仅只加入到长链区块,而是加入之前的所有区块,验证每一个新单元并且确认其父单元以及父单元的父单元,慢慢的可以达到创世单元,并且将其父单元的哈希包含到自己的单元内,随着时间的递增,所有交易的区块链相互连接形成图状结构。

实现原理

在DAG的网络中,每一个节点都可以是交易者和验证者,因为DAG中的交易处理,正是由交易节点本身来共同完成。以IOTA为例,IOTA的Tangle账本在保证高速处理交易的同时,并不需要支付交易费用。不过并不代表交易是免费的,因为在这个账本中,每一笔交易的发起都需要先验证另外两笔随机交易,并将自己发起的交易指向这两笔交易,这样在区块链上矿工所承担的责任就分配给了所有的交易者。DAG这种处理交易的方式,可称作为异步处理模式。

图10 传统区块链结构与DAG结构区别

代表应用:IOTA等

PoET

概念

消逝时间量证明。即通常用于许可区块链网络,它可决定网络中获得区块者的挖矿权利。许可区块链网络需要任何预期参与者在加入前验证身份。根据公平彩票系统的原则,每个节点具有同等的可能成为胜出者。

实现原理

网络中的每位参与节点都必须等待一个随机选取的时期,首个完成设定等待时间的节点将获得一个新区块。区块链网络中的每个节点会生成一个随机的等待时间,并休眠一个设定的时间。最先醒来的节点,即具有最短等待时间的节点,唤醒并向区块链提交一个新区块,然后广播必要的信息到整个对等网络中。同一过程将会重复,以发现下一个区块。

两个因素:

1、参与节点在本质上会自然选取一个随机时间,而非刻意选取;

2、胜出者的确完成了等待时间。

代表应用:HyperLedger Sawtooth等

PoSV

概念

权益流通证明。由Reddcoin提出,借鉴经济学“货币流通速度”的概念,主要是根据节点参与竞争的币龄分配记账权

实现原理

PoSV同样根据节点参与竞争的币龄分配记账权,但是将币龄的计算公式修改为增长率指数衰减的函数。以Reddcoin为例,Reddcoin将币龄增长率的半衰期设为1个月。假设单位通证在第1天能够积累1CoinDay币龄,在第31天只能积累0.5CoinDay币龄,第61天只能积累0.25CoinDay币龄,以此类推。通过这种方式促使节点在持有通证一段时间后用它进行一笔交易,从而重新开始计算币龄,提高网络中通证的流通速度。

代表应用:Reddcoin等

表2 目前主流共识机制优劣对比

 来源:网络资源整理

第四章 共识机制的选择与现状总结

4.1 如何挑选一个适合自己的共识机制
步骤1:判断最终结果是否很重要

对某些应用程序来说,最终结果非常重要。如果你在新建一个新的能够支持非常小额的支付系统,那么交易结果发生变化是可以接受的。同样,如果你在新建一个分布式社交网络,100%保证状态立即更新也不是特别必要。相反,如果你在新建一个分布式协议,那么最终结果对用户体验就至关重要。比如,比特币大约有1个小时的最终确认时间,以太坊有大概6分钟的最终确认时间,而Tendermint Core仅1秒的最终确认时间。

步骤2:判断申请流程需要有多快

如果你正在构建一个游戏,如果需要在每个动作前等待15秒是否合理?由于以太坊区块处理时间很低,游戏建立在上面会因为以太坊的吞吐量导致用户体验较差。但是,转让房屋产权的申请就完全可以在以太坊上运行。使用Cosmos SDK构建一个允许开发人员使用Tendermint Core开箱即用的应用,它具有较短的区块处理时间和高吞吐量,能够达到每秒处理10,000交易事务。你可以通过为应用程序设置最大验证器数来达到减少需要的通信开销并加快应用速度的目的。

步骤3:判断应用对去中心化的需求程度

一些应用如游戏可能并不要求非常高的作为去中心化副产品的审查阻力。理论上,验证者能够在游戏中创建卡特尔并逆转交易结果以获取利润真的重要吗?如果不重要,诸如EOS的区块链可能更适合你的需求,因为交易速度快且无需支付费用。但是,一些如自治银行类的应用越强大就会越分散。尽管以太坊被认为是分散的,但有些支持者声称以太坊的矿池是平台中心化的重要一点,虽然实际上仅有11个验证器(矿池)。建立自己的区块链而不是在智能合约平台上构建的其中一大好处是你能够定制应用完成验证的方式。但是,构建自己的区块链很难,因此Cosmos SDK就非常有用,可以轻松构建自己的区块链并定制自己需要去中心化程度。

步骤4:判断系统是否可以终止

如果你正在新建一个类似于分布式共享乘车服务的应用,那么确保全天候服务必须是首要优先级,即使在会计中偶尔会出现类似于交易上的错误。Tendermint Core的其中一个属性是,如果网络验证者之间存在分歧,那么网络将暂停运营而不是进行错误的交易。像去中心化交易所这类的应用要求不惜一切代价来保障正确性——如果出现问题,去中心化交易所暂停交易远比可能出现交易问题好得多。

总结:优劣权衡后选择适合的共识算法

总而言之,没有单一的最佳共识算法,每个共识算法都有自身存在的意义和优势,你需要有自己的判断和取舍。但是,通过了解共识机制的相关流程,包括提案和协议,并建立一个框架来考虑你的应用可能需要的共识算法类型,就应该能够做出更明智的决定。

4.2 共识机制未来发展
共识算法是区块链的核心要素之一,虽然文中列举了超过30种共识机制,但还有很多小众的共识机制可能并未加以讨论。而随着区块链技术逐渐被大众所知且接受,未来可能会有越来越多的更新更优良的共识算法出现,可能是全新的共识算法,更多的应该是对现阶段共识算法的改良和优化。

在经历过16年和17年百花齐放的时期后,目前的共识算法没有一个公认的评价标准,只是一般更偏向公平性和去中心化的程度,以及部分技术相关问题,比如耗能、可拓展性、容错性和安全性等。但区块链技术必须要结合需求和应用场景落地,且共识机制算法和激励机制密不可分,如何针对自己项目的特性定制适合的共识机制以及优化目前的共识机制,将成为未来共识机制研究的发展方向。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。