导读

公链的扩容问题已经困扰区块链行业多年,尤其在 DeFi、NFT 等加密衍生市场的扩张之下,生态最为完备的以太坊拥堵愈发严重,高费低效的网络逐渐成为拖累行业发展的最大桎梏。

区块链的扩容主要分为 Layer 1 和 Layer 2 两个方向。Layer 1 方向是指改进公链本身以提升性能,即链上扩容,包含增加区块大小(例如比特币现金)、分片(例如以太坊 2.0)等;Layer 2 方向是指不对主链(Layer 1)进行任何改进,而是构建一个链下的二层(即 Layer 2),在二层处理部分交易以分担主链的压力,只在必要时和主链进行交互,即链下扩容。

早年间 Layer 1 扩容更受市场关注,出现过很多主打增加区块大小的比特币分叉项目,以及各类号称「以太坊杀手」的高 TPS 公链项目,以太坊本身也会在 2.0 版本实现分片扩容。但随着 DeFi 的繁荣,人们逐渐意识到仅凭 Layer 1 扩容已经无法满足需求(除非牺牲去中心化程度),Layer 2 扩容可能才是当下形势下的最优解。

本文将重点探讨三种 Layer 2 方案,分别为最早期的状态通道方案、如今走向没落的 Plasma 方案以及风头正劲的 Rollup 方案(包含 zkRollup、Optimistic Rollup 及 Arbitrum 方案)

方案1:状态通道

状态通道的原理是开辟一个链下的「通道」,用户可以通过在智能合约中锁定资产的方式,来将链上资产「转移」至通道中,并在通道中进行资产交互。在通道内进行资产交互操作不会占用主链的资源,且无需耗费昂贵的交易费用,可以适用于一些高频小额支付场景。用户在离开通道时进行结算,资产将转回主链。

以实际的应用场景为例,例如用户 A 为用户 B 提供某项服务,需要用户 B 每隔 1 小时向用户 A 支付一次小额的服务费。如果这发生在主链(Layer1)上,则需要占用大量的主链计算资源,且需要频繁支付昂贵的手续费。如果使用状态通道,用户 B 可以锁定部分资金进入通道,在通道内向用户 A 进行支付,每次支付都会使两者的账户状态更新。当服务期结束后,用户 B 可以取回剩余的资金返回至主链,用户 A 也可以将在通道内收到的服务费返回至主链。

状态通道的解决方案也可以为一些 DApp 提供帮助,例如区块链游戏。假如用户 A 和用户 B 进行游戏对战,该游戏由智能合约控制,双方可以锁定一些资金并开启通道,在链下通道进行游戏,游戏结束后通道关闭,获胜方获得资金奖励。

上文的例子中仅有两个参与方,这类应用场景非常有限,而具备多个参与方的状态通道「网络」才是其完全形态,这要利用通道的「可组合性」,例如用户 A 和用户 B 之间有一个通道,用户 B 和用户 C 之间也有一个通道,那么 A 和 C 就可以通过 B 实现交互。

状态通道是最早的扩容方案之一,目前存在着两点比较明显的限制。首先,状态通道的使用范围仅限于加入通道的用户,无法向通道外的用户发送资金;其次,状态通道内的资产在逻辑层面必须要有「所有者」,Uniswap 智能合约等没有明确所有者的对象无法使用状态通道,这就导致其应用场景大大受限,只能在一些有限的支付场景使用。

相关项目:闪电网络

状态通道最知名的应用便是比特币的「闪电网络」。闪电网络是为了缓解比特币交易拥堵、实现小额快速支付的技术。近期,萨尔瓦多宣布成为首个将比特币作为法定货币的国家,该国曾与加密货币钱包 Strike 建立合作伙伴关系,Strike 就是使用闪电网络进行支付结算。

方案2:Plasma

Plasma 可以理解为一个侧链框架,加密领域以往出现过很多侧链解决方案,侧链的核心难点在于双向锚定(2WP)的安全实施。其中前向锚定(从主链转移资产至侧链)是比较简单的,通用方案是用户将资产锁定在主链上,然后在侧链生成对应的资产。难点在于后向锚定(从侧链提取资产至主链),由于侧链无法达到主链的安全性,所以存在侧链被攻击/侧链运营商监守自盗导致资金无法提取/资金被他人恶意提取的可能性。Plasma 为了解决该问题,引入了「挑战期」的设定。

