深度解读Scroll zkEVM方案:如何实现去中心化的愿景?
原文作者:Young,Scroll 研究员;Babywhale,Foresight News
今年 2 月底,基于 的以太坊 网络 Scroll 正式推出了向所有用户开放的 Alpha 测试网,并表示将在未来几个月内改进 zkEVM 性能。就在推出新测试网的一周后,Scroll 宣布以 18 亿美元估值完成了 、红杉中国等参投的 5000 万美元融资。
2022 年 6 月,笔者在《三分钟读懂 Scroll:ZK Rollup 扩容新锐选手》中简单介绍了 Scroll 的设计框架。Scroll 旨在建立「EVM 等效」的 zkEVM 扩容网络,实现以太坊上应用的无缝迁移。
7 月,Scroll 推出了需要申请资格的 Pre-Alpha 测试网,截至 Alpha 测试网推出时,Pre-Alpha 测试网已处理了超 1540 万笔交易,共确认了超 180 万个区块,提交了 64.1 万批有效性证明,且共有超 10 万名用户参与。而 Alpha 测试网开放至今,共有约 2,?145,?099 个地址,处理了约 10,?102,?684 笔用户交易,生成了 886,?701 个区块,平均区块时间约为 3 秒。
本文中,笔者将介绍 Scroll 通过怎样的机制实现在去中心化的前提下继承以太坊主网的性。
Scroll 架构主要由 3 部分组成:节点网络、证明网络和 Rollup 合约。
Scroll 的节点网络包含三部分:定序器(Sequencer)、协调器(Coordinator)和中继器(Relayer)。
定序器(Sequencer)
定序器(Sequencer)提供 JSON-RPC(JSON 是一种轻量级的数据交换格式,它可以表示数值、字符串、序列及名 / 值对集合。JSON-RPC 是一种无状态的,轻量级的远程程序调用协议)接口并接受 L2 交易。每隔几秒钟,它就会从 L2 mempool 检索一批交易,并执行它们以生成新的 L2 区块和一个新的状态根。Scroll 的定序器实现是通过 fork 被广泛使用的以太坊节点 Go Ethereum(Geth),并以此实现更好的兼容性和承经得起时间考验的安全性。
协调器(Coordinator)
一旦生成新的区块,协调器(Coordinator)就会收到通知,并从定序器接收该区块的 Execution trace。然后,协调器将 Execution trace 分配给一个从去中心化的证明网络中随机选择的证明者生成证明。
中继器(Relayer)
中继器(Relayer)用于观察部署在以太坊和 Scroll 上的桥和 Rollup 合约。它主要有两个职责,其一是监视 Rollup 合约,跟踪 L2 区块的状态,包括其数据可用性和有效性证明。其二是监视部署以太坊和 Scroll 上的跨链桥合约的存款和提取活动,并将消息从一方传递到另一方。
Rollers 作为网络中的证明者,负责为 ZK Rollup 生成有效性证明。Roller 可以利用像 GPU、FPGA 和 ASIC 等硬件设备来减少验证时间和验证成本。
下图展示了 Roller 如何为每个区块生成有效性证明,有以下步骤:
值得一提的是,Scroll 团队成员表示 Scroll 计划于主网上线前上线证明网络测试网。证明网络的去中心化一方面为以太坊合并后无处安放的 GPU 矿机找到了暂时的用武之地。另一方面,未来主网对证明者的激励可能可以刺激零知识证明专用芯片的开发,并最终被大量 ZK 项目广泛采用,形成继 Pow ASIC 矿机后的又一实体链。
Scroll 通过 Rollup 和跨链桥合约连接到以太坊。这样确保了 L2 交易的数据可用性,并允许用户在 L1 和 L2 之间传递资产和信息。
Rollup 合约
Rollup 合约从定序器接收 L2 状态根和区块。它将状态根存储在以太坊状态中,L2 区块数据作为以太坊 calldata。这为 Scroll 区块提供了数据可用性,并利用以太坊的安全性来确保包括 Scroll 中继器在内的索引器能够重建 L2 区块。一旦确定 L2 区块有效性的证明被 Rollup 合约验证,相应的区块就被认为在 Scroll 上已经完成。
跨链桥合约
部署在以太坊和 Scroll 上的跨链桥合约允许用户在 L1 和 L2 之间传递任意的信息。在这个消息传递协议的基础上,我们还建立了一个无需信任的跨链协议,允许用户在两个方向上桥接 ERC-20 资产。从以太坊向 Scroll 发送消息或资金,用户需要在跨链桥合约上调用 sendMessage 交易。中继器将在 L1 上对该交易进行索引,并将其发送给定序器,将其包含在 L2 区块中。从 Scroll 向以太坊发送消息,在 L2 跨链桥合约的流程和上述过程类似。
Scroll 中的 L2 区块被生成后提交给以太坊,并按以下步骤顺序最终完成:
上图说明了 Scroll 区块将在多步骤的过程后在 L1 上最终完成。每个 L2 区块将经过以下三个阶段,直到最终确定:
预提交。预提交示 block 已由定序器提出并发送给证明者。尽管预提交的区块还不是 Scroll L2 链的规范部分,但是由于它们尚未发布在以太坊上,因此信任定序器的用户可以选择预期对它们采取的行动。
提交。提交表示该区块的交易数据已经发布在以太坊的 Rollup 合约上。这确保了区块的数据可用性,但不能证明它是以有效的方式执行的。
终结。终结状态表示该区块中的交易已经被正确执行,并且通过了以太坊上的有效性证明验证。最终完成的区块被认为是 Scroll L2 链的规范部分。?
总体而言,Scroll 与已上线主网的 zkEVM、StarkNet 以及 Era 最大的区别在于 Scroll 更接近原生以太坊实现,对 EVM 来说更加友好。
二者在实现方面存在一些差异,。一是 Scroll 直接 fork 被广泛使用的以太坊节点实现 Geth 生成 Layer?2 的区块,接近原生以太坊实现。Scroll 设计了不同的子电路来证明 Geth 执行跟踪中的每个操作码,并且更容易验证电路与原生以太坊具有完全相同的行为。而 Polygon zkEVM 则使用新的汇编语言重写每个 EVM 操作码,然后为其底层状态机生成证明。
另一个区别是,Scroll 对 zkEVM 电路和聚合电路都使用 SNARK。Polygon zkEVM 是使用 STARK 作为他们的 zkEVM 电路,并使用 SNARK 作为聚合电路来聚合 STARK 证明。
与 StarkNet 相比,Scroll 以 EVM 等效性为目标,希望原生 zkEVM 解决方案以实现字节码级兼容性,对以太坊开发者更加友好;而 StarkNet 是一个对于 ZK 友好而对开发者不友好的方案。故 StarkNet 建立开发者和项目生态具有一定的学习成本,也存在不小的挑战。
相较于 Scroll 对 EVM 字节码级的兼容性,zkSync 是在语言级别兼容 EVM 的,故对于的开发者而言,需要对部署带有 BlackBlox 的编译器的额外信任,也需要更多的时间来进行安全审计。
Scroll 团队成员张烨曾发表了一篇名为《Scroll 背后的理念》的文章。这篇文章详细描述了 Scroll 的愿景:除了 Scroll 项目本身,团队更加希望为以太坊的 zkEVM 研究做出贡献。
文章中提到,相比于「闭门造车」,Scroll 从一开始就做出了与社区共同发展的决定,并且也一直在践行这一点,包括由社区驱动开发 zkEVM、开展零知识证明方面的公共教育、维护 Python 版本的 zkEVM 规范等。
除了上述方面的社区化运作,Scroll 还强调了更多方面的去中心化,包括定序器、证明者等等。总体而言,Scroll 更希望成为一个类似于以太坊一样,虽然有核心开发团队,但仍然在底层技术和基础设施层面开放的协议,并最终推动 zkEVM 生态的蓬勃发展以及主网与 zkEVM 的兼容,乃至以太坊 本身想要达到的最终目标。