Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

译自 halo2 book:concepts/chips.md

芯片

上一节给出了对电路相当底层的描述。在实现电路时,我们通常会使用一个更高层的 API,它旨在追求可审计性(auditability)、效率(efficiency)、模块化(modularity)和表达力(expressiveness)等理想特性。

这个 API 中使用的一些术语和概念取自与集成电路设计和布局的类比。正如对集成电路而言,通过组合那些为特定功能提供高效预制实现的芯片(chips),上述理想特性更容易获得。

例如,我们可能会有实现特定密码学原语的芯片,比如哈希函数或密码(cipher),或者诸如标量乘法(scalar multiplication)或配对(pairings)之类的算法。

在 PLONKish 电路中,仅凭做域乘法和域加法的标准门(standard gates)就可以搭建出任意的逻辑。然而,使用自定义门(custom gates)可以获得非常显著的效率提升。

利用我们的 API,我们定义那些“知道”如何使用特定自定义门集合的芯片。这创建了一个抽象层,将高层电路的实现与直接使用自定义门的复杂性隔离开来。

即便我们有时需要“身兼两职”,既实现一个高层电路,又实现它所使用的芯片,其用意在于:这种分离会带来更易于理解、审计、维护/复用的代码。部分原因在于,某些潜在的实现错误会由于这种构造方式而被排除掉。

PLONKish 电路中的门通过相对引用(relative references)来指代单元格,即指代某给定列、相对于门的选择子被设置的那一行处于某给定偏移的行中的单元格。当偏移非零时,我们称之为偏移引用(offset reference)(即偏移引用是相对引用的一个子集)。

相对引用与相等约束中使用的***绝对引用(absolute references)***形成对比,绝对引用可以指向任意单元格。

引入偏移引用的动机是减少配置中所需列的数量,从而减小证明大小。如果我们没有偏移引用,那么我们就需要一列来保存自定义门所引用的每一个值,并且需要使用相等约束把电路中其他单元格的值复制到该列中。有了偏移引用,我们不仅需要更少的列;而且也不需要对所有这些列都支持相等约束,这提升了效率。

在 R1CS(另一种算术化,某些读者可能更熟悉它,不熟悉也没关系)中,一个电路由一片“门之海(sea of gates)”构成,它们没有语义上有意义的顺序。而由于偏移引用,PLONKish 电路中行的顺序有意义的。我们将做一些简化假设并定义一些抽象,以驯服由此产生的复杂性:目标是,在小工具层级(gadget level)——即我们进行大部分电路构造的地方——我们将不必显式地处理相对引用或门的布局。

我们会把一个电路划分为若干区域(regions),每个区域包含一个互不相交的单元格子集,并且相对引用永远只指向某个区域内部。芯片实现的部分职责就是确保进行偏移引用的门被布局在某个区域内的正确位置上。

给定各区域及其***形状(shapes)的集合,我们将使用一个独立的布局规划器(floor planner)***来决定每个区域被放置在何处(即放在哪一行作为起始行)。有一个默认的布局规划器,它实现了一个非常通用的算法,但如果需要,你也可以编写自己的布局规划器。

布局规划一般会在矩阵中留下空隙,因为某给定行中的门并没有用到所有可用的列。这些空隙会——尽可能地——由那些不需要偏移引用的门来填补,这些门可以被放置在任意行上。

芯片也可以定义查找表(lookup tables)。如果对同一个查找论证定义了不止一个表,我们可以使用一个***标签列(tag column)***来指定每一行使用哪个表。也可以在若干个表的并集中执行查找(受多项式次数上界的限制)。

组合芯片

为了组合来自若干芯片的功能,我们把它们组合成一棵树。顶层芯片定义一组固定列、建议列和实例列,然后指定这些列应如何在更底层的芯片之间分配。

在最简单的情形下,每个更底层的芯片将使用与其他芯片互不相交的列。然而,也允许在芯片之间共享某一列。尤其重要的是要优化建议列的数量,因为它会影响证明大小。

其结果(可能在优化之后)是一个 PLONKish 配置。我们的电路实现将以一个芯片作为参数,并且可以通过顶层芯片使用所支持的更底层芯片的任何特性。

我们的期望是,不那么专业的用户通常能够找到一个已有的、支持其所需操作的芯片,或者只需对已有芯片做些微小修改。专家用户则将拥有完全的控制权,去做那种 ECC 公司以之闻名电路优化 🙂。