电路承诺

对电路赋值进行承诺

在生成证明之前,证明者已经有了一张能够满足约束条件的单元格赋值表。赋值表有 行;其列被划分为三类: advice, instance, fixed 。我们定义 表示第 行的第 个fixed列,不失一般性,定义 为第 行的第 个advice或instance列。

我们区分开fixed 列的原因是它们是由验证者提供的,而advice 列和instance 列是由证明者提供的。实际上,证明者和验证者都需要计算instance 列和fixed 列的承诺,只有对advice 列的承诺在证明中。

为对表中的各个赋值进行承诺,我们为每列构造一个次数为 的拉格朗日多项式,其取值域大小为 (令 为其 次单位根)。

  • ,通过插值得到 多项式
  • ,通过插值得到 多项式

然后对每列的多项式创建一个盲化承诺(blinding commitment) :

其中 在生成密钥的时候被创建,使用 作为盲因子。 由证明者计算并发送给验证者 。

对查找表置换进行承诺

验证者随机选择一个 ,用于确保同一个查找表内不同的列线性无关。接着证明者对每个查找表的置换进行承诺

  • 给定一个查找表,其输入列多项式为 ,其真值表列的多项式为 , 证明者构造两个压缩后的多项式

  • 之后证明者对 依照 查找表证明 的规则进行排列,得到 .

证明者为所有的查找表创建盲化承诺:

并发送给验证者 。

当验证者接收到 ,和 后,随机采样 作为挑战,用于后续的置换和查找表证明验证。(随机采样是可以重复利用的,因为证明是相互独立的)。

对相等约束置换进行承诺

为 相等约束所涉及的列数。

为能容纳的 最大列数 不能超过 PLONK 配置中多项式的次数上限。

置换证明 章节中定义的可以“使用”的行数。

证明者构造一个长度为 的向量 ,对于每个列集合,有, ,对于每一行有

证明者计算 的”滚动乘积“, 从 开始,并且多项式向量 每个都有拉格朗日基表示,基于滚动乘积的长度为 的切片,如 置换证明 章节中所描述的。

最后 证明者为每个 多项式创建盲化承诺:

并发送给 验证者 。

对查找表置换进行承诺

除了需要对单独的相等约束进行承诺外,对每一个查找表, 证明者也需要对置换进行承诺。

  • 证明者构造一个向量 :

  • 证明者构造多项式 ,其拉格朗日基表示为 多项式的“滚动乘积”,从 开始。

用于在组合 的同时保持这两者无关。 是验证者在证明者创建多项式 ,和 之后采样的(因此承诺了在 查找表列中用到的单元格的值,以及每个 查找表的 )。

如之前一样, 证明者对每个 多项式都创建一个盲化承诺并发送给 验证者 :