作者: Mike@Foresight Ventures
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由谷歌、蘋果、微軟、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位的計算機,故意設計成這樣是爲了更易於處理以太坊的哈希算法,它會明確產生256位的輸出。
然而,實際運行EVM程序的計算機則需要把256位的字拆分成它們的本地架構來執行智能合約,從而使得整個系統變得非常低效和不實用。
另外,如果你想在以太坊上用它的基本OPCODES實現一個類似於SHA256的復雜算法,那你就自祈多福吧!爲了解決通過指令集運行復雜程序產生的高額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)的數據,全球有近 2700 萬开發人員。這一數字正在穩步增長--去年增長了約 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/18f67cee15c147dfae68b06269a455c0?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
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。