具体而言,用户将资产从主链转移至 Plasma 链(基于 Plasma 方案构建的侧链)时,需要将主链资产发送至管理 Plasma 链的智能合约,该资产即可进入 Plasma 链中进行交互。每隔一段时间,Plasma 链的操作者(或称作验证者、运营商或节点,即 Plasma 链上的维护者)就会对该时间段内 Plasma 链的交易进行一次「批处理」并生成 Merkle 树,相当于生成一个区块。操作者会将 Merkle 树的 Merkle 根发布到主链上,另外还会将该 Merkle 树中涉及某项资产交易的 Merkle 分支发送给该资产当前的所有者。

当用户申请将资产从 Plasma 链提取到主链时,则需要向主链的智能合约提交该资产最近一次交易对应的 Merkle 分支,用来证明资产提取操作的合法性,智能合约会发起一个挑战期(例如 7 天)。在挑战期内,任何人都可以使用其他的 Merkle 分支来验证和质疑该项提取操作的合法性,如果挑战期内有人能证明此为欺诈交易(例如用户在提取资产时并不拥有该资产),那么用户将提取失败,否则会提取成功。

如下图所示,例如用户 A 在主链上拥有资产 X,并将其转入了智能合约,在 Plasma 链上获得对应资产 P(X)。后续用户 A 在 Plasma 链上把资产 P(X) 转给了用户 B,这笔交易被记录在区块 1 Merkle 树的交易 4 位置。Plasma 链的操作者在打包区块 1 时,会将 Merkle 根发布到主链,并将交易 4 对应的 Merkle 分支发送给资产 P(X) 当前的所有者用户 B。用户 B 此时申请提取该资产到主链,则需要向主链智能合约提交交易 4 的 Merkle 分支,智能合约发起挑战期,如果挑战期内无人证明该项操作存在欺诈,则用户 B 成功提取资产。

上文为 Plasma 方案的大致运作方式,在其演变过程中,衍生出了多种改良版的方案,例如 Plasma MVP、Plasma Cash、More VP 等。这些方案都继承了 Plasma 的高安全性,但也共同存在着一些问题:

  • 退出时间长:提取资产到主链时,需要较长的挑战期。

  • 需要定期上线:用户(或受委托方)必须定期上线,以实现对 Plasma 链的监控,否则出现黑客攻击事件时可能错过挑战期。

  • 批量退出对主链的压力:如果一个 Plasma 链上的大量用户在同一时间段内提取资产到主链,所有用户都要在挑战期内进行挑战以完成提款,这也就意味着会批量发布到主链上,产生踩踏效应,导致主链严重拥堵。

  • 数据可用性问题:理想状态下,Plasma 链的操作者会将特定的底层数据(Merkle 分支)发送给用户自己进行保管,也就是具备数据可用性。但万一操作者作恶,只发布 Merkle 根至主链,但拒绝发布底层的交易数据给用户(即存在数据不可用的可能性),这会使用户无法验证该 Plasma 链的正确性。

相关项目:Polygon(Matic)

Polygon 原名 Matic,是一个运行在 EVM 上的基于状态的侧链,采用 Plasma 解决方案和 PoS 共识机制。Polygon 对 Plasma 进行了改进,改进主要包含将 UTXO 模型转变为账户余额模型、采用双重 PoS 机制、兼容 EVM 等,使其不仅可以做到和状态通道类似的、资产具备明确所有者的支付类用途,还可以支持运行各类基于智能合约的 DApp。

Polygon 兼容以太坊 EVM,有完善的开发工具,以太坊上的开发者可以轻松移植应用至 Polygon 生态,目前包含 Aave、Sushiswap、Curve、1inch 等在内的多个以太坊 DeFi 应用已经移植到 Polygon 的 Plasma-PoS 链中。

目前 Polygon 主要为以太坊主链提供扩展,未来会支持更多主链。Polygon 的愿景是成为「Layer 2 聚合器」,除 Plasma 方案外,未来还将同时兼容 Optimistic Rollup、zkRollup、Validium 等方案。

方案3:Rollup

由于 Plasma 方案存在无法解决的数据可用性等问题,所以逐渐走向没落,而更具优越性的 Rollup 方案开始成为当前最受关注、最具落地价值的 Layer 2 方案。

