1 区块链不可能三角
区块链可扩展性,也就是不可能三角

2 可扩展的第一个定义—可扩展的POW
可扩展性的定义

在不加任何限定下,这是指某个表现y随着某个变量x的增长的变化情况,如果y能够随着x的增长而线性增长,我们会说y是linear scalable(线性可扩展)的,或者就简单地说是可扩展的。换句话说,如果我们定一个很高的目标y,如果我们知道“这种东西我们只要用某f方法,然后把x堆起来就一定可以达到”,那么我们就说这个f方法是可扩展的

比特币的7TPS(每个区块1MB,每笔交易大小250B,10分钟生成一个区块,每笔交易的时间为1MB/250B/10分钟=110241024/250/10*60=7笔交易/s)是不可扩展的。因为想要提升比特币的7TPS,尤其是想要把它提高到能和传统支付手段相比的输出,例如10000TPS,我们能做的事很有限。最自然而然的方法是加大区块大小,或者降低区块间隔,而因为即便没有严谨的数学分析和证明,人们也知道这是不可能的,因为要是把区块加大1000倍到一个G然后十分钟一个区块,除网速带宽限制外还有分叉安全性问题。

比特币的POW算法里,安全性依赖于区块同步的时间远小于区块间隔时间的前提

  1. 比特币的安全性的前提是——假设所有矿工都是逐利的,那么任何人想要作弊,都需要打败50%的算力,因为你必须要拥有超过其他人的算力,才能挖出比别人更长的链。然而,这个竞争是公平的前提是,作弊者和其他所有人都在挖同一条链,即全网对于当前最长链在大多数时间里是同步的。
  2. 然而,对于比特币而言,这是不一定的。而这也是比特币的POW和传统分布式系统的算法不一样的地方——比特币中允许网络中出现短暂的不一致,即分叉,即网络中的两部分不同节点同时分别认为两条不同的链是合法的。这个时候,如果恶意节点想要挖出最长的链,他不再需要竞争过其他所有人了。
  3. 假设一个分叉中两条链各被50%的算力接受,那么这个时候如果网络中总是存在着两个分叉,实际上等同于网络分区,举个最简单的情况,就是说当你挖到区块的时候,另外一条链也挖了一块出来但是你们这一半没有收到,然后两边都继续挖下一块,于是最终你有26%的算力你的链就是最长的。如果链始终处于两个分叉的状态,就代表始终总有一半人不和你竞争,全网算力存在浪费现象,可以认为比特币的安全性下降了。
  4. 而如果网络中一直有分叉,很难收敛,那么就总有人不是在最终的最长链上挖矿,于是整个网络的安全性就达不到POW理论上的50%的水平;而分叉无法收敛,则不仅仅是安全性下降,而是交易永远无法确认。

比特币很少出现分叉,而且一般分叉很快就会消失的解决方案

  1. 分叉是怎么出现的——当A挖到一个块的时候,A会尽快把这个块公布到全网,越多的人知道,就越多人会继续在后面挖矿,于是这一条链比别人长的可能性就越大,于是这一块最终出现在最长链上的可能性就越高——而在比特币中,只有最长链上的才是最终结果。
  2. 然而,如果A的这块还没有被网络中的另一点B收到的时候,B也挖到了一块,而B在不知道A挖到这块的前提下,也会做同样的事情,于是就产生了分叉,而网络也会被分割成两部分,先收到A的块的就会认为A的链更有前途,在后面继续挖,反之亦然。
  3. 在现在的比特币网络中,一个区块是1M,传输和验证起来都比较快,所以需要把一个区块同步到全网的时间很短,只有当两个节点在这段时间里同时挖到区块才可能产生分叉。因此,如果区块传输延迟远小于区块生成间隔的话,分叉的概率就会很小,而连续几次分叉的概率就更小,所以大概率分叉在一个区块后就会结束,留下一个深度1的孤块。
  4. 而如果我们加大区块大小,或者缩短区块间隔,使得区块同步时间区块生成间隔的比例没有那么悬殊的时候,那么同步所需要的时间就会变长,于是产生分叉的可能性就会增加。而如果同步区块时间超过了区块间隔,那么分叉数量就永远不会减少,而是会越来越多。
    总结
  5. POW算法很少出现分叉,而且一般分叉很快就会消失的解决方案是:区块同步时间(区块大小1MB)远小于区块生成的时间间隔(10分钟出一个块)
  6. 区块大小增大导致区块传输延迟增大,于是区块延迟/区块间隔的比例增大导致网络中可能出现分叉的几率增大。同理,如果减小区块间隔也会造成一样的结果

比特币不可扩展——因为它的输出不能随着扩大区块大小(减小区块间隔)并且在碰上网速带宽的边界之前无限提升,而是在那之前就先碰上比特币POW算法自身安全性对于同步依赖的边界了。

