簡介
零知識證明,特別是zk-SNARK(SuccinctNon-interactiveArgumentsofKnowledge)可能是Web3前沿最重要的技術之一。雖然該子領域的大多數媒體和投資的關注都集中在zk-Rollup上,這種擴展解決方案為以太坊等L1區塊鏈提供了巨大的可擴展性,但這絕不是zk-SNARK的唯一應用。在這篇文章中,我們將深入分析零知識匯編代碼(或zkASM)的概念,評估它在zk-Rollup和其他領域的用例,探索它在重新發明我們所知道的互聯網方面的理論可能性。
技術原理
zk-ASM,顧名思義,主要包含兩個技術部分:zk和ASM。zk部分指的是zk-SNARK,而ASM部分指的是匯編代碼。要理解zk-ASM的潛力,我們必須首先理解這兩個看似神秘的概念的理論基礎。
zk-SNARK
zk-SNARK是zk-Proof皇冠上的寶石:它們是一種簡潔的證明,證明某個陳述是正確的,在證明時沒有透露任何關于被證明數據的信息。例如,假設某人斷言“我知道一個m使得C(m)=0”,其中m是一個千兆字節長的消息,C是一個函數。zk-SNARK將是一個非常簡短的證明(<1GB),可以快速驗證,并且不會透露任何關于m的信息(除了公開可用的信息)。
那么C(m)到底是什么?它有什么用?這個函數實際上是一個算數電路,或者是我們想要執行的特定函數的有向無環圖(DAG)表示,如圖所示。“m”本質上是進入電路的輸入數據,電路中的特定“節點”是單獨的邏輯門或算數運算。例如,“+”節點可能有“2”和“3”作為輸入,并將“5”輸出到下一個運算符。因此,可以在“算數電路”中對任意算數或邏輯運算進行編碼。
EOA地址0x98a將12.1枚ETH轉至Tornado Cash:金色財經消息,據CertiK官方推特發布消息稱,EOA地址(0x98a)將12.1枚ETH轉至Tornado Cash,該筆轉賬來自Libertify漏洞攻擊被盜資金。[2023/7/13 10:52:49]
算數電路的例子。資料來源:https://cs251.stanford.edu/lectures/lecture14.pdf
一旦我們有了這個算數電路作為我們想要運行zk-SNARK的代碼的表示,我們就可以開始構建這個zk-SNARK了。從根本上說,因為“代數基本定理”,使得zk-SNARK是可能的,該定理指出,一個“d”次多項式最多有“d”個根。數學技巧分為兩個步驟:(1)以某種方式將我們想要證明的函數“f(m)”轉換為一個多項式(并堅持下去),(2)使用“代數基本定理”與多項式相互作用,并提供一個簡潔的證明。在技術術語中,第一部分被稱為“PolynomialCommittmentScheme”(PCS:多項式承諾方案),第二部分被稱為“PolynomialInteractiveOracleProof”(PIOP)。
數據:Amber Group疑似于1小時前從OKX收到200萬枚BLUR:6月28日消息,據Spot On Chain監測,Amber Group疑似在1小時前通過0x011開頭錢包地址從OKX以0.36美元的均價(約合72.6萬美元)收到了200萬枚BLUR 。
自3月6日以來,Amber Group已從OKX和Coinbase累積了總計2250萬枚BLUR,平均價格為0.497美元(約合1118萬美元)。[2023/6/28 22:05:55]
通用電路的有效SNARK的組成部分。資料來源:https://cs251.stanford.edu/lectures/lecture15.pdf
雖然PCS和PIOP的具體實現超出了本文的范圍,但到目前為止,我們已經獲得了zk-SNARK核心步驟的粗略草圖:
想運行zk-SNARK,就需要有一個函數的選擇(代碼函數,數學方程等);將此函數編碼為算數電路C(m);運行PCS得到該算數電路的多項式表示;運行PIOP以獲得原始“m”大小的對數的簡潔證明。我們有一個定制的zk-SNARK可以證明某人知道某個信息而不用透露信息是什么。
匯編代碼
zk-ASM的第二個難題是匯編代碼的思想。匯編代碼是一種包含非常低級語言指令的類語言,機器很容易閱讀,但人類很難破譯。與Python、Java等高級語言不同,匯編語言包含非常原始的函數,例如會在處理器和硬編碼內存位置上的一系列數據寄存器上移動、比較、添加和跳轉。例如,在屏幕上打印數字1到9的Python代碼為123456789:
比特幣全網未確認交易數量為134,975筆:金色財經報道,BTC.com數據顯示,目前比特幣全網未確認交易數量為134,975筆,全網算力為390.94 EH/s,24小時交易速率為4.18交易/s。目前全網難度為51.23 T,預測下次難度上調3.12%至52.87 T,距離調整還剩1天13小時。[2023/6/13 21:32:41]
下面是它的x86匯編版本:
對這么簡單的操作來說,其實變得更麻煩了。那么為什么還要使用匯編語言呢?如上所述,雖然這些指令對人類來說可能不容易閱讀,但它們很容易“組裝”到110011001字節碼中,供機器讀取和執行(這稱為匯編程序)。相對而言,Python和Java等高級語言更易于閱讀,但用這些語言編寫的程序不能直接由處理器執行。相反,我們需要依賴于一個“編譯器”,它咀嚼我們編寫的Python或Java代碼,并吐出一堆匯編代碼,然后由機器組裝和執行。我們可以期望同一段Python或Java在不同的處理器和不同的操作系統上平穩運行,因為編譯器完成了繁重的工作,將源代碼編譯為特定于該處理器或操作系統的匯編語言。
Marathon承諾向Brink提供50萬美元的匹配資金用于比特幣開發:金色財經報道,比特幣礦企Marathon首席執行官Fred Thiel表示,他希望確保開源比特幣核心客戶端軟件的開發和維護得到 \"適當資助\"。它將在佛羅里達州邁阿密海灘舉行的比特幣2023會議期間,以二對一的方式匹配給非營利性比特幣研究和開發公司Brink的高達50萬美元的捐款,并隨后在會議后以一對一的方式匹配額外的捐款,直至12月31日。
這些捐款將用于資助和支付Bitcoin Core開發者為世界上最主要的區塊鏈編寫和維護代碼的項目。[2023/5/22 15:17:47]
因為所有語言都可以編譯成匯編代碼(匯編代碼本身可以編譯成可執行的二進制代碼),所以匯編程序本質上就像“所有語言之母”。現在假設我們能夠將匯編語言(如x86或RISC-V)中的所有操作數轉換為一種算數電路表示,這樣我們就能夠提供這種匯編語言中所有操作數的zk-SNARK證明。這意味著理論上我們能夠提供任何用任意高級語言(如Python或Java)編寫的程序的zk-SNARK,這些程序可以編譯成匯編語言。這就是為什么我們需要考慮zk-ASM。
實際應用
zk-EVMRollup:Polygonzk-ASM
zk-ASM最重要的應用之一是創建與以太坊虛擬機兼容的zk-Rollup,或zk-EVM。zk-EVM對于區塊鏈的可擴展性非常重要,因為它允許程序員部署在基于zk-Rollup的L2鏈上,而無需修改太多(如果有的話)他們的代碼]。在這個領域,Polygon的zk-EVM是一個典型的案例研究,它展示了如何使用zk-ASM來實現這一目標。
Web3憑證數據網絡Project Galaxy與元宇宙項目AlterVerse達成合作:6月21日消息,Web3憑證數據網絡Project Galaxy與元宇宙項目AlterVerse達成合作,將在Sky City中搭建一個新空間,以創建一個獎勵和參與策略,用戶可購買土地、建造、購物、社交、收集資源、制作NFT,同時玩家將能夠發現新項目,探索可用的獎勵并兌換獎品。[2022/6/21 4:41:48]
EVM和Polygonzk-EVM技術棧的比較。來源:OriginalContent
當程序員在以太坊L1區塊鏈上開發時,他們通常使用Solidity進行編碼。這種Solidity代碼在執行前會被編譯成一系列EVM操作碼,如ADD、SLOAD和EQ。默認情況下,這個過程顯然不會創建任何類型的zk-Proof。Polygon的訣竅是創建一個方法,將每個EVM操作碼解釋為它們自定義編寫的zk-ASM,這對zk-SNARK非常友好。然后,他們的L2zk-EVM將執行zk-ASM,同時還創建ASM的zk-SNARK電路,以創建zk-SNARK證明。例如,EVM中的ADD操作碼將被翻譯成Polygon的zk-ASM,如下圖:
EVMADD操作碼的Polygonzk-ASM解釋示例。資料來源:https://wiki.polygon.technology/docs/zkEVM/zkASM/some-examples
因為Polygonzk-EVM的招數在匯編級別上,它從普通以太坊程序員接觸的代碼中刪除了兩個級別,即“Solidity”級別。這就是為什么大多數開發人員可以將他們為以太坊主網構建的EVM代碼直接移植到Polygonzk-EVM的原因。此外,由于Polygonzk-EVM將以太坊的技術堆棧“保持”到操作碼級別,所有依賴于分析編譯的操作碼的調試基礎設施都將保持可用和完整。這與其他一些zk-EVM設計不同,例如zkSync,后者不提供操作碼級別的zk-Proof。因此,即使Polygon發明并證明了自己的匯編語言,Vitalik寫道:“它仍然可以驗證EVM代碼,它只是使用了一些不同的內部邏輯來完成它。”
超越Rollup:zk-WASM
zk-EVM絕不是zk-ASM的唯一應用程序。回想一下我們之前的斷言,匯編語言本質上是“所有語言之母”,并且zk-ASM的創建將為用任何編譯成該匯編語言的語言編寫的通用程序解鎖zk-Proof。WebAssembly,或稱WASM,是最重要的新興匯編語言之一。WASM于2018年首次發布,其目的是創建一種匯編語言,以提高Web應用程序的執行速度,并為Javascript(Web背后的主要編碼語言)提供執行補充。
從本質上講,隨著Web多年來的發展,Web應用程序的規模和復雜性不斷增長,這意味著瀏覽器編譯用Javascript編寫的所有內容的速度通常非常慢,并且必須依賴復雜的編譯-優化-重新加載周期。另一方面,WebAssembly通過提供可移植的、模塊化的、易于執行的匯編語言,消除了對復雜瀏覽器執行引擎的依賴。此外,作為一種匯編語言,WASM允許程序員直接用C語言、C++、Rust、Java或Ruby編寫在瀏覽器中本機運行的代碼片段。因此WASM已成為“提供分布式無服務器功能”的首選技術。
那么zk-SNARK為什么會出現,又是如何出現的呢?WASM的獨特之處在于它是一種客戶端技術,能夠直接與用戶輸入和數據交互。因為這通常包括敏感數據,如密碼和個人信息,我們需要一種技術:(1)確保程序正確執行,(2)我們的敏感信息不會被泄露。如上所述,zk-SNARK是解決這兩個問題的完美解決方案,因此是確保WASM安全的重要拼圖。
雖然開發zk-WASM的工作仍處于早期階段,但最近已經有一些項目發布了用于WebAssembly的zk-SNARK電路原型。例如,DelphinusLab的“ZAWA”zk-SNARKEmulator提出了一種將WASM虛擬機的操作數和語義編碼到算數電路中的方法,從而使其能夠進行zk-SNARK證明。隨著時間的推移,zk-WASM電路無疑會不斷優化,從而允許用通用語言(如C語言、C++、Rust和Ruby)編寫的程序采用zk-Proof的范例。
結論
在這篇文章中,我們探索了zk-ASM的理論基礎,并研究了zk-ASM的兩個范例:Polygon使用zk-ASM創建一個操作碼級別的zk-EVM,以及zk-SNARK在WebAssembly上的應用以創建zk-WASM。最終,zk-ASM的承諾是將Web2的互操作性和規模與Web3的可靠性和安全性結合在一起。
一方面,區塊鏈越來越多地尋求超越當前吞吐量瓶頸的擴展,并有可能支持執行,而另一方面,Web2方法因未能充分保護用戶數據和隱私而越來越受到攻擊。由于程序員能夠在他們的Web2代碼中使用Web3設計范例,并在區塊鏈上引入Web2語言和代碼,通用的zk-ASM可能代表Web2和Web3世界中的一個匯合點。正是在這個意義上,zk-ASM可以讓我們重新想象一個安全、無需信任的互聯網。
由MarsBit主辦,香港創新產業園區數碼港、G-Rocket高諾國際加速器、element協辦的「POW’ER2023香港Web3創新者峰會」今日在港舉辦.
1900/1/1 0:00:00我們對以太坊生態系統的五個預測:熊市還沒有過去;EigenLayer將是以太坊最重要的創新;Blob交易不會修復可擴展性問題;2023年.
1900/1/1 0:00:00當你開始涉獵區塊鏈或加密貨幣時,似乎經常會遇到PoW、PoS等燒腦名詞。今天,我們就來聊聊,什么是PoW、PoS、DPoS。PoW、PoS、DPoS,用一句話概括,就是區塊鏈的三種主流共識機制.
1900/1/1 0:00:00引言 提到Web3和印度尼西亞,自然繞不開GhazalEveryday。2022年1月,Ghazal通過全球最大的NFT交易平臺OpenSea,出售其在17至21歲期間,每天在電腦前的自拍照片.
1900/1/1 0:00:00繼多位港府要員及業界領袖領袖確認出席將于1月9日~10日在港舉辦的?POW''ER2023香港Web3創新者峰會」后,本次峰會組委會今日公布會議主要議程及參會攻略.
1900/1/1 0:00:002022年無疑是加密史上最……多事之秋。在這一年里,隨著價格的暴跌和2021年過火市場的變淡,行業發生了巨大的變化。在試圖盤點這一年來的事跡,有太多的東西需要涉及.
1900/1/1 0:00:00