美文网首页
智能合约的链外扩容——Layer 2二级网络

智能合约的链外扩容——Layer 2二级网络

作者: 原本区块链 | 来源:发表于2019-03-20 14:26 被阅读0次

    作者:原本区块链CTO 甘露

    上一篇中我们解释了针对比特币的链外扩容方案,闪电网络。通过一个博弈的设计,使得两个人之间的多次转账只需要在链上记录开头和最后两笔转账,然后通过多人之间的链下互转,实现任意两个人之间通过链外的通道(支付通道)完成转账。

    如果把比特币的网络想象成一层的话,闪电网络就像是在这一层之上又添加了新的一层(下面看我灵魂画风的示意图)。这一层同样也是由节点互相连接组成,只不过比特币网络的节点的功能是收集转账、打包区块,而闪电网络的节点的功能是维护支付通道、匹配转账请求。能在闪电网络层完成的转账,就不需要动用比特币层。除了两种情况,一是当闪电网络层无法匹配到合适的支付通道时,只能使用比特币层完成转账,二是当闪电网络层出现作弊时,调用比特币层完成最终的反作弊确认。

    对比特币来说,比特币网络是Layer 1,闪电网络就是Layer 2,通过在Layer 2层解决更多的请求来降低Layer 1的负载。这就是Layer 2扩容的基本思路。

    比特币的情况比较简单,因为所处理的交易类型只有一种,就是转账,所有的设计只要能完成转账的功能就可以了,不需要任何扩展性。而对于支持智能合约的公链,比如以太坊来说,情况就复杂多了。

    Layer 2概念的提出本来也是在以太坊之后,之前只有闪电网络。大家想把同样的思想应用在智能合约上,实现公链的扩容。比特币上保存的是支付信息,于是Layer 2实现的是"支付通道"。那对应的,智能合约公链上保存的是状态(state)信息,就是智能合约里面的变量的最新状态,那么Layer 2的功能就被叫做"状态通道(state channel)"了。

    支付一般发生在A和B之间,所以可以看作两个人间的通道,在这个通道里两个人可以多次互相转账。但是如果是智能合约的话,可以实现很多不同的功能,完全不局限在两个人之间的转账,也不需要在多个通道间进行路由和匹配,所以其实也没有通道的概念了。

    不管怎么说,智能合约的Layer 2想干的事情还是一样的。单层的公链中,每一次智能合约的调用、状态的更新,都必须在链上发起一个Tx,经过所有节点的共识、验证和记录后生效,就像是比特币的每此转账都要上链一样。

    能不能设计一个Layer 2层,使得智能合约的执行可以在Layer 2层完成,无需进入Layer 1的区块链,只在需要链上进行清算,或者Layer 2出现作弊的情况下,才返回Layer 1进行确认。

    无论是比特币还是通用的智能合约公链,其核心功能都是数据的记录和数据的共识。在加入了链外Layer 2层以后,数据记录功能不受影响,最大的问题来自于Layer 2层的数据是没有经过共识的,可以被篡改。因此如何防止Layer 2层的数据篡改(作弊),是Layer 2层的核心问题

    Layer 2层的反作弊思路也是很简单的:在利益相关方发现Layer 2层有人作弊后,需要提交作弊相关的证据到区块链上,区块链上的节点验证作弊行为真实后,执行惩罚措施,根据需要选择是否回滚作弊的操作。

    Layer 2层的难点也在于作弊证据的记录、作弊证据的验证上面。难在两个方面,一个是在不同的应用场景下,作弊行为是完全不一样的,那么反作弊方案就会完全不一样。针对不同的场景设计出完善的反作弊方案,是非常困难的事情。

    另一个难点在于,即使设计出了完善的反作弊方案,这个方案也可能无法在区块链上实现。因为最终对于作弊行为的验证,是需要在区块链上通过智能合约来执行的,假如验证所需要的计算量太大,验证本身就已经无法做到了。

    这是我们在自己的项目开发中遇到的真实的问题,在以太坊上,用智能合约实现我们需要的验证的话,不说这个合约方法花费的gas超出我们的承受范围,当数据量稍微大一些,这个方法的执行甚至超过了以太坊的block gas的限制,根本无法完成执行。

    再往下设计的话,就需要一个二层共识的方案了。区块链合约无法完成需要的计算,那么把计算本身也放到Layer 2的节点上,Layer 2节点之间再加入共识(比如PoS)的方案。这样子的设计就和侧链的方案更加接近了,也是在共识强度上更进一步的妥协。

    和闪电网络相比,针对智能合约的Layer 2方案是经过了一层抽象的,闪电网络的功能非常固定,不需要考虑通用性。而智能合约可以实现各种不同的功能,比如我们可以用智能合约实现一个功能完全一样的闪电网络,也可以实现和闪电网络完全不同的其他应用。因此智能合约的Layer 2方案就需要考虑通用性和扩展性的问题了。比如针对Layer 2作弊的问题,能否有一个通用的解决方案。

    我们来做一个对比,原生的闪电网络、用Layer 2框架实现闪电网络、用Layer 2框架实现其他功能。详情见下面的表格:

    在实现支付功能这个例子中,支付通道、支付通道的路由,都是为了实现支付需求的非常具体的功能,只在支付中有用,不具备通用性。

    而在最核心的Layer 2数据防作弊问题上,Layer 2方案也没有通用的解决方法。比如比特币中,针对支付功能设计的博弈方法,不是一个通用方法,在智能合约的其他应用场景中不适用。

    总结下来,我会觉得针对智能合约的Layer 2扩容方案,是和具体的功能需求强绑定的,Layer 2只能作为框架,提供一个设计思路。具体的防作弊机制的设计,功能需求的设计,目前还是需要针对每个不同的应用场景来单独对待的。

    当然随着区块链应用场景的不断增多,我们可以总结出更多的防作弊模式,把这些模式固化下来作为Layer 2的building block。到那个时候,Layer 2层的开发应该会容易很多。

    Plasma是Vitalik和Joseph很早就提出的对以太坊进行链外Layer 2扩容的一个框架,思路基本就和上面提到的一样。应用这个框架其实不需要以太坊进行什么额外支持,只需要自己设计防作弊机制就好了。有几个项目使用Plasma的思想在以太坊上实现了闪电网络,其他的案例也不是特别多。

    我们的项目主要是采用Layer 2的方案实现了内容发布和流转,以及针对内容筛选的经济激励体系。Layer 1采用的是以太坊。在防作弊方面,就像上面说的,由于验证需要的运算量巨大,因此我们在Layer 2引入了节点间的PoS验证。目前这个网络运转情况挺好,只是由于经济激励体系的机制设计还不够完善,还不能把启动Layer 2节点的权限开放出来。

    总的来说,区块链性能的提升是一个系统工程,需要各个环节都有持续的提升,链上扩容、链外扩容、DApp的逻辑优化。只有这些环节都完善了,我们才能看到区块链的性能出现质的飞跃。

    本文经「原本」原创认证,作者一个洋葱,访问yuanben.io查询【45PX0CX8】获取授权

    相关文章

      网友评论

          本文标题:智能合约的链外扩容——Layer 2二级网络

          本文链接:https://www.haomeiwen.com/subject/hebzmqtx.html