zk、zkVM、zkEVM 及其未来
2022-07-22 15:27
水多多|zkSync
2022-07-22 15:27
订阅此专栏
收藏此文章
  • 零知识证明可以保证计算的完整性、正确性和隐私性,在区块链扩容和隐私方面有很多用例。
  • zk-SNARK 和 zk-STARK 各有优势,两者结合更有潜力。
  • zkVM 为应用赋能零知识证明,zkVM 可以按指令集分类为主流、EVM 或新建指令集。
  • EVM 兼容性包括 EVM 兼容性、等效性和规范级兼容性。
  • zkEVM 是一个兼容 EVM 且零知识证明友好的环境。它可以分为基于本机和基于编译器的解决方案。
  • 基于原生的 zkEVM 是以太坊和区块链的未来。
  • 一个通用的 zkVM 支持 Solidity 语言是 Web3 的未来。

0. 零知识证明

一个易于理解的零知识证明定义:

你在上小学。老师是验证者,而你,学生,是证明者。你如何证明你知道解二次方程的公式?需要数学考试。

老师会随机给你 10 道与二次方程相关的问题,如果你掌握了,就可以全部做完。在这个过程中,你不需要记住或写下确切的公式,但老师可以简单地验证你对二次方程的理解。

事实上,这就是Tartaglia 和 Cardano (是的,就是这个名字)在为x 3 + bx = c类型的三次方程的解的公式的发现者而争吵时所做的。他们俩都不想告诉对方他们的公式是什么,但是通过做随机问题集,很容易验证,而不用在过程中透露知识,他们有那个知识。

零知识证明有什么用?用处是整个过程节省了计算能力,压缩了区块链上的空间,同时也保护了隐私,符合区块链的去信任和密码学特性。

1. SNARK 和 STARK

区块链空间中的术语“zk”通常不是真正的零知识证明,而是通常是有效性证明。这些“误用”出现在本文的某些部分,以避免混淆相关术语。

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

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

在 meme 方面,STARK 也优于 SNARK(😊、星球大战、星际迷航)。

如果说 SNARK 是以太坊 2.0 的未来,那么 STARK 就是以太坊 3.0 的未来。总之,STARK 的优势

  • 较低的气体(可扩展)
  • 更大的批量大小(可扩展 * 2)
  • 更快的证明(可扩展 * 3)
  • 无可信设置(生成的参数只对当前应用有效,如有变化需要重新设置)
  • 后量子安全

但是 STARK 生成的证明要大得多。由于 WASM 之类的一些限制,可能需要在构建时进行额外操作(尽管此示例使用 SNARK)。个人认为尺寸可以通过多种方式进行优化,但是算法本身的时间复杂度很难进一步压缩。

这些零知识证明技术可以结合起来构建更强大的应用程序。例如,Polygon Hermez使用 SNARK 来验证 STARK 的正确性,从而降低证明最终结算时的 gas 费用。

2.zkVM

前面提到的Tornado.cashzk.money都是类似的零知识证明应用程序,只支持转账操作,不支持通用计算。以此类推,这些应用程序只有比特币的功能,远不如以太坊的图灵完备性和 DApp 生态系统(比特币上的智能合约做得不好)。

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

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

zkVM 的优点:

  • 易于使用:开发人员可以使用 zkVM 以可信的方式运行程序,而无需学习密码学或使用 zk 电路进行开发(并不意味着没有障碍)
  • 通用性:zkVM 可以为任何程序或计算生成证明。
  • 简单性:相对较少的约束可以描述整个 VM(无需重复生成整个 VM 的电路)。
  • 递归:自由递归功能。与一般性一样,VM 的验证可以由 VM 执行。这很有趣,例如您可以将 zkVM 放入 zkVM 中,类似于 StarkWare 所说的 L3 概念

zkVM 的缺点:

  • 计算架构的特殊性:并非所有零知识证明系统都可以用于 zkVM。
  • 性能问题:电路需要优化,可以针对特定的计算进行优化。

zkVM 主要分为三种类型,括号中是指令集:主流(WASM、RISC-V)、EVM(EVM 字节码)和 ZK-Optimized(针对零知识证明优化的新指令集,例如 Cairo 和 zkSync 的)。以下是基于 Miden 在阿姆斯特丹 ETH 上的演讲的类型比较:

零知识证明开发生态系统所做的大部分工作主要是允许开发人员使用 Circom 库(以及 snarkyjs)或其他新创建的语言(Leo 或 Cairo,它们有一些奇怪的限制)来进行 zk DApp 开发,但事实并非如此就像在以太坊上使用 Solidity 一样简单易学。

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

3. 虚拟机

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

几年来,各种区块链一直在尝试与 EVM 兼容以访问以太坊开发生态系统。对于这个概念,已经衍生出 EVM 兼容性、等效性和其他一些定义。

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

4.zkEVM

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

