我是cherry,阿里后端程序员,next.id builder,okd builder,web3 研究员。每周尽量一篇研报,欢迎各位关注OKD社区和我cherry,欢迎私下交流,Twitter: @cherry_yang_cn , 微信号:esurey-sh
Layer2 是当下web3 最火热的赛道之一,它是web3 应用能进入广大普通民众最重要的技术基建之一,有了它,web3才能讲好未来亿级用户和千万级日活的现象级应用的故事,本文将从区块链原理为源头,研究它的优缺点,我们从web2 有什么技术借鉴可以解决它的缺点。
web3为什么需要Layer2
Layer1 是什么,目前的问题
Layer2 目前的实现技术方案
这句话其实可以换种问法,我们为什么需要可扩展性,系统的可扩展性即系统本身可以有合理的办法面对系统的增长无论是流量还是数据还是系统本身的复杂度。系统可以容忍一万甚至十万的并发用户且不影响用户的正常使用,且能够承载大量用户使用带来的庞大数据量。在web2 项目中,我们通过一个事务并发的执行降低单次请求的RT,通过分布式增加业务横向扩展能力,通过nginx网关管理集群增加纵向扩展能力,通过kv缓存降低数据查询的时长,通过消息队列减缓数据更改的压力,这一切都是因为作为中心化的服务,资源管理和调度非常容易,服务背后可以有非常的技术玩法去降低RT提升。
但在去中心化时代无论是数据的去中心化还是计算资源的去中心化,只使用这些web2的技术去承载web3的未来貌似变得捉襟见肘,比特币的TPS 只有10以内,这在web2 金融支付工具里是无法想象的,如果不能承受更高的TPS,web3 钱包可能在用户体验上难以媲美支付宝,paypal 这些支付工具,或者说用于日常支付这些金融之外的场景,web3业务需要扩散到金融之外的业务,那么我们需要有足够的扩展性cover住未来不断增长的用户体量,用更快的速度更低的计算资源服务用户。
从技术的角度上讲web2 项目和web3 的dapp项目在实现架构上并没有本质上的区别,主要有两区别:一是身份鉴权不再基于由第三方数据库实际存在的记录(账号密码,以及登录时的设备id,ip等信息去做风险校验)而是换成了钱包或者说钱包背后的私钥,其次是最底层存储数据模型由table数据库、kv数据库、或者graph图化数据库、变成了区块链。
web3 的应用如果要被大众所接受,最重要的一个阶段是去金融化,它需要有更多金融工具之外的业务场景,比如电商、生活支付、社交等等,这些业务场景势必承载大量的用户数据和用户请求,以及最基本的低RT(请求响应时长),所以一个优秀的能够被普通web2用户接受dapp最基本的是应用本身体验上能低时延,哪怕是在请求高峰期,但是web3上链的应用背后的数据库——区块链,成为了达到这样的目的的瓶颈。
区块链作为一种数据库,以链式数据结构存在,通过当前节点加密后的指纹进行链接,当前的节点含有上一个节点的指纹。
这就意味着,当上一个直接数据变了后,它本身的指纹,和下一个节点含有的指纹不一致,这就无法通过校验,所以要改链上的数据意味着需要吧当前节点及其之后的节点数据全部更改。
为了防止双花问题,数据的更改需要大于50%的节点同意,而又为了防止女巫问题,采用了POW或者POS的方式,让攻击者获得大于50%的算力或者大于50%的stake质押变得非常困难。所以区块这种数据类型意味着数据只能增加不能更改,意味着数据是不需要第三方CA证明就能知道是完全可信的,这样的一种数据库,我相信在去中心化的场景下我相信有非常多的故事可以讲。
但是如果有技术同学看到这样的数据库会觉得非常的奇怪,首先数据查询是O(n)级别的时间复杂度,即我找某个节点需要一个个遍历,这在web2 应用里,运用 Redis这样的kv 数据库和有B+树索引的MySQL,以达到低RT的技术里是无法想象的,更不用说在数据的新增之前,需要有大量的验证。
技术就是这么的有趣,所有的技术选型他都是一把双刃剑,区块链带来的安全,透明,抗审查等技术革命级别的特性,带来的是无法忍受的高RT,低TPS,和高成本(GAS),我相信没有任何的web2用户能够接受我发起一笔支付需要等待1分钟甚至更久,且需要支付高昂的gas费用,为此我们需要让在web3应用的体验和交互变得和web2 应用一样,这就需要我们提升区块链的扩展性,无论是数据扩展性还是纵向的扩展性。
** Layer1** 即原始区块链,一个构建在区块链的去中心化生态,以太坊,比特币就是经典Layer1层的公链生态 ,也是我们大部分用户主要交易的地方,所以链本身的负面特性就是Layer1目前的问题。
Layer1具有去中心化和安全性的特性但是没有扩展性,这也是V神提出BlockChain 三角问题,像极了分布式领域的CAP定理,我们只能在去中心化和安全性和可扩展性之间选其二,但这并不是没有解决的方式。
在web2 技术中提升性能比较好的方式有分布式和并发。分布式即业务拆分成各个域,各个域有自己独有的计算资源,并行即事务中做的事如果没有前后强依赖,可以交给多个线程一起并行执行,那么Layer2可以作为整个业务流程中其中一部分,在尽量影响整体安全性和去中心化的前提下,独自去负责整个可扩展性这一部分,区块链整个和用户交互的流程中,Layer1可以拆分一部分脏活累活交给Layer2 去做,Layere1自己只需要做最重要的事——最后结果的上链。
基于以上思路我们可以看到Layer2目前的相关实现方案
Layere2 技术方案有Plasma,state channels, Rollups, sidechains ,目前Rollups和sidechians 是目前比较主流的技术方案,他们在安全性,去中心化,安全性上各有优劣,
Nested BlockChain—— Plasma
将交易和存储转移到子链,只有最后结果记录在主链,相当于一条主链干不完那么多事,交给下面的子链,去做可以在挑战期内对结果提出异议,当提出的欺诈证明有效,则正确结果覆盖,且挑战者获得原验证节点部分押金。
state channels
一定程度上绕过第三方(矿工)进行交互,用户开启一个通道和链进行多次交互,开发过程中极大减少链上操作,不仅仅支持支付还支持状态更新,开启通道支付一笔费用,关闭通道支付一笔费用,中间发生的事情不需要被记录我们只需要记录最有的结果,比特币上的Lightning Network , 以太坊上的Raiden Network是目前的代表项目。
Rollups
Rollups也是将主要验证计算放在链下执行,与plasma 不同的是,Rollups将原始的交易数据也记录在主链上,这样降低了对验证节点的依赖性,因为我随时可以重来,所以Rollups相比Plasma有更高的安全性,Rollups 是目前最被V神看重的Layer2 解决方案,Rollups有如下两个分支。
**OptimisticRollups:**乐观汇总交易,仅依靠验证节点和挑战者之间的博弈保证安全,交易后进入进入挑战期,资金被锁定,等待被提交欺诈证明挑战,但是安全性依赖于挑战者和验证者的博弈而非代码,当挑战期结束结果无法回滚。
**ZK-Rollups:**零知识汇总交易,依靠密码学保证资金安全,把数据存储计算执行放在链下,区块链记录最终的数据状态,通过双向加密严重结果一致性,其他节点运算被验证节点的“证明”,可能由于技术不成熟导致的安全隐患和较差的兼容性,因为它没有降低整体的去中心化和安全性,如果技术成熟这将是最理想Layer2 层解决方案,
sidechains
与主链相互独立、自行负责安全性和共识实现过程,侧链之间隔离,当一条侧链出现问题不会有影响到主链和其他侧链,相对来讲性能比较好但安全性比较低的方案
Layer2各个技术方案整体思路都是,通过增加逻辑层处理脏活累活,让Layer1区块链整体能承接更多的用户请求,只是各自在达成这个目的选择不同的技术方案,相信web2 技术同学能看到熟悉的解决方案,增加技术层级一直都是系统降低复杂度,增加性能,提升横向扩展能力,最有效的思路之一,很多方案在web2中都能找到相似的技术,相信会有越来越多的web2的技术同学参与到web3 技术基建建设,限于篇幅原因,Layer2 实现技术方案具体分析和目前的Layer2项目研究放到之后的研报中,欢迎push和指教!