Part I

区块链基础-共识算法有哪些?Pow、Pos、Dpos、拜占庭都是什么?

无论是 Bitcoin、Ethereum 还是 EOS,作为一个分布式网络,首先需要解决分布式一致性的问题,也就是所有的节点如何对同一个提案或者值达成共识,这一问题在一个所有节点都是可以被信任的分布式集群中都是一个比较难以解决的问题,更不用说在复杂的区块链网络中了。

在加密货币领域中,共识算法是每个区块链网络的关键要素,它们负责维护这些分布式系统的完整性和安全性。第一个被创建出的加密货币共识算法是工作量证明(PoW),它由中本聪设计并在比特币上实现,用于实现拜占庭容错。

共识算法

  • 共识算法可以被定义为使区块链网络达成共识的机制。公共(去中心化的)区块链是作为分布式系统来构建的,由于它们不依赖于一个中央权威,因此分散的节点需要就交易的有效与否达成一致。这就是共识算法发挥作用的地方,确保所有节点都遵守协议规则并保证所有交易都以可靠的方式进行,即每个货币都只能花一次。

  • 在深入研究不同类型的共识算法之前,先了解算法和协议之间的差异非常重要。

共识算法与协议

  • 算法和协议作为术语经常会被互换使用,但它们并非同一回事。简单来说,我们可以将协议定义为区块链的主要规则,而将算法定义为遵循这些规则的机制。

  • 除了金融系统中的广泛应用,区块链技术还可以应用于各种各样的业务,并且可以适用于不同的用例。但无论什么情景,区块链网络都将建立在一个协议之上,该协议将定义系统应该如何工作,因此系统的所有不同部分和网络的所有参与者都需要遵循规则。

  • 虽然协议确定了规则是什么,但算法告诉系统采取哪些步骤来遵守这些规则并最终产生所需的结果。例如,区块链的共识算法决定了交易和区块的有效性。因此,比特币和以太坊是协议,而工作量证明和权益证明是它们的共识算法。

  • 进一步来说,比特币协议定义了节点间应如何交互,数据应如何在它们之间传输,以及区块验证成功的要求是什么。另一方面,公式算法负责负责验证余额和签名,确认交易,以及实际执行区块验证 - 所有这些都取决于网络共识。

不同类型的共识算法

  • 有几种类型的共识算法。最常见的是工作量证明(PoW)和权益证明(PoS)、PBFT、DPOS。在尝试平衡安全性与功能性和可扩展性时,每个方案都有各自的优缺点。

实用拜占庭容错算法(PBFT:Practical Byzantine Fault Tolerance)

  • 优点:高速、可扩展。

  • 缺点:通常用于私有网络和许可网络。

  • 采用者:Hyperledger Fabric、Stellar、Ripple、Dispatch

  • 在解释这种算法之前,我们先来看看分布式计算中的经典问题——拜占庭将军问题。

  • 拜占庭将军问题是Leslie Lamport在10世纪80年代提出的一个假想问题。拜占庭是东罗马帝国的首都,由于当时拜占庭罗马帝国国土辽阔,每支军队的驻地分隔很远,将军们只能靠信使传递消息。发生战争时将军们必须制订统一的行动计划。

  • 然而,这些将军中有叛徒,叛徒希望通过影响统一行动计划的制定与传播,破坏忠诚的将军们一致的行动计划。因此,将军们必须有一个预定的方法协议,使所有忠诚的将军够达成一致。而且少数几个叛徒不能使忠诚的将军做出错误的计划。也就是说,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有版徒的非信任环境中建立对战斗计划的共识。

  • 在分布式系统中,特别是在区块链网络环境中,也和拜占庭将军的环境类似,有运行正常的服务器(类似忠诚的拜占庭将军),还有故障的服务器,有破坏者的服务器(类似叛变的拜占庭将军)。共识算法的核心是在正常的节点间形成对网络状态的共识。

  • 实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance)是首个提出的该问题解决方案,当前已被 Hyperledger Fabric 采用。PBFT 使用了较少(少于 20 个,之后会稍有增加)的预选定将军数,因此运行非常高效。它的优点是高交易通量和吞吐量,但是不足之处在于是中心化的,并用于许可网络。

  • 拜占庭容错系统是指:在一个拥有n台节点的系统,整个系统,对每个请求满足如下条件:

  • 所有非拜占庭节点使用相同的输入信息,产生同样的结果;

  • 如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。

  • 与此同时,在拜占庭系统的实际运行过程中一般假设系统中拜占庭节点不超过m台,并且对每个请求满足2个指标:

  • 安全性——任何已经完成的请求都不会被更改,它可以在以后请求看到;

  • 活性——可以接受并且执行非拜占庭客户端的请求,不会被任何因素影响而导致非拜占庭客户端的请求不能执行。

  • 拜占庭系统目前普遍采用的假设条件包括:

    • 1) 拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;

    • 2) 节点之间的错误是不相关的;

    • 3) 节点之间通过异步网络连接,网络中的消息可能丢失、乱序、延时到达;

    • 4) 服务器之间传递的信息,第三方可以知晓 ,但是不能窜改、伪造信息的内容和验证信息的完整性;

  • 此外,PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。将所有的副本组成的集合使用大写字母R表示,使用0到|R|-1的整数表示每一个副本。假设|R|=3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。

