Layer2 开发教程 # 1 什么是 Layer2、Rollup、DA?

记录一下个人学习笔记,参考网上资料,本文主要是我个人学习笔记,内容出处均在文末注明。部分内容源自ChatGPT,如文中有错误还请不吝赐教。【文本】标识的内容文本为作者个人观点,仅供参考。L1与L2L1,也就是第一层网络,指的是底层区块链基础设施。它们是整个区块链生态系统的基石,为上层

记录一下个人学习笔记,参考网上资料,本文主要是我个人学习笔记,内容出处均在文末注明。部分内容源自 ChatGPT,如文中有错误还请不吝赐教。【文本】标识的内容文本为作者个人观点,仅供参考。

L1 与 L2

  • L1,也就是第一层网络,指的是底层区块链基础设施。它们是整个区块链生态系统的基石,为上层应用和扩展方案提供了必要的基础架构和安全保障。以太坊和比特币都是典型的第一层网络区块链,因为它们各自提供了一个独立运行的、具备完整功能的区块链系统,包括交易处理、数据存储、以及网络共识机制等。
  • L2(Layer2,二层网络)是一种以太坊的扩容方案,它是一条独立的区块链,扩展了以太坊并继承了以太坊的安全保证。【L2会依赖一条L1的链,其安全性主要由L1的安全性来保障】

为什么要发展 L2? L1区块链的TPS有限需要扩容。区块链技术存在“不可能三角”,即无法同时达到 可扩展(Scalability)去中心化(Decentralization)安全(Security),三者只能得其二。【对于L1我们一般要求保障去中心化和安全,对于扩展性通过L2来实现】

主流扩容方案

image.png

为了提高 TPS 业界提出了一系列技术方案,时至今日,最主流技术方案是 zk Rollups, 关于 zk Rollups 我们会在后续的文章进行详细介绍。

  • L1 链上扩容:

    • 分片(Sharding)技术:Sharding 一词本来源于数据库的术语,表示将大型数据库分割为很多更小的、更易管理的部分,从而能够实现更加高效的交互。区块链分片是指对区块链网络进行分片,从而增加其扩展性。根据最新的以太坊 2.0 规范,以太坊区块链会被分为 1024 个分片链,这也意味着以太坊的 TPS 将提高 1000 倍以上。但目前 Sharding 方案仍然在跨分片通信、欺诈识别、随机分配与选举安全性等方面存在不足。
    • 【评论:为什么这个方案没有成为主流?去中心化系统的一个极大痛点就是破坏性升级,每次升级的影响面都是相当大的,这种技术方案更适合联盟链或者私链,已有的公链很难抛弃历史去破坏性更新,并且分片技术中共识会更复杂,容易产生新的安全问题,相比而言,共识层 keep simple,采用 L2 来渐进增强,对现有的系统影响并不大,所以 L2 Rollups 和 danksharding 技术最终成为了主流】
  • 链下扩容:链下解决方案与 L1 主网分开实施,不需要更改现有的以太坊协议。L2 直接从 L1 以太坊共识中获得安全性,例如optimistic-rollupszk-rollupsstate-channels。其他解决方案涉及创建各种形式的新链,这些链的安全性独立于主网,例如sidechainsvalidium或等plasma。这些解决方案与主网通信,但以不同的方式获得其安全性,以实现各种目标。

    • 状态通道(State Channel):状态通道是一种区块链扩容技术,通过在链外建立一个私密通道来进行多次交易,仅在通道开启和关闭时与区块链互动,以此来减少公链的负担、提高交易速度并降低成本。在这个通道中可以进行多次互动和交易,而无需每次交互都在区块链上确认和记录,大大减少了交易费用和延迟。但是,一个状态通道内发生的事务仍保持了很高的安全性和不可更改性。如果出现任何问题,我们仍然可以回溯到链上交易中确定的稳定版本。
    • 侧链(Sidechain)技术:侧链是平行于主链的一条链,由侧链上的验证者把一条链的最新状态提交给主链上的智能合约,这样持续推进的一类系统。侧链通常使用 PoA(Proof-of-Authority)、PoS(Proof of Stake) 等高效的共识算法。它的优势在于代码和数据与主链独立,不会增加主链的负担,缺陷在于它的安全性弱、不够去中心化,无法提供审查抗性、终局性和资金所有权保证。

L1 网络之上的 L2 解决方案,如 卷叠(Rollups)闪电网络(Lightning Network),通过在 L1 基础设施之上创建额外的协议或网络层来提高交易处理速度、降低交易成本,并提升整个网络的可扩展性。

image.png

