Wasm 和區塊鏈之間有什麼樣的關係和應用場景?
(前情提要:V神全文解讀:Web3.0 基礎設施的下一站,是「封裝 or 擴展」? )
(背景補充:零知識證明是什麼?一文探討 ZK 程式語言 )
TL;DR
WebAssembly(簡稱 Wasm)是一種可移植、高效能的二進位制指令格式,可以在 Web 瀏覽器中執行。它被設計為一種通用的編譯目標,可以用於多種程式語言,並且可以在不同的平臺上執行。
區塊鏈是一種去中心化的分散式帳本技術,它通過使用密碼學和共識演算法來確保資料的安全性和可信度。區塊鏈可以用於記錄交易、儲存資料和執行智慧合約等應用。
Wasm 和區塊鏈之間存在一些關係和應用場景:
- 智慧合約:Wasm 可以作為智慧合約的執行環境,使得合約可以在不同的區塊鏈平臺上執行。Wasm 的高效能和可移植性使得智慧合約可以更加高效地執行,並且可以跨平臺使用。
- 跨鏈互動:Wasm 可以用於實現跨鏈互動的功能。通過將不同區塊鏈的邏輯編譯為 Wasm 程式碼,可以在不同的區塊鏈上執行相同的邏輯,實現跨鏈的資料傳輸和互動。
- 鏈下計算:Wasm 可以用於在區塊鏈之外進行計算,並將計算結果提交到區塊鏈上。這樣可以在保持資料的安全性和可信度的同時,提高計算的效率和靈活性。
- 資料隱私:Wasm 可以用於實現區塊鏈上的資料隱私保護。通過將敏感資料的處理邏輯編譯為 Wasm 程式碼,並在區塊鏈上執行,可以保護資料的隱私性,同時確保計算的可驗證性。
總之,Wasm 和區塊鏈可以相互結合,提供更加高效、安全和靈活的區塊鏈應用和服務。Wasm 的可移植性和高效能使得它成為區塊鏈領域的重要技術之一。
一、什麼是 Web Assembly
WebAssembly 是由 W3C(全球資訊網聯盟)開發的一個高效輕量級指令集標準,被譽為網路和高效能的顛覆者,支援跨瀏覽器執行。這意味著我們可以把包括 C/C++, Go, Rust 等在內的不同程式語言編譯成統一的標準二進位制格式,並將其作為 JavaScript 的替代品以近乎原生程式碼的效率在瀏覽器中執行。
WebAssembly,或者簡稱為 WASM,是記憶體安全、平臺獨立的,可以完美高效地反射到所有型別的 CPU 架構上,有著以下主要優勢:
- 高效:WASM 有一套完整的語言特性,實際上 WASM 是體積小且載入快的二進位制格式, 其目標就是充分發揮硬體的能力以達到原生語言的執行效率。
- 安全:WASM 執行在一個記憶體安全,沙箱化的執行環境中,甚至可以在現有的 JavaScript 虛擬機器中實現。在 Web 環境中 ,WASM 將會嚴格遵守同源策略以及瀏覽器安全策略。WASM 在編譯的時候,interface 是比較少的,但大部分 wasm application 是不能聯網的(因為不支援 socket),現在只能支援 local database。很多安全問題的時候來源於執行時候的記憶體的訪問,wasm 在編譯的時候,可以避免非法的記憶體訪問。
- 相容性:WASM 在 Web 中被設計成無版本、特性可測試、向後相容的。WASM 可以被 JavaScript 呼叫,進入 JavaScript 上下文,也可以像 Web API 一樣呼叫瀏覽器的功能。WASM 不僅可以執行在瀏覽器上,也可以執行在非 Web 環境下(如 Node.js、Deno、物聯網裝置等執行)。傳統的方式可能需要多次 compile,而 WASM 只需一次便可執行,即插即用。
此外:Web 是唯一真正的通用平臺,可以在任何裝置上訪問你的應用程式。這還允許你維護單個程式碼庫,簡化更新並確保所有使用者都可以訪問你的應用程式。WASM 支援 64 位和 32 位整數操作,與 CPU 指令一一對應。通過移除浮點運算,可輕鬆實現確定性,這對共識演算法來說是必要的。由 LLVM 編譯器基礎架構專案提供支援,這意味著 Wasm 可以從 LLVM 十多年的編譯器優化中獲益。WASM 由Google、蘋果、微軟、Mozilla 和 Facebook 等大公司持續開發,在這幾個大公司開發的瀏覽器的後端都支援 wasm 編譯。
WASM 的美妙之處在於它就像一個魔法引擎,它可以在任何地方執行,不需要下載也不需要安裝,因為是二進位制格式。只需一次點選,即可在需要時立即執行 Web 應用。它比直接在下載和執行二進位制檔案更安全,因為瀏覽器已內建安全機制,使其中執行的程式碼不會危害你的系統。而且分享 Web 應用同樣簡單 – 連結是可以放在任何地方的可點選字串。
二、為什麼我們需要 Web Assembly
2.1 Web2
由於瀏覽器內建的功能和 Web 提供的互動性,Web 從超文字靜態內容和小型指令碼語言發展成了一個非常強大和流行的平臺,充滿了驚人的應用程式和功能。但到目前為止,Web 應用依舊基本上由相同的指令碼語言 (JavaScript) 驅動,然而 JavaScript 設計的首要目標從來就不是為了實現這些。
JavaScript 最初是一種簡單的指令碼語言,旨在為充滿輕量級超文字文件的 Web 應用帶來一些互動性。它的設計易於學習和編寫,並不追求執行速度。多年來,瀏覽器在 JavaScript 解析上的重大效能改進的,帶來了顯著的效能提升。
隨著 JavaScript 執行速度的加快,能瀏覽器中執行的東西大大擴展。新的 API 帶來了諸如互動式圖形,視訊流,離線瀏覽以及更多的功能。同時越來越多的應用程式(過去僅限本地應用程式)開始進入 Web 。現在你可以輕易的在瀏覽器中編輯文件並發送電子郵件,但在有些領域中,JavaScript 的效能依舊是一個難題。想一想除了瀏覽器之外你所使用軟體:遊戲,視訊編輯,3D 渲染或音樂製作。這些應用程式需要執行大量計算,並且需要很高的效能。JavaScript 很難滿足這種高效能的要求。
不過替換掉 JavaScript 不太現實,甚至可能要花幾十年時間都搞不定,因為整個網際網路都離不開它。而且,還有一大幫人在不停地改進 JavaScript。確實,和其他語言比起來,JavaScript 在某些方面比如 null 和 == 這些地方是有點不夠好,但這些問題還不至於讓人把整個技術都換掉。
所以,WebAssembly 不會取代 JavaScript,但這並不意味著將來沒人用 WASM。實際上,WASM 的使用還會越來越廣泛。因為 WASM 能給網頁帶來強大的計算能力,比如做影象處理或者遊戲之類的。用 WASM,可以做出一個網頁版的 Photoshop 並執行得很好,或者是一個在瀏覽器裡能以 60 幀每秒甚至更高幀率執行的 3D 遊戲。遊戲尤其具有挑戰性,因為遊戲不僅需要同時執行音訊和視訊處理,還需要協調物理特效和 AI。WASM 擁有在瀏覽器上高效的運行遊戲的能力,將開啟把許多其他應用程式帶到瀏覽器上的大門的可能性。
上圖展示了 javascript 和 wasm 工作流的對比,可以看出 wasm 相比 JavaScript 要簡潔許多。
2.2 Web3
WASM VM
在 2018 年的時候,以太坊生態內部開始討論用 WASM VM 做智慧合約虛擬機器,因為覺得它效能比 EVM 好。EVM 的發明者 Gavin Wood 曾表示過 WASM 取代 EVM 的可行性,Vitalik 也表示過以太坊 2.0 將會升級為 Wasm 合約(eWASM),以滿足更多開發需求。而如今,Wasm 合約的發展已經有了一定雛形。
2.3 EVM 是如何設計的?為什麼它是低效的?
架構尺寸過大
傳統電腦包含的指令集只接受 32 位或者 64 位的輸入。EVM 與此不同並且很特殊,它是一臺 256 位的電腦,故意設計成這樣是為了更易於處理以太坊的hash演算法,它會明確產生 256 位的輸出。
然而,實際執行 EVM 程式的電腦則需要把 256 位的字拆分成它們的本地架構來執行智慧合約,從而使得整個系統變得非常低效和不實用。
另外,如果你想在以太坊上用它的基本 OPCODES 實現一個類似於 SHA256 的複雜演算法,那你就自祈多福吧!為了解決通過指令集運行復雜程式產生的高額 gas 問題,以太坊引入了預編譯的概念,把程式編譯進 EVM 並且消耗固定的 gas。一個值得關注的預編譯是以太坊hash演算法,因為如果在虛擬機器中實現該演算法,合約在呼叫時將會產生極其昂貴的費用。
臃腫的預編譯
預編譯帶來的問題是它會不斷增加虛擬機器的臃腫度和複雜度,而不能解決核心問題:當前指令集和規範的低效而粗劣的設計。
如果我們能夠定義一種新的規範和指令集,不需要預編譯這些複雜程式,而只需要通過基本指令就可以高效實現呢?這時候 WASM 就派上用場了。
2.4 EVM 與 WASM VM 的比較
- 速度: WASM 旨在提供比 EVM 更快的執行速度。EVM 在處理編譯和執行智慧合約時可能存在效率問題,而 WASM 通過直接轉換為編譯後的程式碼來提高載入速度和處理能力。
- 預編譯: EVM 依賴於預編譯合約來高效執行加密計算,但這可能導致硬分叉的風險。WASM 則消除了對預編譯合約的依賴,允許開發人員建立高效、快速的智慧合約。
- 交易費用: 更快的 Wasm 虛擬機器,致使交易吞吐量大幅提升,那麼合約部署和交易成本也能大幅降低。可以說 Wasm 合約很好的解決了現在以太坊上交易費用高和交易擁堵的問題。
- 靈活性和互操作性: Wasm 擴容了智慧合約開發者可用的語言系列,支援使用任何 Wasm 的高階語言(如 Rust、C++、JavaScript 等)開發編寫複雜業務邏輯,這意味著你可以用你熟悉的任何語言編寫智慧合約,包括最成熟的基於 Rust 的 ink!,或基於 AssemblyScript 的 Ask! 等。
EWASM 團隊正在在以太坊上整合 WebAssembly,從而保證以太坊的執行層更加高效、簡單,適合作為完全的去中心化計算平臺。WASM 已經被許多其他專案接納為標準,包括 Dfinity 和 EOS 都使用它來強化它們的執行層。
2.5 Stylus(Arbitrum)
Stylus 專案是以太坊二層網路 Arbitrum 上通過引入 WebAssembly(WASM)虛擬機器來提高智慧合約的執行效能。合約可以以比 Solidity 更快的速度執行,同時減少了燃氣成本。這使得在 Arbitrum 網路上構建高效能的智慧合約變得更加容易,目前支援 C,C++ 和 Rust 的編譯。
自定義預編譯支援: Stylus 還支援自定義預編譯(precompiles),這允許開發者將自己的 Rust 或 C++ 預編譯部署到 Arbitrum 網路上。這可以幫助在鏈上引入新的加密演算法或其他特定功能,而無需等待鏈上升級。比如說可以把 tensor computation 預編譯,降低 inference 成本,對鏈上機器學習可能有幫助。
與 EVM 的互操作性: Stylus 通過與以太坊虛擬機器(EVM)的互操作性來實現與現有以太坊生態系統的整合。這意味著 Stylus 合約可以與現有的 EVM 合約互操作,並與 EVM 共享相同的全域性狀態。
重入功能(Reentrancy): 與 Cosmos wasm 不同,Stylus Rust SDK 引入了重入功能,並允許開發者手動啟用它。這使得合約可以更加靈活地進行互操作,但需要開發者謹慎管理狀態以確保安全性。
基於 arbitrum 生態的火爆,stylus 可能是最有意義的一次 wasm 整合,同時也利好 arbitrum 在 zkrollup 中的競爭力。
延伸閱讀:Arbitrum代幣跌跌不休,團隊分享了Layer2的激烈競爭心得
2.6 Gear(Polkadot)
Gear 協議正在建立一種可作為 Polkadot parachain 部署的技術,它將成為託管智慧合約的工具。與 Polkadot 一樣,Gear 也使用 Substrate 框架。這簡化了為特定應用建立不同區塊鏈的過程。Substrate 提供了開箱即用的廣泛功能,讓人們可以專注於在協議之上建立自定義引擎。
以前,啟動區塊鏈的成本很高,但 Gear 可以讓 dApp 開發者專注於自己的專案,而不是從頭開始構建和運營整個區塊鏈。
Gear 協議的主要引擎是智慧合約模組。在 Gear 的情況下,任何智慧合約都是用不同語言(如 Rust、C、C++ 等)編譯的 WebAssembly 程式。對於來自加密世界之外的開發者來說,它的入門門檻很低,因為他們可以在熟悉的環境中構建智慧合約。開發者更容易嘗試智慧合約程式語言。
Gear 的智慧合約架構在引擎蓋下使用演員模型,並提供以下功能:
- 為不可變程式提供持久記憶體
- 非同步訊息處理
- 針對區塊鏈上下文的最小、直觀和充足的 API 表面
- 鏈上元件之間的 Actor 通訊代理模型提供了更高的可組合性、與並行程式碼執行和分片的更好相容性。
每個程式都有固定數量的記憶體,Gear 允許對其進行控制。程式只能在自己的記憶體中讀寫,不能訪問其他程式的記憶體空間。每個程式都有獨立的記憶體空間,可以並行處理 Gear 節點上的資訊。
2.7 CosmWasm(Cosmos)
CosmWasm 是一個現代的、功能強大的基於 Wasm 的智慧合約平臺,它可以輕鬆地插入 Cosmos-SDK。這展現了 CosmWasm 的主要優勢之一:用 CosmWasm 編寫的合約與 IBC(區塊鏈間通訊)原生緊密結合,讓開發者和使用者可以進入多鏈未來,目前僅支援 Rust。
CosmWasm 的優勢
- 安全性: 使用 Rust 語言提高智慧合約的安全性。
- 跨鏈相容性: Cosmos 生態中的 IBC(Inter-Blockchain Communication)協議支援。
- 效能: 與傳統 EVM(以太坊虛擬機器)相比,CosmWasm 在一些案例中展示了更高的效率和較低的交易費用。
- 開發者友好: Rust 語言的型別安全和記憶體安全特性可降低智慧合約中的某些型別的錯誤。
挑戰和限制
- 學習曲線: Rust 相較於 Solidity 等更常用的智慧合約語言,對於初學者來說學習曲線可能更陡峭。CosmWASM 需要支援更多語言編譯來獲得大規模採用的可能性。
- 生態系統和工具支援: 雖然在成長中,但與成熟的智慧合約平臺(如 Ethereum)相比,CosmWasm 的開發工具和生態圈可能仍較為有限。
- 市場佔有率和知名度: 在智慧合約平臺中,CosmWasm 相對於 Ethereum、Binance Smart Chain 等可能知名度不高,影響了它吸引開發者和使用者的能力。
- 維護和升級的挑戰: 儘管 CosmWasm 提供合約升級功能,但智慧合約的維護和升級管理仍是一個複雜任務,需要小心處理以避免安全漏洞。
- 相容性問題: 對於那些習慣於 EVM 或其他智慧合約環境的專案來說,遷移到 CosmWasm 可能會面臨相容性挑戰。
2.8 ZK-WASM
除了 wasm 虛擬機器之外,還有最近一項新興的技術 ZKWASM,發明者 Delphinus Labs 已經在 github 上開源了 ZK-WASM 的程式碼。ZKWASM 使開發者無需重新執行便能驗證已執行計算的正確性。通過利用 ZKWASM,開發者可以靈活地使用各種程式語言構建 ZKP 應用程式。這些應用程式可以無縫地在 Web 瀏覽器中執行。
ZKWASM 的概念來源於 ZKSNARK,它是 SNARG 和零知識證明的混合體。咱們來解釋一下,通常情況下,要用 ZKSNARK,你需要用一種算術電路語言或者電路友好型語言,比如 Pinocchio、TinyRAM、Buffet/Pequin、Geppetto、xJsnark 框架、ZoKrates 等,寫個程式。這在某種程度上對已有的程式構成了一種障礙,讓它們難以發揮 ZKSNARK 的威力。但還有另一種方式,不是在原始碼級別上用 ZKSNARK,而是在虛擬機器的位元組碼級別上使用它,然後實現一個支援 ZKSNARK 的虛擬機器。Delphinus Labs 採用了後者的方式,把整個 WASM 虛擬機器都寫入了 ZKSNARK 電路中,這樣一來,現有的 WASM 應用程式就能直接在 ZKWASM 上執行,無需做任何修改。因此,雲服務提供商可以向任何使用者證明計算結果是按誠實計算的,不會洩露任何私人資訊。
ZKWASM 提供了各種用例,比如可以讓瀏覽器內的一些操作的 ZK 證明上鏈。做到網頁操作區塊鏈可驗證。再比如預言機、鏈下計算、自動化、連線 Web2 和 Web3,以及為機器學習和資料處理生成證明,乃至遊戲及社交應用。隨著採用率的提高,zkWASM 將擴展 Web3 的可能性,並將 Web2 開發者納入這個變革性的格局。
通過 Delphinus Lab 的 ZKWASM 實現,開發者可以利用零知識證明的力量來增強其應用程式的安全性和隱私性,為更值得信賴和去中心化的數位格局鋪平道路。
三、結論
Web 的效能和智慧合約平臺執行層的未來一片光明。不僅 dApp 會具有更高的效能,整合 WASM 也可以讓那些熟悉 Rust 和 Go 之類的主流語言的魯棒性的人更容易進行智慧合約的開發,而不是需要學習 solidity 或者其他區塊鏈開發語言的各種細節才能在以太坊上開發有用的應用程式。根據埃文斯資料公司(Evans Data Corporation)的資料,全球有近 2700 萬開發人員。這一數位正在穩步增長 — 去年增長了約 3%,預計到 2024 年將超過 2870 萬。而在區塊鏈上的開發人員而不超過 3 萬名,佔開發者總人數的大約千分之一左右,雖然這個數位一直在穩步提升,但學習新的智慧合約語言可能依然是開發者們進入區塊鏈的門檻。
但越來越多的區塊鏈開始支援 Web Assembly 作為編譯後智慧合約的位元組碼。WASM 帶給區塊鏈的不僅僅是高效,互操性和廣泛的應用場景,更是解放開發者的鑰匙,將開發者進入區塊鏈的准入門檻變低。區塊鏈的想像一下,在不久的未來,當 Web2 開發者想嘗試做區塊鏈開發的時候,可以用他們熟悉的 Python,C++,Javascript 在區塊鏈上開發大型應用,最大限度地釋放區塊鏈去中心化網路的價值,先降低建立者(開發者)的門檻,再降低使用者的門檻,邁向 Mass Adoption。