# zk, zkVM, zkEVM 

By [scarlet](https://paragraph.com/@scarlet-2) · 2022-08-13

---

[https://mirror.xyz/msfew.eth/Yl64OK3lLG48eJpVB3GxqFEhmWOm6yMlAo9sc1VrQP4](https://mirror.xyz/msfew.eth/Yl64OK3lLG48eJpVB3GxqFEhmWOm6yMlAo9sc1VrQP4)

零知识证明，可以保证计算的完整性、正确性和隐私性，在区块链的扩展和隐私方面有很多的用例。 zk-SNARK和zk-STARK有各自的优势，这两者的结合更有潜力。 zkVM通过零知识证明为应用赋能，zkVM可以按照主流、EVM或新建的指令集进行分类。 EVM兼容性包括EVM兼容性、等价性和规范级兼容性。 zkEVM是一个EVM兼容和零知识证明的环境。它可以分为基于本地和基于编译器的解决方案。 基于原生的zkEVM是Ethereum和区块链的未来。 支持Solidity lang的通用zkVM是Web3的未来。

0\. Zero-knowledge Proof
------------------------

对零知识证明的一个简单易懂的定义。你正在上小学。老师是验证者，而你，学生，是证明者。你如何证明你知道一元二次方程的解题公式？这就需要进行数学考试。老师会随机给你10道与一元二次方程有关的题目，如果你已经掌握了这些题目，你就可以全部做完。在这个过程中，你并没有记住或写下确切的公式，但老师可以简单地验证你对一元二次方程的理解能力。

事实上，这就是Tartaglia和Cardano （是的，就是这个名字）在争论谁是x 3 + bx = c类型的三度方程的解法公式的发现者时所做的事情。他们都不想告诉对方他们的公式是什么，但是通过做随机问题集，在不暴露知识的过程中，很容易验证他们有这个知识。

零知识证明的用途是什么？用处是整个过程节省了计算能力，压缩了区块链的空间，同时也坚持了隐私，符合区块链的无信任和密码学性质。

1\. SNARK and STARK
-------------------

区块链领域的术语 "zk "通常不是真正的零知识证明，而往往是一种有效性证明。这些 "误用 "出现在本文的某些部分，以避免相关术语的混淆

![](https://storage.googleapis.com/papyrus_images/78b1d51e901c47b203fba8161daad59163be6b94cadac99566e690060f2c20bf.png)

在目前的区块链世界中，zk可以说是最前沿、最优化的扩展（无zk的有效性证明）和隐私（真zk）的解决方案。zk被广泛用于Tornado.cash、ZCash、zkSync、zk.money、Filecoin和Mina等项目。

目前的技术解决方案分为两个主要类别。SNARK和STARK。STARK中的S代表可扩展，这意味着被证明的语句有重复的结构，而SNARK则支持任意电路，这些电路经过预处理，可以实现简洁的证明。SNARK的技术实践更占优势，而STARK主要被StarkWare在生产中大规模采用。下面是它们之间的比较。

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

如果SNARK是以太坊2.0的未来，那么STARK将是以太坊3.0的未来。总的来说，STARK的优势在于。

更低的GAS（可扩展） 更大的批次规模（可扩展_2） 更快的证明（可扩展_3） 没有可信的设置（生成的参数只对当前应用有效，如果有变化需要重新设置） 量子化后的安全性

但是由STARK生成的证明要大得多，而且是相当大的。由于像WASM的一些限制，在构建时可能需要额外的操作（这个例子虽然使用了SNARK）。Mir之前在Starky给出了一个基于AIR的STARK实践，作为Plonky2的一部分（Plonky2和Starky之间的关系很复杂...）。我个人认为，大尺寸可以通过各种方法来优化，但算法本身的时间复杂度很难进一步压缩。

这些零知识证明技术可以结合起来，建立更强大的应用。例如，Polygon Hermez使用SNARK来验证STARK的正确性，从而减少了证明最终解决时的气体费用。

总而言之，SNARK和STARK都是优秀的零知识证明技术，各有各的优势，它们的结合具有更大的潜力。

2\. zkVM
--------

前面提到的Tornado.cash和zk.money都是类似的零知识证明应用，只支持转账操作，但不支持通用计算。以此类推，这些应用只有比特币的功能，远不如以太坊的图灵完备性和DApp生态系统（比特币上的智能合约并不完善）。

zkVM是一个虚拟机，通过零知识证明保证安全和可验证的可信度。zkVM只是你进入旧状态和程序的机器，它以可信的方式返回新状态。它允许所有的应用程序被赋予零知识证明的超能力。

Miden在阿姆斯特丹ETH的演讲用一张图很好地概述了zkVM的真正含义。

![](https://storage.googleapis.com/papyrus_images/150c6e328e5e469fbccfeda779f3d36db47ce5670db56ce83b9ee76fffd5e39a.png)

zkVM的专业。

易于使用。开发人员可以使用zkVM以可信的方式运行程序，而无需学习密码学或用zk电路开发（并不意味着没有障碍） 通用性：zkVM可以为任何程序或计算生成证明。 简单性。相对较少的约束可以描述整个虚拟机（不需要重复生成整个虚拟机的电路）。 递归。自由递归的特点。与通用性一样，对虚拟机的验证也可以由虚拟机来完成。这很有趣，例如，你可以把一个zkVM放在一个zkVM里面，类似于StarkWare所说的L3的概念。

zkVM的优点。

计算架构的特殊性。不是所有的零知识证明系统都可以用于zkVM。 性能问题。电路需要优化，可以对特定的计算进行优化。 zkVM有三种主要类型，括号内为其指令集：主流（WASM、RISC-V）、EVM（EVM字节码）和ZK-优化（针对零知识证明优化的新指令集，如Cairo和zkSync的）。下面是根据Miden在阿姆斯特丹ETH的演讲对这些类型的比较。

![](https://storage.googleapis.com/papyrus_images/191276565bc999d1bbfb9de0d5d1a5a8ff743be25a6b10be0767d284d2ddc9dc.png)

零知识证明开发生态系统所做的大部分工作主要是允许开发人员使用Circom库（以及snarkyjs的问题）或其他新创建的语言（Leo或Cairo，有奇怪的限制）来做zk DApp开发，但它不像在以太坊上使用Solidity那样直接和容易学习。

此外，还有很多项目，如zkSync、Scroll，或Polygon旗下的几个项目，都在尝试做zkEVM或其他zkVM。

3\. EVM
-------

EVM是一个以太坊虚拟机，也可以理解为运行智能合约的执行环境。

几年来，各种区块链一直试图与EVM兼容，以进入Ethereum开发生态系统。对于这个概念，人们得出了EVM兼容性、等价性和其他一些定义。

EVM兼容性。Solidity和其他语言级别的兼容性。 EVM等效性：EVM字节码层面的兼容性。 EVM规范级兼容性：通常被称为真正的zkEVM。在大多数情况下，它甚至向后兼容优化的超集，提供账户抽象（即每个账户是一个智能合约）和其他Layer1 EVM不提供的功能。

4\. zkEVM
---------

让我们来看看zkEVM。根据定义，zkEVM是一个兼容EVM和零知识证明的虚拟机，保证程序、操作和输入输出的正确性。

要做通用计算的zkEVM，有两个主要困难需要解决。

**a) 电路的复杂性** 不同的合同需要生成不同的电路，而这些电路是 "复杂 "的。

这依赖于各种优化，比如Aleo（但它不是直接的ZK......只是为了有一个优化的例子），通过分布式集群来并发计算证明，或者通过各种硬件优化来加速它。

**b) 设计难度** zkEVM不仅是对EVM的重构，也是利用零知识证明技术对Ethereum的整个状态转换的重构。

在设计EVM的时候，没有想到zkEVM会在后面做，这使得它的实现非常困难。其结果是，有两条路线。这两条都在图中。

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

或者就虚拟机架构而言，它看起来像这样（超级感谢Scroll Tech的原始总结！）。Opcode指的是EVM的Opcode。StarkWare部分是使用Warp将Solidity转换为Cairo合约，或者直接用Cairo编写合约，以获得良好的开发体验和一套更好的工具。

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

在开发者和用户层面，我认为这些解决方案基本上是没有区别的，但在基础设施方面，EVM越靠右，兼容性越好，对Geth等基础设施的无缝访问也越慢

5\. zkEVM and zkVM
------------------

zkEVM的存在我认为是对以太坊生态系统的翻新和修补，为其繁荣添砖加瓦，而zkVM的存在不一定是对以太坊的增强，但也有更大的潜力。

StarkNet的Cairo VM可能不是我想象中的完美的zkVM，但它可以比EVM或zkEVM做得更多，而且不仅仅是在EIP层面上扩展功能。机器学习模型可以在开罗虚拟机上运行，现在甚至有一个机器学习建模平台正在StarkNet上构建。

与zkEVM相比，zkVM更容易构建（不需要担心EVM的技术债务），更灵活（不需要担心EVM的更新），更容易优化（电路和证明者的软硬件优化比构建zkEVM更容易，更便宜）。

当然，zkVM的一个最小但致命的缺点是，如果zkVM不支持EVM的兼容性（在Solidity语言层面），那么zkVM就很难像EVM那样拥有最完整和成熟的Web3开发生态系统。

zkVM也许是更大的趋势，让EVM的纵向优化成为EVM生态系统的横向扩展，超越EVM的限制。

6\. zkVM’s 的未来
--------------

如果有一个通用的zkVM，可以让所有编程语言的智能合约，不仅仅是Solidity，不仅仅是Cairo，还有Rust、C++、Go，以零知识证明的方式运行呢？ Stellar尝试过，但失败了。

正如@kelvinfichter所说的那样。如果是zkMIPS，为什么是zkEVM？正如 @KyleSamani 所说。EVM是一个错误而不是一个功能。如果是zkVM，为什么是zkEVM？

zkVM如Winterfall、Distaff或Miden VM对开发者并不友好。Nervos有RISC-V VM，但Nervos没有使用零知识证明技术。

最佳的解决方案是建立一个WASM或RISC-V zkVM，最好是支持Rust、Go、C++，甚至是Solidity（zkSync可以在这方面提供帮助！）。如果有这样一个通用的zkVM，那么它将是一个zkEVM杀手。

Web3开发者的数量约占所有开发者的0.07%，这意味着Solidity开发者的数量实际上比0.07%还要少。Cairo和Leo开发者的数量更少。这样一个完美的zkVM针对的几乎是100%的开发者，几乎任何语言的开发者都可以得到一个完美的零知识运行环境。

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

如果Web3和Crypto有一天统治了世界，我认为不会是EVM生态系统百分之百地占领所有的开发者，而是所有的开发者会慢慢地转换为Web3和Crypto开发者。这就是通用zkVM的魅力所在。

原生zkEVM是区块链的未来。

通用zkVM是Web3的未来。

![](https://storage.googleapis.com/papyrus_images/8c9bbf8362a29847f6acfc986ce8567d49be208a08d766b7e2ae1abe39baf52a.png)

---

*Originally published on [scarlet](https://paragraph.com/@scarlet-2/zk-zkvm-zkevm)*
