原文作者: Mike@Foresight Ventures
TL;DR
WebAssembly(簡稱Wasm)是一種可移植、高效能的二進位指令格式,可在Web 瀏覽器中運作。它被設計為一種通用的編譯目標,可以用於多種程式語言,並且可以在不同的平台上運行。
區塊鍊是一種去中心化的分散式帳本技術,它透過使用密碼學和共識算法來確保資料的安全性和可信度。區塊鏈可用於記錄交易、儲存資料和執行智慧合約等應用。
Wasm 和區塊鏈之間存在一些關係和應用場景:
智慧合約:Wasm 可以作為智慧合約的執行環境,使得合約可以在不同的區塊鏈平台上運作。 Wasm 的高效能和可移植性使得智慧合約可以更有效率地執行,並且可以跨平台使用。
跨鏈交互:Wasm 可以用來實現跨鏈交互的功能。透過將不同區塊鏈的邏輯編譯為Wasm 代碼,可以在不同的區塊鏈上執行相同的邏輯,實現跨鏈的資料傳輸和互動。
鏈下計算:Wasm 可以用於在區塊鏈之外進行計算,並將計算結果提交到區塊鏈上。這樣可以在保持資料的安全性和可信度的同時,提高計算的效率和靈活性。
資料隱私:Wasm 可以用於實現區塊鏈上的資料隱私保護。透過將敏感資料的處理邏輯編譯為Wasm 代碼,並在區塊鏈上執行,可以保護資料的隱私性,同時確保計算的可驗證性。
總之,Wasm 和區塊鏈可以相互結合,提供更有效率、安全和靈活的區塊鏈應用和服務。 Wasm 的可移植性和高效能使得它成為區塊鏈領域的重要技術之一。
一、什麼是WebAssembly
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 應用同樣簡單- 鏈接是可以放在任何地方的可點擊字符串。
二、為什麼我們需要WebAssembly
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 位的計算機,故意設計成這樣是為了更易於處理以太坊的哈希算法,它會明確產生256 位的輸出。
然而,實際運行EVM 程式的電腦則需要把256 位的字拆分成它們的本地架構來執行智慧合約,這使得整個系統變得非常低效且不實用。
另外,如果你想在以太坊上用它的基本OPCODES 實現一個類似SHA 256 的複雜算法,那你就自祈多福吧!為了解決透過指令集運行複雜程式產生的高額gas 問題,以太坊引入了預編譯的概念,把程式編譯進EVM 並且消耗固定的gas。一個值得關注的預編譯是以太坊哈希算法,因為如果在虛擬機器中實現該算法,合約在呼叫時將產生極其昂貴的費用。
臃腫的預編譯
預編譯帶來的問題是它會不斷增加虛擬機器的臃腫度和複雜度,而無法解決核心問題:目前指令集和規範的低效而粗劣的設計。
如果我們能夠定義一種新的規範和指令集,不需要預先編譯這些複雜程序,而只需要透過基本指令就可以有效率地實現呢?這時候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 中的競爭力。
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)的數據,全球有近2,700 萬開發人員。這一數字正在穩步增長--去年增長了約3% ,預計到2024 年將超過2870 萬。而在區塊鏈上的開發人員而不超過3 萬名,佔開發者總人數的大約千分之一左右,雖然這個數字一直在穩步提升,但學習新的智能合約語言可能仍然是開發者們進入區塊鏈的門檻。
但越來越多的區塊鏈開始支持Web Assembly 作為編譯後智慧合約的字節碼。 WASM 帶給區塊鏈的不僅是高效,互操性和廣泛的應用場景,更是解放開發者的鑰匙,將開發者進入區塊鏈的准入門檻變低。區塊鏈的想像一下,在不久的未來,當Web2開發者想嘗試做區塊鏈開發的時候,可以用他們熟悉的Python,C++,Javascript 在區塊鏈上開發大型應用,最大限度地釋放區塊鏈去中心化網絡的價值,先降低創建者(開發者)的門檻,再降低用戶的門檻,邁向Mass Adoption。
四、索引
https://blog.scottlogic.com/2022/06/20/state-of-wasm-2022.html
https://www.notion.so/ 18 f 67 cee 15 c 147 dfae 68 b 06269 a 455 c 0 ?pvs=21
https://wiki.polkadot.network/docs/learn-wasm
https://docs.arbitrum.io/stylus/stylus-gentle-introduction
https://medium.com/@gear_techs/introducing-gear-easy-to-use-polkadot-parachain-9ccd05437a9c
https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8
https://www.cncf.io/wp-content/uploads/2023/09/The-State-of-WebAssembly-2023.pdf
https://github.com/DelphinusLab/zkWasm
感謝Maggie,Xinyou Ji(CMU), Sinka Gao(Delphinus Labs)對本文提供建議與指導。
關於Foresight Ventures
Foresight Ventures 押注加密貨幣未來數十年的創新歷程,旗下管理多支基金:VC 基金、二級主動管理基金、多策略FOF、特殊目的S 基金「Foresight Secondary Fund l」, 總資產管理規模超過4億美元。 Foresight Ventures 堅持「Unique, Independent, Aggressive, Long-term」的理念,透過強大的生態力量為計畫提供廣泛的支持。其團隊來自包括紅杉中國,中金公司,谷歌,比特大陸等頂級金融和技術公司的資深人士。