# Scroll 项目 ( zkEVM 方向 )

By [Ethan - if(DAO)](https://paragraph.com/@ethan-if-dao) · 2022-02-04

---

更新2022-8-25
-----------

一、团队选择使用 zk-Rollup 建立二层网络的原因

1）当前在应用层面较为领先的 Optimistic Rollup 是通过一种包含经济激励的「欺诈证明」来保证安全性。虽说基于经济激励的安全模型已在一定程度上得到了市场的验证，但该模型并非完全安全，它依赖于诚实节点假设，也就是说理论上仍存在被攻击的可能性，并且也正是因为此假设，从 L2 到 L1 提现需要大约 7 天的等待时间。而 ZK Rollup 则可以通过数学实现理论上的完全安全（之所以说是理论上，是建立在代码没有漏洞的基础上），即使是最慢的提现，也只需要等待大约 1 小时以内的证明生成时间。所以 ZK Rollup 会拥有更好的安全性和更短的 L1 提现时间。

2）由于 ZKP 生来就拥有将大量信息进行压缩验证的能力，并且可以通过将 ZKP 的计算任务通过某种公平的形式进行分发从而实现验证的去中心化，在形式和效果上，都与「去中心化的高效区块链」愿景不谋而合。此外，对于某些特定的应用（例如 DEX）其基于 ZKP 的二层网络理论速度将会比基于 Optimistic Rollup 的二层网络速度快得多，因为链上所需数据可以被更进一步的被压缩。

3）ZKP 除了提高效率外，还可能打开未来更大的想象空间（例如隐私保护等方面的能力）。

4）联合创始人有在 ZKP 硬件加速方面的经验，Scroll 计划在 ZKP 方面利用硬件加速进一步提高验证效率。团队表示，其愿景是建立一个去中心化的验证网络，将 ZKP 的证明分发给参与者进行计算，并将结果汇总形成最终的证明。而该去中心化的验证网络将向所有人开放，并将设置激励机制与惩罚机制（例如对计算结果进行一定程度的冗余，比如将同样的计算内容分发给数个节点进行并对比计算结果，对作恶节点进行惩罚）。这样去中心化的验证网络完全体现了区块链的精神并在密码学层面上保证了安全性。相较于类 PoS 的验证网络以及当前二层网络偏中心化的交易验证和出块机制，ZK Rollup 是更优的选择。

二、团队计划建立 “ EVM 等效 ” 的 zkEVM

1）EVM 等效是 Optimism 首先提出的概念，EVM 等效意味着以太坊上的应用可以无缝迁移至 Optimism 而无需对代码进行过多的修改。但当前 StarkWare 和 zkSync 的方案则是重建了一套虚拟机，该虚拟机仅仅在「语言层面」与 EVM 兼容，也就是说也可以使用例如 Solidity 语言进行编译，但需要一定程度的重新开发。

2）我们可以从实际情况中瞥见一二。StarkNet 于上个月刚刚宣布开放了和以太坊之间的跨链桥，但实际使用中我们发现 StarkNet 上地址格式都与 MetaMask 上的以太坊地址不同，用户需要再连接 Argent X 浏览器插件钱包才能实现跨链。

3）而 Scroll 想要做的事情与 Polygon Hermez 类似，是希望实现「ByteCode」级别的兼容，也就是以太坊上的应用可以几乎无缝迁移至二层网络上。这个级别的兼容就可以实现兼容以太坊上的所有语言，并且也可以兼容以太坊上的工具，大大降低了在二层网络上的开发难度。

背景
--

Scroll 项目目前处于非常早期的阶段，还没有公布任何成果，也没有资方背景。

if(DAO) 关注这个项目的发展，主要源于 3 个原因：

一、ZKP 目前发展的瓶颈

1、如果想在某个 zkRollup 内开发 dApp，你需要使用一种特殊的语言（ 即 [R1CS](https://tlu.tarilabs.com/cryptography/r1cs-bulletproofs/mainreport.html#rank-1-constraint-systems) ）来编写你的所有智能合约的逻辑。这种语言有着复杂的语法，而且要求使用者精通零知识证明（ 学习零知识的成本实在太高了，论文茫茫多，且写的基本不是人话 ）。

2、现有的 zkRollup 实现，不支持可组合性：在 Layer 2 上，不同的 zkRollup 应用之间无法交互，严重破坏了 DeFi 应用的可组合性。

综上 zk-Rollup 目前对开发者并不友好，而且功能有限。这是 Scroll 想要解决的问题。Scroll 想要通过直接支持原生 EVM 验证来提供最好的开发者体验，并在 Layer2 上支持可组合性，让现有以太坊应用可以原封不动地迁移到 zkRollup 上。

二、Scroll Blog 中提到的构建 zkEVM 解决思路很赞

1、为某个密码学累加器设计一个电路

这是为了起到 “可验证存储器” 的作用，我们需要通过某种技术来证明读取过程是准确无误的。密码学累加器可以更高效地实现这一点。以默克尔树为例，已部署的字节码会被存储为默克尔树上的叶节点。然后验证者可以使用简洁证明来验证该字节码是否正确加载自某个地址（即，验证电路中的默克尔路径）。针对以太坊存储，我们需要这个电路同时兼容默克尔-帕特里夏树和 Keccak 哈希函数。

2、我们需要设计一个电路将字节码与实际的执行追踪关联起来

将字节码转移到静态电路中会带来一个问题：像 `jump` 这样的条件式操作码（与智能合约中的 loop、if else 语句相对应）可能会跳转到任何地方。在某个人使用特定输入运行该字节码之前，跳转目的地都是不确定的。这就是为什么我们需要验证实际的执行踪迹。执行踪迹可以被认为是 “展开的字节码”，包含按实际执行顺序排列的操作码（即，如果你跳转到另一个位置，踪迹中将包含该目标操作码和位置）。证明者将直接提供执行踪迹作为电路的见证数据。我们需要证明该执行追踪确实是特定的字节码使用特定的输入 “展开” 的。我们的想法是强制让程序计数器的值保持一致。针对目的地不确定的问题，解决思路是让证明者提供一切数据。然后，你可以使用查找参数高效地检查一致性（即，证明带有准确全局计数器的操作码包含在 “总线” 中）。

3、我们需要为每个操作码设计电路（证明每个操作码中的读、写和计算都是正确的）

这是最重要的部分：证明执行追踪中的每个操作码都是正确且一致的。如果你直接将所有东西都放在一起，会产生高昂的成本。此处重要的优化思路是：我们可以将 R/W 和计算分成两个证明。一个证明会将所有操作码用到的元素都放到 “总线” 中。另一个证明会证明对 “总线” 上元素的计算是正确执行的。这会大幅降低每个部分的成本（即，你在生成计算证明时无需考虑整个 EVM 存储）。前者被称为 “状态证明”，后者被称为 “EVM 证明”。另一个发现是，查找声明可以有效处理 “总线映射” 。除此之外，我们可以为每个操作码设计度数更高的定制化约束（即，我们可以将一个 EVM word 切分成多个数据块，以便更高效地处理）。我们可以选择是否根据需求通过一个选择符多项式来 “打开” 一个约束。这样可以避免每个操作都要消耗整个 EVM 电路的成本。

3、V神的关注和讨论

![](https://storage.googleapis.com/papyrus_images/60cd23cdd9c4be775c45848be21395bba3d8e37f243661f23db1c3c298cbd558.png)

项目简介
----

一、官网：[https://scroll.io/](https://scroll.io/)

二、项目简介：Scroll Tech 旨在通过强壮的证明网络从而构建 EVM 兼容的 zk-Rollup。

三、项目目标：

1、Scroll 将构建一个完全兼容 EVM 的 zk-Rollup

通过一个简洁的证明来支持对以太坊区块的直接验证。基本思想是验证 EVM 执行跟踪中每个操作码的一致性和完整性。这样，L1 智能合约就可以无缝迁移到 Scroll。我们将反向构建，而不是使用新的 zk 友好原语——我们将使用自定义优化来支持原生 EVM。这给我们带来了巨大的优势，无需任何修改即可与所有现有的以太坊基础设施兼容！

2、Scroll 将启用和标准化第 2 层证明外包

我们设计了一个强大的外包机制，可以激励 Rollup 的 rollers 为 Scroll 生成零知识证明。Scroll 将对此类方案进行标准化，以适应更广泛的一般链下计算。这将打开一个新的证明市场。对开发者的另一个直接影响是他们可以在 Scroll 中部署复杂的合约，而无需考虑 gas 限制。许多新应用程序可以通过链上提交的证明在链下启用。Scroll 团队还构建了世界上最快的 GPU 和 ASIC 证明器来支持这一点。从长远来看，Scroll 计划实现完全去中心化并减少 MEV 的影响。

3、Scroll 将升级到新的证明系统

Scroll 将采用新的分层零知识证明系统。第一层将证明高效（定制电路优化和硬件高效证明算法）。第二层将是验证者高效的（简洁的证明和 EVM 友好的验证算法）。与所有现有解决方案相比，它有可能支持比 EVM 更大的程序和更多功能，如隐私。

### 参考文献

原文：[https://hackmd.io/@yezhang/S1\_KMMbGt](https://hackmd.io/@yezhang/S1_KMMbGt)

译文：[https://learnblockchain.cn/article/3108](https://learnblockchain.cn/article/3108)

---

*Originally published on [Ethan - if(DAO)](https://paragraph.com/@ethan-if-dao/scroll-zkevm)*