这些 L2 项目通过将交易数据发布到底层 L1 网络(如以太坊),利用 L1 网络的安全性和数据不变性,实现在 L2 层上的高效交易处理。此外,L1 网络也为 L2 方案提供了数据可用性和最终的安全保障,使得在 L2 网络上进行的交易能够得到确认并在需要时回溯至 L1 网络验证。

大多数 L2 解决方案都以服务器或服务器集群为中心,这其中的服务器可能被称为节点(node),验证器(validator),操作器(operator),排序器(sequencer),区块生产者(block producer)或者类似的术语。根据实施情况,这些 L2 节点可能由使用它们的个人、企业或实体运行,或者由第三方运营商运行,或者由一大群个人运行(类似于主网)。 一般来说,交易会提交到这些 L2 节点,而不是直接提交到 L1(主网)。对于某些解决方案,L2 实例会将它们分批分组,然后将它们锚定到 L1,之后它们由 L1 保护并且无法更改。 不同的 L2 技术和实现之间的具体实现方式差异很大。

关于 L2 的安全性问题,可以参考 L2Beat 网站:https://l2beat.com/scaling/risk

Rollup

在传统的区块链网络中,全节点执行所有交易,确保完整性和安全性。 然而,虽然安全,但该模型由于其全面的处理要求而限制了吞吐量和可扩展性。 第 2 层 (L2) 解决方案的出现是为了解决这些限制,通过将大量交易执行从主链(第 1 层)转移出来来提供增强的性能。

尽管 L2 解决方案具有优势,但它在维护数据可用性和事务完整性方面面临着挑战,尤其是以高效且经济高效的方式。 Rollups 旨在通过执行链下交易然后将汇总结果发布回主链来缓解这些挑战。 这种方法显着减轻了第 1 层的压力,从而降低了运营成本和交易费用,为区块链网络提供了更具可扩展性的解决方案。

Rollup(卷叠)技术是目前最主流的 L2 扩容方案。顾名思义,Rollup 就是把一堆交易卷起来(Rollup)汇总成一个交易,所有接收到这个交易的节点只去验证执行结果,而不会验证逻辑。因此 Rollup 交易所需 Gas 费会远小于交易 Gas 费总和,TPS(每秒钟交易次数)也增加了。

1. Optimistic Rollup

Optimistic Rollup(乐观的 Rollup 协议)采用欺诈证明方法,即对链上发布的所有 Rollup 区块都保持乐观态度并假设其有效,它仅在欺诈发生的情况下提供证据。乐观 Rollup 的优势在于能使得原生 Layer1 上的 solidity 合约可以无缝移植到 Layer2,从而最大程度提升了技术人员的研发体验,目前主流方案包括 Optimism 和 Arbitrum。

Optimistic Rollup 的运行遵循假定有效性的原则,除非另有证明,否则交易被假定为有效。 它们的生命周期涉及:

  • 交易聚合:交易由排序器(sequencers)收集并形成汇总块。
  • 区块提交:该区块被提交到基于以太坊的智能合约,并以债券【抵押资产】作为安全措施。
  • 有效性假设:交易在提交时被视为有效。
  • 质疑窗口:提交欺诈证明的时期,允许对区块的有效性提出质疑。
  • 结果:
    • 挑战成功:保证金被没收,区块被撤销。
    • 无挑战:如果没有挑战,则该块已最终确定。

2. ZK-Rollup

ZK-Rollup 是基于零知识证明的 Layer2 扩容方案,采用有效性验证方法(VP),默认所有交易都是不诚实的,只有通过有效性验证才会被接受。ZK-Rollup 在链下进行复杂的计算和证明的生成,链上进行证明的校验并存储部分数据保证数据可用性。目前主流的方案包括 zkSync、StarkNet、Scroll、Polygon Hermez 等。

ZK-Rollup 生命周期涉及:

  • 有效性要求:区块提交前必须提供有效性证明。
  • 区块提交:区块与所需的有效性证明一起提交。
  • 有效性假设:与 Optimistic Rollup 不同,需要预先提供有效性证明。
  • 数据可用性:虽然有效性证明与数据可用性无关,但链的安全性在很大程度上取决于它。
  • 数据不可用的影响:
    • 状态重建:如果数据不可用,用户无法重建状态。
    • 排序器干预:其他排序器可以介入以恢复状态并继续操作。

从中长期来看,随着 ZK-SNARK 技术的改进,ZK rollups 将在所有用例中胜出。— Vitalik Buterin

