1. 引言

  • zk(zero-knowledge)proof:可保证计算的完整性、正确性和隐私性,在区块链扩容和隐私领域大有可为。
  • zk-SNARK和zk-STARK各具优势,二者结合潜力无穷。
  • zkVM可为应用增加零知识证明,zkVM可以按mainstrem、EVM或新构建的指令集进行分类。
  • EVM兼容性包括EVM兼容性、等价性和规范级兼容性。
  • zkEVM是一个EVM兼容且零知识证明友好的环境。它可以分为基于Native的解决方案和基于编译器的解决方案。
  • Native zkEVM为以太坊和区块链的未来。
  • 支持Solidity语言的zkVM为Web3的未来。

2. 零知识证明

一个易于理解的零知识证明定义:
你在上小学。老师是Verifier,而你(学生),是Prover。你如何证明你知道解二次方程的公式?那需要数学考试。
老师会随机给你10道与二次方程有关的问题,如果你已经掌握了,你可以全部作答。在这个过程中,你不会记住或写下精确的公式,但老师可以简单地验证你对二次方程的理解。

事实上,这就是Tartaglia and Cardano 两人争论谁是形如 x3+ b x = cx^3+bx=cx3+bx=c三阶方程解决方案的方面人。两人都不想告诉对方其各自的共识,但是通过随机问题集,在不泄露其各自knowledge的情况下很容易进行验证。

零知识证明的用途是什么?其用途是,整个过程节省了算力,压缩了区块链上的空间,同时也保留了隐私,符合区块链的不可信任和加密性质。

3. SNARK VS STARK

区块链领域的“zk”通常并不是真正的零知识证明,但是通常是有效性证明(validity proof)。

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

当前的技术方案主要分为2大类:

  • SNARK:全称为Succinct Non-Interactive Argument of Knowledge。
  • STARK:全称为Scalable Transparent Argument of Knowledge。

STARK中的“S”代表的是Scalable,意味着待证明的statement具有repeated structure。
而SNARK支持任意电路,可对电路进行预处理来实现succinct proof。
SNARK的技术实践更占主导地位,STARK在生产中主要被StarkWare大规模采用。以下是它们之间的比较:

就meme而言,STARK要优于SNARK(STARK有:权力的游戏、漫威宇宙、星球大战和星际迷航等)。

若说以太坊2.0的未来是SNARK,那么以太坊3.0的未来将是STARK。总的来说,STARK的优势主要有:

  • 更低的gas费(scalable)
  • 更大的batch size(scalable * 2)
  • 更快的证明速度(scalable * 3)
  • 无需trusted setup(所生成的参数仅对当前应用有效,若应用改变需要重新设置)
  • 抗量子安全性

但是,STARK生成的proof要更大一些。由于类似WASM的一些限制,在构建时可能需要额外的操作(但本例使用SNARK)。作为Plonky2的一部分,Mir之前在Starky中进行了一次AIR-based STARK 实践(Plonky2和Starky之间的关系很复杂……)。不过个人认为,可以通过各种方法优化STARK proof大尺寸的问题,但算法本身的时间复杂度很难进一步压缩。

这些零知识证明技术可结合使用来构建更强大的应用。如,Polygon Hermez使用SNARK来验证STARK的正确性,从而当该proof finally settled时可减少gas费。

总之,SNARK和STARK两者都是很赞的零知识证明技术,各有优势,结合潜力更大。

4. zkVM

之前提到的Tornado.cash 和 zk.money均为仅支持transfer操作的零知识证明应用,并不支持通用计算。类似地,这些应用程序只有比特币的功能,远不及以太坊(Ethereum)的图灵完整性和DApp生态系统(比特币上的智能合约并不适用)。

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

Miden在ETH Amsterdam的演讲 以一张图很好的解释了zkVM究竟是什么:

zkVM的优势有:

  • 易于使用:开发者可使用zkVM以trusted manner方式来运行程序,而不需学习密码学或开发zk circuits(但并不意味着没有门槛)。
  • 普适性:zkVM可为任意程序或计算生成proof。
  • 简单性:以相对少的约束数可描述整个VM(不需要重复生成整个VM circuit)。
  • 递归性:自由递归特性。与普适性一起,可由VM来验证VM。这很有趣,可将一个zkVM放入某zkVM中,类似StarkWare的L3概念。

