PLONK化算术化

halo2采用的算术化来自于 PLONK,或者更准确地说,来自它的扩展UltraPLONK,支持自定义门和查找表。我们称之为PLONK化( PLONKish)。

PLONK化电路是用矩形矩阵定义的。矩阵的单元格 和传统矩阵叫法意义一致。

PLONK化电路依赖配置 (configuation):

  • 一个有限域,其中单元格的值(给定论述和论据)是的元素。

  • 矩阵中列的个数是固定的。列可能是fixedadvice或者instance。Fixed列在电路中是固定的;advice列是论据信息;instance列通常用作公开输入(技术上讲, 它们可以是证明者和验证者之间共享的任何元素)。

  • 一些列参与相等约束。

  • 多项式阶的范围。

  • 一系列多项式约束。这些多项式每一行 上的取值为零。多项式约束中的变量可以是给定列当前行中的单元格,也可以是给定列中与这行相关的行(比如模)。每个多项式的最高阶由多项式阶的范围限定。

  • 一系列的查找表论据,定义了查找表的输入和查找表相关的列。

PLONK化电路还定义:

  • 矩阵的行数为 必须对应于的乘法子群的大小;通常是2的幂次。

  • 一系列相等约束,指定两个给定单元格必须具有相等的值。

  • 固定列中每行的固定值。

根据电路,我们可以生成电路证明和验证操作所需要的证明密钥验证密钥

请注意,我们指定了列的顺序、多项式约束、查找表论据和相等约束,这些并不影响电路的含义。但这些使得证明和验证密钥的确定性的生成过程变得更加容易。

通常,配置将定义多项式约束,这些约束由定义在fixed列中的选择子关闭和开启。例如,一个约束 可以通过在第i行设置来关闭。在这种情况下,我们通常将多个选择子控制的一组约束,称一个门(gate)。通常标准门支持一些通用操作,比如域上的乘法和除法, 自定义门支持更专门的操作。