1
什麼是以太坊虛擬機(EVM)?
以太坊虛擬機是一種輕量級虛擬機,用於在以太坊網絡上運行各種智能合約。 EVM 的功能不同於Windows 等傳統操作系統,後者一次只能在一台機器上運行。 EVM 是構建在本機操作系統上的高級抽象,用於模擬物理機。
通過使用EVM,相同的平台可以在許多不同的操作系統和硬件架構上運行。該特性使虛擬機適合以太坊等網絡,可以通過分佈在世界各地的不同機器上的不同客戶端訪問這些網絡。 EVM 可以模擬在物理CPU 上執行的功能,並負責以太坊網絡上的大部分功能。
EVM 具有以下特點:
確定性
確定性程序對相同的輸入集提供相同的輸出,而與它執行相同代碼的次數無關。在以太坊中,DApp 每次處理數百萬美元,各種用戶需要知道代碼在執行的每個階段是如何反應的。
可隔離
智能合約需要在完全隔離的環境中運行。這確保瞭如果智能合約發生黑客或bug,它不會影響底層協議的其他部分。
可終止
以太坊智能合約是圖靈完備的。因此,只要有足夠的時間和資源,他們就應該能夠解決任何問題。智能合約應該有終止機制,因為很難確定合約是否會在規定的期限內完成所有操作。以太坊使用“Gas”限制來終止超出執行限制的智能合約。
EVM 的功能
它是以太坊網絡的去中心化處理單元。每個交互、交易和智能合約執行都只能在這裡發生。獲取並執行指令,然後通過給定的指令分派器解碼操作數。負責所有的數據結構,如操作數、數據處理和指令。跟踪網絡組件,如存儲狀態、區塊信息和事件狀態。負責為以太坊網絡上的不同智能合約創建Runtime 環境。
EVM 的挑戰
EVM 處理如此既多又不同的操作,速度並不快,但是它的操作碼規範還沒有發展到可以處理變化的需求。未能進化意味著語言也有局限性。
2
什麼是WebAssembly (Wasm)?
WebAssembly (Wasm)是一種新型代碼,可以在現代瀏覽器上高效地執行。這個新代碼是由萬維網聯盟(W3C)創建和定義的。 Wasm 是為網絡而建的,包括來自谷歌、Mozilla和蘋果的工程師。本質上,Wasm 通常被稱為Ethereum 2.0,它具有EVM 的所有功能,並附帶了額外的功能。
專為網絡打造
如前所述,來自谷歌、微軟和蘋果等大型技術公司的工程師都是開發團隊的一部分。因此,這些工程師要確保Wasm 與他們的引擎和協議兼容。
設計時考慮了一組特定的目標
創建Wasm 是為了快速、高效和便攜。 Wasm 將利用常見的硬件能力,以“接近本地的速度”執行。
易於閱讀和調試。它具有人類可讀的文本格式,代碼可以手動查看、編寫和調試。確保安全。它通過增強主機瀏覽器的權限策略和保持向後兼容性來實現這一點。
3
EVM 與Wasm
速度
簡單地說,EVM 是一個萬事通,但卻什麼都不懂。 EVM 如何處理編譯這一點就是一個很好的例子。本機引擎努力尋找執行某些操作的最佳路徑,最終影響EVM 的總體吞吐量。
EVM 只能處理256位字節碼,這意味著小於256位的字節碼必須先轉換為256位格式,然後才能發送給EVM。 EVM 的可擴展性問題很明顯,因為它每秒只處理25個交易。
Wasm 直接轉換為編譯後的代碼,這使它能夠更快地加載,同時增加每個區塊所處理的交易數量。
預編譯
EVM
依賴於預編譯(預編譯合約)。
當發出預編譯調用時,EVM 將執行預定義的本機代碼,然後顯示結果。
這些預編譯特定於用於基本操作的特定協議,例如簽名方案和哈希。
儘管預編譯在不消耗大量Gas 的情況下使加密計算變得高效,但它們也帶來了問題——引入新的預編譯器通常要求網絡經歷一個系統範圍的硬分叉。
Wasm 消除了以太坊對預編譯合同的依賴。由於Wasm 非常高效,開發人員可以創建高效、快速的智能合約,而無需擔心潛在的硬分叉。
靈活性和互操作性
Wasm 支持更多的語言,並且提供了比EVM 更廣泛的工具集。 Wasm 支持傳統語言,如Rust、C和C++。 Wasm 也被本地JavaScript 引擎支持,例如Google 的V8 引擎(基於Node.js 和Chromium 的瀏覽器)、微軟的Chakra 引擎(Microsoft Edge)和Mozilla 的Spidermonkey 引擎(Thunderbird 和Firefox)。
4
小結
以太坊引入了比特幣區塊鏈上不可用的某些功能。以太坊虛擬機的引入允許開發人員輕鬆地創建和部署智能合約。然而,EVM 也有許多局限性,而Wasm 正試圖解決這些局限性。根據WebAssembly.org, WebAssembly 1.0 已經被提供給四個主要的瀏覽器引擎。