比特币目前最核心的问题,还是TPS过低。目前比特币的TPS最高为7,而支付宝TPS为25.6万。毫不夸张的说,支付宝已经是核弹级别了,而比特币还停留在小米加步枪的水平。
相信各位小伙伴们一定很着急,如何拯救我们的比特币?
「朋克」在前几章讲过,从技术使用角度看,区块链公链的三极主要是安全性、效率、规模化能力(TPS)。这三极相对来说是矛盾的,没有办法同时满足超高的安全性、超高的效率及大规模化的能力。鱼和熊掌,不可兼得。
目前来看,比特币的安全性级别非常高,但是系统吞吐量(TPS)太低,从而导致的手续费过高,以及无法搭载各种智能合约及去中心化应用(这也有比特币不是图灵完备的原因)。
因此,「朋克」在这一篇,将要介绍
1. 比特币目前有哪些改进方案可以提升性能;
2. 比特币之外的其它公链,又有哪些改进的方向和可能性。
首先我们来温习一下上一篇「朋克」提到的公式:主链TPS=区块大小/(出块间隔*交易字节大小)。公式中的三个变量:区块大小、出块间隔、交易字节大小,调整后都可以提升主链的TPS,这也是下面要讲的方法中的一部分。
此外,还有一些其他方法,实质上是通过在主链之外进行交易或运算之后再将数据记录到主链,也达到了变相提升整体吞吐量的目的。
下面「朋克」就来为小伙伴们细细道来。
一、 比特币的解决方案
为了提升比特币的TPS,以下几种是目前正在(将要)使用的提升方案。
1. 隔离见证(降低单笔交易记录的字节大小)
在比特币设计中,一笔交易大小约为250-400字节,如果能够降低每一笔交易的字节大小,就可以使一个区块内记录更多笔交易。这也就是隔离见证(SegWit)在做的事情。一笔交易的记录包含了交易记录和签名信息,然而签名信息只有矿工在将交易打包入块,验证合法性时才有用,对于非矿工来说其实是没有用的。因此隔离见证提出不将签名信息写入区块,仅写入一个指向签名信息的指针,将签名信息储存在另一个数据结构中。这样的好处是减小了交易的大小,在无需增加区块大小的前提下达到了扩容。在一笔单输入单输出的交易中,使用SegWit大约可以节省50%的交易大小,对于多输入或多重签名的交易可以节省更多,并且理论上不会降低安全性。
而且隔离见证的交易可以和没有采用隔离见证的交易共同运行,也就是说在同一个区块里即可以记录隔离见证的交易也可以记录没有隔离见证的交易因此隔离见证另一个好处是无需硬分叉,不会造成比特币社区分裂的风险。
但是,隔离见证的解决方案,由于只能节省大约50%的交易字节大小,最多也只能是将比特币的TPS提升一倍多一点,只能算是解了燃眉之急,从长远来看,对解决比特币吞吐量的问题还是杯水车薪(吞吐量和支付宝还是万倍的差距)。
2. 闪电网络(将一部分交易在链下的状态通道内完成)
除了隔离见证以外,闪电网络也是目前比特币正在使用的可以提高系统吞吐量的方法。
由于链上的容量有限,现在一种解决方案是将部分运算不在链上完成,而在链下计算好之后,再将最后的结果写到链上的方式。这种方式可以大幅提升主链的吞吐量,而链下进行运算的地方,则通常被成为状态通道(State Channel)。而闪电网络就是采用了状态通道的思路。
闪电网络的基本思想是:两个相互之间经常频繁交易的地址,并不需要将每一笔交易都详尽的记录到区块链账本上,只需要记录一段时间内的交易结果即可。为此,闪电网络采用了支付通道(状态通道的一种)的技术,即只需在两个地址打开支付通道和关闭通道时写入区块链,这之间两个人无论互相发送了多少次传输,写入区块链的数据都不会增加,并且闪电网络内的交易是及时确认的,不需要等区块确认。值得注意的是,这两个人无论交易了多少次,都不会产生手续费,只会在开启和关闭通道时产生手续费。
闪电网络的另一个特性是不仅可以在建立通道的两个地址之间传输,还可以连接各个通道。比如A和B建立了支付通道,B和C也建立了支付通道。这时候A虽然没有直接连接到C的传输通道,A依然可以通过闪电网络,将交易先支付给B,再由B转交给C。理论上如果有一个超级节点,所有人都建立和这个超级节点的支付通道,那所有人都将可以通过闪电网络互相支付。
乐观情况下,闪电网络可以极大的增加比特币的TPS,并且可以大幅的降低手续费(理论上接近于0)。
未来,理想情况下,闪电网络可能会形成多个超级节点,每个节点链接一部分用户,同时超级节点间相互连接,从而覆盖绝大部分的比特币用户,形成覆盖全球的综合交易支付平台(这有点类似于现有的银行体系,每个银行覆盖一部分用户,同时银行间可以进行结算)。超级节点通过收取用户的手续费(非常低)作为盈利模式,而闪电网络的开发公司(Lightening Network Company)通过为大客户架设商业级的闪电网络节点赚取利润。
但是,上面的只是理想情况。
目前来看,闪电网络的缺点在于并未经过长时间的验证,安全性有待考证。并且其本身是不运行在区块链之上的,这也有可能会降低交易的安全性。
此外,这种一个或多个超级节点的形成,实质上可能会导致比特币去中心化程度降低,变成了弱中心化的产物,用户之间的交易从主链上原有的C2C的模式变成C2B2C的模式,这从某种意义上与中本聪的本意相悖。
还有很重要的一点是目前阶段,闪电网络的易用性还不强。
一方面由于闪电网络的部署难度较大,普通用户较难部署,这也导致了目前的普及程度较低,随机两个用户之间可能找不到可以把他们链接起来的通道(这会导致不能使用闪电网络),或者两个用户之间需要通过非常非常多的中间方才能够链接起来(这会导致高的手续费)。
另一方面,是用户如果开启闪电网络的通道,那么他需要一直保持通道开启的状态,不能下线。否则一旦通道关闭,下一次开启还需要再次支付开启的费用,这对普通用户来说也是较为繁琐和不实用的地方。
3. RSK侧链(将一部分交易放在侧链上完成)
侧链的逻辑与状态通道类似,也是通过将部分交易放在侧链上完成,从而降低主链的负担,实现变相的提升TPS。RSK就是一种BTC的侧链。
侧链与状态通道的区别在于,状态通道本身是链下的(不是在区块链上运行的),而侧链是在链上的(其本身也是一条链,只是不在BTC上运行),但是可以通过跨链智能合约,将主链上的资产和侧链上的资产进行交换。因此,可以将一部分(甚至大部分)交易或运算放到侧链上执行,只将最后的结果放到主链,从而实现主链性能的大幅提升。
同时侧链还可能有一些主链没有的特性,比如RSK的区块链是图灵完备的(BTC不是)。图灵完备通俗的讲,就是可以实现所有的代码编程。所以通过在RSK区块链上运行智能合约,再转移到BTC上,可以等效于运行BTC的智能合约。
侧链目前来看是非常好的解决方案,但是核心的问题在于,侧链本身也是一条链,那它又如何提升本身的TPS呢?
二、其它公链可行的解决方案
介绍完了比特币目前的一些提升性能的方案,「朋克」再与小伙伴们介绍一下,比特币之外的其它公链,又有哪些尝试,以提升其系统吞吐量。
1. 扩容
根据我们之前的公式:主链TPS=区块大小/(出块间隔*交易字节大小)。
因此,除了隔离见证外(减少交易字节大小),增加区块大小是最简单的扩容方案之一。这也正是BCH(比特币现金,具体「朋克」会在之后的文章介绍)采用的方案,通过增加区块大小,使得每一个区块可以记录更多的交易,也等于可以线性的增加TPS,但是缺点是区块链数据库大小也会成倍增加。而区块链数据库大小增加之后,会导致节点需要配备更加多的存储空间,这会导致观察节点(不参与挖矿的节点)以及个人挖矿节点的数量减少,从而使得系统的去中心化程度及安全性减弱。
以BCH为例(注:BCH的区块大小为8M),目前BCH如果写满每一个区块,一年就会产生约400GB的区块链数据。相比之下,比特币从2008年运行至今,区块链总大小为约160GB。
2. 提升出块速度
同样的,降低出块间隔(也就是提升出块速度)也是一种简单的扩容方法。在保持区块大小不变的情况下,降低出块间隔,也可以有效的提升TPS,并且还可以提升交易确认的效率。已经有相关论文证明即使将比特币出块间隔改为1分钟,几乎不会降低比特币区块链的安全性。
但是出块速度是不能无限制提升的,出块越快网络上产生自然分叉(孤块)的概率就越大,这样POW带来的安全性就会对应的降低。并且,如果只降低出块间隔,同时保持区块大小不变,那和区块扩容一样也会导致区块链数据库成倍增加,从而导致观察节点以及个人挖矿节点的数量减少,降低系统的安全性。
***
前面「朋克」提到的关于TPS公式中的三个变量:区块大小、出块间隔、交易字节大小都已经有方向去解决。但是大家可能已经发现,无论调整的是哪个变量,都只是线性的增加,无论如何都不可能追赶上支付宝和Visa级别的TPS。
***
下面,「朋克」将与大家探讨几个更加深层次的解决方案。
3. 调整共识机制
比特币的本质是基于工作量证明(POW)的分布式账本,那就必须受制于前面TPS的公式中的三个变量。
因此,很多公链尝试调整他们的共识机制,从而大幅提升效率。例如eos(柚子链)提出的DPOS(股份授权证明机制)、NEO(小蚁)提出的dPBT(一种改进的拜占庭容错算法)等,本质上是将比特币去中心化的共识,变成了弱中心化的共识。简单地说,就是之前的公链上所有的节点都可以参与进行记账,而现在会先进行选举,选举出一小部分节点后,由一小部分节点参与记账,从而可以使得共识达成的速度、出块速度、运算速度等都大幅提升。(具体「朋克」会在之后的文章中详细展开)
区块链的共识机制,就好比现实中的政治体制
这样做的优点是TPS的速度可以成千上万倍的提升,并且移除了挖矿导致的电能消耗。但缺点是,一方面这种弱中心化的模式(不管是股份制也好,还是授权模式也好),会导致马太效应愈加明显,即富者越富,穷者越穷。另一方面,目前还没有一个大规模部署的基于股份制(POS及相关共识机制的)系统,安全性还没有得到验证。
4. 主链+状态通道(State Channel)
这种模式类似于比特币+闪电网络的模式,只是更近了一步,在开发公链的时候就已经自带原生的状态通道了。典型的代表公链例如AE(aeternity)。AE的状态通道不仅可以处理大量交易(类似闪电网络),还可以直接进行程序的运算(图灵完备)。(具体关于AE的介绍「朋克」会在之后的文章中详细展开)。
但同样的,这种状态通道是在链下完成的,并不上链,本质上并不是区块链,其安全性可能会有所降低。
5. 分片(Sharding)
分片技术是由以太坊(ETH)最先提出的一种扩容技术,目前还没有开始使用,预计在3-5年内会部署完成。分片技术简单的说,类似于通过分层级的结构,把非常多的侧链链接起来,从而极大的提升系统的吞吐量。
分片会将整个区块链内的地址分成若干个小块(分片),每个账户隶属于一个小块,小块之间形成一个树形结构。每个账户只能直接与同一分片中的地址进行交易,和另外分片的交易就需要进行跨分片交易。每一个分片本身也是一条区块链,也遵循区块链的各种规则。
分片技术将整个系统分成树状结构的片
打个比方,现在把整个区块链分成全球(底层链)-国(一级分片)-省(二级分片)-市(三级分片)四级。然后属于同一个市地址之间的交易,在市级的分片中完成即可。如果是同一个省但是跨市的,则在省内进行交易并记录。只有跨国的交易才会导致每个国内的状态变化,最终会统一记录在全球区块链的底层链上。(当然上面这样的分法只是「朋克」为了大家更容易理解而说的,并不是最终的分法。)
这样分片的模式可以减少底层链上的交易信息,仅需记录最高层分片间的状态变化即可,从而极大的增加整个系统的TPS和扩容性。
6. 分层
分层目前也是其它的一些公链提出来的扩容方案。
在现有的区块链1.0、甚至是2.0的架构中(例如比特币、以太坊等),进行的各种操作,不管是交易、还是运行代码、或是执行智能合约等,都是混合在一起完成的。
而分层的逻辑是将不同的操作在不同的层级里去完成,层与层之间通过接口进行交互,每一个层本身也是一条或多条区块链。这样可以极大的提高整体的TPS能力,并且通过每一层的功能的区分,可以扩展运算能力及程序的处理效率及能力。此外将层与层之间隔离后,可以使得安全性更加提高。即使上一层出现了问题,也并不会影响下一层的安全性。
上图是本体网络(ONT)的部分分层架构
目前来说分层的涵盖的范围比较广泛,类似于分片、侧链等技术,也都可以算作是分层的一种。但是一般意义上来说,基于功能的分离架构,更多被认为是分层的代表形态。
7. 其它
除此之外,还有其他的一些扩容的方案,例如DAG(有向无环图)的区块结构、多链(类似于多条侧链)、中继链等,由于篇幅有限,不一一介绍。朋克之后会挑选有代表性的公链进行讲解。
三、小结
比特币是区块链日出时的第一缕阳光,从此开创了区块链的时代。
虽然目前比特币还存在着许多的问题,无法承载大家对区块链的最高期待,但是,比特币已经推开了区块链的大门,社会的发展、商业的演变会随着区块链的变革,发生翻天地覆的变化。
https://zhuanlan.zhihu.com/p/34151092