1. 引言
zkLLVM:nil Foundation开发的电路编译器,不是zkVM。不过,“zkLLVM+proof market”可构建zkVM。
开源代码见:
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