可扩展性的改进

想要改进比特币的POW算法,使得它能够摆脱安全性对于同步性的依赖,使得我们能够简单地通过扩大区块大小(减小区块间隔)来提升输出,直到遇到网速的边界为止,这类的尝试,我们称为“扩展比特币(Scaling Bitcoin)”,而这样的算法,则可以称为“可扩展的POW算法”,因为,相比于比特币的POW,它们从这个角度上来讲更可扩展了。

这一类算法例如Bitcoin-NG,GHOST,Hybrid Consensus等。然后,可扩展性也在同一级别的还包括使用了类比特币POW结构的POS例如Snow White和Ouroboros。

3 可扩展的第二个定义—无限扩展

在传统分布式系统里,通常scalable(可扩展)的定义是指系统的输出是否能够随着增加节点的数量而线性增加,如果能,就是可扩展的。所以用这个定义的话,如果一个区块链系统是scalable的,那么如果他有1000个节点的输出是x,那么如果我们加上1000个节点,输出应该变成2x。比如,如果把比特币的网络扩大一倍,那么TPS应该翻倍。

然而,如上所述,比特币并没有这样的性质——比特币的算法决定了它的输出就是7TPS,因此,比特币不是可扩展的。

但是,其实这带来了一个问题——从可扩展的第二个定义角度讲,就算是第一个定义中可扩展的POW也不是scalable的,即便到现在为止,也几乎没有哪个区块链是scalable的,其实这也好理解——一个linear scalable的分布式系统中,每增加一台服务器它都能增加相应的输出的原因是,新增加的这台服务器可以独立承担一部分任务。

而区块链和传统数据库不同,它几乎一定在某种程度上需要多个节点存储同样的数据(传统分布式数据库的人管这叫异地多活,冗余设计),否则就失去了去中心的意义,所以,一定从某种程度上,它无法达到多出几个节点就提高多少输出的效果。除非,它要做出一定的安全性牺牲,或者可信假设,而这就是总是被人津津乐道的“区块链不可能三角”

然而,即便如此,高输出的吸引力还是巨大的——区块链出现之后,人们总是把区块链对标互联网,也总是把公链对标未来的互联网独角兽。然而,如果区块链达不到这样的可扩展性,那么它的输出最终会受制于网络,是无论如何支撑不起互联网独角兽的场景的。为了将这种可扩展和之前所说的可扩展区分开,在区块链共识算法的语境下,这种被称为scale-out,即无限扩展。

总体来说,能够达到无限扩展目前的方法有两类——链下技术分片,前者其实本身就不在不可能三角的框架之中,链下技术更多的是一种把区块链当成可信中介,然后根据不同应用和场景,然后考虑不同区块链的特性,提出一个可以借由区块链的链下解决方案。例如链下支付通道,实际上就是储值卡这种针对小额高频交易的解决方案在区块链场景中的映射。从理论上来讲,链下技术和链上最大的区别在于BFT中的一致性,链上技术需要共识算法保证交易的一致性(尽管可能会需要在安全性或者去中心上做出妥协),而链下技术中交易的一致性共识算法本身是不管的,而依赖于链下方案本身的设计以及双方根据场景对链下的协商。

但是,通常不用scale-out这个词来形容链下算法——因为链下算法天然scale-out,所以没有必要再特地去用这个词来形容。所以,一般说道scale-out都是分片算法,能够归于这一类的算法包括Omniledger,Chainspace,和 Monoxide,以及偏工程的以太坊分片和Rchain,VAPOR

从这种角度看来,两者似乎和很火的另外两个概念即“第二层layer2(链下扩容)”和“第一层(链上扩容)”方案的定义非常类似,但是实际上,第一层和第二层的概念更多地不是从我们在这里考虑的无限扩展角度出发的,而是从“要不要改变主链算法”或者“是不是通过链上抵押把交易挪到链下进行”这种角度定义的,所以,实际上,除了分片,许多达不到“无限扩展”而只是“可扩展”,即我们的第一个定义以及我们接下来要讲的第三个定义的方案,也被称为第一层方案。

这其中,最容易造成混淆的是DAG(有向无环图)。由于一些DAG项目的宣传,以及很多人对于DAG结构直观印象造成的错误概念,DAG在很多综述类文章中被和分片并列,认为是无限扩展的——然而,DAG只是一个概念,而把DAG用于区块链的方法有很多,例如GHOST,BLOCKDAG,SPECTRE,PHANTOM,Swirld Hashgraph,IOTA,Byteball,Conflux等等。尽管DAG理论上有无限扩展的可能,但是目前的所有有具体算法的DAG方案(光有个概念的不算)中,没有一个是无限扩展的,而都只是可扩展。

4 可扩展的第三个定义—可扩展的BFT

