zkLLVM:nil Foundation开发的电路编译器

1. 引言

zkLLVM:nil Foundation开发的电路编译器,不是zkVM。不过,“zkLLVM+proof market”可构建zkVM。

开源代码见:

  • zkLLVM Circuit Compiler(C++)

zkLLVM可:

  • 将 高级编程语言编写的电路 编译为 LLVM IR(Intermediate Representation) bytecode 表示;
    • 当前支持C/C++(Clang15),即将支持Rust语言编写电路。
  • 创建circuit execution trace(又名assignment table)并 生成数据 供Prover生成proof使用;
  • zkLLVM的输出 作为 任意ZKP系统的输入,所生成的proof是in-EVM verifiable的。
    • 当前支持Placeholder证明系统,未来将支持其它证明系统。

详细示例可参看examples目录下各文件:

  • *.inp:为电路的输入
  • *.cpp:为电路的具体实现

2. zkLLVM项目背景

所谓数据可用协议,是指需要读取某些协议的数据(如以太坊)。传统的解决方案为借助Infura,但这需要信任Infura,

nil Foundation想要借助其DBMS,为以太坊和L2构建trustless数据可用协议:

  • 为确保trustlessness,需要prove DBMS queries。
  • 为生成queries proofs,需要a proof market。
  • 为定义query circuits,需要主流语言(C++/Rust/SQL等)的provable compiler(不是zkVM,仅是高效编译器)。——为此,构建了zkLLVM。

3. 总体代码架构

nil Foundation的开源代码主要采用C++实现,总体架构为:

  • 1)crypto3-multiprecision库:比普通C++库,所支持的整数、有理数、浮点数、复数、区间数等数据类型的范围和精度都要高。对big number的各种数学运算,以及Boost.Math中的函数运算。
    Multiprecision库可供选择的后端有:
    • GMP
    • MPFR
    • MPIR
    • TomMath
    • Boost-licensed等组合
  • 2)crypto3-algebraic库:代数构造模块。包含了:
    • 有限域
    • 曲线
    • Pairing
    • Constexpr BLAS
  • 3)crypto3-math库:为crypto3-algebraic库的扩展,提供了:
    • Fast Fourier Transforms(FFT)evaluation算法
    • 多项式运算(Polynomial Arithmetics)
  • 4)crypto3-zk库:为零知识密码学工具。当前仅支持SNARK系列的方案,未来将支持STARKs、IOP-based SNARKs、Bulletproofs等。
  • 5)zkllvm-blueprint库:Blueprint库定义了Circuit components,供zkLLVM circuit compiler使用。
    支持与crypto3-zk一起使用:
    • blueprint模块负责生成constraint system的input data;
    • crypto3-zk模块将blueprint的输出 作为 输入,用于生成证明。
  • 6)crypto3-block库:为block ciphers工具。
  • 7)crypto3-stream库:为stream ciphers工具。
  • 8)crypto3-codec库:为Encoding/Decoding编解码工具。
  • 9)crypto3-hash库:为哈希运算。当前已实现了blake2b、keccak、md4/md5、pedersen、poseidon等哈希算法。
  • 10)crypto3-containers库:主要实现了merkle tree、accumulation vector、sparse vector结构。
  • 11)crypto3-kdf库:实现了key derivation密钥派生函数。
  • 12)crypto3-mac库:实现了Message Authentication Codes(消息认证码)。
  • 13)marshalling库:对数据类型进行转换。
  • 14)crypto3-modes库:为cipher modes。包括block cipher和stream cipher等。
  • 15)crypto3-pbkdf库:实现了基于密码的秘钥派生函数(password-based key derivation functions)。
  • 16)crypto3-passhash库:实现了password hash。
  • 17)crypto3-pkpad库:实现了Public Key Padding,为公钥方案的填充模块。
  • 18)crypto3-random库:为Boost.Random的扩展。
  • 19)crypto3-pubkey库:实现了Public Key Cryptography Schemes,为pubkey signing API。
  • 20)crypto3-pkmodes库:借助crypto3-pubkey库 实现了Public Key Cryptography Schemes Modes——包括门限签名、聚合签名等。
  • 21)crypto3-vdf库:实现了VDF(Verifiable Delay Functions)。详细见Dan Boneh等人2018年论文《A Survey of Two Verifiable Delay Functions》。

附录:nil Foundation系列博客

[1] nil Foundation的基于Solana light client实现的zk-bridge方案
[2] nil Foundation的Solana-Ethereum Bridge Based on Light-Client State Proof Verification
[3] nil Foundation的Mina->以太坊 bridge原型已完成
[4] nil Foundation的Placeholder证明系统
[5] nil Foundation的Mina-Ethereum State Proof Verification Applications
[6] nil Foundation的in-EVM Full Mina State Verification

你可能感兴趣的:(零知识证明,零知识证明)