ZK-rollups 将交易作为 calldata 写入以太坊。 calldata 是智能合约函数外部调用中存储数据的位置。calldata 中的信息会被发布到区块链上,允许任何人独立地重构 rollup 的状态。【calldata 中的数据不会做为以太坊 state 的一部分,而是类似于日志记录,所以存储成本更低】ZK-rollups 使用压缩技术来减少交易数据量——例如,通过使用索引代替地址来表示账户,从而节省了28字节的数据。链上数据发布对于 Rollup 来说是一笔巨大的成本,因此数据压缩可以为用户减少费用。

zk-rollup 是一种 off-chain 协议,然后由链上智能合约管理。 ZK-rollups 在主网之外执行交易,但定期将链下交易批次提交到链上 rollup 合约。 其核心架构如下:

  • 链上合约:如上所述,ZK-rollup 协议由运行在以太坊上的智能合约控制。 这包括存储汇总区块、跟踪存款和监控状态更新的主合约。 另一个链上合约(验证者合约)验证区块生产者提交的零知识证明。
  • 链下虚拟机 (VM):虽然 ZK-rollup 协议存在于以太坊上,但交易执行和状态存储发生在独立于 EVM 的单独虚拟机上。 该链下虚拟机是 ZK-rollup 上交易的执行环境,并充当 ZK-rollup 协议的第二层或“第 2 层”。 以太坊主网上验证的有效性证明保证了链下虚拟机中状态转换的正确性。

ZK-rollups 是“混合扩展解决方案”——独立运行但从以太坊获得安全性的链下协议。 具体来说,以太坊网络强制验证 ZK-rollup 上的状态更新的有效性,并确保每次对 rollup 状态的更新背后的数据都是可获取的。 因此,ZK-rollups 比纯粹的链下扩展解决方案安全得多,例如 sidechains(负责其安全属性)或 validiums(也通过有效性证明验证以太坊上的交易,但将交易数据存储在其他地方)。

L2 交易确定:以太坊充当 ZK-rollups 的结算层,只有当 L1 合约接受有效性证明时,L2 交易才会最终确定。 以太坊保证用户操作一旦在 L1 上完成就无法逆转。

大多数 ZK-rollups 使用 "supernode" (the operator) 来执行交易、生成批次并将块提交到 L1。 虽然这保证了效率,但也增加了审查风险【中心化风险】:恶意 ZK-rollup 运营商可以通过拒绝包含用户交易的 batch 来审查用户【和去中心化相违背】。

作为一项安全措施,如果用户认为自己受到运营商的审查,ZK-rollups 允许用户直接向主网上的 rollup 合约提交交易。 这允许用户强制从 ZK-rollup 退出到以太坊,而无需依赖运营商的许可。

零知识证明

零知识证明(zero-knowledge proof),简写为 ZKP,最初由 S.Goldwasser、S.Micali 及 C.Rackoff 在 1985 年的论文 《交互证明系统的知识复杂性》 提出,指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。

性质

  • 完备性:只要论断是正确的,证明者就可以让验证者相信论断。即:真的假不了。
  • 合理性:如果论断是错误的,那么作弊的证明者无法让验证者相信论断。即:假的真不了。
  • 零知识性:协议的交互仅仅揭露论断正确与否,而没有泄露任何其他的信息。

零知识证明有何应用?

  • 证明关于隐私数据的声明
    • 在不暴露账户余额的情况下证明某人的账户余额多于一个亿,比如之前 FTX 暴雷为用户敲响了警钟,交易所可以通过零知识证明的方式向用户证明自己的储备金充足。
    • 在不暴露 DNA 数据的情况下匹配 DNA。
  • 匿名认证
    • 在不揭露身份的情况下证明请求者具有访问某些资源的权限
    • 证明某个人隶属于某个身份组而不暴露是哪个
  • 匿名支付
    • 纳税而不透露收入
  • 外包计算
    • 以太坊扩容技术 ZK-Rollup 就可以理解为一种外包计算,将计算过程放到链下进行,将结果放到链上去验证

zk Rollup 的 EVM 兼容性

ZK-Rollup 早期为人诟病的地方是不能兼容 EVM,不能支持智能合约功能,例如早期 Gitcoin 捐赠主要支付途径的 zkSync 1.0 (Lite)仅能支持转账等基本功能。同时,由于不同 ZK 应用有各种专用电路,无法相互调用,可组合性差。因此市场急需能够支持以太坊智能合约的 ZK-Rollup,而其中关键门槛就是能够支持零知识证明的虚拟机。随着引入 EVM 兼容的 zkEVM,zk-rollups 才开始支持以太坊 dApps。

image.png

