nil Foundation blueprint模块代码解析
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nil Foundation blueprint模块代码解析相关的知识,希望对你有一定的参考价值。
1. 引言
zkllvm-blueprint库的核心思想还是借鉴了https://github.com/scipr-lab/libsnark:
- crypto3-zk库:为零知识密码学工具。当前仅支持SNARK系列的方案,未来将支持STARKs、IOP-based SNARKs、Bulletproofs等。
- zkllvm-blueprint库:Blueprint库定义了Circuit components,供zkLLVM circuit compiler使用。
支持与crypto3-zk一起使用:- blueprint模块负责生成constraint system的input data;
- crypto3-zk模块将blueprint的输出 作为 输入,用于生成证明。
circuit
由:
Blueprint
实例:对应电路本身、gates、constraints以及其它fixed expressions。Blueprint assignment table
实例:包含了zk-SNARK系统所需的public和private assignments。
包含了:Blueprint public assignment table
Blueprint private assignment table
组成。每个实例可包含一个或多个Component
。
主要示例见:
1.1 PLONK Component接口
Component
X
为state-less类型,包含了以下静态函数接口:
X::allocate_rows
:分配一定行数给指定的Arithmetization table
。所需的行数由特定component的constexpr决定。X::generate_circuit
:生成gate expressions、copy constraints、lookup constraints,并将其给特定的Blueprint
。- 会修改
Blueprint public assignment table
中的Constant
或Selector
列。 - 但不会使用或设置
Blueprint private assignment table
中的数据。
- 会修改
X::generate_assignments
:evaluate assignment values,并将其给特定的Blueprint assignment table
。- 仅有
generate_assignment
函数可管理修改Blueprint private assignment table
中数据。 - 也可修改
Blueprint public assignment table
中数据。
- 仅有
具体为:
Function | Required Input | Can modify |
---|---|---|
X::allocate_rows | Blueprint | Blueprint |
X::generate_circuit | Blueprint , Component params , Allocated data (auxiliary data for the component re-use) , component start row | Blueprint , Allocated data |
X::generate_assignments | Blueprint assignment table , Component params , component start row | Blueprint assignment table |
添加a component的流程为:
- 1)调用
allocate_rows
来获取component
的start row。若该component
为其它component
内的一部分,则没必要调用该行数,应所allocated rows由主component
决定。 - 2)调用
Blueprint assignment table::allocate_public_input
来给Blueprint assignment table
分配public input。 - 3)调用
generate_circuit
来设置Blueprint
的所有gates和constraints。在generate_circuit
函数运行过程中,会修改Allocated data
。 - 4)调用
generate_assignments
来设置Blue assignment table
中的所有assignments。
2. Vitalik R1CS示例
详细可参看 Vitalik 博客Quadratic Arithmetic Programs: from Zero to Hero
3. Inner product示例
4. SHA-256示例
附录 nil Foundation系列博客
- nil Foundation的Solana-Ethereum Bridge Based on Light-Client State Proof Verification
- nil Foundation的基于Solana light client实现的zk-bridge方案
- nil Foundation的Mina->以太坊 bridge原型已完成
- nil Foundation的Mina-Ethereum State Proof Verification Applications
- nil Foundation的in-EVM Full Mina State Verification
- nil Foundation的Placeholder证明系统(1)
- zkLLVM:nil Foundation开发的电路编译器
以上是关于nil Foundation blueprint模块代码解析的主要内容,如果未能解决你的问题,请参考以下文章
nil Foundation的Placeholder证明系统
nil Foundation的Mina->以太坊 bridge原型已完成
nil Foundation的Mina-Ethereum State Proof Verification Applications