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/?variant=zh-tw

0

掃一掃,分享到微信

猜你喜歡

文章評論

電子郵件地址不會被公開。 必填項已用*標註

後發表評論

    上一篇

    Philip Martin澄清Coinbase並未參與美國司法部扣押的比特幣

    下一篇

    如何看待比特幣成為薩爾瓦多的法定貨幣?

    微信公眾號

    微信公眾號