Custom Gate 的设计理念及应用
2022-08-0518:56
Sin7y
2022-08-05 18:56
Sin7y
2022-08-05 18:56
收藏文章
订阅专栏



最近一直在研究 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

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code