现在,如果管第一类的可扩展叫做“可扩展”,第二类叫做“无限扩展”,似乎“可扩展”这个词也没有什么歧义。

然而,实际上还有第三个概念,就是BFT类算法。

对于拜占庭容错算法PBFT(实用拜占庭容错),核心过程有三个阶段,分别是pre-prepare(预准备)阶段,prepare(准备)阶段和commit(提交)阶段。对于pre-prepare阶段,主节点广播pre-prepare消息给其它节点即可,因此通信次数为n-1;对于prepare阶段,每个节点如果同意请求后,都需要向其它节点再 广播parepare消息,所以总的通信次数为n*(n-1),即n2-n;对于commit阶段,每个节点如果达到prepared状态后,都需要向其它节点广播commit消息,所以总的通信次数也为n*(n-1),即n2-n。所以总通信次数为(n-1)+(n2-n)+(n2-n),即2n2-n-1,因此pbft算法消息复杂度为O(n2

PBFT的O(N2)是个什么概念呢?用可扩展性的概念去分析一下——假设每个节点的带宽是c,那么全网的总吞吐量上限是cN。那么,消息复杂度是O(N2)的概念是,如果把节点数量翻一倍,那么全网的带宽变成原来的两倍,但是所需要消耗的资源却是原来的四倍。换句话说,PBFT岂止是不可扩展,简直是可扩展的反面,所以采用PBFT算法的区块链的共识节点基本上都只有十几或者几十个。

然而,当区块链出现之后,人们又开始重新审视BFT的时候,O(N2)消息复杂度就完全没法用了。于是,人们开始考虑更“可扩展”的BFT算法,即O(N)消息复杂度的BFT算法,这类BFT算法就多了,包括Honeybadger,Byzcoin,Hyperledger-Iroha,Elastico,乃至Algorand和Avalanche的BFT的部分,都属于此类。他们确实是“使用了(更)可扩展的BFT的区块链”,然而,当有的地方单纯地在突出他们的优势的时候说“可扩展”或者简单地把他们称为“可扩展的区块链”的时候,就和第一类可扩展的POW混在一起了,需要知道的是可扩展的POW和可扩展的BFT的来历并不一样。

5 可扩展的第3.5个定义——比特币扩容

此外,还有第3.5类可扩展,也就是比特币扩容方案——例如大区块和隔离见证。

之所以是第3.5类,是因为从任何角度来讲,它们都只是提高了一些输出,而完全没有解决可扩展性问题。然而,扩容本身英文也是scalable,而且从历史角度讲,这两个方案的确也是扩展的第一步,因为——

大区块-->分叉多-->采用GHOST-->可扩展POW
隔离见证-->解决比特币可变性问题-->方便链下方案的实现-->无限扩展

所以,从这种角度讲,说两个方案扩展了比特币也无可厚非——只不过最终,真正在比特币上的升级,也就只停留在了这第一步上。

6 不同定义之间的关系

首先,第3.5类只有两种方案,大区块隔离见证首先可以排除出去,因为这两种方案现在基本上只会以“扩容”的名称出现,只有非常不专业的地方会用“可扩展”的名义去拿它和其他可扩展算法比较。

其次,在目前,能标榜自己是“无限扩展”的,基本上也不会介绍自己是“可扩展”的。如果这里仍有疑问的话,也只要记住,分片和链下技术是不应该和其他“可扩展”方案放在一起比较的,因为这两个方案的可扩展性更高,即在大网络中的输出更高,但是会在安全性或者中心化上做出一些妥协。更基础一些的不同是——看这些算法为了保证一致性,是不是要求每个节点都记录每一笔交易,如果是,则消息复杂度至少是O(N),于是当网络中加入节点的时候,输出一定是不会增加的。而想要无限扩展,就一定有一些交易,是不需要广播到整个网络的

然后,剩下的所有可扩展算法,即我们定义中的第一种和第三种,其实最终都殊途同归,达到了一样的可扩展性,即O(N)消息复杂度。然后,两者的输出最终都只会受到网络网速和响应延迟的约束,最终,比较优秀的算法大概在实验室环境下,达到1000TPS这个量级,最终当然还是会取决于算法的优劣以及实现的优化程度,但是实验室环境模拟的大网络的延迟实际上是远好于实际的水平,所以在现实中,随着网络的扩大,输出不随着节点数量增加的提升而提升是个美好的想象——输出几乎一定会随着网络的增大而下降。

这其中最容易混淆的就是DAG,但是这类算法中,我们之前也已经介绍过了,无论是工业界的IOTA,Swirld Hashgraph还是偏学术的Phantom和Conflux,无论在某些媒体或,文章,或者他们自己白皮书中是怎么介绍的,请记住,它们严格都是“可扩展”的共识算法,而不是“无限扩展”的。

区块链不可能三角(一)--扩容、扩展、无限扩展相关推荐

  1. 打破区块链不可能三角!2 华人专家论文将登 NSDI 2019 计算机顶会

    本文转自DeepTech深科技(deeptechchina) 作者 | 林佳谊 区块链曾经被形容成一项无所不能的科技,被看好能带来下一代的价值互联网.然其自身却存在着称为"不可能三角&quo ...

  2. 区块链“不可能三角难题”解决了

    区块链技术"不可能三角难题",也叫"三难困境",是说TPS高效性(可伸缩性.可扩展性与互操作性)和去中心化(分散性)以及安全性(稳健性)三者之间"不可 ...

  3. 带哨兵节点的链_HBA公链 | IPFS:区块链“不可能三角”的可能解

    你知道区块链中的"不可能三角"吗?即区块链无法同时达到可扩展性(Scalability).去中心化(Decentralization)和安全(Security).这三个要素中只能同 ...

  4. 带哨兵节点的链_BNC公链 | IPFS:区块链“不可能三角”的可能解

    你知道区块链中的"不可能三角"吗?即区块链无法同时达到可扩展性(Scalability).去中心化(Decentralization)和安全(Security).这三个要素中只能同 ...

  5. 【区块链】以太坊L2扩容方案与零知识证明

    以太坊L2扩容方案与零知识证明 简介 简要概述以太坊L2层现有解决方案 简要概述以太坊L2未来扩容的方向 简要概述零知识证明的基本概念和零知识证明在以太坊的运用 简要概述stark ware的两个产品 ...

  6. 突破区块链不可能三角(二)--在POW扩展性上的尝试

    比特币为了保障其安全性,采用最长链规则,并固定区块大小1M和出块时间间隔10分钟,从而导致其低吞吐量(7Tps)和长时间区块确认间隔(6个区块一小时,每个区块平均需要10分钟),这一直以来饱受诟病,影 ...

  7. 【转】突破区块链不可能三角:异步共识组 [Monoxide]

    我们实现了"异步共识组"模型,可以将一个现有的单链共识算法,横向扩展1000倍以上.这样的扩展将使得吞吐量(TPS)提升1000倍以上,同时也将全网计算能力(CPU)提升2000倍 ...

  8. 31.区块链“不可能三角”

    在前面的讨论中我们提到,一个基础公链要同时兼顾功能.性能.网络三个要素.在区块链的设计中,还有一个更知名的"不可能三角"(见图1),它指的是,一个区块链项目无法同时满足三个条件,最 ...

  9. 18.1. Fabric2.2 区块链农产品溯源系统 - 多Peer部署(扩展)

    这是一篇后补文章,看时间大家能够看出来,通过前面的学习,大家知道如何增加组织.如何部署多Orderer,本节介绍如何在一个组织内部署多个Peer节点,本节是基于上一节操作的继续,脚本也是基于上节进行修 ...

最新文章

  1. hive SERDEPROPERTIES 中对NULL的处理
  2. 数据库基础操作(二)数据库表数据的增删查改
  3. PHP中的get_defined_funciton和get_defined_vars
  4. OpenVINO InferenceEngine之FormatParser
  5. jemalloc mysql5.6_Mysql-5.6安装编译全教程
  6. 详解HTML5网页结构
  7. 手机腾讯网mt2.0增量更新算法优化小记
  8. mysql 中文 phpmyadmin_mysql中文乱码问题,phpmyadmin操作解决方法
  9. net4.0的从客户端中检测到有潜伏危险的 Request.Form
  10. mybatis mysql xml配置_Mybatis-Spring连接mysql 8.0配置步骤出错的解决方法
  11. 软件管理理论—目标管理 SMART 原则
  12. 莱斯康混响插件合集 – Lexicon Plugin Bundle macOS
  13. 蚁群算法Python实现
  14. fatal error C1083:/fatal error C1010: 错误处理
  15. sql语句中select……as的用法
  16. 怎样用计算机xp命令修复软件,系统之家xp系统修复控制台命令使用方法
  17. 【巷子】---flux---【react】
  18. 做一个最简单的上位机
  19. html圣诞快乐英文,圣诞快乐英语,圣诞快乐英语简写?
  20. Vivado® ML Editions 2022.2 最新更新(附下载链接)

热门文章

  1. 上海西门子培训-第七天(周六)
  2. 基于svg开发绘制地铁图
  3. RESTful的意义及其使用规则
  4. 仿微博消息中心的系统设计与实现
  5. 解决使用MSComm控件过程中内存溢出的问题
  6. 2021-05-04
  7. linux桌面管理器未激活,聊聊linux桌面环境和包管理器
  8. 中国边缘云基础设施服务市场份额,百度智能云第一
  9. 为什么JDK 1.8中不再有永久代(permanent generation)
  10. electron学习教程 基本教程已测试完成