Polygon zkEVM中的子约束系统

1. 引言

前序博客有:

  • Polygon zkEVM工具——PIL和CIRCOM
  • PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
  • PLONK + PLOOKUP
  • PLOOKUP
  • V神博客 Understanding PLONK

Polygon zkEVM中主要设计了3种子约束系统:

  • 1)Permutation check子约束系统:PIL中的关键字为is
    Polygon zkEVM中的子约束系统_第1张图片
    Polygon zkEVM中的子约束系统_第2张图片

  • 2)Plookup 子约束系统:PIL中的关键字为in
    Polygon zkEVM中的子约束系统_第3张图片
    Polygon zkEVM中的子约束系统_第4张图片

  • 3)Connection check(Copy constraint)子约束系统:PIL中的关键字为connect
    Polygon zkEVM中的子约束系统_第5张图片
    Polygon zkEVM中的子约束系统_第6张图片

2. Permutation check VS Connection check VS Plookup

  • Plonk的核心技术为:grand product check。
  • Plookup的核心技术为:multiset-equality check,在Plookup中引入了查找表。

所谓grand product check,是指:

  • public info:commitments to polynomials f , g f,g f,g over a finite field F \mathbb{F} F,及 a subset H = { x 1 , ⋯   , x n } ⊂ F H=\{x_1,\cdots,x_n\}\subset \mathbb{F} H={x1,,xn}F
  • private info:多项式 f , g f,g f,g
  • 待证明relation: ∏ i ∈ [ n ] a i = ∏ i ∈ [ n ] b i \prod_{i\in[n]}a_i=\prod_{i\in[n]}b_i i[n]ai=i[n]bi,其中 a i = f ( x i ) , b i = g ( x i ) a_i=f(x_i),b_i=g(x_i) ai=f(xi),bi=g(xi)

在PLONK论文中指出,当 H H H为a multiplicative subgroup时,可高效实现相应证明。

此文讨论的长为 n n n的vector a ⃗ \vec{a} a ,在协议的实际实现中,均为Prover会对多项式 f f f进行commit,其中 f ( x i ) = a i f(x_i)=a_i f(xi)=ai

PLOOKUP的核心技术为:

  • multiset-equality check

借助少量的randomness,可将grand product check 转换为更强大的primitive——the multiset equality check:

  • 已知两个vector a ⃗ = ( a 1 , ⋯   , a n ) , b ⃗ = ( b 1 , ⋯   , b n ) \vec{a}=(a_1,\cdots,a_n),\vec{b}=(b_1,\cdots,b_n) a =(a1,,an),b =(b1,,bn),check两者是否具有相同的元素,计算相应的重复值,顺序可以不对应。

( 1 , 1 , 2 , 3 ) (1,1,2,3) (1,1,2,3) ( 2 , 1 , 1 , 3 ) (2,1,1,3) (2,1,1,3) 是multiset-equal的,但是与 ( 1 , 2 , 3 , 3 ) (1,2,3,3) (1,2,3,3) ( 1 , 1 , 2 , 4 ) (1,1,2,4) (1,1,2,4)都不是 multiset-equal的。

电路证明中常用到permutation check,用于证明电路中门之间wires赋值的一致性(establishes the consistency of the assignment of wires to gates)。
Permutation是指:

  • public info:permutation σ : [ n ] → [ n ] \sigma:[n]\rightarrow [n] σ:[n][n]
  • private info: a ⃗ , b ⃗ \vec{a},\vec{b} a ,b
  • 待证明relation: b ⃗ = σ ( a ⃗ ) \vec{b}=\sigma(\vec{a}) b =σ(a ),即对于每一个 i i i,有 b i = a σ ( i ) b_i=a_{\sigma(i)} bi=aσ(i)

2.1 Plookup子约束系统

根据Plookup论文,相应的Plookup子约束系统证明系统为:
Polygon zkEVM中的子约束系统_第7张图片

2.2 Permutation check约束子系统

根据Plonk论文可知,Permutation check约束子系统证明系统为:
Polygon zkEVM中的子约束系统_第8张图片

2.3 Connection check(Copy constraint)约束子系统

Permutation check约束子系统 为 Connection check(Copy constraint)约束子系统的特例情况,Connection check(Copy constraint)约束子系统 更具有通用性。

参考资料

[1] How PLONK Works: Part 1
[2] How PLONK Works: Part 2

附录:Polygon Hermez 2.0 zkEVM系列博客

  • ZK-Rollups工作原理
  • Polygon zkEVM——Hermez 2.0简介
  • Polygon zkEVM网络节点
  • Polygon zkEVM 基本概念
  • Polygon zkEVM Prover
  • Polygon zkEVM工具——PIL和CIRCOM
  • Polygon zkEVM节点代码解析
  • Polygon zkEVM的pil-stark Fibonacci状态机初体验
  • Polygon zkEVM的pil-stark Fibonacci状态机代码解析
  • Polygon zkEVM PIL编译器——pilcom 代码解析
  • Polygon zkEVM Arithmetic状态机
  • Polygon zkEVM中的常量多项式
  • Polygon zkEVM Binary状态机
  • Polygon zkEVM Memory状态机
  • Polygon zkEVM Memory Align状态机
  • Polygon zkEVM zkASM编译器——zkasmcom
  • Polygon zkEVM哈希状态机——Keccak-256和Poseidon
  • Polygon zkEVM zkASM语法
  • Polygon zkEVM可验证计算简单状态机示例
  • Polygon zkEVM zkASM 与 以太坊虚拟机opcode 对应集合
  • Polygon zkEVM zkROM代码解析(1)
  • Polygon zkEVM zkASM中的函数集合
  • Polygon zkEVM zkROM代码解析(2)
  • Polygon zkEVM zkROM代码解析(3)
  • Polygon zkEVM公式梳理
  • Polygon zkEVM中的Merkle tree
  • Polygon zkEVM中Goldilocks域元素circom约束
  • Polygon zkEVM Merkle tree的circom约束
  • Polygon zkEVM FFT和多项式evaluate计算的circom约束
  • Polygon zkEVM R1CS与Plonk电路转换

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