工作量证明(PoW)

  • 工作量证明是第一个被建立的共识算法。它被比特币和许多其他加密货币所采用。工作量证明算法是挖矿过程的重要组成部分。

  • 工作量证明挖矿涉及到大量哈希(算力)的(挖矿)尝试,因此更多的算力意味着每秒更多的尝试。换句话说,哈希率的矿工有更多机会找到下一个区块(也叫做块哈希)的解。如果网络的分布式节点达成共识并且确认矿工提供的块哈希是有效的工作证明,则工作量证明共识算法确保该矿工仅能够验新区块里的交易并将其添加到区块链。

延迟工作量证明(dPoW,Delayed Proof-of-Work)

  • 优点:节能;安全性增加;可以通过非直接提供 Bitcoin(或是其它任何安全链),添加价值到其它区块链,无需付出 Bitcoin(或是其它任何安全链)交易的代价。

  • 缺点:只有使用PoW或PoS的区块链,才能采用这种共识算法;在“公证员激活”(Notaries Active)模式下,必须校准不同节点(公证员或正常节点)的哈希率,否则哈希率间的差异会爆炸(下文将给出详细解释)。

  • 采用者:Komodo

  • 类型:协同型共识(Collaborative consensus)

  • DPoW是建立在PoB与DPoS基础上的新一代共识机制,借鉴了前辈共识机制的设计理念和运行的经验。

  • 解释DPoW前,需要先说明什么叫PoB。

  • PoB(Proof of Burn)叫做焚烧证明机制,是一种通过焚烧自己手中的代币来表决谁拥有对网络的领导地位的承诺。焚烧代币的数量越多,能获得网络领导地位的概率越高。PoB是分布式共识的一种方法,也是工作量证明机制的替代方法。它也可以用来引导一种加密货币。

  • 在基于DPoW的区块链中,矿工挖矿所获得的不再是奖励的代币,而是可以焚烧的“wood”——燃木。矿工使用自己的算力,通过哈希算法,最终证明自己的工作量之后,获取对应的wood,wood不可交易。当wood积攒到一定量之后,可以前往燃烧场地燃烧wood。

  • 通过一组算法计算后,燃烧较多wood的人或者BP或者一组BP可以获取下个事件段出块的权利,成功出块后获取奖励(代币)。由于一个时间段内可能会有多人燃烧wood,下一个时间段出块的概率由自己燃烧wood数量决定。焚烧的越多,下一段时间可以获得出块权利的概率越高。

  • 这样可以让算力和出矿权利达到一个平衡。不一定非要庞大算力的矿工、矿池才能成为区块生产者。小矿工也有春天,只要辛勤劳动,积攒一定数量的wood,也能出块。保证效率,人人参与,最平民化的参与方式保证了去中心化的理念,避免拥有算力的组织或者持币大户把持网络。

  • PoW 系统中有两种类型的节点:公证人节点和正常节点。64 个公证人节点是由 dPoW 区块链的权益持有者(stakeholder)选举产生的,它们可从 dPoW 区块链向所附加的 PoW 区块链添加经公证确认的块。一旦添加了一个块,该块的哈希值将被添加到由 33 个公证人节点签署的 Bitcoin 交易中,并创建一个哈希到 Bitcoin 区块链的 dPow 块记录。该记录已被网络中的大多数公证人节点公证。

  • 为避免公证人节点间在挖矿上产生战争,进而降低网络的效率,Komodo 设计了一种采用轮询机制的挖矿方法,该方法具有两种运行模式。

  • 在“无公证人”(No Notary)模式下,支持所有网络节点参与挖矿,这类似于传统 PoW 共识机制。而在“公证人激活”(Notaries Active)模式下,网络公证人使用一种显著降低的网络难度率挖矿。“公证人激活”模式下,允许每位公证人使用其当前的难度挖掘一个区块,而其它公证人节点必须采用 10 倍难度挖矿,所有正常节点使用公证人节点难度的 100 倍挖矿。

