一文读懂区块链的共识机制

转载
1904 天前
15037
蓝狐笔记

文章来源:蓝狐笔记 作者:Cheryl & Julian 

前言:本文简单明了地阐述了达成共识的两个主要流程:区块的提议和区块的共识达成。区块的提议主要涉及到PoW和PoS机制,也就是工作量证明和权益证明的机制,用以抵抗女巫攻击,安全地选出可靠的区块提议者。区块的共识达成则涉及到共识算法,主要包括中本聪共识和经典共识。中本聪共识采用最长链规则,经典共识则可实现最终性。每种共识算法都有自己的权衡取舍。本文作者Julian Koh 和Cheryl Sew Hoy,由“蓝狐笔记”社群的“晓L”翻译。

区块链共识是2017年和2018年最广为讨论的区块链子领域之一。可以看到,很多公司试图从零开始构建新的智能合约平台,并与以太坊竞争,而其中的一个差异化或创新点就在区块链的共识算法方面。试图理解这些算法,并能对它们进行批判性比较,这对很多加密投资者来说,都是一项全职工作,毫无疑问,要掌握它们并不简单。

为揭开这些“共识算法”的神秘面纱,不少人做了很多工作。但是,对于普通人来说,它们太过于技术化。一些概念,例如同步、安全/活性证明、不可能结果,这些有助于人们通局了解。不过,在我看来,对于大多数人来说,完全理解并不特别重要。

本文重点是区块链的共识算法,而没有提及更大的也是超级复杂的分布式系统领域。为了简单易懂,还会放弃一些技术概念。

本文结束时,你应该理解PoW和PoS的区别,了解BFT的意思,最重要的是,当考虑在哪个区块链上构建你的应用时,你应该知道它们的权衡是什么。


什么是共识?为什么很重要?

简单来说,区块链是一种公共数据库,其中用户就什么是正确的达成一致。比特币是记录所有交易的公共数据库,保留了货币系统的完整性。有两个主要问题需要理解:

1.就什么达成共识?

2.如何达成共识?

我们需要有人提议,然后让其他人选择,直到达成某种形式的共识。就区块链的情况,我们需要有人提议区块,然后需要剩余节点接受区块。

一个简单的例子如下:


4位朋友尝试并安排共同做事的时间

4个人尝试并安排共同的时间来做事。每个人提出其可用时间(空白格)。可以看到,有两个共同可用的时间段,下午2点和6点。他们如何达成共识?在他们提出可用时间前,他们同意一个特定规则:每个人必须选择最早的共同可用时间。在这种规则下,这意味着,他们将会在下午2点而不是下午6点见面。由此,他们达成了共识。

按照这种框架,我们将它类比扩展到比特币区块链:

人们就什么达成共识?

人们就区块数据达成共识。区块中包含有效的比特币交易。在比特币中,任何人都可以提议区块,只要他们率先解决一个计算谜题(PoW)。

人们如何达成共识?

人们同意接受最长链上的区块。例如,如果链A的高度为100,而链B的高度为200,如果你收到链A上的区块101和链B上的区块201,你必须接受区块201。有人在更短的链上添加区块,可能是因为他们没有意识到更长的链,但“最长链规则”确保一旦区块在整个网络中传播,每个人最终就相同的事情达成共识。

该框架支持所有共识算法。不同算法可以采用不同的方法来提议区块,也可以使用不同的方式来对区块达成共识。


提议区块

考虑区块提议时,最大的问题是谁来提议区块。如果任何人随时都可以提议区块,会很难达成共识,因为这类似于人们不停地相互交谈。必须以某种方式选出代表,这样剩余的人可以一次看到一个提议。

最幼稚的方式是让协议随机选择一个人来提议新区块。然而,在互联网上,一个人可以通过运行相同程序的一百个实例来伪装成一百个人。因此,我们需要创造某种形式的稀缺性,以抵抗女巫攻击。(蓝狐笔记注:女巫攻击主要是指网络中的少数节点控制多个虚假身份,并利用这些身份控制网络中大量正常节点的攻击方式。)。

因此,这个游戏必须能够抵挡单一黑客操纵很多人的攻击。这正是PoW和PoS给你带来的:一种让计算机受到某些资源限制的方式。(蓝狐笔记注:也就是说,通过设立门槛,比如PoW的算力投入和PoS的代币投入,通过竞争性的方式,解决了谁有资格提议区块并由此获得奖励的问题。)

PoW如下:为获得提议区块的权利,你必须率先完成计算密集型的任务。模拟一个虚拟的计算机抛硬币任务,直到它得到连续100次的虚拟硬币的正面。这是计算密集型的,没有人能伪装成一百人,因为这受制于其算力。

