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一起使用:

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中的ConstantSelector列。
    • 但不会使用或设置Blueprint private assignment table中的数据。
  • X::generate_assignments:evaluate assignment values,并将其给特定的Blueprint assignment table
    • 仅有generate_assignment函数可管理修改Blueprint private assignment table中数据。
    • 也可修改Blueprint public assignment table中数据。

具体为:

FunctionRequired InputCan modify
X::allocate_rowsBlueprintBlueprint
X::generate_circuitBlueprint, Component params, Allocated data (auxiliary data for the component re-use), component start rowBlueprint, Allocated data
X::generate_assignmentsBlueprint assignment table, Component params, component start rowBlueprint 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 blueprint模块代码解析的主要内容,如果未能解决你的问题,请参考以下文章

nil Foundation的Placeholder证明系统

nil Foundation的Mina->以太坊 bridge原型已完成

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

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

nil Foundation的Mina-Ethereum State Proof Verification Applications

nil Foundation的in-EVM Full Mina State Verification