上次我们讲到,比特币带来了一个新思路——用经济学和博弈论的原理约束节点,让他们不会作恶,于是整个问题重新回到了异步普通容错问题的轨道,于是整个问题的消息复杂度回到了O(N),即,可扩展。关于扩展性问题我们到以后的文章里再深入说,在这里我们只说它和O(N^2)消息复杂度的传统容错算法,例如PBFT,的最大区别。
区块链时代的拜占庭将军们(上) 区块链时代的拜占庭将军们(中) 区块链时代的拜占庭将军们(下)
上次我们讲到,比特币带来了一个新思路——用经济学和博弈论的原理约束节点,让他们不会作恶,于是整个问题重新回到了异步普通容错问题的轨道,于是整个问题的消息复杂度回到了O(N),即,可扩展。关于扩展性问题我们到以后的文章里再深入说,在这里我们只说它和O(N^2)消息复杂度的传统容错算法,例如PBFT,的最大区别。
O(N^2)的消息复杂度,代表着网络中节点越多,输出越低,于是,传统BFT算法基本上没法被用在超过100个节点的网络里。然而O(N)消息复杂度的算法就不同了,理论上,它可以被应用于任意节点的网络(不考虑延迟),因为输出并不会随着节点数量增加而下降。于是,实际上,比特币的这个思路把BFT问题扩展到了一个之前的BFT从未涉足的领域——
大网络中的共识。
这很令拜占庭容错的学者们兴奋,或者说,可能有点兴奋过了头。
以至于,大网络(可扩展)的拜占庭容错共识算法这个问题被抽象了出来,同时,诞生了许多采用比特币的思路的将传统BFT算法扩展至大网络的论文,例如Hybrid Consensus,Byzcoin等。而与此同时,比特币的研究者们把比特币的成功当做是一个成功的个例(不过这很自然,因为那个时候还没有区块链这个概念,有的只有山寨币而已)。于是,另一些对于比特币着迷的研究者们,关注的焦点自然而然地变成了“如何改进比特币”——增加输出,减少能耗,指出比特币模型的基础和安全模型等等……于是,许多关于比特币的论文应运而生,The Bitcoin Backbone Protocol,Majority is not Enough,GHOST,Bitcoin-NG,Proof-of-Activity,等等。直到他们开始发现想要改进比特币不是一个技术问题而是一个政治问题的时候,区块链这个概念就慢慢地变成了他们的新宠。
然后,逐渐地,随着区块链的概念的逐渐明确,关于区块链共识算法的研究方向也逐渐清晰起来——
我们究竟需要什么样的区块链共识算法?
答案是——适用于区块链的共识算法。
听起来像是废话,但其实这个概念的形成并不容易,或者说,在现实中其实我们经常遇到这种幸存者偏差——每次我们回顾历史,总会觉得某些选择是理所当然的,但是从当时的角度看,这些选择缺并没有那么显而易见。4-5年前并不是一个很长的时间,所有的人可能都还能很清楚地记得4-5年前发生的事情。但是,对于区块链而言,4-5年已经足够长了,因为我猜今天看这篇文章的人,在4-5年前就知道比特币的人十中无一,而且,即便知道比特币,能知道以上列举地这些比特币或者BFT的改进算法的,估计更是凤毛麟角。
我承认我4-5年前也不知道这些,但是,如果我们将时间推回那个时候,摆在人们面前的,并不仅仅是“区块链共识算法”而已,共识算法的发展方向,还有以下几种可能:
区块链,或者类比特币的系统并不是未来,但比特币引入的通过POW来防止女巫攻击和鼓励诚实节点是个好主意。所以,共识算法的未来,应该是采用POW的,大网络中的共识算法,但并不一定限于比特币或类比特币的应用。
区块链这个概念不存在,存在的只有比特币。未来会是去中心化的,但是比特币是唯一的系统。因此,需要改进的也只是比特币的算法。一切的改进,都是建立在比特币的基础上的,因此,在设计共识算法时,我们应该要考虑的是比特币这个具体的场景,包括比特币持币者的利益,矿工的利益,比特币的社群,比特币的安全性假设等等……最终,这个共识算法会成为比特币的一个硬分叉升级,因此,持币者和矿工的利益不能被损害,社群需要接受,比特币的安全性假设不能被改变……
共识算法的未来,维系在区块链的未来上。换句话说,共识算法的发展方向,将是为一个全新的,我们现在还不是如何确切定义的去中心化的系统提供共识,这个系统的大小,形态,和功能不尽相同,我们不知道他们将如何起效,不知道之后每一步的发展方向,只知道这个系统将会成为一个无比美好的,去中心化的未来中的重要一环。
即便直到今日,这个问题的答案仍旧是悬而未决的,这取决于大家对于未来的期许——未来会属于比特币,还是区块链,还是两者皆会如昙花般转瞬即逝。这点,不同的人会有不同的看法,而这又几乎取决于他们自身的背景,这很大程度上造成了现在共识算法领域的混乱现状——
比特币的追随者们会用比特币的方式来解决共识问题甚至只认同比特币的解决方式;加密货币的爱好者们,会认为比特币的最大贡献是引入了代币和经济模型,于是认为共识算法的核心在于激励机制的设计,而有了合理的激励机制之后其他的都会迎刃而解;密码学的专家们会认为共识算法已经被比特币转化成了一个领袖选择问题,于是又变成了一个经典的可验证随机数问题,可以完全用密码学的方式来解决;分布式系统的学者们则如同我之前所说的那般,坚持认为这就是一个大网络的拜占庭容错问题,于是仍旧遵循拜占庭容错的框架;然后,其他不同领域的人,会从不同的角度来认识、理解和解决这个问题——而导致的结果,就是各种五花八门的方案——分布式数据库的方案,元胞自动机的方案,可信执行系统的方案,信息论的方案等等……
以上的这些,总结起来就是三点:1,每个人最初了解到和学习到区块链的渠道就不同;2,每个人对于区块链的态度也不同;3,每个人擅长的领域也不尽相同,导致他们对于区块链究竟是什么的看法不同。
而这三点的差异,导致了所有区块链共识算法之间的差异,这点和很多其他的领域是不一样的——在一个更严谨的学术领域中,研究都是有比较清晰的脉络的,一篇文章会清楚地解释我们试图解决的这个问题的来龙去脉,包括它缘起于哪篇论文,是从属于哪个方向,又有什么已有的研究。而这个领域就算是个新兴领域,它的研究者,也基本上都来自于相关领域,有相似的背景……然而区块链共识算法则如我所说,本身的概念就含糊不清,因为区块链本身的概念也含糊不清,而且踏足这个领域的人也五花八门——不同的学术领域,工业界的开发者,创业者,乃至于纯粹的业余爱好者都有。于是,共识算法的论文或者白皮书们本身就给想要踏入这个领域的人,甚至给很多身处这个领域的人设置了一个很大的障碍——
其实这些区块链共识算法,看起来都是在解决区块链的共识问题,而实际上他们是在解决不同的问题,或者说,是在不同的框架下讨论这个问题。于是,这些共识算法很难被拿来直接比较,甚至,在背景介绍中也很少提及不同类的方案,更不要说去客观地评价与同类算法的优劣了。而对于对区块链一知半解的人来说,唯一通用的评价标准就是“TPS”,殊不知从TPS来比较这些算法根本没有意义,因为大部分都不是在同一个框架下,解决同一个问题。
而造成的结果是加剧了这个领域的混乱:一方面,一些理解共识算法的人在有意地混淆概念。例如,为了追求高TPS,采用了非拜占庭容错的共识算法,或者采用了较优的网络状况的假设(见上篇),然而并不在文中直接写明。又或者,故意不去与最新的同类算法进行比较,仍旧引用非常原始的POW或者BFT类算法的表现(例如7笔交易每秒或者不能超过20个节点等),来标榜自己是目前最好的共识算法算法。
而另一方面,这些算法和文章的出现,又将大量的新进研究者引入歧途——他们如果他们只参照以上的某篇论文或者白皮书,他们会对共识算法和区块链的概念和用途有一个错误的印象,例如,认为区块链仅仅是一个分布式数据库,或者认为区块链仅仅是将区块用哈希函数链接的结构。而如果他们只看了一些不正确的引用,他们会对于共识算法的发展有错误的认识,例如,提出将PBFT加入到POW里,或者提出其他各式各样的POx,殊不知其中大部分早在4-5年前就有人提过了。
以上的各种现象,在我审过和看过的未发表和发表的论文及白皮书中,我都看过很多很多。
这些,还只是偏学术领域发生的事——换句话说,我这里已经不在讨论那些看起来就不靠谱的白皮书了——我说的是那些看起来已经很高大上的白皮书和论文,无论是作者有意还是无意,其中有不少,其实从共识层面,是基本没啥意义的东西。
然而,之所以写下本文,是因为渐渐地,区块链共识算法这个领域正在逐渐摆脱这种混沌的状态。当然,这其中一部分原因是因为大家对于区块链共识算法的理解加深了,但更大的原因,其实还是ICO的降温,导致没有动不动就提一个百万TPS的POx算法的需求了……
以上有些离题了,我们回到拜占庭容错上来。
自从比特币出现之后,区块链共识算法的发展其实又可以分成两个阶段——
区块链火起来之前的阶段。
区块链火起来之后的阶段。
第一个阶段,正如前文所说,大家经历了一段时间的迷惘和分歧——比特币,区块链,大网络拜占庭容错,三者究竟哪一个才是最本质的突破,这点上的分歧,造成了区块链共识算法的路线上的分歧。
而第二个阶段,就是区块链的概念开始压倒其他两条路线之后的发展阶段。在这个阶段,大量的,不同思路的区块链共识算法开始涌现。但是,这个阶段又恰恰随着区块链和ICO的火热变了质,龙蛇混杂的状况加上对于TPS的过分追求,导致共识算法的发展的过程中混入了太多的杂音。这些杂音并不是指不同的思路,而是指上文中那些不能被称为思路的歪路。
不过,随着潮水退去,还是有很多东西留了下来。毕竟,在这个领域还是有严肃的研究者的,而毕竟对于研究者而言,问题就摆在那里,解决它才是目的——尽管也许一开始大家思路不同,角度不同,层次不同,但最终,还是可以用一套框架,用一个标准去衡量算法的。
而目前,在我看来,共识算法大概就处于这个潮水退去,将要从混乱转为有序的阶段,而标志就是,我们已经能够看出,几乎所有区块链共识算法的共性了——这就是我在这里想要谈的。
以下,就是我总结出来的,目前这一阶段区块链共识算法展现出的一些共性,也可能是未来区块链共识算法发展的一个共同的框架。当然,每一个我总结出来的共性都基于很多的论文和思考,这些,我会在未来的文章中慢慢给出。这里,我先简单地介绍结论。
记得异步拜占庭容错中,我们解释了我们需要一致和活性,也解释了为什么根据FLP不可能,两者是不可兼得的。
在目前的这个阶段中,人们一开始是有一个错误观念的,就是比特币其实解决了大网络中的异步拜占庭容错。
然而实际上并不是——比特币对于网络同步的要求比传统BFT还要来得更高。在异步网络中,比特币要么会失去一致性,要么会失去活性。
然后,我们又发现一个问题:
对于目前所有的区块链系统而言,在什么情况下会出现大规模的不同步?
例如比特币的网络突然断开了,那么可以想象,一定是整个互联网出现了什么问题。而互联网如果出现了大规模的不同步的话,世界一定也不好了……要么是巨大自然灾难,要么是战争。
而在这样的情况下,“你无法进行交易,但是你的钱不会丢”和“你可以进行交易,但我们不保证你收到的钱以后能用”之间,估计所有人都会选前者。甚至,大家都会觉得后者很可笑——谁会做这种事?
这正是“异步一致,同步活性”的原因——几乎所有区块链应用,都是一类特定的分布式系统,即,用于价值交换的分布式系统。而在这种系统中,如果网络长时间大规模地失去了同步,区块链应该优先保证一致(这点大家都懂),而保证活性没什么意义,因为没有正常人会冒着交易失效的风险在这个时候还去接受交易。
因此,经过了很长一段时间的探索之后,区块链共识算法在这里逐渐和传统异步BFT分道扬镳了——
对于区块链共识算法而言,我们要保证异步的一致性,但是,其实不用考虑那么多所谓“弱同步”或者“部分同步”的假设,也用不着试图在网络出现极端异步状况的时候获得一些活性——我们完全可以大方承认:要是互联网出问题了这系统就是暂时不能用,只要保证同步活性就够了。但这并不代表我们可以把它当成一个同步问题看——因为实际上,我们应该关注的点,不该是“出现了异步该怎么办”,而是“如何避免网络出现大规模的异步问题”,以及,“如何避免小规模的断线严重影响整个系统的输出”。
这是一个比较有争议的点,就是通常我们认为公有链不应该有进入门槛——人们怀念中本聪的one CPU one vote的乌托邦,也怀念用电脑或者用显卡就能挖矿的时代。在那个时候的公有链真的是一个开放的环境——任何人都可以加入挖矿,参与到共识过程中来。
很多人相信,这才是区块链的真谛——一个完全公开的,人人只要下载了软件就可以参与其中的系统。而这是一个与传统BFT完全不同的特性——因为在传统BFT中,所有参与节点必须身份已知。而这有延伸出了许可链和非许可链的概念。
然而,理性的分析会告诉我们——其实对比特币的安全性贡献最大的,恰恰是ASIC矿机的出现。然后,POS的“无利益攻击”会告诉我们POS也需要设立一个权益门槛来限制参与的节点。然后,我们还有Proof-of-Authorty,Proof-of-Elapse-Time(需要可信执行环境TEE),DPOS这种天生写明了需要进入门槛的共识机制。更遑论联盟链和私链了。
于是,我们逐渐意识到——似乎所有区块链都有进入门槛,而没有哪个共识机制的安全性能在没有进入门槛的情况下自圆其说。从这个角度看来,BFT的“所有节点身份已知”就没有那么十恶不赦了——因为其实POW,POS啥的也半斤八两,只不过是进入的门槛不同和高低而已。但这又和许可链的定义不同——因为进入的门槛不等同于需要所有其他节点的许可。
所以,共识算法发展的另一个趋势是——
设定共识的进入门槛可以认为是一种去中心化向安全性妥协的结果,但事实就是,在目前的共识算法设计之中,我们摆脱不了进入门槛。
我在第二篇中提到了投机BFT和POW思想的相似之处——这其实并不是我自己的理解,而是对于最近采用BFT论文思路的总结。
我们刚才已经说了,首先,无论是哪种共识算法,为了安全性,其实都需要门槛——我们应该选取对系统更有责任感的节点。
如何让一个节点负起责任来?
很显然——做得好就奖励,做不好就惩罚是最好的方法。
这就是激励机制,而激励机制的设计,是我看来目前区块链共识算法的最大问题。
那么问题来了:假设这个系统里的节点都已经很负责任了,我们需要采用什么样的共识算法呢?
其实,Zyzzyva已经给了我们答案——我们可以先投机地采用更简单地共识算法快速达成共识,不行了再退回BFT。
而同时,DPOS和Hyperledger-Fabric又给了我们现实的模版——其实如果真的大家都很负责,我们也许连BFT都不需要。
当然,这其实是个非常有安全隐患的做法——实际上是大家先射箭(比特币里大家都没有作恶,甚至,最近连孤块都很少了)再画靶子(那么,既然恶意节点这么少,网络这么好,那么我们完全用不着用这么复杂的算法嘛)的行为。但是,这种很鸡贼的方法,其实就是投机BFT的变种。
换句话说,不要再用老眼光去认为BFT一定代表了O(N^2)的消息复杂度和高延迟了,实际上,在引入激励机制之后,如果投机BFT永远用不到备用方案,那实际上效果和类POW算法也没什么区别。目前,在Algorand的新版本中采用的BA*,实际上就是一个投机BFT算法。而Thunderella,就干脆选出一个委员会采取同步非拜占庭容错的方法去做共识,管这种方法叫做快速通道——这个其实也就是投机BFT的路子。另外,Byzcoin中也用了投机BFT,但是只是先把消息复杂度降到了O(NlogN)。但无论如何,这些算法都会有个备用方案,就是切回传统BFT或者POW。相比而言,DPOS这种“反正有社区共识节点不会做恶,那么我们干脆不要用BFT了”的方法,从投机BFT的眼光看,有些投机地过头了。
所以,最终问题的关键是激励机制——只要激励做得好,大家都不做恶,无论是POW还是BFT,最终消息复杂度都是O(N),最终,输出也就只受限于网络条件而已。
我们先来总结一下:前三条,我们叙述了经过后比特币时代第二阶段,共识算法发展出的一个基本框架:
首先,我们只要保证绝对的一致性,然后只要保证同步条件下的活性就行了。
第二,我们需要设置一个合适的准入门槛,让无关节点参与共识不是一个好主意。
第三,我们需要一个合适的激励机制来保证节点在正常情况下没有做恶的动机。
然而,这三条说起来容易,实际操作起来都有还要解决的问题。
其中第二和第三条,如何设置门槛和激励机制,这是一个计算机科学家无力独立解决的问题——因为其中涉及到经济学乃至政治学的东西,而目前很少有人同时对于这几方面都有很深的涉猎。
对于第一条,看似PBFT也达到了异步一致和同步活性,其实Honeybadger BFT里面指出了它的问题——由于主节点是固定的,恶意节点只要持续DDOS主节点就能无限地破坏同步性,让共识无限延迟。
所以说,对于第一条,仅仅是同步共识是不够的,我们还要考虑在实际的网络中同步的鲁棒性。
让我们翻回头再看看传统异步BFT问题中的假设:一方面,我们可以认为是一个可能出现任意延迟,恶意节点可以进行任意行为的网络;而另一方面,我们也可以认为是一个同步网络中,恶意节点可以任意操纵网络连接的系统。
而现实中的情况是——第一,刚才我们说了,如果有了好的激励机制,恶意节点的行为不是任意的;而同时,恶意节点其实也不能任意操纵网络,例如:他们没法根据公钥,立刻找出一个节点的IP;或者,恶意节点无法伪造他们的网络连接;又或者,恶意节点可以通过DDOS造成小规模的不同步,但是无法造成全互联网级别的瘫痪。
根据这些特性,我们可以梳理出另一条逐渐清晰的脉络——当我们知道区块链的主要应用场景,例如,公链的应用场景是互联网的时候,我们应该针对互联网的特性做一些新的假设。例如之前说的同步性:PBFT应用于公链是很危险的,因为恶意节点可以很容易地DDOS一个确定的节点。然而,POW在公链中就更加安全,因为POW的区块发布节点是随机的,同时,无法提前预测的。因此,在设计共识算法的时候,我们需要考虑到现实网络中DDOS的能力,最理想的状况是像比特币一般,区块的发布者的确认和区块的发布同时进行。
所以,Algorand采用VRF(可验证随机数)的方式来进行区块发布者选择,而Ouroboros也在后来的版本中把选取区块发布者的方法从哈希函数改成了VRF。
这是第四点共识算法发展的趋势——我们应该考虑互联网的实际特性,不应该再用延迟的眼光去看“异步”这个问题,而是考虑“恶意节点有怎样的网络控制能力”。然后,就如同第一条所说的,与其去关心系统如何应对理论上任何可能出现的异步情况,我们更应该关心的是现实网络中可能出现的异步情况。
之前我们已经简单提到了雅典民主,而雅典民主的一个最大特点就是随机——随机选出500个人来治理一段时间,似乎并不是一个特别不可接受的选择:这里有两个原因,一是因为大部分人都是好的,二是因为如果随机的过程足够公平和不可预测,那么这500个人大概率是互不认识的陌生人,这样,他们合谋的可能性也很低。
所以说,其实这带来了一个关于选取委员会的思路——
我们希望提高比特币POW的效率,而比特币POW的瓶颈,实际上是传播延迟对于安全性的影响。因此,想要降低传播延迟,我们想要在一个更小的范围内做BFT,这就是选取委员会的问题了。
然后,接下来,出现了这么一个意见分歧:
一种方法是DPOS和POA甚至联盟链。他们代表一个更直观我们更容易理解的选取委员会的思路——我们通过投票,或者通过认证,或者通过现实中的身份,选出一些可信的节点,来代表我们做共识。
而另一种,就是朴素的雅典式民主:我们定期随机选取一些节点代表我们管理这个网络,尽管这些人在个体上可能并不那么可信,但只要随机无偏向,只要大部分人是好的,只要我们进行比较频繁的轮换,那么这些陌生人也许比一个我们信任的长期掌权的委员们更可靠。
当然,这两者孰优孰劣又变成了政治问题,这也是一个令区块链研究者头疼的问题——只要深究下去,共识本身就是个社会学和政治学问题。
但是,如果我们姑且认为随机产生委员会是有道理的,那么,区块链共识算法可以做进一步优化——我们可以采用随机的方法缩小共识范围。
Algorand和Avalanche其实都采用了这样的方法,而Elastico和Omniledger,也采用了这种随机的方法进行分片。
但是随机也是有局限的,就是随机会伴随着安全性的降低——如果对于一个有10000个节点的网络做容错的话可以容下1/3的错误节点的话,那么如果你想随机选出100个节点同时希望极大概率这一百个节点里恶意节点的数量不超过1/3的话,那么10000个节点之中,可能只能有1/5的节点是恶意的了。
当然,换言之,如果网络里只有1/5的节点是恶意的,那么我们就可以相应地用这种随机的方法来缩小共识范围。
那么,我们怎么知道网络里恶意节点的比例是1/5而不是1/3甚至1/2呢?
简单说——我们不知道,这其实又是一个先射箭在画靶子的问题。但我们希望在未来,可以想出一个用激励机制来保证它。
以上所有的方法,以及提到的除了Elastico和Omniledger的所有算法,包括但不限于POW类的,POS类的,乃至DAG类的,甚至一些不知道怎么归类的例如Thunderella,Avalanche这种,其实统统都属于“可扩展(Scalable)”共识算法,而不是“无限扩展(Scale-out)”共识算法。换句话说,消息复杂度是O(N),于是网络节点数增加时,最好的情况,输出能够不降低,保持不变。而无限扩展的定义虽然也很混乱,但是通常,我们认为得是o(N)的消息复杂度,换句话说,当整个网络节点数增加时,输出还能提高的,才能叫作无限扩展。
o(N)和O(N)其实很好理解:对于任何一条消息,如果需要通知整个网络,也就是说如果这条交易记录网络里每个节点上都有,那么至少是O(N)的消息复杂度——而比特币就是这样的,或者说,通常意义上区块链就应该这样。而o(N)则表示,对于某一笔交易,只有一部分节点知道——于是就自然而然地有了那个扩展,安全和去中心化的不可能三角:要不然,A把一笔钱付给了B但你不知道,那么未来A可以再把这笔钱付给你,造成双重支付,这是安全风险;要不然,你委托另一些节点代为验证这些交易,这是中心化。
我们刚才说到如果仅仅是“可扩展”,那么输出随着网络增大最好的情况是保持不变,而不变的这个值,是受网络条件制约的,如果一定要说一个数的话,在网络条件很好的情况下,差不多是1000TPS。而1000TPS,对于被中心化应用(例如峰值能有1000000TPS的淘宝)宠坏了的我们来说,显然是不够的。因此,现在一个热门的探索方向是无限扩展,而关于无限扩展今年最热的两个词叫Layer 1和Layer 2。
当然,与区块链领域其他的很多概念一样,这两个词是工业界采用的,在学术上没有严谨定义,然后大家用他的时候概念也五花八门。直观地,很多人认为链下和侧链技术就是layer 2,分片和DAG就是layer 1。或者说,在有主链的基础上把交易挪到链下的叫layer 2,想要修改主链的叫layer 1。
但是这种定义实际上还是很模糊——因为一些分片和DAG技术其实掰开来讲也有类似主链的结构,你也可以看成是把交易挪到了链下或者侧链上。
所以,实际上,更为学术界所接受的定义是:Layer 2是指类似于闪电网络,指通过押金或者保证金的方式将一部分钱锁定在主链上然后开启链下通道的机制,例如闪电网络,雷电网络,Plasma,RSK,Liquid,Polkadots等等。而Layer 1则是指修改共识算法达到无限扩容的机制,例如分片。两者的根本区别在于交易的安全模型是否更改,换句话说,在Layer 2机制里,恶意行为,例如双重支付,是可能出现的,但是利益相关方可以通过拿走保证金的方式来惩罚恶意行为。但是在Layer 1中,安全模型是没有被改变的,恶意行为应该从共识算法上保证不能成功。
再确切点说,Layer 2中,对于每一笔交易,我们不要求BFT中的一致性(也不要求活性),但是如果出现了不一致,总有一方是对的而另一方是错的,而对的那方可以通过某些方法惩罚错的那方,并且能够让整个网络对于他们的对错有一致的判断。但这些的前提是——正确的那方得去主动发现恶意行为并主动采取行动;而在Layer 1中,对于每一笔交易,我们不要求BFT中的活性(因为无限扩展意味着交易不会被所有诚实节点收到),但是我们仍旧要求一致性。于是,只要所有节点都严格执行共识算法,双重支付是不可能出现的。
其实在我看来,两者的冲突不是根本性的,而是路线上的——哪边更好,哪边更实际,哪边更容易做到,于是,我们应该往哪边投钱。但实际上两者完全可以共存,究其原因是,Layer 2中的链下交易,其实和一般的交易是有区别的。这点很多闪电网络的科普文上都提到过了——Layer 2是有保证金的,换句话说,Layer 2更像储值卡,并不能完全代替现金交易。所以说句和稀泥的话,Layer 2是有局限的,Layer 1也同样有,因为目前大部分的分片算法,无论是随机分片,根据地理位置分片,还是根据应用分片,实际上都是牺牲了安全性的。然后,Layer 2实际上将安全交由了受害方取回保证金的机制,实际上也是牺牲了安全性(设想一下,用保险柜防止别人偷钱,和如果别人偷了钱如果你能提供对方偷钱的证据就能把钱拿回来,后者的安全性是不如前者的)。因此,目前几乎所有Layer 1和Layer 2,基本上都还是在不可能三角的框架里的。
这个系列的三篇长文的内容远远超过了我之前的设想,因此显得很是有些凌乱。最初,我希望将视角先限定在BFT上,因为毕竟,想要讲区块链就绕不开BFT,这不仅仅是很多人认为的BFT算法是POW的基础,还因为BFT算法的思想仍旧是现在区块链共识算法发展的核心。然而,最终,无论是从整个系列文章的逻辑上,还是区块链共识算法的发展上,BFT共识都已经很难和类POW共识清晰地分隔开了。甚至,我还是不得不提到了部分关于分片乃至DAG的内容,因为其实这些东西的核心,也还是BFT。于是,最终,原本的设想是以“BFT算法在区块链共识算法中的改进趋势”为结尾,现在,就变成了“区块链共识算法的发展趋势”了,因为实在没法把BFT从这些新的共识算法,例如Algorand中抽离出来而不谈其他。
然后,最后的这部分“区块链共识算法的发展趋势”,最近,也有不少文章从其他的角度谈了这个问题。相比而言,本文中的趋势主要是学术领域的趋势,来源于我个人对这个领域的研究、理解和总结。换言之,如果要写论文,你需要注意这些趋势,如果是看论文,了解这些趋势可能会对理解一些新结果有帮助。但如果是实践或者应用的话,这些趋势仅限参考:也就是说,这是我认为区块链共识算法作为一个学术理论的发展方向,但未必是未来短时间内区块链实现采用的共识算法的发展方向,而且,也很有可能不是从区块链应用的角度更被需要的共识算法的趋势。如果你是项目方或者投资者,也许其他文章中从这些角度预测的趋势对你而言更有意义。
现在,总算是介绍完了最基础的BFT部分内容,我们总算可以更自由地去谈其他共识算法了。我希望我之后能够用更快的速度更新这个专栏,接下来一篇的内容,应该是关于POS。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!