ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明 - 冷萃财经

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

我们研读了 ZKSync 中 better_cs 如何⽣成 single proof、aggregation proof 的电路逻辑等实现。在这篇⽂章中,我们继续研读 ZKSync 的聚合证明,我们重点关注better_better_cs 如何⽣成聚合证明。

还是⽤上⼀篇的这张代码调⽤图,我们这篇着重讲 create_proof。

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

Aggregation_proof 的⽣成

create_proof 这个函数在 bellman_ce/src/plonk/better_better_cs/proof/mod.rs 中,将近 2000 ⾏代码。

⼤体上,分为以下⼏个步骤:

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

5.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

6.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

7.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

8.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

9.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

10.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

11.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

12.

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

我们在之前的⽂章中,已经讲解过plonkup的原理了,简单来说,就是预计算有效的input/output组成 lookup table,prover需要证明witness在这个table⾥,详细内容请参⻅。ZKSync 对 plonkup 的实现,并不是将 custom gate 和 plonkup 分开的,⽽是结合在⼀起来优化电路设计的。 我们下⾯看看,MainGate trait 中的接⼝,是如何和 plonkup 结合的。

Lookup 的使⽤

在上⼀节的 create_proof 函数中,线性化⽤到了 gate 的 contribute_into_linearization_for_public_inputs 函数,我们以它为例,来看看 lookup 的使⽤。这个代码在 bellman_ce/src/plonk/better_better_cs/cs.rs 中。

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

sort_queries_for_linearizationSortedGateQueriesmod.rsgateSortedGateQueries

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

函数会对传⼊的 gate 数组遍历,根据 gate 返回的多项式数组,将其按照 VariablesPolynomial,WitnessPolynomial, GateSetupPolynomial 的不同类型,将多项式存⼊ SortedGateQueries 中。

回到 contribute_into_linearization_for_public_inputs 函数,可以看到,它会从queried_values 中,获取 a/b/c/d 的值。⽽ Q_a/Q_b/Q_c/Q_d/Q_m的值,都是从 create_proof 刚开始⽣成的单项式缓存数据中取到的,也是⼀个lookup table 的概念。

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

ZKSwap团队解读:ZKSync中better_better_cs如何实现聚合证明

综上,ZKSync 将witness、gate 的 selector、setup 放⼊lookup table 中,在⽣成 proof 时,使⽤lookuptable,直接查询⽽不是再次计算,加快⽣成速度,提升 prover 效率。

引⽤

冷萃财经原创,作者:awing,转载请注明出处:https://www.lccjd.top/2021/06/09/zkswap%e5%9b%a2%e9%98%9f%e8%a7%a3%e8%af%bb%ef%bc%9azksync%e4%b8%adbetter_better_cs%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0%e8%81%9a%e5%90%88%e8%af%81%e6%98%8e/

0

扫一扫,分享到微信

猜你喜欢

文章评论

电子邮件地址不会被公开。 必填项已用*标注

后发表评论

    上一篇

    Philip Martin澄清Coinbase并未参与美国司法部扣押的比特币

    下一篇

    如何看待比特币成为萨尔瓦多的法定货币?

    微信公众号

    微信公众号