Scalability

L1 合約如何檢查 ZK-rollups 的電路完整性?

  • January 21, 2022

TL;DR:是什麼阻止了邪惡方偽造新的邪惡操作(比如為某個帳戶鑄造 100 ETH)並證明該邪惡操作已正確執行到第 1 層驗證者合約?


我正在閱讀名為zkSync的 ZK 匯總實現的程式碼。有幾個第 2 層操作,例如TransferWithdraw等等。他們使用PLONK作為 zkSNARK 後端,它生成一個通用的 SRS,可用於檢查任何長度為 length 的電路n。然而,由於這種靈活性,任何電路都可以建構和驗證,而不僅僅是Transfer原始開發人員定義的誠實電路。

如果我理解正確的話,使用 PLONK 協議,驗證者(即第 1 層合約)能夠驗證某些電路是否正確執行,即輸入x和見證w滿足指定的約束(例如,在 中包含的一系列操作之後w,狀態中new_root包含的merkle 樹根匹配x)。但它不能檢查電路是否被誠實地建構。為了polylog(n)在驗證時間上獲得複雜性,證明者不能列出電路中完成的所有操作,這可能包含一個邪惡的操作。那麼為什麼不能創建一個新的操作並作弊呢?

再次閱讀PLONK 論文後,我注意到 $ q_m $ , $ q_l $ , $ q_r $ 等被預處理並固定為驗證器的輸入,驗證器指定電路。也就是說,電路不是由證明者提供,而是由驗證者預先計算出來的。所以它是安全的。

我沒有檢查原始碼,但我猜這些電路規範多項式(實際上是它們的承諾)在合約設置的solidity程序中是硬編碼的。

引用自:https://ethereum.stackexchange.com/questions/118037