最近一直在研究 ZKEVM 的设计思想及方案设想,一直没有绕开 custom gate 的概念,因此花了些时间,研究了它的概念。读完本篇文章,您将会了解:
1. 为什么使用 custom gate?
2. 什么是 custom gate?
为什么?
基于以太坊的 Layer2 扩容一直是一个热门的话题。目前,接受度最高的一种方案就是 rollup 方案,即链下计算,链上验证;简单来说,就是链下完成状态的转化,并且 prover 需要为转换的有效性生成一个 proof,如下图所示:

对于一个特定的合约,对应一个特定的状态转换函数 (STF),这个函数需要执行很多的计算,包括但不限于世界状态的更改,交易的签名校验等等。而以上所有的计算过程,都要转换成电路,一个由简单的 add-gate 和 mul-gate 组成的电路,prover 将根据这个电路,生成 proof 并发送给 verifier 验证。电路的表示形式如下:

和上面提到的一样,这个电路是固定的,它只代表着一个计算过程,因此不能用于其他计算的电路表示。也就是说,如果 prover 想证明其他的计算语句,则需要重新设计电路,重新部署 verify 合约。显然,这不是我们想要的,我们希望用户可以任意定义他们的合约,而不用重新部署新的验证合约,这就是兼容 EVM 的 ZKRollup 的设想。虽然实现它具有一定的挑战性,但这是很多人正在做的事情(MatterLabs 做的很好,我们一直在向他学习,值得尊敬)。
那如何做到 generic 呢?那要先从了解 TinyRam 的原理开始,文中不做过多的介绍,只需要知道它是一个可以验证计算正确性的一个架构即可。它有一个缺点,就是如果计算的复杂度太高,那对应的 TinyRam 的计算复杂度就越高,因此,仅仅用 TinyRam 来证明 STF 函数的正确性,工程上是难以接受的。下表中,展示了 TinyRam 的复杂度比较:

因此,单纯的依靠 TinyRam 来实现 generic 计算是行不通的。需要一种办法,来减少计算的复杂度,它就是custom gate;我们知道,在一笔交易的消耗中,合约逻辑的计算部分占比很少,而 signature、hash 等占了很大一部分比重,因此,如果我们把这些操作独立出来,作为一个操作单元 (OP),类似于 ADD/MUL/SUB 等,那整个计算复杂度就会大大的降低。
同样的,即使在不是 generic 的场景下,就在目前固定的场景中,在 add-gate、mul-gate 之外,设计一个custom gate,同样会减少电路的规模,这就是为什么研究custome gate的原因。
什么是 custom gate?
以 Plonk 算法为例,它的电路由加法门和乘法门组成,如下图所示:

由于 Gates constants 可以为 0,因此可以把以上两个门,融合成一个门,根据 Gates constanst 的取值,决定某个约束对应的是加法门还是乘法门,如下图所示:

当 qM = 0、qL = 1、qR = 1、qO = 1,对应加法门,当 qM = 1、qL = 0、qR = 0、qO = 1 时,对应乘法门。
试想一下,如果 gate 的 input wires 不是 2 个呢?如果是 3 个,4 个或者更多,那么对应的 gate 就有可能实现简单的加法,乘法之外的功能。AZTEC 团队目前已经实现了几个小的电路逻辑单元,如下图所示:

举个例子,如果电路想更高效的计算 MiMc 函数,在新增 x3custom gate 之后,电路的约束变成:
qM·WL· WR + qL·WL + qR·WR + qO·WO + qL3WL3 + qC = 0
当 qM = 0、qL = 0、qR = 0、qL3 = 1、qo = 1 时,约束对应“MiMc”gate;可以想象的是,如果“Xor”gate,那么 sha256 的电路也将会变得更小。
Custom gate 的出现,使得大幅降低电路大小成为可能 (Gate 的数量 ),也使得电路的设计变得更加灵活。在实际的应用中,有许多操作都可以单独的设计成 custom gate,比如椭圆曲线的 point add、scalar mul 等,我们正在这么做。
另外,除了 Custom gate 外,lookup table 同样可以减少电路规模,两者配合使用,将取得令人兴奋的效果,后面我们将分享,如何在 zkp 中使用 lookup table。(通常,我们将使用了 custome gate 的 Plonk 算法称为 turbo Plonk;在此基础上又使用 lookup 的 Plonk 算法称为 ultra Plonk)
关于我们
Sin7y 成立于 2021 年,由顶尖的区块链开发者组成。我们既是项目孵化器也是区块链技术研究团队,探索 EVM、Layer2、跨链、隐私计算、自主支付解决方案等最重要和最前沿的技术。

微信公众号:Sin7y
GitHub: Sin7y
Twitter: @Sin7y_Labs
Medium: Sin7y
Mirror: Sin7y
HackMD: Sin7y
HackerNoon: Sin7y
Email: contact@sin7y.org
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
