作者:Haotian
不少人看了@zkSync 新發的動物園科普圖文大呼懵圈,把動物園比做電路circuit,把擁有特殊技能的動物視為「邏輯閘Gate」,把動物們都開心的合照當成「證明Proof」,這樣輸入電路的數據在不透露具體內容的前提下,經過一系列複雜計算,產生一個Proof,就完成一次零知識證明過程。來,我試著硬核科普一下:
1)動物園對應的是「電路」,電路其實是一系列邏輯閘約束(加、減、乘、除等公式)的聚合,相當於所有動物們能力的一次集中表現,它也是構成電腦的基本元素。因此傳入電路的「資料」一定可套進各種公式內被執行運算。
在layer2網路中,儲存的資料通常是交易雜湊值、帳戶資訊和資料餘額等。這些數據可以透過轉換為公式來進行計算,在電路執行處理之前,必須確保數據能夠被公式化。如果資料無法直接轉換為公式,則需要進行其他編碼轉換,以便原始資料可以處理和計算。這種資料處理的前提是確保資料格式的相容性,使得在layer2環境中能夠順利進行資料操作和計算。因此,對資料進行適當的編碼和轉換是確保系統正常運作和資料處理有效性的關鍵步驟。
在動物園模式中,各種動物對應電路中的邏輯閘有特定的象徵:木箱代表著不公開顯示的數字,也就是所謂的「變數」;玻璃箱則象徵著公開展示的數字,作為「公開輸入」;而石頭則代表那些不可移動的數字,被視為「常數」。這種類比的設定使得邏輯閘與動物之間建立了一種奇妙的關聯,為電路的理解和學習增添了趣味性和視覺形象。
斑馬具有比較兩個數字是否「相等」的能力,結果相等斑馬就開心;鱷魚則表示「小於」,只有右邊的數小於左邊的數,鱷魚才會開心;蜘蛛代表更複雜的多重選擇閘,輸入0 則回傳一定是true,輸入1 則回傳是false;此外還可以讓河狸表示除法、松鼠指稱百分比;毛毛蟲代表加法等等。不同的動物代表不同的加減乘除運算公式,動物們開心或傷心代表公式運算的結構。
很多個動物不同種類的箱子組合起來就是一個電路,例如:要計算一個公式2 x 3 = Y,x 代表木箱,Y 代表石頭,2 個木箱和毛毛蟲、斑馬等來工作,最後來驗證公式是否成立。注意,不用糾結為啥不同動物具備不同能力,這就是電路元素工作基礎原理,是計算機執行計算的基本規則。
一個複雜電路就是形形色色的動物(邏輯閘)和箱子(規則)共同建構。
3)假設剛才輸入的公式2x 3 =Y 成立了,相當於斑馬毛毛蟲等動物都開心了,然後就會為該公式生成一個“Proof”,需要有一個角色能識別這個Proof 是否準確才行。因此,為了確保證明的可信度,動物園管理員即電路的建構者,模擬了一個特別的動物叫 Zeek,Zeek 能看出其他動物是否開心,在 layer2 系統中相當於 Verifier。
Zeek 觀察動物是否開心的過程其實就是 Prover 系統的驗證過程,都開心了則驗證通過,Proof 證明才會真正通過上傳到主網,並最終確認。當然,動物園成千上萬的動物,產生大量證明,Zeek 不可能挨個看,因此 Zeek 也可以觀察千千萬萬個 Zeek 自己的分身狀態是否開心,這個過程就叫 Recursive Proof 遞歸證明。
4)拍照的過程相當於產生SNARK 證明或KZG 承諾的過程,而印刷的底片則相當於STARK\SNARK 證明本身,動物園的遊客相當於一個個進入的Transaction 交易,只有動物開心合照才會完成並產生Proof 證明,最終遊客拿著照片出了動物園留底證明才能被上鍊最終確定。
一個動物園有很多動物,不可能同時都開心並按照預定規則工作,有很多邏輯門,也難免會出現掉線等情況。這樣就會出現一些,擁塞卡頓以及報錯的情況,因此會產生無效的狀態轉化,Under- Constrained,也就無法通過最終的驗證。
以上是硬核科普:以動物園為例,剖析 zkSync 電路工作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!