要做通用计算的 zkEVM,主要有两个难点需要解决:

a) 电路复杂性

不同的合约需要产生不同的电路,而这些电路是“复杂的”。

这依赖于各种优化,例如 Aleo(但它不是直接的 ZK……只是举个优化的例子)通过分布式集群并发计算证明,或者通过各种硬件优化来加速它。

b) 设计难度

zkEVM 不仅是对 EVM 的重构,也是使用零知识证明技术对以太坊整个状态转换的重构。

在设计 EVM 的时候,没想到后面会做 zkEVM,实现起来非常困难。结果是有两条路线。两者都在图中。

或者就 VM 架构而言,它看起来像这样(非常感谢 Scroll Tech 的原始摘要!)。Opcode 指的是 EVM Opcode。StarkWare 部分是使用 Warp 将 Solidity 转换为 Cairo 合约,或者直接在 Cairo 中编写合约,以获得良好的开发体验和一套更好的工具。

在开发者和用户层面,我觉得这些解决方案基本没有区别,但在基础设施方面,越靠近正确的 EVM,对 Geth 等基础设施的兼容性和无缝接入越好,但开发速度也越慢。

5. zkEVM 和 zkVM

zkEVM 的存在我认为是对以太坊生态系统进行翻新和修补并增加其繁荣的一种方式,而 zkVM 的存在不一定是对以太坊的增强,但也具有更大的潜力。

StarkNet 的 Cairo VM 可能不是我认为的完美 zkVM,但它比 EVM 或 zkEVM 可以做的更多,不仅仅是在 EIP 级别扩展功能。机器学习模型可以在 Cairo VM 上运行,现在甚至在 StarkNet 上构建了一个机器学习建模平台。

与 zkEVM 相比,zkVM 更容易构建(无需担心 EVM 技术债务)、更灵活(无需担心 EVM 更新)、更容易优化(电路和证明器的硬件和软件优化是比构建 zkEVM 更容易、更便宜)。

当然,zkVM 最小但致命的缺点之一是,如果 zkVM 不支持 EVM 兼容性(在 Solidity 语言级别),那么 zkVM 很难像 EVM 那样拥有最完整、最成熟的 Web3 开发生态系统。

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

6. zkVM 的未来

如果有一个通用的 zkVM 允许所有编程语言的智能合约,不仅是 Solidity,不仅仅是 Cairo,还有 Rust、C++、Go,以零知识证明运行?(恒星尝试过,但失败了。

正如@kelvinfichter所说:如果 zkMIPS 为什么要使用 zkEVM?正如@KyleSamani所说:EVM 是一个错误而不是一个特性。如果是 zkVM,为什么还要 zkEVM?

WinterfallDistaffMiden VM这样的 zkVM 对开发人员不太友好。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% 面向开发者,几乎任何语言的任何开发者都可以获得完美的零知识运行环境。

如果 Web3 和 Crypto 曾经统治过世界,我认为不会是 EVM 生态系统接管 100% 的所有开发人员,而是所有开发人员都会慢慢地转换为 Web3 和 Crypto 开发人员。这就是通用 zkVM 的美妙之处。

原生 zkEVM 是区块链的未来。

通用 zkVM 是 Web3 的未来。

相关链接

A Mathematical Duel in 16th-Century Renaissance Venice

https://twitter.com/_bfarmer/status/1520091937444925440

https://twitter.com/EliBenSasson/status/1514242653671546890

https://hackmd.io/V-7Aal05Tiy-ozmzTGBYPA?view=

https://twitter.com/_bfarmer/status/1511486435077017607

https://github.com/mir-protocol/plonky2/tree/main/starky

https://blog.polygon.technology/introducing-plonky2/

https://twitter.com/dlubarov/status/1520090852093091840

https://blog.polygon.technology/zkverse-deep-dive-into-polygon-hermez-2-0/

https://www.youtube.com/watch?v=81UAaiIgIYA

https://medium.com/starkware/fractal-scaling-from-l2-to-l3-7fe238ecfb4f

https://trapdoor-tech.github.io/zkstark-book/Cairo_example/frame.html

https://twitter.com/toghrulmaharram/status/1518270138876891138

https://twitter.com/gluk64/status/1518617582420611072

https://twitter.com/kelvinfichter/status/1522389737021001734

https://twitter.com/guiltygyoza/status/1458494941684850688

https://gizatech.xyz

https://www.reddit.com/r/Stellar/comments/q6ar3w/what_happened_to_zkvm_on_stellar/

https://twitter.com/kelvinfichter/status/1516509144068464644

https://twitter.com/KyleSamani/status/1511683267770163200

https://github.com/novifinancial/winterfell#Usage

https://github.com/GuildOfWeavers/distaff

https://github.com/maticnetwork/miden

https://docs.nervos.org/docs/basics/concepts/ckb-vm/

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

相关Wiki
水多多|zkSync
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开