权益证明(PoS)

  • 作为工作量证明的替代方案,权益证明共识算法在2011年被提出。尽管工作量证明和权益证明有着相同的目标,但它们存在根本的差异性特殊性。特别是验证新块的过程。

  • 简单来说,权益证明共识算法用一种机制来取代工作量证明的挖矿,期中区块根据参与者的质押的币而验证。每个区块的验证者(也称为铸造者或者铸币者)由本身的加密货币投资决定,而不是分配的算力数量。每个权益证明系统可以以不同的方式来实现该算法,但是通常来说,区块链由随机的选举过程保护,该过程考虑了节点的财富、币龄(币被锁定或者是质押的时间)以及随机因素。

  • 以太坊区块链目前基于工作量共识算法,但是最终Casper协议将被推出以将网络从工作量共识切换到权益共识,以尝试增加网络的可扩展性。

DPOS(Delegated Proof-of-Stake)委托权益证明

  • 前面介绍的权益证明算法可以将整个区块链网络理解为一家公司,出资最多、占比最大的人有更多的机会得到话语权(记账权);对于小股东来说,千分之几甚至万分之几的股份很难有什么作为,只能得到股份带来的分红和收益。

  • 但是在这里介绍的委托权益证明(DPOS,Delegated Proof-of-Stake)能够让每一个人选出可以代表自己利益的人参与到记账权的争夺中,这样多个小股东就能够通过投票选出自己的代理人,保障自己的利益。整个网络中选举出的多个节点能够在 1s 中之内对 99.9% 的交易进行确认,使用委托权益证明的 EOS 能够每秒处理几十万笔交易,同时也能够比较监管的干预。

  • 在委托权益证明中,每一个参与者都能够选举任意数量的节点生成下一个区块,得票最多的前 N 个节点会被选择成为区块的创建者,下一个区块的创建者就会从这样一组当选者中随机选取,除此之外,N 的数量也是由整个网络投票决定的,所以可以尽可能地保证网络的去中心化。

授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)

  • 优点:快速;可扩展。

  • 缺点:每个人都争相成为根链。其中可能存在多个根链。

  • 采用者:Neo。

  • 同样是为了解决拜占庭将军问题,「授权拜占庭容错」机制,是一种在NEO区块链内部实现的保证容错的共识算法。

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

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

  • 所以说,dBFT机制实际使用了一种迭代共识的方法来保证系统达成一致决定。然而,这种机制的缺点在于,当系统中有超过三分之一的记账节点停止工作时,整个区块链网络将无法提供正常的服务;当超过三分之一的节点联合作恶时,区块链将有可能发生分叉。

权威证明(PoA,Proof-of-Authority)

  • 优点:节能、快速。

  • 缺点:略为中心化;虽然可用于公有区块链,但是通常用于私有区块链和许可区块链。

  • 使用者:POA.Network、Ethereum Kovan testnet、VeChain。

  • 类型:协同型共识。

  • 基于 PoA 的网络、事务和区块,是由一些经认可的账户认证的,这些被认可的账户称为“验证者”(Validator)。验证者运行的软件,支持验证者将交易(transaction)置于区块中。该过程是自动的,无需验证者持续监控计算机,但需要维护计算机(权威节点)不妥协(uncompromised)。

  • 验证者必须满足以下三个条件:

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

  • 其资格必须难以获得,这样所得到的验证块的权利才弥足珍贵(例如,潜在的验证者需要获得公证书);

  • 建立权威的检查和程序必须完全统一。

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

恒星共识(Stellar Consensus)

  • 优点:去中心化控制;低延迟;灵活的信任机制;渐进安全(Asymptotic security)。

  • 采用者:Stellar

  • 恒星共识基于联邦拜占庭共识(FBA)。恒星共识协议(SCP,Stellar Consensus Protocol)提供了一种不依赖闭合系统实现准确记录金融交易而达成共识的方法。

  • SCP 具有一组可验证的安全属性,这些属性根据如何安全地保持活力而做了优化。一旦出现分区或不当行为节点,它将会终止网络过程,直至达成共识。SCP 同时具备四种属性:去中心控制、低延迟、灵活信任机制和渐进安全。

为什么共识算法对于加密货币至关重要

  • 就如同前面所说,共识算法对于维护加密货币网络的完整性和安全性至关重要。它们提供了一种分布式节点就正确版本的区块链达成共识的方法。对当前的区块链状态达成共识对数字经济系统的正常运作至关重要。

  • 工作量证明共识算法被认为是拜占庭将军问题的最佳解决方案之一,它可以将比特币创建为拜占庭容错系统。这意味着比特币对攻击具有很强的抵抗力,例如51%的攻击(或多数攻击)。不仅仅因为网络是去中心化的,而且还因为工作量证明算法。挖矿过程中涉及的高成本使矿工很难并且不太可能投入资源来破坏网络。