Layer 2
名词解析
Layer 2,主要是指在构建在区块链之上的可扩展性、计算、存储方面的基础设施。我们习惯把 Layer 2 叫做链下,相应地, Layer 1 就是链上。跳出 Layer 1,也就跳出了 Layer 1 的单节点限制问题。本文讨论的就是 Layer2 可扩展性问题的解决方案。在 Layer 2 层,用类似于传统互联网的手段,通过网络将所有节点连接起来。
Layer 2
介绍
Layer 2,主要是指在构建在区块链之上的可扩展性、计算、存储方面的基础设施。我们习惯把 Layer 2 叫做链下,相应地, Layer 1 就是链上。跳出 Layer 1,也就跳出了 Layer 1 的单节点限制问题。本文讨论的就是 Layer2 可扩展性问题的解决方案。在 Layer 2 层,用类似于传统互联网的手段,通过网络将所有节点连接起来。任意节点之间都可以随时发起交易,没有了单个节点的性能限制,就可以通过增加节点和通道的方式不断扩展,达到光速。
前言
自区块链技术诞生以来,对其“性能”的诟病就从来没有停止过。虽然从技术上说,一个基于分布式对等网络架构的系统,与成熟的中心化技术相比,其“性能”方面有着天然的劣势,但业内人士对区块链“扩容”的研究和努力也从没有停止过。近两年,所谓的“区块链 Layer2 扩展”的提法已经逐渐在业内达成共识,并出现了一些有潜力的项目。本文就将为大家介绍一些与区块链“扩容”和“Layer2 扩展”相关的基础概念。
本文可以看作是对区块链的 Layer2 扩展的扫盲性介绍,不会涉及过多的技术细节;但我会假设读者已经知道比特币、以太坊是什么,区块链大概是什么,我们会基于这些最基础的知识来讨论扩容的问题。
如何评估区块链的“性能”
如果我们现在来问一个区块链爱好者或者从业者:你认为目前比较成熟的公链,比如比特币和以太坊在技术上面临的最大的问题是什么?我想大多数人的回答应该都是类似的:交易确认时间长(一个交易从发出到最终确认所经过的时间)、网络拥堵严重(如果同一个时间产生的交易太多,有些交易无法被马上处理)等等。这也就是通常意义上讲的所谓“性能”问题。
对于目前基于区块链架构的公链平台的所谓“性能”的评估,应该考虑两个方面。
被讨论最多的就是所谓的 TPS(Transactions Per Second),这个维度衡量的是区块链在单位时间内所能处理的交易数量;我们近几年最常提到的所谓“扩容”指的就是这个维度。
如果把以太坊比做“世界计算机”,那么目前,它只能用单核(单线程)来进行计算(同一时间只能有一个矿工来记账,或者说只有一个矿工记的账会被接受);而所谓“扩容”可以想象为把这个“世界计算机”扩展为多核(多线程),使它在单位时间内可以同时运行多个任务(同时有多个矿工在记账,他们记的账都可以被接受),最终反映为 TPS 的提高。这也就是所谓的 Layer1 扩容。在以太坊里,指的就是现在已经合二为一的 Casper + Sharding(我之前曾发过一篇技术翻译稿来讲解 Sharding 的原理,有兴趣的读者可以自行参考,这里不再展开了)。
但是在实际应用中还有一个衡量性能的维度是不能忽视的,那就是“平均处理时间”。基于刚刚的比喻,在以太坊中,这个维度就相当于这台“世界计算机”的单核(单线程)处理能力。
什么是“区块链的 Layer2 扩展”
我们假设某个基于以太坊智能合约的业务流程需要 5 个步骤(交易)才能完成,也就是说,我大概有个智能合约,这个合约会有 6 个状态:初始状态,状态1,...,状态4,最终状态。那么要完成整个流程,就至少需要 5 个区块时间(从初始状态变为状态 1,需要交易 1 来完成,以次类推,则至少需要 5 个交易才能把状态变为最终状态)。
很显然,在这个例子里,区块链性能的瓶颈就变成了“区块时间”。(这是因为智能合约本质上就是一个可定制的状态机,如果它有 6 个单向变化的状态,那么必须经过 5 次变化才能达到最终状态,所以 5 个交易是必须的。)而区块时间是由公链协议所规定的,比如在比特币里是 10 分钟,在以太坊里现在大概是 16 秒,这是无法简单缩减的;整个流程的 5 个区块时间是最乐观的估计,也就是性能上限。那么我们如何缩短这个流程的执行时间、降低“平均处理时间”呢?
这就是所谓的区块链 Layer2 扩展要解决的问题。而答案就是—— off-chain(这个词的译法大概还没有共识,我这里姑且译为“脱链”,也就是不在主链上处理的意思)。
这种 off-chain 解决方案的思路是:我们可以把计算、交易等业务处理拿到主链之外来执行,只在主链上反映最终的结果,中间过程不在主链做记录。
这样,在上边例子里,我们要在主链上保存的状态就是初始状态和最终状态,中间过程的 4 个状态变动我们可以不关心,那对应的 4 个交易就可以拿到“链外”去执行;因为 off-chain 方案通常处理性能会非常高(后文中我会具体解释技术方案的原理),很有可能在主链的一个区块时间内就处理完这 4 个交易,并将结果发送回主链(即达到最终状态);于是从结果来看,整个处理过程只经过了一个区块时间(也就是最终状态的确认交易)就完成了。
很明显,如果采用这样的方案,越复杂的流程得到的性能提升越大;比如一些有高交互性能需求的应用——游戏。另外对于支付的场景,因为相对高昂的交易手续费,那些高频的小额交易从经济上讲也显然成本过高。所以无论是支付还是合约的应用场景中,都有对 Layer2 扩展的强烈需求。
Layer2 扩展的技术方案
Off-chain 方案的总体思路是类似的:首先需要把主链上的部分“状态”拿到链外来,可以本地存储(基于某种客户端)或者临时存储;然后在链外做具体的操作,比如转账或者其他会影响“状态”的处理;当处理完成或者到达需要同步“状态”的时间点时,再把最终状态传回主链保存。
目前已经成体系的 off-chain 技术方案大概可以分为两大类:
状态通道(State Channel):以比特币的 Lightning Network [1] 和以太坊的 Raiden Network [2] 为代表
侧链(Side-Chain):以以太坊的 Plasma [3] 协议为代表
我们首先来看看“状态通道”。
状态通道是一个临时的点对点(交易的两个参与者间)价值转移通道:在开启时,通常会在主链上分别锁定一定的余额,并设定一个有效时间,并可以由任意参与方主动关闭,也就是参与方之间会基于特定的技术协议进行数据交互、价值转移(数字资产转移);然后当可以接入网络、到达某个约定的时间点或者某方主动向主链同步数据时,会将最终结果提交到主链。