一文读懂区块链共识及其容错机制
翻译 | shawn
编辑 | 波波
区块链是一个分布式和去中心化的系统,这意味着它需要一种可以追踪当前系统官方状态的方法。由于区块链可以包括金融交易和商业协议,因此所有相关方必须在协议条款上保持一致,这点非常重要。
群体共识是区块链概念中最重要的一个支柱。
这听起来可能有点古怪,区块链确实是个相当低效的系统:因为系统内的多个节点、成千上万台计算机全都需要重复相同的工作,同时保管同一数据的相应副本。
让计算机这样干活效率肯定很低,我们之所以能容忍这种效率,是因为它们这样做能带来我们想要的另外一种东西——共识:如果能让多数计算机就什么记录是真相达成共识,那么我们就可以建立一种计算信任的方式,前提是这些记录没有经过任何篡改或修订。
因此,共识机制可以说是区块链的基石。
目前,让区块链节点达成共识的方法有好多种。
基本上,我们可以这样理解共识机制:把区块链中的每个区块看作为一张纸,每一行记录一个交易。我们每人都在自己的纸上记录交易,当纸写满后,我们作为一个集体必须要相互检查对方的记录有没有出错,然后选出大部分人都同意的某一页纸或某一版本的纸,也就是达成共识。
共识机制指的是如何让网络上的计算机节点来达成共识的方法。它要确保网络上的所有节点都能确认交易,并对各自账本(ledger)的顺序、存在与否能够达成共识。
在加密数字货币中,这一过程非常重要。因为它可以有效防止出现双花(Double Spending)现象或其他无效数据被写入区块链账本,也就是所有链上交易的数据库。
在去中心化的世界中,共识机制及其重要:因为这里不存在任何信任中介,只有去信任化的价值流动,也就是真正的去中心化。
在一个区块中达成共识的方法有好多种,不同的情况可以使用不同的解决方案。
不同共识机制之间的主要差别是它们授权和奖励交易确认工作的方式上。
多数区块链生态的共识机制都是不同共识机制的混合体:它们各有用处,非此即彼的选择容易出现偏颇。
“工作量证明(Proof of Work)”是最为古老、最为常用、最为有名的共识机制
过去十年来,工作量证明(PoW)的表现一直不错。它最初是用在比特币中,后来每一个主要公链与大多数的私链都在使用。
但现在,我们开始意识到工作量证明的局限性,特别是其速度及可扩展性。
目前,工作量证明的交易速度是 20-50 TPS,但相比 Mastercard 、Visa 等现代支付网络就是小巫见大巫了,后者的交易速度可以高达 7000 TPS。
欲能跟传统技术相竞争,区块链必须要加快交易速度。
为了实现这一点,开发者提出了很多种替代的共识方法。
其中,Tangle 使用的是无区块解决方案,目前已投入应用。而新兴的权益证明(Proof of Stake)、活动证明(Proof of Activity)方案目前还处于试验阶段。
深入讨论之前,我们需要重点理解共识机制的概念:
让所有节点(可能数万个)全部重复相同的工作,然后让它们定期就大多数节点所选出的事实达成共识,这可以赋予区块链高度的可信性,使其成为一个安全的记录存储系统。
共识
去中心化区块链需要用一种方法让用户就区块链的当前状态达成一致意见。
区块链网络中的共识基于稀缺性。对稀缺资源的控制越多,对区块链操作的控制就越多。
几种不同的共识机制方案:
常见的共识机制:
· 工作量证明和权益证明
其他共识机制:
· 委任权益证明(Delegated Proof of Stake)
· 实用拜占庭容错算法 (Practical Byzantine Fault Tolerance)
· 有向无环图(Directed Acyclic Graph,DAG)
· 消逝时间量证明(Proof of Elapsed Time)
区块链是一个共享、同步的历史账本,这意味着针对什么应该计入官方记录、什么不应该计入,它需要在某一时刻做出最终决定。
由于区块链是去中心化的,因此不存在可以批准和最终确定区块链区块内容的“高级权威”。
比特币区块链的缔造者中本聪为实现共识所创造的方法基于稀缺性。在某种意义上,区块链共识算法可以归结为某种投票机制:用户的票数与其控制的有限资源的数量有关。根据经济学上的供求法则,收集某一种资产直到在市场上达到控制性的份额,这样该资产的价格就会上涨,要实现同等程度的控制的代价就会变得无比昂贵。
中本聪为比特币发明了一种共识算法,名为“工作量证明”。后来,为了适用不同的用例开发者又发明了其他几种共识算法。包括:权益证明、委托权益证明、实用拜占庭容错算法、有向无环图、消逝时间量证明、权威证明、活动证明、烧毁证明(Proof of Burn)、能力证明(Proof of Capacity)等。
最常使用的共识算法是工作量证明和权益证明。其他共识算法大部分还只是处于讨论阶段的概念或理论。
工作量证明
计算资源:工作量证明基于计算资源的稀缺性。
激励:工作量证明区块链上的矿工比赛找出某一加密货币问题的可接受答案
51%安全:工作量证明假设任何人控制的网络资源不得超过总资源的一半。
在工作量证明(PoW)中,想要生成下一个区块(赢得奖励)的区块链网络用户叫做矿工。为了赢得挖掘某一区块的权利,矿工们要比赛解决某一密码学“难”题。我们之前讨论过,这种数学“难”题只能通过随机猜测解出来。当某一矿工找到某一可接受的答案后,他们会生成一个区块,并在网络上传播,对这个区块以及其中的所有交易进行最终确定。
工作量证明通过选出一个随机猜测解决的问题,以实现对计算资源稀缺性的利用。矿工一次可以给出很多猜测,猜测的数量没有限制。
因此,工作量证明鼓励矿工使用尽可能多的矿机,以尽可能扩大他们第一个找到问题答案的几率。由于矿机要花钱购买和运行,用户投资挖掘设备的钱有限,因此他们对区块链网络的控制权就受到了限制。
工作量证明的安全性基于这样一个假设:任何人控制的网络资源不得超过区块链挖掘网络总计算资源的一半。
如果有一个矿工在解决区块链上每个区块的挖掘难题时,他第一个找出可接受答案的概率比其他人都要高,那么这个矿工对这个区块链网络就有绝对的控制权。这就破坏了区块链去中心化的特性。
总的来说,矿工们通过解决数学难题来证明交易,确保整个网络的安全。
矿工们用运行计算周期的GPU或专用集成电路(ASIC)芯片解决某一数学难题,希望找到预先提供给他们的一组数字 。这组数字称为“目标”,是一个前面是很多零的SHA-256 哈希算法。每产生2016个区块(大约每两周),“目标”的“难度”(比特币世界中的另一个术语)就会调整一次,以确保矿工大约每十分钟可以挖掘一个区块。
找到这个“目标”需要三个主要素:
-
一个nonce值(一个只使用一次的值)
-
交易数据
-
之前的block hash
经过一次又一次的hash(组合),而且nonce值每一次都会改变,直到这三个要素生成的hash比“目标”提供的hash低。
当某个矿工达到了这个“目标”,他就会获得一笔交易费和挖掘奖励(在本文发出时为12.5比特币)。这个奖励每生成210000个区块(大约要4年时间)就会减少一半。
接下来,这个矿工要向所有其他矿工告知,他已经达到了设定的“目标”并确认了这个区块。完成这一步后,他就会挖掘下一个区块。
权益证明
稀缺性通货:权益证明基于给定货币的稀缺性。
权益:下一个区块的生成者由所有拥有权益的用户伪随机选出。被选定的几率与用户所拥有权益的大小大致成比例。
经济可行性:权益证明假设所有用户不得对加密货币有绝大多数的控制。否则,他们就会被选中来生成大部分区块,拥有对加密货币的绝对控制权。
权益证明(PoS)网络中的用户可以“锁定(stake)”或承诺不使用所拥有的代币。这样,他们就有机会被选中创造或“打造”新区块,并获得相应奖励。区块创造者是从所有将部分资产作为权益的用户中伪随机选出的,这个选择过程是有偏向性的,权益越大,被选中的几率就越大。
例如,假设一个轮子被分成了四部分,每个部分的大小与权益的大小成正比。选择下一位区块创造者的方法是,旋转这个轮子看哪一部分最终转到最上面。在权益证明中,每个用户都有一个该轮子的复制品,由于所有用户都是同步的,因此每个用户都可以独立地决定选择过程,得出相同结果。所以说权益证明用的是一个伪随机选择过程,而不是随机选择过程。
在权益证明中,攻击者需要控制足够多的权益货币,以确保被选中创造每一个区块。由于加密货币是一种有限资产,买那么多货币是非常费钱的,因此攻击权益证明系统在经济上是不可行的。
在权益证明中,是“证明者”在“打造区块”,而非“矿工”在“挖矿”。
在解决PoW这样的问题时,不存在计算大量的数学难题的计算循环。在PoS中,证明人在全网络发送一种特殊的交易,然后该交易被锁入到保证金(也称为“证明池”)中,这个过程叫做“锁定(staking)”。
一旦证明人提供了一定数量加密货币的所有权,算法就会每隔一个时间段伪随机选择一个证明人(比如一个时间段可能是10秒),并赋予该证明人创造一个区块的权利。这个区块必须指向之前最长链末尾的某些区块,随着时间的推移,大多数区块会汇集成一条不断成长的链。
当选出证明人后,为了创造一个区块,证明人需要证明一组交易。
完成证明后,证明人就会收到之前存入的资金,以及该区块的交易费(当加密货币供应暂时价格过高时给的是奖励)。
如果证明人不守信,为欺诈性交易提供证明,他们就会失去目前所质押的权益,并且被踢出之后的验证人池(失去创造区块的权利)。这种内置的激励机制可以确保证明人创造的是有效的交易,而不是欺诈性交易。
特定共识机制的应用
以太坊
目前,以太坊的共识机制用的工作量证明。Casper是以太坊从工作量证明转向权益证明的一个计划。
以太坊的原始设计是使用工作量证明作为共识机制,直到权益证明应用(代号Casper)出现被迫的硬分叉。这个硬分叉嵌入了以太坊协议中,随着工作量证明问题的难度的缓慢增加,一直到解决这个问题所需的时间长到了这个工作量证明不能使用的程度,这个硬分叉才会完成。权益证明不像工作量证明那样需要那么多的能量消耗,它是一种更加可持续、可扩展的共识机制。
比特币
比特币的共识机制使用的是中本聪发明的工作量证明。
Hyperledger Fabric
Hyperledger Fabric 将共识机制进行了分解,用户可以根据他们的特定用途挑选共识算法。
Hyperledger Fabric 通过定义一个执行所有与共识有关的操作的“orderer 模块”,有意避免了将共识机制硬编码到协议中。因为这样,Hyperledger Fabric 的用户可以根据他们的特定用途挑选共识算法,无需被迫进行大规模的代码编辑。
Corda
每个 Corda 网络都有一个由独立方组成的公证服务,来批准使用任何适用共识算法的区块。
标准的区块链模型将交易捆绑到区块中,然后再由网络整体地对所有交易进行最终确认。Corda 则不同,它的网络包含一个或多个由数位独立方组成的公证人节点。Corda 上的交易由公证人用使用诸如Raft算法的多方数字签名系统进行最终确认。
区块链上的容错
区块链是一个分布式、去中心化的系统,它始终维持一个共享的状态。共识算法的作用是使网络可以对这个状态达成共识,有时候这种共识可能实现不了。因此,容错是区块链技术的一个重要环节。
区块链在设计上是低效且冗余的,这赋予了系统的不变性,以及极高的容错能力。
区块链的核心运行着一个点对点网络架构,这个架构中的每个节点与其他节点都是对等的。
和传统的客户—服务商模型不同,区块链的每个节点同时充当客户和服务商的角色。
因此,我们在网络层面上保留了这种冗余设计,让所有节点执行相同的任务。
和任何点对点系统一样,区块链有着非常高的容错能力。事实上,如果一个区块链系统有两个或两个以上节点在线,它仍然可以正常工作。
当考虑到主要公链有那么大的规模时,你就会领会到内置容错的神奇之处。
以比特币为例:
这是一个包含3万以上节点的区块链,这些节点在每个区块上都要达成共识。只要两个或两个以上节点在线并且能够相互沟通,系统就能正常工作。
这让系统在节点在线和离线、网络传输等问题上极高的容错能力, 同时使得区块链可以在网络和电力基础设施不理想的环境中作为一个很好的平台。网络上的节点可以一会儿离线一会儿在线,当一个节点在离线一会儿后恢复在线,这时它就要进行同步工作,从其他节点获取其离线时错过的所有数据,然后就可以像其他节点那样在线工作了。
这跟中心化系统非常不同。
在传统的客户—务商模型中,如果服务商处于离线状态,客户就无法获取他们所要求的数据,或者执行他们想要执行的操作。
这种情况在区块链上是不存在的。
回顾其他点对点解决方案的历史,例如:BitTorrent 或 Napster,我们看到官方在使这些网络离线时遇到了极大的困难。
这归咎于点对点架构的容错能力。
事实上,我们在最近发生的阿拉伯之春(Arab Spring)中也看到了这种情况,当时埃及政府决定关闭整个国家的网络一晚上。
在24小时之内,埃及就重新恢复了网络,通过一种名为“网状网络”的网络共享机制连接到了因特网上,核心上这种机制只是一种分享网络连接的点对点方法。
点对点解决方案可以提供极高的容错能力和可靠性,正因如此我们才选择在它的基础上构建区块链这样的平台。
如果你正在寻找一个可以提供极高容错能力的解决方案平台,如果你计划在基础设施不太理想的区域或者在节点频繁在线和离线的环境中部署一个解决方案,区块链可能是一个非常好的平台。
拜占庭将军问题
我在《 Byzantine Fault Tolerance In a Nutshell》这篇文章中进行了详细探讨。
-
几位将军需要就一个进攻协作计划达成共识
-
其中一位或一位以上将军可能是叛徒
-
所有将军将会遵守多数决定规则,但是可能会影响这个规则
区块链在设计上具备拜占庭容错
-
所有节点都是不可信的
-
所有节点必须就区块链的官方状态达成一个共识。
拜占庭将军问题演示了多方在只能进行一对一沟通而且沟通是不可信的基础上达成共识的难度。在这个故事中,几位拜占庭的将军带领自己的军队共同包围了一座城池。如果他们一起进攻或一起撤退,他们就是安全的;但是如果有人进攻有人撤退,那么他们就会被消灭。
将军们只能通过信使来进行沟通,而信使可能会遭遇拦截,被迫传递假消息,而且一位或一位以上将军可能是叛徒。他们的目标是在可能有存在叛徒和虚假消息的情况下,找到一种就进攻策略达成共识的方法。并且假设所有将军都遵守多数决定达成的共识。只要三分之二的将军不是叛徒,那么拜占庭将军问题就是可解决的。
区块链在设计上就是为了拜占庭容错,这就意味着网络会在部分成员可能不诚实的情况下,就区块链的官方状态达成一个共识。拜占庭将军问题的解决方案是低效的,因此区块链需要在不执行完整个解决方案的条件下实现共识的可信性。
工作量证明提供了一种博弈理论式的分布式共识算法。
-
工作量证明激励网络上的挖矿节点向计算循环的热力学界限靠近。这样做可以激励去中心化,因为相比在一个中心位置发散挖矿节点产生的热量,在两个分离的位置上的散热效果更好。注意,这种去中心化说的只是物理和网络分布上的去中心化。
-
工作量证明实际证明了博弈力量可以应用到协议中,因为工作量证明成功地在网络上的每个可能操作上都应用了激励机制。
-
工作量证明成功的原因在于它的无优化和无近似。
无优化意味着无法规避挖矿协议为了担保某一区块必须进行的 hashing。
无近似意味着拥有一个区块的过程是两极化的:有或者没有。
权益证明提供了一种内部实验博弈理论的共识算法
-
它依赖的是拥有用于作为权益的加密货币的节点。权益证明奖励将大多数加密货币作为权益的节点,而不是奖励计算能力最强的节点。
-
权益证明要求每个验证节点都是可识别的。这是因为作为权益的加密货币可能会因为任何不当行为而被没收。工作量证明并不要求节点的可识别性。
-
在权益证明中,与你竞争的是一组数量更多的节点。和工作量证明不同,权益证明的staking中不存在交易争执,前者需要购买挖矿硬件、连接因特网、提供冷却系统等。
工作量证明 VS 权益证明(总结)
工作量证明是最古老、最原始的共识协议,它的十周年纪念日都已经过了。它从 2009 年开始在比特币中应用,是最早投入应用的共识协议,它的使用效果非常好。
虽然出现了一些针对在区块链上构建的智能合约和解决方案的黑客攻击和漏洞袭击,但是在创造了超过一万亿美元市值的 10 年间,没人能够成功地利用工作量证明本身获利,这足以证明这种协议的安全性和可靠性。
但是,工作量证明本身存在的某些缺点和争议正将我们的目光引向替代的共识机制,例如权益证明。
交易处理能力是工作量证明的缺点之一。理想状况下,工作量证明在全世界范围内每秒可以处理 10 到 20 笔交易。
虽然听起来很多,但是和传统的交易处理系统相比仍然有很大的差距,举例来说,Visa 的支付处理系统每秒最多可以处理 7 万比交易。
为了让区块链继续作为一个成功的解决方案平台,我们需要寻找其他的共识机制,它们的交易处理速度应该能够和传统的技术相抗衡。
工作量证明本身还存在一些其他争议,其中一个争议就是中心化问题。
从本文中读者可以看出,区块链的要素之一就是去中心化的理念——区块链网络中的任何中央机构、中介或参与者都不得拥有过多的权力。
我们现在在工作量证明上看到的是军备竞争,挖矿者们为了尽可能提供挖矿效率,不惜购买各种各样的设备、专用硬件、专用挖矿装置,以获得竞争优势。其中获利最多的就是可以使用便宜电力的大型数据中心。
现在,比特币网络几乎 80% 的处理能力集中在中国的 6 个大型数据中心。
很多区块链支持者和纯粹主义者认为,一个地理区域不应该享有如此程度的集中(我本人也同意这个观点)。
我们希望通过权益证明来改变这种现状,权益证明去除来群体共识的工作模块,取而代之的是一种专门形式的博弈机制。
权益证明的设计理念是,如果不需要用专用的硬件来达成共识,使用任何设备的任何人都可以参与共识决策过程。
这些设备可能是你书桌上很久没用过的旧笔记本电脑、智能手机、平板电脑、或 iPad。
权益证明可以实现更广、更去中心化的设备选择范围,让更大的网络规模参与共识过程。
交易处理速度和去中心化理念是转向权益证明的巨大驱动力。权益证明未来发展如何,我们将拭目以待。
今年我们将看到以太坊引入 Casper,如果它被证明是一个成功的共识机制,届时更多的区块链将会追随以太坊的脚步。
当你听到有人争论工作量证明和权益证明的优缺点时,你要理解这些争论的意义,为什么我们要从工作量证明转到权益证明。我们正试图克服工作量证明的一些大局限,尽管直至今日它表现得一直不错。
我们正试着找到一种交易处理速度可以和传统技术相提并论的共识机制,这种机制去除了工作量证明本身存在的一些中心化特性。
— END —