Layer 2 概览
区块链技术自诞生以来就始终面临着可扩展性问题的挑战。根据以太坊创始人Vitalik Buterin提出的“区块链不可能三角”,区块链无法同时兼顾去中心化、安全性和可扩展性三个维度。其中,去中心化是区块链技术的基本性质,同时,区块链天然的强金融属性也使得安全性必不可少。因此,研究人员和开发者一直致力于解决区块链的可扩展性问题,这一瓶颈导致了链上交易成本居高不下、执行速度慢,难以满足当前日益增长的应用需求,已成为了区块链技术主流化的绊脚石。
在众多的可扩展性解决方案中,Layer 2 扩展方案获得了较多的关注。Layer 2 是指以扩展底层区块链网络为目的,基于特定区块链(又称“Layer 1”)所构建的链下网络或系统。Layer 2 可以大幅提升底层区块链的吞吐量以及其他性能。
Layer 2 方案的核心思想在于层级分离的概念。区块链之所以在可扩展性方面受限,本质上是由于区块链主网承担的任务过多。当前区块链网络主要有三个核心功能:交易执行、数据可用以及共识生成。
- 交易执行:交易的处理和吞吐。由区块链每秒可完成的计算次数衡量。
- 数据可用:满足网络中的节点和验证者对交易、状态及其他数据的存储需求。由标准存储单位衡量,如MB、GB等。
- 共识生成:保证节点和验证者就网络状态和交易排序达成共识。由去中心化水平和最终确定时间(所有节点就特定状态变更达成一致所需的时间)衡量。
层级分离的目标是将 Layer 1 作为基础层,通过特定机制继承主链共识所保证的安全性和去中心化特性,同时将复杂的快速迭代和计算操作从中剥离出来,转移到 Layer 2 上执行,从而在无需牺牲去中心化水平和安全性的同时快速执行交易并实现可扩展性。依此标准,侧链方案不属于 Layer 2,因为侧链会部署自身专有的共识算法及验证节点,其安全机制独立于底层区块链,未实现安全性的继承。
1 Layer 2 原理概述
Layer 2 解决方案大致可以分为两个主要部分:
- 链下网络:负责实际的交易处理;
- 链上合约:负责解决分歧,并将 Layer 2 网络达成的共识传输到底层区块链进行验证。
Layer 2 网络可以快速进行计算、执行交易。不同网络会通过完全不同的方式提升交易吞吐量,其共同点在于交易结算时,会向底层区块链提交某种可验证的密码学证明,以证明状态变更的有效性,根据具体方案的不同,该证明可以是先行性的,也可以是追溯性的。
此外,不同 Layer 2 网络在底层区块链上的智能合约实现也有所不同,但其核心功能一致:
- 保存和释放转账至 Layer 2 的资金;
- 收到 Layer 2 提交的证明并进行验证,解决分歧,并最终确认交易。
以下将探讨两种主流 Layer 2 实现方案:支付通道和Rollup(卷叠)。
2 支付通道
两个或以上用户可以预先向通道中锁定资金,然后在链下进行通证转账。
如图所示,A 和 B 分别在智能合约中锁定一笔资金,创建支付通道,并通过加密签名技术约定双方可以使用的资金量。支付通道建立后,A 和 B 都可以通过签名消息在链下进行交易。A 和 B 可以相互转账,转账无延时、无成本。在双向支付通道中,A、B 之间的交易不会发送到底层区块链,只有当双方都决定关闭通道时,最终交易结果才会被提交至链上进行结算。
因此,A 和 B 最终仅需支付创建和关闭支付通道时的两笔链上交易费即可。使用支付通道,可以在极短的时间内处理大量、频繁的转账交易,且无需任何成本,是解决区块链扩容问题的经典案例。
3 Rollup
Rollup 在链下执行执行智能合约状态变更,然后将数据发布到 Layer 1 进行验证,以此提升区块链的吞吐量并降低成本。由于交易数据包含在 Layer 1 的区块中,因而 Rollup 可被以太坊原生的安全机制保护。
Rollup 使用部署在 Layer 1 上的智能合约来管理 Layer 2 与 Layer 1 之间的交互。在进入 Rollup 前,用户必须将资金存入智能合约中,以在 Rollup 上解锁等额的资金。
作为第三方的 sequencer 收到用户在 Rollup 合约中存款的证明后,将相应资金存入用户的 Rollup 账户,随后用户即可在 Rollup 上自由进行交易。
3.1 扩容方式
Rollup 主要通过以下三种方式实现扩容:
- Rollup 在链下执行交易,底层区块链只需计算轻量化的交易证明,验证网络活动并储存原始交易数据。
- Rollup 将交易数据打包提交至区块链,因此链上gas费可以分摊到多个交易中。
- Rollup 最少仅需要一个诚实的验证者,就可以向底层区块链证明交易的有效性,因此较少的验证节点数和较高的硬件要求不会对安全性有很大影响。
3.2 链下执行交易
Rollup 的一个核心特性就是在链下执行交易,这使得 Layer 2 网络可以代替底层区块链处理与其他用户或智能合约的交易。由于验证节点数量较少且硬件更强大,因此 Layer 2 网络的交易吞吐量相较于底层链可得到大幅提升。
底层区块链只需要计算提交至智能合约的证明,并将未执行的原始交易数据作为calldata
储存起来,即可验证 Layer 2 网络中的活动。简而言之,区块链需要进行的计算任务大幅减少,同时链上数据的存储成本也大幅降低,因此交易成本变得极低。
3.3 打包交易
Rollup 将原始交易数据打包成calldata
。与链上交易不同,Rollup 交易不需要以同样的方式进行验证;交易数据打包仅仅是一种在底层区块链上存储数据的方式,以便验证者或 Rollup 参与者在需要时可以随时重建 Layer 2 网络的状态。然而,核心逻辑是相同的,即:主链上的一个打包交易中存储了多笔相关的 Rollup 交易数据。
此方法可以有效降低影响区块链可扩展性的交易费用,而结合数据压缩还能进一步降低交易执行成本。
3.4 减少验证者
如前所述,Layer 2 可以继承底层区块链的安全性和去中心化水平(后文将详细阐述这一点,其关键在于 Layer 2 必须向底层区块链提交某种证明,以保证其提出的状态变更的有效性),这一特性使得 Rollup 可以减少网络中负责处理交易的验证者数量——因为 Layer 2 中的验证者不需要生成共识,共识是在 Rollup 提交的证明经验证后由 Layer 1 达成的。
验证者数量变少,同时验证者通常拥有性能更强的硬件,因而可以用更快的速度和更低的成本来计算交易。
3.5 结构及运行机制
在 Rollup 上,用户签署交易并将其提交给负责排序和执行交易的 sequencer 。交易被排序后,将按顺序逐个通过状态转换函数进行处理。状态转换函数将当前链的状态(账户余额、合约代码等)与下一个交易作为输入,更新状态。状态转换函数是确定性的,即其行为仅取决于当前状态和下一个交易的内容,与其他因素无关。这种确定性,使得交易T的结果仅取决于链的初始状态、序列中T之前的交易以及T本身。
因此,任何获取了交易序列的参与方都可以自行计算状态转换函数,而所有诚实参与方的计算都将得到相同的结果。这就是 L2 节点正常运行的过程:获取交易序列,并在本地运行状态转换函数。该过程无需共识机制的参与。
那么节点如何获取序列呢?sequencer 会定期将序列中的一组交易打包并进行压缩,将结果作为calldata
发布到 L1 链上(calldata
是智能合约中不可修改、非持久的区域,其行为与内存非常相似。 而 calldata
作为区块链的历史日志部分,不会涉及以太坊的状态,因此在链上存储数据的费用较低)。一旦交易在以太坊上最终确定,则记录在其中的 Layer 2 交易也最终确定(即交易的顺序和结果是确定性的,且对任意一方都可知)。
Rollup合约中存储着“状态根(state root)”,用于验证Rollup在不同时间点的状态。当向 Rollup 合约提交一批交易时,必须包括一个“前状态根(pre-state root)”和一个“后状态根(post-state root)”。
- 前状态根:旧的状态根,描述在执行提交的交易之前 Rollup 的状态。
- 后状态根:新的状态根,描述执行了提交的交易之后 Rollup 的状态。
一旦 sequencer 提交了打包的交易,合约将验证前状态根是否与现有状态根匹配。如果两者匹配,合约会丢弃旧的状态根,并存储 sequencer 提议的新状态根。这意味着后状态根中引用的交易已经最终化,无法被撤销。
4 Layer 2 安全性的关键——证明
“证明”对于Layer 2 来说至关重要,因为 Layer 2 需要通过证明来继承底层区块链的安全性。所有 Layer 2 网络都需要提供某种形式的加密证明,以解决底层区块链上的分歧。上文提到的支付通道,对交易附上加密签名就可以为智能合约提供确定性的权威事实,以解决分歧。Rollup 中主流的两种证明方式是错误性证明(Fault Proof)以及有效性证明(Validity Proof,即“零知识证明”),这两种证明分别是 Optimistic Rollup 和 ZK-Rollup 的底层技术。
4.1 支付通道签名消息
支付通道的一个关键设计要素是交易必须由加密签名签署。这就提供了一种与底层智能合约兼容的证据形式,可用于解决分歧。
例如,在关闭支付通道时,如果 Alice 通过向智能合约提交过时的支付通道“账本”,试图占用不属于自己的资金,则 Bob 可以对结算交易提出异议,并提交最新的账本副本。智能合约就可以确定正确的金额。Alice还会因恶意行为被罚款。
底层智能合约的裁决过程是使支付通道成为 Layer 2 的关键,最简单的评判方法就是看是否需要提供“证明”。
一旦支付通道打开,Bob 和 Alice 必须对自己进行的每笔交易进行加密签名,并存储对方的签名副本,这是支付通道内活动的证明。但仅有证明是不够的,还需要对事实进行执行,这与现实生活中的审判过程很相似,在证据充分且陪审团给出审议结果后,法官将作出裁决。在上述例子中,智能合约会执行裁定结果,将正确的金额返还到各方在底层链上的钱包中进行结算。
这就是前面提到的“继承底层区块链的去中心化水平和安全性保证”的含义。支付通道将大部分计算和执行都放到链下处理,但在结算时,还是会利用底层区块链强大的共识层来作出最终裁决。
4.2 Optimistic Rollup 错误性证明
错误性证明(Fault Proof),又称欺诈证明(Fraud Proof)是一种主张,声称某个状态转换(交易)是无效的,并且整个交易批次应该因此被撤销。这也是目前 Optimistic Rollup 所采用的机制。“Optimistic”即“乐观的”,代表了其证明思想的核心特点:智能合约会“乐观地”默认所有交易都是有效的,除非其被证明无效(无罪推定),网络会设置一个挑战期,期间任何参与者都可以对交易发起挑战,并向智能合约提交证明,表明交易数据或状态变更是错误的,从而撤销错误交易。
具体而言,欺诈证明主要依赖于先前提到的状态根来发挥作用,整个过程始于验证者检测到 L1 链上状态根中引用的 Rollup 状态与 Rollup 链的实际状态不匹配,例如,sequencer 提交了一个后状态根,在 Alice 未进行过转账的情况下,将Alice的余额减少了 5 ETH,同时将Bob的余额增加了 5 ETH。
由于验证者会下载所有交易数据,将其应用到本地的 Rollup 状态副本中,并计算后状态根,因而验证者有能力对状态转换提出挑战,并证明其无效性——若 sequencer 的后状态根与验证者的相匹配,说明一切正常;若 sequencer 的后状态根不同(很可能是因为其中包含了虚假交易,如上例所示),则验证者可以触发欺诈证明计算。
欺诈证明计算的过程如下:
- 验证者发起挑战并提供以下信息:
- 有争议的状态转换
- 前状态根
- Rollup 状态数据
- 验证者计算出的后状态根
在 L1 链上的一个沙盒环境中使用了挑战者所提供的信息和其他相关数据重新执行交易。此“沙盒环境”是在 L1 上运行的一个智能合约,兼作虚拟机。
- 如果计算结果得到的后状态根与挑战者的匹配,说明 sequencer 确实发布了带有无效状态转换的交易批次。随后发布的无效交易批次将被撤销,将 Rollup 恢复到先前的状态。
4.3 ZK-Rollup 有效性证明
有效性证明是一种交易验证方法,涉及到一个证明者(prover)和一个验证者(verifier)。证明者负责为某些信息创建证明,验证者则在双方没有共享信息的情况下验证该证明的有效性。证明者和验证者之间共享的信息称为见证(witness),通常是一个复杂数学方程的解。简而言之,证明者需要证明其准确地知道见证,而验证者需要可靠地确定证明者是否具有该见证的知识。
有效性证明方案的核心思想与错误性证明恰恰相反,默认所有计算结果都是存疑的,必须先被证明才能接受。
有效性证明允许在不揭示某事件本身的情况下证明该事件的正确性,因此也被称为零知识证明。对 ZK-Rollup 来说,要证明的是 Layer 2 网络中离链状态转换的正确性,得益于零知识证明的特性,ZK-Rollup 发送有效性证明后,Layer 1 无需重新执行交易即可验证交易执行的正确性。对于验证者来说,功能完备的 ZK-Rollup 将不允许任何错误的交易在底层链上结算,因为每一批交易都必须附上相应的有效性证明。
当前的有效性证明可以采用ZK-SNARK(零知识精简非交互式知识证明)或ZK-STARK(零知识可扩展透明知识证明)的形式。
4.4 有效性证明 vs. 错误性证明
有效性证明和欺诈证明有许多不同之处,包括所需的计算量、验证交易所需的时间、安全性及实现难度等。
有效性证明比欺诈证明的计算复杂度更高
零知识证明在数学上具有挑战性,真正的零知识验证过程通常需要大量计算。相较之下,欺诈证明每交易批次成本更低,约为 40,000 gas,而 ZK-SNARK证明需要 500,000 gas。但就链上来说,ZK-SNARK 更便宜,因为 Optimistic Rollup 需要将所有数据发布到底层链,以便欺诈证明来进行验证。
有效性证明是即时的,而欺诈证明有争议时间延迟
零知识证明和欺诈证明之间的一个主要区别在于,零知识证明可以立即验证交易的有效性,而欺诈证明则需要一个固有的争议时间延迟(DTD),从而降低了交易的速度。只有在没有验证者对某个交易批次提交欺诈证明时,该批次才会被真正发布到 L1 网络上。
有效性证明更加去中心化和数据安全
由于零知识证明只需要最小限度的交互(例如,仅将证明共享给验证者),并且可以安全地完成此过程,因此零知识证明具有很高的去中心化性质。此外,由于证明是零知识且完全准确的,有效性证明可以保护用户隐私,并将严重威胁(如对L1链的51%攻击)的风险降到最低。
而 Optimistic Rollup 需要验证者提交欺诈证明,而这些证明可能会被截取或遭到分布式拒绝服务(DDoS)攻击,从而阻止对交易状态进行挑战,并使其无法传递到批次处理过程中。
有效性证明更难实现
Optimistic Rollup 和相应的欺诈证明可以在任何EVM或 Optimistic 虚拟机(OVM)上运行,而零知识证明及 ZK-Rollup 需要专门的虚拟机,即零知识以太坊虚拟机(zkEVM)。这类虚拟机能以与 ZK 计算和密码学有效性证明相适应的方式执行智能合约。
直到最近,zkEVM 还被认为仅在理论上可行。即使到现在,也很难实现支持零知识证明的 EVM 封装。不过 ZK 领域的新发展为零知识证明的吞吐量和可扩展性提供了改进的可能。
最值得注意的是,Polygon 正在创建自己的 Rollup 技术,该技术使用递归 ZK-SNARK 在返回主链之前更有效地执行链下交易。递归证明的工作原理是一次证明多个交易块,然后再证明一个聚合块。从本质上讲,是 SNARK 证明了其他 SNARK ,最后生成一笔最终交易,甚至比多个打包交易更加高效。Polygon 的 Polygon Zero 使用 Plonky2 来创建递归证明,这是目前可用的最快的证明方案。
5 区块链扩容方案
支付通道、Rollup和Layer 2都是区块链扩容方案,具有长期发展的潜力,可以为Web3应用的发展提供支持,并提升用户体验。
目前,Layer 1和Layer 2等大多数Web3技术还处于起步阶段,仍需要不断发展。这些技术尚未达到爆发点,仍需要经过一系列实践验证才能证明自身的价值。开发者和研究人员也正在推动DAG和Layer 2解决方案,为扩展区块链生态系统,实现Web3主流应用的目标而不断努力。