然而,通过采用这种“抗女巫攻击”机制,人们已经建立了数千台计算机组成的矿场,以便在算力竞争中胜出,从而获得提议区块的权利。这些服务器矿场消耗巨量电力,因此它们集中于可获得最便宜电力的国家或地区。

那么,当大多数比特币矿工位于中国时,这对于去中心化意味着什么?这种地理上的中心化给系统的长久性构成了真正的威胁,因为这些挖矿公司很容易被监管。


比特币矿场

PoS采用了跟PoW完成不同的“抗女巫攻击”机制。既然要花钱购买比特币挖矿计算机和购买电力,那么,为什么不只是用钱来选择区块生产者并将计算密集型过程跳过呢?PoS是这样的想法:基于人们在系统中质押的钱多少来选择区块提议者,也就是人们在系统中拥有的代币的比例。

在PoW中,拥有算力越多,被选为提议下个区块的概率就越高。在PoS中,拥有的代币越多,成为区块生产者的概率就越高。

请注意,还没有开始谈论如何就区块达成共识。有一种常见的误解,认为PoW和PoS是共识算法。其实它们不是。它们只是通过约束稀缺资源的方式来选择区块生产者。


区块共识

这是事情变得有趣的地方,也是近年来大部分创新发生的地方。一旦有人提议区块,我们如何达成共识?这是从上个世纪80年代以来计算机科学家们一直试图解决的问题,以在一些计算机偶尔发生崩溃时,其计算机集群也能同步。到了上世纪90年代,这些计算机科学家开始思考一个更难的问题:如果黑客可以控制其中的一些计算机呢?(蓝狐笔记注:这两个问题的区别在于,一个只是计算机部分崩溃,另一个是计算机没有崩溃,而被恶意控制。)

他们能否构建足够强健的系统,以确保所有非恶意的计算机依然能够达成共识?这一特性被称为“拜占庭容错”(BFT),它是基于拜占庭将军问题而来。BFT系统是一个相当小的研究课题,因为大多数系统并不需要这种级别的稳健性,因为大多数计算机集群通常都属于单一公司。直到区块链的到来,才改变了这一局面。

在区块链中,任何人都可以运行节点(集群中的计算机),并且可以向其他节点发送信息或数据。这是一个真正对抗性的环境,因为恶意行为者可以假装为诚实节点。例如,如果集群中的10个恶意计算机向其他9个计算机发送冲突信息,该怎么办?


恶意计算机向不同的诚实计算机发送冲突信息

由于诚实计算机无法区分恶意和非恶意的计算机,这个问题变得非常棘手。解决这个问题有两种主要方法:中本聪共识和经典共识。


中本聪共识

中本聪共识用于比特币和大多数PoW系统中,由中本聪开创。它有一条单一规则:“当你看到提议的区块拥有最多工作量证明,就接受它。”通常来说,具有最高编号的区块拥有最多工作量证明。(蓝狐笔记注:也就是比特币的最长链规则,这是一种概率性的确认,确认的区块深度越长,交易越难被逆转。)

这意味着,对于你看到的区块是否“正确”,你永远没有100%的确定。例如,如果你看到的最高区块编号是99,你可以在区块编号100接收到区块A,因此你接受了。


突然,你在区块编号103收到区块B,而它在区块编号100有不同的区块。根据共识规则,你需要“反转”之前接受的区块A,转而接受新的区块历史。


在这个系统中,超过系统算力50%的攻击者将能够持续构建最长链,因此,可以创建他们想要的任何区块。通过这个例子,我们可以看到这些规则有助于人们就哪一条链是可接受的链达成一致。


经典共识

在中本聪共识2009年发明之前,计算机科学家对此问题有不同的解决方案,这问题有不同的特性。第一个拜占庭容错共识算法称为实用拜占庭容错算法(PBFT)。它的工作原理是:让一组参与者进行多轮投票,直到一定比例的投票者达成共识。


基于PoS之类的机制,选择某人提议区块。他将区块发送给其他已知的参与者。由其他参与者进行投票。


由于大多数参与者都对区块投赞成票,系统中的每个人都将接受该区块作为正确区块。使用这种类型的共识,须有一组已知的投票者,但一旦他们投票通过,区块就有了最终性。因此,就不存在区块回滚的事情。如果存在争议,那么系统会停止。(蓝狐笔记注:经典共识的最终确定性,与中本聪共识的概率性形成鲜明对比。)

PBFT算法已经被用在区块链上,区块链中迄今为止,最突出的BFT算法是Tendermint Core。Tendermint Core是区块链上第一个不使用中本聪共识的共识算法,而是基于20多年的计算机科学研究基础上。

