观点: 我所理解的Layer0、1、2层到底是什么?
作者:Jason
这是我第一篇宏观分析类型的文章,之前的文章都是分析某一个具体的项目,这次想试着讲讲更宏大也是我更不擅长的领域,同时也把之前零散发在 Twitter 上的内容结构化整理成一篇文章。
Web3 一直是一个概念新词满天飞的领域,所以我斗胆用一篇文章尝试为大家讲讲我所理解的 Layer0、1、2,也许你会疑惑为什么标题不叫《一文讲清楚 Layer0、1、2》呢?一方面是因为我没有自信和实力可以讲清楚,另一方面是其中很多定义到目前很模糊,并没有行业标准,比如在我的视角里 Celestia 属于 Layer0,但是也有很多说法它属于 Layer1,所以本文均为站到个人视角的理解,可能存在不全面或者与你的观点不一致的情况,欢迎探讨。
文章速览:
-
Layer0: 跨链通信
-
Layer0: 模块化区块链
-
Layer1 底层区块链
-
Layer2 主流解决方案:rollups
Layer0: 跨链通信
Layer0 是我认为目前行业对其定义最模糊也是理解最复杂的一层,所以我会多花一些时间讲解。
很多人将 Layer0 定义为区块链基础设施服务层 ,但我觉得这个概念还是太大太粗,目前我认为 Layer0 的关键词就是发链、多链与跨链,核心内容落在了跨链通信与模块化区块链 ,所以讲清楚了跨链通信和模块化区块链,Layer0 的内容也就基本覆盖了。
先说说跨链通信,要注意跨链通信和跨链不一样,跨链通信是一个技术实现 ,跨链则是一个业务场景 。
跨链是区块链极其重要的能力,假设每条链都是一个银行,如果区块链无法跨链则等于无法实现银行转账。 我们常说的跨链是指资产跨链,即我想把 A 链的 aToken 跨到 B 链,首先 Token 的项目方需要在两条链上都发行自己的原生 Token,然后使用跨链桥来进行两边 Token 的“转移”,转移打引号的原因是转移的过程并不是我们所理解的从 A 移动到 B,其工作原理是将 A 链的 aToken 锁定,然后再在 B 链铸造对应数量的 bToken,至于 A 链锁定资产,到 B 链铸造资产这个中间的过程则会产生很多问题,主要就是通信的问题,A 链如何通知 B 链“张三刚才在我这里锁定了20个 aToken,你现在赶紧的给他弄20个 bToken 出来”呢?
链本身是封闭的情况下只能通过链下的监控来连接两条链的资产变化情况,比如我写个脚本之类的。但这不够 native,也不够安全,所以跨链桥经常出问题,跨链通信则是主要解决多链之间原生信息传输的问题。
专注于做跨链通信的 LayerZero 协议我之前也写过一篇与它相关的文章《那个可以跨链的 Gh0stlyGh0sts 会成为下一个 Azuki 吗?》,这也是第一个使用 LayerZero 实现原生跨链通信从而达到 NFT 资产跨链效果的项目。
刚才说到传统的跨链桥是通过链下监控两条链的方式来实现了伪通信 ,而并不是真正的两条链产生了信息传递,如下图中左边和中间的模式,LayerZero 则是直接在两条链里面部署了自己的节点,这些节点完成了多链之间的通信。
如下图所示,我可以直接在合约代码里写清楚我要给哪条链(chainId)传输什么信息过去,这是区块链原生的跨链通信。
我非常看好 LayerZero 这个协议,它也完成了红杉领投的1.35亿美金融资。原因是我觉得这是真正纯原生的跨链解决方案,并且资产跨链只是它的一个应用业务场景,链和链之间的通信不仅限于资产,就像是银行之间的通信也不仅限于转账,我在工行产生了坏账信誉不好,则工行可以将该消息告诉建行,我在建行贷款就会出现问题,跨链通信背后的业务场景一定会可以挖出很多。
讲完了 LayerZero 后 Layer0 主要的内容跨链通信就明白了,这里要注意的是 Layer0 是概念,LayerZero 则是这个概念里的具体某个协议,这两个不要搞混了。
Layer0: 模块化区块链
Layer0 还有一个重要的内容模块化区块链,跨链通信这个词大家能够理解确实还挺底层的,属于 Layer0,但模块化区块链这个词大家乍一听会觉得非常“大”,不像是一个 Layer 即层的概念,而是一个“全套”,就是区块链是一个汉堡的话,Layer 就是里面的生菜、肉饼和面包片,但是模块化听起来就像是一个全套大汉堡而不是某一片生菜。
如果从广义的概念来说模块化区块链是一种“架构”,layer2 也是模块化区块链,将计算层模块化抽象出来,但是从目前狭义的对于模块化区块链的定位来说,我们要明白将区块链模块化以后的目的是什么,从而再定义其处在哪一层,我认为最直接的目的是在于如何能够更简单快速的去发一条链出来,模块化的效果是能够把区块链技术架构拆的更清晰,封装的更完整 ,然后开箱即用就像是搭积木一样,可以直接使用模块化区块链的能力用更低的成本发一套新链出来。你可以粗糙的理解成模块化区块链的目的是发一条 Layer1 出来,这样是不是就理解为什么它处在 Layer0 了。
模块化区块链的两个代表 Cosmos 和 Celestia 为大家进行展开介绍从而更清晰的理解其含义,其中 Cosmos 要感谢 @Kasey_ibc ,他是 Cosmos 生态的深度贡献者,与他进行了探讨并研究了其 Twitter 优质内容。
模块化区块链概念的布道者是 Celestia ,我之前关于模块化区块链曾经发过一个分析 Twitter,这里我援引该 Twitter 的内容讲讲 Celestia,具体的内容大家可以看我当时的 Twitter,链接如下:
https://twitter.com/jason_chen998/status/1561576592337682434
可以看到官网对于其优势的描述第一点就是像智能合约一样轻松部署区块链,降低发链的门槛和成本。
模块化区块链的对立面是目前大多数 Layer1 都属于单体区块链 ,也就是一条链承担了共识、数据可用性和执行的工作。
共识 :整个网路中节点决定打包哪些交易,以什么顺序打包;
数据可用性 :就是验证某个区块是已经完成广播是写入链上的;
执行 :具体交易和状态的变更。
如果一条链把这三件事都干了,那它就是单体区块链,也就是目前 L1 面临的问题,交易、结算、出块都排着队完成。所以设计思路就是把共识、数据可用性和执行这几个区块链核心工作职责给拆开,每个职责单独做一条链即一层,然后各司其职干好自己的事,再将其拼装组合到一起。
说到这里大家应该就意识到了,这就是 30 年软件开发都遵循的模块化设计原则,封装多态耦合内聚 那套理念,把一个复杂系统拆分职能,各干各的,再组装到一起,所以至少这条顶层设计理念是一直存在的,将这套设计理念应用在了区块链设计上,并不是什么很新颖的理念。
然后当说到将共识、数据可用性、执行拆分出来成为一条链,大家应该意识到这就是 L2 在做的事,rollup 扩容思路就是将执行层单独拿出来做一条子链去完成以太坊的交易处理工作,然后将结果再返回至以太坊主链,所以 rollup 其实就是模块化设计理念 ,所以如上文所说广义的模块化区块链不是一个具体的东西,它是一种概念或者是设计理念,但狭义的模块化区块链则是指将区块链的共识、数据可用性的底层能力封装起来,这两层也是对于一条区块链的地基,复杂度和难度也是最高的,然后这两层能力具备了新发一条链就门槛和成本很低,只需要将精力关注于自己的业务与计算。
那么 Celestia 主要是将数据可用性能力模块化 ,通过共识机制存储交易记录并提供数据可用性,而不用参与结算和执行层的事,只管存,并保证存的东西是有效的,其他开发者就能以 rollup 的形式在 Celestia 上构建出自己的结算层和执行层。所以 Celestia 就像是区块链领域的 AWS ,传统一家公司开发软件需要买一台服务器放在机房,10家公司就要10台服务器,于是 AWS 说你们都别买了,我自己整一个大的,你们只管软件开发,需要存取数据就来我这,我能够保证你们的数据有效的(存的进来,取得出去)。
那么为什么 Celestia 要做数据可用性层模块化呢?如果我想发一条链最难的就是这么让尽可能多的节点参与到我的链中去为我完成共识和数据可用性的过程,有这么多节点来维护我的链,那才能在链上做更多应用层执行的事情。
所以需要先看一下 L1 链的数据可用性是如何完成的。我们都知道区块链是由大量可自由加入的节点组成的,节点越多也就越安全,越去中心化 。节点分为全节点和轻节点,全节点就是要完整的维护一套数据账本,所以少量节点恶意攻击不会影响全局节点,这也是区块链的立根之本。
但是随着时间数据也越来越多,维护一个全节点成本过高,如果大家都不愿意来做全节点,那区块链就趋于中心化变得不安全,所以会有轻节点的存在,不会维护验证全量交易数据,而只存区块头,当出现需要验证数据可用性的时候,就将其发送给相邻全节点帮忙验证,然后再将结果返回回来。
所以总结一下,搞一个链最难的是这么能搞到这么多的节点来维护我这条链的共识和数据可用性。这也就是 Celestia 想解决的问题,它在官网说希望能够让创建一条链像创建智能合约一样简单,大家不用管下面的数据问题,交给 Celestia 完成,只需要专注于自己上层执行结算,实现“一键发链”的效果。
看完 Celestia 我们再看一下 Cosmos,其实这两家组织的成员重合度很高,很多人都是同时贡献于这两家组织的。
Cosmos 的目标是成为区块链的互联网 ,首先它提供了一套“发链”能力,让每个社区都可以拥有一条自己的主权链,主权链即独立的区块链,数据的产生和写入都是内部闭环的,其次链之间可以进行数据通信交互,实现万链互联,这个愿景还是非常有感召力的。
至于为什么它认为有让社区发自己链的需求呢,是因为它将区块链分为公共链 和专有链 ,在以太坊这样的公共链上开发者需要面对的两层治理,链和应用,并且应用要遵循受限于底层链,从而很难释放出应用的价值,所以它想针对于每个应用都可以产生一个量身定制的链。
所以为了达到这个目的首先要解决发一条新链门槛与成本的问题,其次解决这么多链之间如何通信形成一个滚雪球生态的问题。
门槛和成本 Cosmos 的解决思路与 Celestia 一致,即将底层的能力封装起来,区块链架构分为三个大层:网络、共识和应用,它将网络和共识层封装起来,也包括了账号、交易、签名等原子能力,提供了 SDK 使得开发人员基于此进行主权链的开发,通过预置好的模块来进行自定义构建区块链,然后发布到 Cosmos 网络中和其他的兄弟链进行交互,交互则是使用跨链通信协议 IBC 来实现了一个 hub 集线器的效果,其他的链都通过 IBC 连接到这个集线器中,在此进行数据中继。
所以 Layer0 的概念至此总结一下,其工作主要集中在发链、多链和跨链这三层,让发链变得更简单,但发了这么多链互相不通那也无法形成合力,于是需要解决跨链的问题。
Layer1 底层区块链
Layer1 是底层区块链,熟知的比特币、以太坊、币安链都属于 Layer1,以及 Avalanche、Near 和 Terra 等,因为它们都是自己生态系统中的主要网络,在自身区块链上处理并完成交易,同时也具备自己的原生 Token ,最近新起的两大新公链 Aptos 和 Sui 也是 Layer1,但是注意很多人容易把 Layer1 和公链混为一谈,公链包含 Layer1 但不是等于 的关系。
Layer1 公链是 crypto 世界中护城河最深的一个物种,当越来越多的节点、开发者、项目加入其生态后,滚雪球的优势将会非常明显,除非是出现了 Luna 之于 Terra 这样的基础代币直接崩盘,导致这个大雪球发生了大雪崩,否则生态内大量错综复杂的利益关系会互相牢牢绑定到一起,使得链的根会攀枝错节的扎的非常深,所以打造出来一条成功的 Layer1 公链一直是整个 crypto 圈子里无数组织前赴后继的。
目前应用领域最大的 Layer1 公链是以太坊,所以竞对链都会想办法从以太坊生态中争夺开发者与用户,因为以太坊这个贵族链在高峰期动辄数十美金的 GAS 费对于我这种普通小韭菜来说还是肉疼的不行,所以目前绝大多数的竞对链都主打低 gas、高 TPS 的策略来争抢用户资源, 比如这个星期刚完成空投大热的 Aptos,这里简单提一嘴,当时 Aptos 上主网后很多营销号带节奏说 Aptos 号称 10KTPS 实际上只有 4TPS,然后一通冷嘲热讽让别人觉得注水了,10KTPS 是理论最高可以承载的量,4TPS 是当时实际正在跑的量,就像是港珠澳大桥理论上号称单日25万通关量,实际上每天跑的车寥寥几辆,但是能说港珠澳大桥性能注水了吗?
打造公链就像是打造一座城市,一座城市的繁荣需要的是先修建好住房、医院、商场、铁路等基础设施,打造宜居的环境,居民才会搬过来生活,如果一条链没有应用把用户抢过来也没用呀,Aptos 性能上再强理论 TPS 再高,没有足量的应用去验证也是一座没有车跑的港珠澳大桥状态,所以公链吸引开发者的手段可以分为几种:
-
公链给足开发者扶持,来我这里开发应用给钱给流量,所以这也就是为什么大量的公链背后都是交易所站台,得出得起钱呀,然后整天搞黑客松,发 grants 来招商引资。
-
新公链对于开发者来说最大的吸引力在于足够空白,因为成熟的以太坊竞争已经太激烈太卷了,去了新的公链甚至可以直接把以太坊上已经验证成功的应用直接照搬上去,比如最近大家应该看到 sui 上的 NFT 交易平台、域名服务商这些已经在以太坊滚瓜烂熟的东西依然拿到了大额融资,群里我看很多人戏称换个语言任何项目都能重新做一遍。
-
还有一个我认为行之有效的手段就是直接 EVM 以太坊虚拟机兼容,对于开发者来说最大的成本不是写代码,而是学代码,一种完全陌生的技术栈从零开始学起,然后实操开发,调试 debug 等等一套下来会劝退很多开发者,那有没有什么办法能够让以太坊生态的开发者可以顺滑的低成本迁移到新链上去呢?有没有办法我可以用 Mac 电脑开发并调试运营 Windows 的应用呢?安装一个虚拟机,大家应该身边也存在这样的朋友买个 Mac 用的不顺手,给它改成 Windows 系统,或者其实就是运行了一个虚拟机,虚拟机就是用软件模拟计算机系统。EVM 就是服务于以太坊的智能合约,所以如果使用 EVM 兼容对于开发者就可以直接顺滑的将以太坊的应用迁移到兼容链上去,大家熟知的 BSC 就是 EVM 兼容链。
Layer2 主流解决方案:rollups
再来聊聊 Layer2,刚才说很多 Layer1 的竞争链瞄准以太坊“贵”和“慢”来打,但是对于以太坊本身有什么办法能够优化呢?Layer2 是一种方式。
在讲 Layer0 部分的时候我聊到了单体链,一条链上将所有事都干了,这能不堵吗?这时有人想到了能不能把以太坊上的交易拿出来在外面执行,然后将结果返回给以太坊做数据可用性处理,这种操作方式被称为 rollups ,也是 Layer2 主流解决方案,就像是原本一条路上非常堵,我给它修个高架桥,当然我还看到一种有趣的解释,做核酸10人混管就是 rollups。
所以通过将交易放在链下处理,不需要经过以太坊缓慢的共识过程,从而来减少以太坊主网上的计算量,提高整体处理速度和吞吐量。
我之前读书时恰好研究方向也是区块链扩容,当时写的论文中提出的方案也和 rollups 异曲同工如下图所示。
刚才说到 rollups 就是将计算在链下执行再将结果放到链上的过程,这个过程最大的问题就是在于怎么证明这个结果是有效的,两种证明方式也就产生了两种主流的 rollups 方案 :Optimistic rollups 和 zk rollups 。
人如其名,Optimistic 的英文含义是乐观的,即 Optimistic rollups 使用了欺诈证明作为数据有效性的验证方式,在将链下计算完的结果同步给以太坊主网后,会乐观的默认数据是正确的,如果有人认为数据不正确也就是存在欺诈,就可以在窗口期又称质询期内通过计算欺诈证明来质疑汇总交易的结果。
如果证明成功存在欺诈,则会重新执行交易更新数据状态,并且当时将该交易打包的排序节点就会受到惩罚,削减它提交的保证金(成为排序节点是需要缴纳保证金的),并分发给提交了欺诈证明的验证节点。
在这个过程中重要的角色除了两个节点:排序节点 和验证节点 外,还有另外两个重要的角色参与:CTC 交易合约 和 SCC 状态合约 。
这里逻辑稍微有些复杂需要大家耐心理解,所有 Optimism 的交易数据区块都存储在以太坊一个特殊的被称为 CanonicalTransactionChain 的合约,简称 CTC,合约地址为:
0x5E4e65926BA27467555EB562121fac00D24E9dD2
可以看到排序节点 Sequencer 每分钟大约写入两批次(批次的专业术语叫 Batch),每个批次可能包含几百笔交易数据,CTC 合约主要存着的是交易数据摘要。
另外将交易后的状态根 StateRoot 存入 StateCommitmentChain 合约,简称 SCC,合约地址为:
0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19
约每 6 分钟写入一批次,验证节点可以去读取这两个合约中的记录进行验证计算是否交易存在欺诈行为。
以上就是 Optimistic 证明数据有效性的方式,有点博弈论的感觉,通过双方对抗加激励模型实现最小程度作恶欺诈的效果,我们再看看 ZK 是如何解决的。
zkSync 是 zk rollups 的主要玩家,它的官网 slogen 是 rely on math, not validators,依赖数学,而不是验证者,这句话就是针对于 Optimistic 欺诈证明说的,可见对于 Optimistic 火药味满满啊。
zk rollups 中每一笔交易的有效性都是在交易发生前验证的。排序节点无法作恶。但是 Optimistic Rollup 中,排序节点的行为不受约束,因此必须存在验证节点去监视欺诈交易,一旦发现就需要向主网提交欺诈证明。
zk rollups 相比于 Optimistic rollups 最大的好处在于因为使用零知识证明的纯数学计算来进行交易有效性验证 ,所以将资金转移至以太坊不会存在延迟,因为一旦 zk rollup 合约完成了有效性证明,就会执行交易。相反从 Optimistic rollups 中提取资金会有所延迟,因为要为欺诈证明留出一定时间。
zk rollups 的核心架 构:
-
链上合约 :逻辑与 Optimistic 一样,在以太坊部署对应的智能合约用于存储区块汇总数据、验证合约等,但是不需要像 Optimistic 一样去发布太多交易数据在以太坊链上合约,因为其有效性在上链之前就已经得到了证明,而不是 Optimistic 需要将数据发到链上用于他人验证,但 zk rollups 也可以将交易数据存放在智能合约的 calldata 中,它是一种不可更改,但是不持久的临时存储区域,类似于内存,所以有需要也可以获取到交易数据。
-
链下虚拟机 :虽然 zk rollups 依附于以太坊,但交易执行过程存在于独立的 EVM 虚拟机,即实际 zk rollups 执行的环境。
其在大流程上和 Optimistic 类似,用户签署交易后,提交给 zk rollups 的 Layer2 排序节点进行处理并打包在一个批次中,然后提交给以太坊。
zkSync 使用的零知识证明太复杂了涉及到大量的加密数学,看的头大实在没理解透认怂了,所以这里就不班门弄斧复杂粘贴一些开发手册里我自己都看不懂的数学公式假装我看懂了。
以上就是我个人对于 Layer0、1、2的研究与理解,还是一开始说到的 Layer 层的概念目前没有明确的统一界定,所以这篇文章均为我个人的理解分析,不代表官方立场,也肯定会存在一定程度的主观、偏差和不足,欢迎交流探讨,共同学习。