在建构 =nil 的占位符证明系统时;基金会,我们使用基于 Aztec 研究人员的Plookup 论文的查找参数。我们以 Plookup 技术为起点,然后针对编写具有复杂逻辑的大型 PLONK 电路进行了一些实际改进。
寻找参数允许证明者证明素数字段上的某些表(以下称为分配表)满足特定限制:从分配表(查找输入)计算的一些单元属于也从分配表(查找表)计算的值列表。
连接和分裂演算法
Plookup技术的核心是排序演算法。我们称之为连接和拆分,因为它包括两个步骤:
- join — 使用特殊的重新排序演算法将查找表列与输入列连接到单一大向量。
- split — 建构的向量再次分割成原始大小的部分。
Plookup 论文详细描述了单一查找表和单一输入列的情况。但这对于我们的用例来说还不够。我们需要大量高效打包的查找表和应用于任意行和列的查找约束,并且我们不想为每个(input, table)
对重复查找参数。
因此,我们修改了连接和分割演算法,使其能够连接两列以上。它允许我们使用多个查找约束,即使它们应用于相同的行并使用大型查找表,即使其大小大于整个分配表行数(透过将列而不是行附加到分配表)。分配表格行和列数量之间的平衡有助于找到最佳证明效能和验证成本的完美平衡。
选择器列
原始文章包含寻找位于相同或相邻行中的值元组的技术。它使用随机因子构造列的线性组合。将此方法与用于查找表和输入列的多项式表达式结合,我们实现了选择器列的完全支援。电路设计人员现在可以管理哪些行受到确切约束以及哪些行被保留用于查找表存储。
Plookup 论文也描述了多查找表支援的技术。他们建议将每个查找表与其唯一识别码相关联,并填入标记列以标记哪些行包含具有哪个标识符的查找表。输入的标记列有助于标记哪些约束应用于标记行。标记列应该是分别为查找表和输入列构造的随机线性组合的一部分。这种方法显然是有限制的。找出表格大小的总和应小于整个表的行数。
我们将查找表标识符的使用与大型查找表的选择器列构造和演算法结合。这些修改允许储存和使用查找表,而不考虑查找参数限制,而是根据最佳电路设计。它使我们的查找参数成为一个通用且灵活的工具。
我们的修改的详细说明可以在我们的HackMD页面上找到。欢迎分享您的评论!