Rollup 的逻辑与 Plasma 方案类似,两者最大的区别如下。

Plasma 本质上是将计算和数据都转移到链下(自己的 Layer 2 网络中)只将链下的交易数据进行处理后的结果(Merkle 根)发布到主链,用户无法通过 Merkle 根了解到每一笔交易的信息,如果 Plasma 链操作者拒绝将底层的交易数据发给用户,那么就存在数据不可用的问题。

Rollup 方案的核心在于,将链下大量的交易进行打包压缩(批处理),然后将压缩的数据发布到主链,发布到主链的压缩数据中包含了每笔交易的基本信息,这就保证了数据的可用性(可验证性),进而可以实现对操作者的免信任。

下文具体阐述 Rollup 方案的运行方式。

首先,在主链上存在 Rollup 智能合约,里面存有状态根,即表征 Rollup 状态的 Merkle 根,Rollup 状态包含 Rollup 中的账户余额、合约代码等。

操作者在收集到大量链下交易数据后,会在主链上向 Rollup 智能合约发起批处理操作(可以理解为生成一个 Rollup 区块),里面包含打包压缩的交易数据,以及旧的状态根(执行批处理前的状态根)和新的状态根(执行批处理后的状态根),智能合约会检验新旧状态根是否匹配(即新的状态根是否可以由这批交易触发状态转换生成),如果检验通过,旧状态根会更新为新状态根。

批处理中的交易的输入方或输出方可以是来自 Rollup 外部的,这就可以实现用户在 Rollup 中的资金存取。例如用户从以太坊主链转移资产到 Rollup 合约,那么这笔交易就是从 Rollup 外部的以太坊主链输入资产至 Rollup 内部,同理,如果是从 Rollup 内提取资产返回以太坊主链,就是从 Rollup 内部输出资产至 Rollup 外部。

Rollup 方案中有一个核心的安全问题:如何保证批处理执行后的新的状态根是正确的?即如何防范操作者伪造交易或状态根、确保状态转换的有效性。针对该问题,出现了两种 Rollup 方案,分别是基于「有效性证明」的 zkRollup 和基于「欺诈证明」的 Optimistic Rollup。

  • 方案 3.1 · zkRollup

zkRollup 采用 zk-SNARK(零知识简洁无交互证明)技术。零知识证明是指证明者(操作者)能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。在 zkRollup 方案中,操作者在发起批处理时,除了提交压缩的交易数据和新旧状态根外,还需要提交 zk-SNARK 有效性证明,主链上的 Rollup 智能合约会据此检验状态根转换是否有效,这一过程相当于让操作者「自证清白」。

zkRollup 方案通过零知识证明消除了状态转换过程中的有效性疑虑,本质上是通过密码学组件的加持来取代可信方(即取代对于操作者的信任),可以实现无交互、免信任的高安全性,也更加符合加密世界的基本理念,而且能够免除类似于 Plasma 的挑战期设定,出资产提取申请后,下次批处理即可到账。zkRollup 的缺点在于,零知识证明生成过程复杂、计算成本高、耗费时间长,所以对通用型的智能合约(例如 DeFi 应用)支持不友好,当前更适用于普通转账交易等应用场景。

相关项目:zkSync

zkSync 并非单一的 zkRollup 架构,而是采用 zkRollup + zkPorter 架构(zkSync 2.0 版本),可以支撑更高的吞吐量,并构建了 zkEVM,zkEVM 支持 Solidity 智能合约,与以太坊 EVM 兼容,开发者可以在 zkEVM 上构建应用,或迁移以太坊主链上的应用至 zkSync 2.0。目前 zkSync 2.0 已经上线测试网。

具体而言,zkSync 2.0 的 Merkle 树架构如下图所示,分为 zkRollup 和 zkPorter 两个分支,两者有各自的 Merkle 根,并在各自的叶子节点上产生了两种账户:zkRollup 账户和 zkPorter 账户。用户在 zkSync 2.0 可以享受 zkRollup 和 zkPorter 账户的混合体验,能够自由选择账户类型,且两者是完全可互操作的。

zkRollup 和 zkPorter 的区别在于数据可用性的实现方式上。

依据上文对 zkRollup 原理的描述,zkSync 2.0 的 zkRollup 为了保证数据可用性,会将所有链下的交易数据进行压缩并发布到以太坊主链。这样的优点是可以达到和主链相同的安全性,但缺点在于,以太坊主链的区块大小是有上限的,即使是通过压缩,其吞吐量也可能无法满足未来的需求。

