区块链缩放研究
原文自edX上伯克利大学课程Blockchain Technology。本文是对课程内部分内容的总结与修改。
虽然现在的公链生态已经获得成功,但是其反受繁荣现状的掣肘。尤其是比特币和以太坊,存在严重的可扩展性问题。从其成为能够支持全球规模交易量的全球网络的目标来看,目前两者都在交易吞吐量(tps)方面表现不佳。
从根本上讲,扩展解决方案可以增加交易量或减少交易时间。这也是理所当然的,因为可缩放性是按区块链可实现的tps(每秒交易量)衡量的。
展望未来,我们可以通过两种方式对区块链扩展解决方案进行分类。首先是与传统的云架构缩放级别(水平,垂直和对角线)进行粗略的比较。其次,存在特定于区块链的缩放分类:第1层(在链上)和第2层(在链外)。
纵向缩放
正常情况下,tps算法如下
因此我们可以给出如下几种优化方案
减少区块时间
我们不能简单地减少区块时间,因为那样会导致自然产生的分叉率更高,从而降低了系统安全性。因为在减少块时间的同时,网络中广播新区块的时间是依旧不变的。
以太坊一直通过采用GHOST(Greedy Heaviest Observed SubTree,贪婪的最高权重的被观测子树)协议来解决这个问题。使用GHOST协议,矿工并不会简单地同意最长的链条(比特币方案),而是“重量”最大的链条。这个“重量”是由一条链的长度和其叔块数计算得出的一个值。
增加区块大小(容量)
增加区块大小能够改善区块链的TPS。因为一个区块可以包含更多交易,也将降低交易费用。
但是,与减少块时间一样,增加大小存在一些副作用。一方面,增加块大小将意味着很难分叉,并且根据社区的不同,这可能不是令人愉快的体验(BCH)。这也将使区块链总体积以更快的速度增长,这也是减少区块时间的难题。最后,增加块大小很可能不是一次性解决方案,因为可伸缩性提升只是线性的。将来可能需要再次增加块大小,从而引发“滑坡”式的争论。
减少交易体积
隔离见证(SegWit)是对比特币的升级,可将交易签名从交易内部移至交易结束时的单独结构,称为隔离见证。对于非隔离见证节点,这将减少有效交易规模,因为它们不知道读入隔离见证。
非隔离见证节点将看到没有签名的交易,但会将交易标记为有效。另一方面,SegWit节点将知道读入隔离的见证人,并使用签名对其进行验证。
SegWit最初旨在解决比特币中的交易延展性。它还使用软分叉来实现,并导致较小的区块链大小。但是,SegWit只是线性可伸缩性的一次提升。
递归SNARKs也可以减小事务大小。与其将交易本身存储在区块链中,我们可以存储证明这些交易确实发生的证据,以及谁拥有多少加密货币的最终资产负债表。这通过减小事务大小来提高效率,并且还因为机器可以在几毫秒内验证证明。但是,当前,为了生成这些样式的证明,需要可信的环境设置。在实践中,生成证明非常昂贵。
链下纵向缩放
考虑到区块链的速度限制了它的可扩展性,我们可以考虑完全消除链上成本更高的操作,仅在需要全局真相时才发布。
闪电网络&雷电网络
可以使用HTLC(哈希时间锁定合同)来实现比特币中的支付渠道,并且可以将交易从主要的比特币区块链转移到侧链。
如果Alice和Bob经常进行交易,那么对于Alice和Bob来说,建立一个私人支付渠道是很有意义的,他们在这里进行链下交易。 仅当他们想结清最终余额时,他们才会回发到主区块链。 这样一来,Alice和Bob仍然可以像往常一样进行交易,但是主区块链只需要存储Alice和Bob的初始余额和期末余额。
比特币闪电网络的根本思想是建立一个“支付渠道”网络,如图所示
graphLR Alice --- Bob Alice --- David Bob --- Eva Bob --- Fiona David --- Eva Eva --- Fiona Fiona --- Charlie Eva --- Charlie
在上图中,只要存在通过支付渠道网络从Alice到Charlie的路径,Alice就可以立即向Charlie付款,而无需直接面向Charlie付款。
以太坊在工作中有一个类似的可扩展性解决方案,适当命名为雷电网络(Raiden)。
付款渠道和付款渠道网络将使我们无需进行很多交易,将付款委托给简单的簿记。由于主区块链仅在支付渠道中看到各方的开始和结束余额,因此我们可以使大部分交易保持脱链状态:将比特币从不到10的tps扩展到潜在的数十万tps。
但是这种方式依然存在一些问题:必须锁定资金才能启动支付渠道;集中到中心辐射型(hub-and-spoke)拓扑的支付渠道网络的集中化问题。
横向缩放
分片
分片是一种数据库扩展策略,可将一个完整的数据库分为多个“分片”,每个分片数据库都包含来自原始数据库的子集的数据,该原始数据库的子集是原始数据库。相同的想法可以应用于区块链,并且目前是以太坊研究的活跃领域之一。
将分片应用至区块链意味着并非每个节点都跟踪每个区块。这是第一层横向缩放解决方案。我们可以有多个并行运行的区块链,每个区块包含所有交易的子集。当前正在研究的问题包括分片式区块链系统中各个节点的分类(例如,看到单个分片的节点与看到所有分片的节点),跨分片通信以及针对单分片接管的防御措施。
侧链
侧链的想法是,可以出于不同目的创建多个侧链,以插入主链,从而有效减少主链上的流量。
其本质是将hash分散在多个链上,因此存在安全隐患。
高级缩放及其通用化
Plasma
以太坊的Plasma可视为一种对角线缩放解决方案,因为它可以通过实施侧链实现横向缩放,并通过Tendermint和替代共识机制提高速度来实现纵向缩放。链下交易的安全性源自根链,根链是系统内真实性的主要来源。
FourState是一个由伯克利成员组成的区块链组成的团队,它使用Cosmos SDK编写了Plasma的实现,从而实现了更大的灵活性和可扩展性。
区块链从上到下有3个主要的抽象层:
- 应用层:处理事务并更新系统状态
- 共识层:确保整个网络都同意交易和数据库更新
- 网络层:确保所有节点在合理的时间内获得更新
Tendermint项目的目的是提供网络和共识层,以便可以在其之上构建任意应用程序。Tendermint是Cosmos网络的共识“引擎”,旨在使区块链具有互操作性和可扩展性。
总结
下表总结了我们已了解的缩放解决方案,并按2种不同的方法进行了分类。第1层和第2层指定解决方案是在链上还是链外构建。解决方案也可以横向或纵向缩放。
\ | 纵向 | 横向 |
---|---|---|
第二层 | 1. 支付通道 2. 闪电网络 3. 雷电网络 4. Plasma |
1. 侧链 2. Plasma 3. Cosmos |
第一层 | 1. 区块时间,大小 2. GHOST 3. SegWit(2x) 4. 递归SNARKS 5. 其他架构、共识 |
1. 分片 |