由于 zkEVM 并没有统一的设计标准,所以每个项目方基于不同角度在兼容 EVM 和支持 ZK 之间权衡设计出各自方案,目前基本分为两种思路:

  1. 编程语言层面支持,自定义 EVM 操作码,把 ZK-friendly 的操作抽出来重新设计新的、架构不同的虚拟机,通过编译器将 Soilidity 编译成新的虚拟机操作码 【意思是设计一套新的字节码体系来从源码编译过去】
  2. 字节码层面支持,支持原生 EVM 操作码 【现有的字节码扩充】

对于第一种策略,由于不受原有 EVM 指令集的约束,可以更灵活的将代码编译成对零知识证明更友好的指令集,同时也摆脱了兼容所有 EVM 原有指令集所需要的艰巨而繁重的工作。

对于第二种策略,由于完全支持了 EVM 现有的指令集,其使用的是和 EVM 一样的编译器,因此天然就对现有的生态系统和开发工具完全兼容,同时还更好的继承了以太坊的安全模型。

在 Vitalik 的博文 中,他将 zkEVM 分为几种类型。其中,类型 1 是直接在以太坊上面直接开发 zkEVM,这个开发过于复杂而且目前效率太低,以太坊基金正在研究中。类型 2、类型 2.5 和类型 3 是 EVM 等效的 zkEVM,Scroll 和 Polygon Hermez 目前处于类型 3 这个阶段,朝着类型 2.5 乃至类型 2 努力。类型 4 是高级语言兼容的 zkEVM,包括 zkSync 和 Starknet。这些类型并无好坏之分,而且 zkEVM 也没有统一的标准。

image.png

从理论上讲,以太坊不需要为 L1 使用单一的 zkEVM 实现进行标准化;不同的客户可以使用不同的证明,因此我们继续从代码冗余中受益。— Vitalik Buterin

image.png

数据可用性 Data Availability

关于目前的一些 L2 项目采用的 DA 方案汇总,可以参考 L2Beat 的 DA 页面:https://l2beat.com/scaling/data-availability

数据可用性问题是区块链和分布式账本技术中的一个关键问题,其核心是使所有交易数据在网络上公开访问和验证的必要性。 这一挑战对于区块链的完整性安全性至关重要。

在区块链系统中,每个区块的交易数据都需要网络节点的验证。 数据可用性问题的关键不仅在于发布数据,还在于确保其在网络上的可靠分发,保证所有参与者的平等访问。

由于以下几个原因,数据可用性问题在 L2 网络中尤为重要: 【L2自身问题】

  • 链下交易:L2 解决方案处理主链外的交易以提高可扩展性。 然而,这可能会给验证所有交易数据是否完整和准确带来挑战,因为它不会立即记录在 L1 区块链上。
  • 透明度和信任问题:透明度是区块链技术的核心原则。 在 L2 网络中,数据可用性的任何妥协都可能导致信任问题,因为用户可能无法独立验证交易。

【L1自身问题】

  • 对 L1 的安全依赖:虽然 L2 网络独立运行以进行事务处理,但它们依赖于 L1 来确保安全。

【L2与L1数据交互问题】

  • 解决机制对数据的依赖:L2 网络可以使用欺诈证明等机制来解决争议。 这些机制的有效性取决于交易数据的可用性和可访问性。【L1验证机制也需要依赖于数据,所以这也有一个数据可用性问题】
  • 验证的复杂度增加:L2 增加了确保数据准确报告回主链的复杂度。 这增加了数据可用性问题的风险,影响网络的可靠性。确保从 L2 到 L1 的完整且准确的数据传输对于维护整个网络的完整性至关重要。

L2 解决方案中的数据可用性可以分为两种方法:

  • 链上数据可用性:所有交易数据都存储在L1链上,安全性更高,但成本更高。
  • 链下数据可用性:数据存储在链外,仅在链上存储加密摘要(哈希值)。 这种方法具有成本效益,但依赖于外部实体进行数据检索。

对于后者,由于依赖外部数据管理器,将数据可用性移至链外本质上会包含额外的信任依赖性。对于L2链下数据可用性有如下技术路线:

  • Validiums: ZK Rollups + Off-Chain DA
  • Optimiums: Optimistic Rollups + Off-Chain DA
  • Volitions: ZK Rollups + Validiums
  • Sovereign Rollups: Independent Rollups with Custom DA and Security Models

Reference

[1] WTF zkSync 极简入门: 1. Layer 2 基础 [2] ChatGPT [3] Docs - Avail DA [4] Docs - validium [5] Docks - zk-rollups

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
庄生晓梦
庄生晓梦
区块链研究员