zkVM的劣势有:

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

主要有3种类型的zkVM,括号内为其相应的指令集:

  • mainstream(WASM, RISC-V)
  • EVM(EVM bytecode)
  • ZK-Optimized(专为零知识证明优化的新型指令集,如Cairo的指令集和zkSync的指令集)

以下为这些zkVM类型的对比,源自 Miden在ETH Amsterdam的演讲 :

大多数的零知识证明开发生态都支持开发者使用Cirom库(和snarkyjs)或其它新创建的语言(Leo或Cairom,有一些奇怪的限制)来进行zk DApp开发,但是,这并不如在以太坊上使用Solidity来得直观易学。

此外,还有很多项目,如zkSync/Scroll,或Polygon旗下的多个项目,都试图在开发自己的zkEVM或zkVM。

5. EVM

EVM全称为Ethereum virtual machine,可认为是运行智能合约的执行环节。
多年来,不同的区块链都试图是EVM兼容的,以可访问以太坊的开发生态,为此,派生出了EVM兼容性、等价性、以及一些其它定义:

  • EVM Compatibility(EVM兼容性):Solidity等语言层面的兼容性。
  • EVM Equivalence(EVM等价性):EVM bytecode层面的兼容性。
  • EVM Specification-level Compatibility(EVM特定层面的兼容性):通常是指真正的zkEVM。大多数情况下,其后向兼容optimized supersets,可提供账号抽象(即每个账号是一个智能合约)以及其它Layer1 EVM未提供的特性。

6. zkEVM

zkEVM定义为:
EVM兼容的且零知识证明优化的虚拟机,可保证程序、操作、输入和输出的正确性。

为实现通用计算的zkEVM,主要有2大困难需解决:

  • a)电路复杂性:不同的合约需要生成不同的电路,这些电路是复杂的。这需要依赖不同的优化,如Aleo(但它并不是直接ZK,在此仅用作优化举例)通过分布式集群来并行计算证明,或通过不同的硬件优化来加速。
  • b)设计复杂性:zkEVM不仅是对EVM的重构,更是对采用零知识证明技术对整个以太坊状态变更的重构(为EVM的超集)。
    EVM设计时,并未考虑到后面要实现zkEVM,这就使得其很难实现。为此,导致了现在有2条路径,具体如下图所示:

    从VM架构的角度来看,有:

    其中:
    Opcode是指EVM Opcode。StarkWare中使用Warp来将Solidity合约转换为Cairo合约,或者直接使用Cairo来编写合约。
    上图中,从左到右,与Geth等的兼容性越强,但开发速度也越慢。

7. zkEVM and zkVM

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

StarkNet的Cairo VM可能不是完美的zkVM,但它不仅仅是对EIP层级的功能扩展,可想像性要多于EVM或zkEVM:

  • Cario VM内可运行机器学习。
  • 基于StarkNet正在搭建的机器学习平台

相比于zkEVM,zkVM:

  • 更易于构建(不需要考虑EVM的技术旧账)
  • 更灵活(无需担心EVM升级)
  • 更易于优化(相比于zkEVM,对电路和Prover的硬件、软件优化实现起来更容易且更便宜)

不过zkVM的一个小而致命的缺点在于,若zkVM不支持(Solidity语言层级的)EVM兼容性,则其很难像EVM那样拥有完善而成熟的Web3开发生态。

zkVM可能是更大的趋势,允许EVM的垂直优化成为EVM生态系统的水平扩展,超越了EVM的限制。

8. zkVM的未来

如果有一个通用的zkVM,它支持所有编程语言来编写智能合约,不仅仅是Solidity,不仅仅是Cairo,而是Rust,C++,Go,在零知识证明的情况下运行,会怎么样?(Stellar尝试过,但是失败了)

有zkVM了,为何还需要zkEVM?
现有的zkVM,如:

  • Winterfall(持续更新中)
  • Distaff(很久未更新了)
  • Miden VM(有分支在持续更新中)

Nervos具有RISC-V VM,但其并未使用零知识证明技术。

优化的解决方案为:构建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的优点。

Native zkEVM为区块链的未来。
通用zkVM为Web3的未来。

参考资料

[1] zk, zkVM, zkEVM and their Future
[2] Zero-Knowledge Proofs: STARKs vs SNARKs