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


但是,通常不用scale-out这个词来形容链下算法——因为链下算法天然scale-out,所以没有必要再特地去用这个词来形容 。所以,一般说道scale-out都是分片算法,能够归于这一类的算法包括,,和,以及偏工程的以太坊分片和,VAPOR 。
从这种角度看来,两者似乎和很火的另外两个概念即“第二层(链下扩容)”和“第一层(链上扩容)”方案的定义非常类似,但是实际上,第一层和第二层的概念更多地不是从我们在这里考虑的无限扩展角度出发的,而是从“要不要改变主链算法”或者“是不是通过链上抵押把交易挪到链下进行”这种角度定义的,所以,实际上,除了分片,许多达不到“无限扩展”而只是“可扩展”,即我们的第一个定义以及我们接下来要讲的第三个定义的方案,也被称为第一层方案 。
这其中,最容易造成混淆的是DAG(有向无环图) 。由于一些DAG项目的宣传,以及很多人对于DAG结构直观印象造成的错误概念,DAG在很多综述类文章中被和分片并列,认为是无限扩展的——然而,DAG只是一个概念,而把DAG用于区块链的方法有很多,例如GHOST,,,,,IOTA,,等等 。尽管DAG理论上有无限扩展的可能,但是目前的所有有具体算法的DAG方案(光有个概念的不算)中,没有一个是无限扩展的,而都只是可扩展 。
4 可扩展的第三个定义—可扩展的BFT
现在,如果管第一类的可扩展叫做“可扩展”,第二类叫做“无限扩展”,似乎“可扩展”这个词也没有什么歧义 。
然而,实际上还有第三个概念,就是BFT类算法 。
对于拜占庭容错算法PBFT(实用拜占庭容错),核心过程有三个阶段,分别是pre-(预准备)阶段,(准备)阶段和(提交)阶段 。对于pre-阶段,主节点广播pre-消息给其它节点即可,因此通信次数为n-1;对于阶段,每个节点如果同意请求后,都需要向其它节点再 广播消息,所以总的通信次数为n*(n-1),即n2-n;对于阶段,每个节点如果达到状态后,都需要向其它节点广播消息,所以总的通信次数也为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算法就多了,包括,,-Iroha,,乃至和的BFT的部分,都属于此类 。他们确实是“使用了(更)可扩展的BFT的区块链”,然而,当有的地方单纯地在突出他们的优势的时候说“可扩展”或者简单地把他们称为“可扩展的区块链”的时候,就和第一类可扩展的POW混在一起了,需要知道的是可扩展的POW和可扩展的BFT的来历并不一样 。
5 可扩展的第3.5个定义——比特币扩容
此外,还有第3.5类可扩展,也就是比特币扩容方案——例如大区块和隔离见证 。
之所以是第3.5类,是因为从任何角度来讲,它们都只是提高了一些输出,而完全没有解决可扩展性问题 。然而,扩容本身英文也是,而且从历史角度讲,这两个方案的确也是扩展的第一步,因为——