BFT算法的主要局限是它们通常仅限于一小部分投票者,因为所有投票者都需要事先知道。让10万人不断地与其他人沟通以达成共识是极其困难的事情。到目前为止,Cosmos已经运行了可能是最大的公共BFT系统之一,他们的Game of Stakes测试网有超过200+的验证者参与。(蓝狐笔记注:Harmony的验证者已经超过了200+。)

中本聪共识有其他变种,例如GHOST(新评分算法,不仅仅是最长链),也有其他BFT共识的变种,例如Casper-BFT和Thunderella。

这些共识算法变种的主要区别实际上只是其区块提议方式的不同或参与共识的沟通人数不同而已。大多数情况下,在一个算法系列中,它们之间有类似的权衡。还有一些新的共识形式,例如Avalanche,它们不属于任何一个系列。


经典共识和中本聪共识的权衡,来自于Gun Sirer’s的Avalanche演示


如何选择共识算法?

根据你想构建的应用类型,下面是选择哪种共识算法的指南问题,由此也会涉及到选择何种智能合约平台。

1.你要构建的应用对最终性的急需程度?

对于一些应用来说,最终性非常重要,而另外一些应用,则不那么重要。如果你构建的是用于微支付的新型支付系统,交易可以逆转并不是世界的末日。类似地,如果你构建的是去中心化的社交网络,100%保证状态更新立即完成并非是一个特别重要的特性。相反,如果你构建的是去中心化的交易所,最终性是用户体验中至关重要的部分。让交易逆转比不发生交易还要糟糕。作为参考,比特币的最终性大约是1小时左右(蓝狐笔记注:比特币6个区块确认完成,基本上可以确认交易完成,但这也不是100%的最终性,不过在6个区块确认之后,要逆转交易的难度非常之大。)以太坊的最终性大约6分钟左右,而Tendermint Core有1秒的最终性。

2.你要构建的应用所需的快速程度?

如果你构建的是游戏应用,每个动作前需要等待15秒钟(甚至更长时间)是否合理?由于以太坊的区块时间,基于以太坊区块链构建的游戏用户体验糟糕,因为它的吞吐量太低。然而,一个转让房屋证书所有权的应用可能非常适合在以太坊上运行。使用Cosmos SDK构建应用,允许开发者使用现成的Tendermint Core,它有更短的区块时间和高吞吐量,每秒最高可以达到10,000笔交易。你可以通过为你的应用设置更少的验证者数来实现这一目的,因为可以减少通信开销,提高应用处理速度。

3.你要构建的应用所需的“去中心化”程度?

一些应用,比如游戏,可能并不需要显著的抗审查特性,这只是去中心化的副产品。在理论上,验证者可以创建卡特尔以及在游戏中实现区块/逆转交易以获取利润,这些在应用中真的重要吗?如果它不那么重要,类似于EOS的区块链可能适合你的应用场景,因为它有更快的交易速度且无需费用。

然而,有的应用,比如自治银行,它对去中心化要求很高。尽管以太坊被认为是去中心化的,但有些支持者声称,以太坊矿池的集中也是其中心化趋势一个重要体现,事实上,它只有11个验证者(矿池)。

构建自己的区块链而不是基于其他智能合约平台来构建应用的一大好处是,你可以为自己应用定制验证方式。然而,构建自己的区块链非常困难,因此,从这方面来说,使用Cosmos SDK非常有用,可以轻松构建自己的区块链,并自定义应用所需的去中心化程度。

4.如果系统停止是否可以接受?

如果你构建的是类似于去中心化的共享骑行应用,那么,确保服务全天候运行可能是最高优先级的,即使出现一些偶然的错误,例如交易被逆转。

Tendermint Core的一个属性是,如果网络验证者之间存在分歧,网络将选择停止,而不是进行不正确的交易。一些应用,例如去中心化的交易所应用,需要不惜一切代价确保正确性。如果存在问题,可以暂停去中心化交易,而不是进行可逆转的交易。


结论

不存在单个“最好”的共识算法。每个算法都有它自己的权衡取舍。但是,通过理解共识流程(提议和达成共识),并建立一个框架来思考你的应用可能需要何种共识算法,能有助于你在选择区块链时,做出更明智的决策。当然,还有其他因素需要考虑,例如开发者工具、社区等。

总的来说,PoW和PoS并不是共识算法。它们是“抗女巫攻击”的机制,可以帮助挑选区块提议者。

两种主要的共识家庭是中本聪共识和经典共识。这些算法用于就区块链中的区块达成共识。每种共识算法都有自己的权衡取舍。根据应用的场景来选择共识算法和智能合约平台。要考虑的因素:

l 最终性

l 速度

l 去中心化程度

l 活性