zkPorter 相当于额外建立了一个渠道为链下交易提供数据可用性。zkPorter 账户的交易数据会发布到 zkPorter,zkPorter 由 zkSync 代币持有者通过权益证明(质押代币)来保障安全性。这样的优点在于能够实现更高的吞吐量,但无法达到 zkRollup 的媲美主链的安全性。

  • 方案 3.2 · Optimistic Rollup

Optimistic 的字面含义是「乐观」,Optimistic Rollup 和 zkRollup 在理念上的区别也在于此。

zkRollup 的理念凸显「悲观」,默认所有的操作者都会作恶,于是要求每个操作者在发起批处理时都要同时提交有效性证明,以让智能合约验证其操作是有效的。

Optimistic Rollup 的理念偏向「乐观」,其假设所有操作者提交的批处理都是有效的,智能合约无需对其进行检验,而是设定一个类似于 Plasma 的挑战期,在此期间如果有人发现操作者存在伪造/篡改交易等作恶情况,可以对其发起挑战,挑战成功则会回滚错误的区块,并对相关操作者进行惩罚(扣除保证金)Optimistic Rollup 的本质是欺诈证明,让各参与方互相监督,通过惩罚机制来提高作弊成本。

Optimistic Rollup 相比 zkRollup,优点在于技术复杂度更低,对通用性智能合约的实现更加友好(Optimistic Rollup 项目还推出了兼容以太坊 EVM 的虚拟机 OVM)。Optimistic Rollup 的缺点主要在于和 Plasma 类似的挑战期设定,资金的提取需要等待长达 7 天的挑战期结束,这在欺诈证明机制下是无法避免的。

相关项目:Arbitrum

Arbitrum 同样是采用欺诈证明,与 Optimistic Rollup 原理大致相同,主要的区别在于解决挑战期内争议的方式。

Optimistic Rollup 采用单轮欺诈证明,在 Rollup 运行过程中,如果有人对操作者的批处理操作产生质疑并发起挑战,那么就会在主链上一次性模拟调用执行整个批处理的数据,以验证是否存在欺诈。

Arbitrum 采用的是多轮欺诈证明,将规模大的争议拆分成小的争议,一步一步找到该项争议在批处理中的具体位置,然后再通过主链上的智能合约执行该部分来确定它是否正确。也就是仅在以太坊主链中执行最关键的一步,而非执行整个批处理进行验证。

多轮欺诈证明相比单轮欺诈证明,优点在于能够减少主链上的工作量,消耗 Gas 更低,缺点在于多轮验证需要耗费更多的时间,两者的本质可以归结为解决争议时的链上成本和时间成本之间的权衡。

Arbitrum 的另外一个优点是可以完全兼容以太坊 EVM,以太坊上的项目可以不修改任何代码地部署至 Arbitrum(迁移至 Optimistic Rollup 需要更改代码),同时可以使用 MetaMask、Chainlink、Truffle 等成熟的基础设施服务。

Arbitrum 是目前最受关注的 Layer 2 解决方案,包含 Uniswap、Sushiswap、Bancor 等在内的主流 DeFi 协议都陆续宣布使用 Arbitrum 方案,值得一提的是,Uniswap 早期合作的 Layer 2 平台是 Optimistic Rollup,后续通过社区投票决议连接 Arbitrum。此外,Chainlink、The Graph 等大量以太坊上的基础设施服务也宣布入驻 Arbitrum,Arbitrum 的未来生态值得期待。

小结

Layer 2 扩容方案已经经历了数年的演进,最初只是为了实现加密货币的快速支付,后续随着 DeFi 的发展,Layer 2 也就顺理成章地成为了解决区块链技术规模化应用的主流技术方案。在扩展以太坊的道路上,状态通道和 Plasma 已经被逐渐抛弃,Rollup 开始成为包含 Vitalik 在内的整个以太坊社区最认可的解决方案,其中 Optimistic Rollup 和 Arbitrum 是在目前的技术背景下最易实现的方案,而随着零知识证明技术的进步,zkRollup 则更有可能成为最终的 Layer 2 方案。

发表评论 已发布 0

还可以输入 800 个字
 
 
评论 打印