相信很多人都通说过公链,所谓公链就是区块链节点的运营不受限制,任何人都可以加入,比如比特币和以太坊,任何人都可以在自己的电脑上运行它们的客户端软件成为网络中的一个节点。可能有朋友还听说过联盟链,或者说许可链,它们和公链的最大不同就是节点的加入是有条件的,一般用于企业组织之间,最著名的莫过于超级账本的 Fabric。
联盟链后来开始演化出公有联盟链和开发许可链的新形式,简单来说就是把共识节点的权限进一步开放,但是还是需要一定的门槛,而且很多项目还引入了类似公链的经济激励模型,它们在很多方面跟公链非常相似,可以把它们简单理解为局部化的公链。
10月份我有幸听到了秘猿科技的首席产品官王博关于 layer 2的精彩分享,很受启发,特写此文。一方面帮自己梳理现有 layer 2 的方案,另一方面也希望公众号的读者可以近距离感知区块链的最新发展动向。需要申明一点的是,由于每一种方案中都有非常多的技术细节和逻辑,为了保证大多数的读者都能理解,所以文章并没有在技术细节上过多着墨。
Layer 2 的缘起
在经历了2017年虚拟货币泡沫后,2018年的区块链行业迎来了低潮,公链没有太多实质性的进展,以太坊的新共识机制 Casper 和扩容方案分片升级一再延迟。于是很多人开始重新思考区块链中的不可能三角问题,即可扩展性(性能)、安全和去中心化不可三者兼得,最多只能同时满足两个条件。
历史上也有过类似的场景,当年互联网发展遇到瓶颈时,人们想到了用分层的思路解决诸多难题,于是有了我们后来看到的物理层、网络层、数据传输层、应用层等等,有了 OSI 和 TCP/IP 模型。在人们最熟悉的手机行业中,也存在明显的分层思路,芯片设计 ARM 和芯片制造高通、手机硬件厂商三星和华为、操作系统 iOS 和 Android、各种 APP 等。
在区块链领域,当人们看到了不可能三角横贯在眼前时,于是都纷纷想到了分层。既然不能在一个区块链网络中同时实现可扩展性、安全和去中心化,那么能不能分解目标,在不同的层级上实现有限的目标呢?换言之,一层重点实现安全和去中心化,另一层专注性能,于是就有了 layer 1和 layer 2。
简单来说 layer 1更多指的是公链,例如比特币、以太坊都可以称为 layer 1,它们本身去中心化程度很高,安全性也很好,但是性能都很差。过去的几年有非常多的团队试图在比特币和以太坊上实现性能扩展,简单来说就是把大量频繁的交易或者计算放在链外,公链不关心中间过程,只需要将最终结果同步到公链上即可。这种在 layer 1 之外寻求性能突破的方案都统称为 layer 2。
Layer 2 的类型和现状
Layer 2有很多种很多方案,从大的分类上来看包括状态通道、侧链、跨链、链下计算等,这些名词看着很学术,其实思想和原理并不复杂,我们不妨举一个真实生活中的场景来类比四种方案。
状态通道
假设Alice和Bob之间有大量的生意往来,他们最开始的思路就是通过银行转账,假定当时的互联网还不是很发达,每一次的转账都需要到银行柜台,手续比较多,银行处理交易流水周期比较长。这种形式就如同我们今天用比特币和以太坊转账,一笔交易的处理时间很长。
我们姑且不考虑银行基础设施的提升,那么这个时候就有几种不同的解决方案,一种是Alice和Bob先频繁地用欠条交易,比如前天Alice从Bob那里收到一笔100元的转账,那么Bob就先给Alice一个欠条,他们商量以一个月为周期,统一结算一次,然后将最终的收支结果通过银行柜台处理。
这种大量小额交易通过线下完成,然后将最终的结果同步到银行的情况,映射到区块链的场景中就是大量小额交易在链下完成,然后将最终的结果同步到链上。这种方式就是状态通道(state channel),这样的好处是将大量本来是要在链上完成的交易转换成了两笔链上交易(初始交易和最终交易),性能得到了极大的提升,而且有极好的隐私性。但是挑战也是很明显的,假设本来有10张的欠条,而Bob想作弊,只拿着8张欠条去银行处理,这个时候Alice就必须时刻盯着Bob,这对于Alice就有了很强的在线要求。
目前比特币上的状态通道方案有闪电网络,以太坊上有雷电网络,将交易迁移至链下,以及如何判断最后提交的交易状态没有作弊,都需要主链完成。由于比特币的脚本语言是非图灵完备的,设计开发上比较麻烦,而以太坊由于支持智能合约,实现上相对来说要简单一点。但是状态通道要求参与方时刻在线,这对于普通用户还是有些门槛,于是就出现了以 Celer Network 为代表的提供中继服务的方案。
侧链
侧链相比于状态通道要跟进一步,上文提到Alice和Bob可以先在线下用大量的欠条进行交易,那么侧链在是相当于有一家专门的金融服务公司。他们不具备银行那么完善的金融基础设施,但是也能提供支持大量频繁交易的服务,而且银行对他们还有一定的监管,相比两个人直接欠条交易,第三方服务通常来说会更有公信力,而且容易扩展,可以支持更多像Alice和Bob这样的交易需求。
侧链相比于状态通道,就是在主链外再开设一条专门服务于小额频繁交易的侧链,它的性能远高于主链,但是没有安全保障,所以就需要它经常把交易数据主动发送到主链上。也就是第三方服务商需要定期向银行提交Alice和Bob的交易数据,这样银行就可以在一定程度上监管到第三方服务商,避免他们造假账。
但是这里同样会有一个问题,那就是如果第三方服务商真要作弊或者跑路,那么银行需要在他们作假之前跟Alice和Bob进行清算,所以侧链就需要一套完整的退出机制,尽可能保护合法交易者。在以太坊生态中 Plasma 算是最有名的侧链方案。由于侧链的安全性始终无法完全得到保证,所以就需要在退出机制上考虑得尽可能全面,而 Plasma MVP 和 Plasma Cash 就是安全性和退出机制上有不同设计思路的两种具体实现方案。
跨链
跨链和侧链很大不同的一点是没有主链和侧链之分,跨链解决的思路是要在两条完全不同的区块链之间完成数据交换。还是以上文的类比来说明,如果出现一种组织可以满足银行A与银行B进行快速的数据交换,那么Alice和Bob的问题也能在一定程度上得到缓解,当然相比前两种方式,改进空间不大。
但是跨链的意义更重要的一点是在于可以打通更多区块链之间的数据交换,我们都知道现在有很多公链和开放联盟链,如果能把他们的数据用一种合理的机制打通,那么对于区块链自身的快速演化绝对是非常有价值的。
在跨链领域做得比较好的有 Cosmos 和 Polkadot,他们设计思路有很多相似之处,都是在提供一种包含各种治理机制的中继服务,由于这部分细节比较多,暂不展开,后续会有专门的文章介绍这两个项目。
链下计算
链下计算相比于上面提到的方案出发点都不同,既然以太坊上每一笔交易都可能需要大量的计算,而让网络中的节点都来算一遍,代价太大,资源浪费不说,速度也很慢。而链下计算的思路是提供可信的计算环境,把需要在链上计算的任务放到链下可信执行环境中。
当然这里面也有问题,那就是如何确定链下计算的结果没有作弊呢,在区块链行业,我们经常会看到当无法全部通过技术手段解决的问题,就会引入经济模型或者博弈论,这里可行的解决方案之一就是引入多个链下计算,相互之间可以验证博弈,其他人也可以监督他们,一旦举报作弊成功,举报者就会得到一定的奖励。
类比我们上面提到的例子,可以简单理解为银行将大量交易相关的计算都外包给多家专门的计算服务商,让他们之间可以相互验证监督,一旦发现有人作弊,就会惩罚作弊之人,奖赏举报有功之人。Truebit 算是链下计算方案的佼佼者。
小结
本文从基本的需求和痛点分析了四种 layer 2 的解决方案,更多的是从需要解决的实际问题出发,引申出比较合理的解决方案,并没有深入分析每一种方案的技术细节和项目介绍,后续会有更多的文章针对每一种方案做更深入和全面的介绍,期待你的关注。