前言:以太坊EVM是低效的,WebAssembly能帶來更高效的執行層嗎?本文作者是Raul Jordan,來源於medium.com,由藍狐筆記社區「鑫鑫」翻譯。
2013年提出的以太坊的概念成爲了區塊鏈技術的一個主要擴展,將其從一個P2P資金的去中心化結算層,轉變爲一個程序執行的無信任層,爲應用程序和可編程資產開創了一個全新的世界。
把自己概念化爲一個「全球計算機」,以太坊的核心思想是很簡單易懂的:把區塊鏈技術的信任最小化的天然屬性應用到計算機程序輸出的共識上。也就是說,開發者可以部署被稱爲「智能合約」的代碼,它是完全確定性的,輸出可以被所有和它進行交互的角色所信任。
各種各樣非常好的想法在一開始就被提了出來,包括使用以太坊智能合約創建公平拍賣或者樂透彩票,創建預測市場,去中心化交易所等等。這些用例中最廣爲人知的是創建以太坊可編程token,這是各類公司通過首次代幣發行籌集資金的一種流行的方式。
以太坊內核實現了一個圖靈完備的虛擬機,即以太坊虛擬機(簡稱EVM)。它定義了一套通用的、確定性的指令,程序可以被編譯成這些指令,並且可以在全世界任何一臺計算機上運行。在EVM上執行的每一個操作和程序需要被以太坊網絡中的每一個全節點運行,意味着這臺「世界計算機」需要有一種內建的機制來制止惡意佔用(spam)攻擊。爲解決這個問題,EVM實現了gas(油費)的概念,可以理解爲在這臺全球計算機上運行每個基本操作需要消耗的「燃料」,這是需要預付的。
區塊鏈計算機是確定性的
圖靈完備意味着你可以在以太坊虛擬機上編寫和運行任何你能想到的程序,只要你能爲它的所有執行步驟支付足夠的gas。昂貴的操作,例如訓練機器學習算法,由於它的固有限制,在EVM上是完全不可行的。EVM中的每一條指令,被稱爲OPCODE,都有一個特定的固定費用。每個OPCODE都是確定的,對每個程序的輸出達成一致意見是在以太坊上達成全局共識的必要條件。
(以太坊從區塊創建到交易執行的完整系統,引用自StackExchange)
通過爲opcode設置固定費用,節點就可以確定執行某個特定程序時用戶需要預付多少費用。在這種情況下,gas的概念不僅僅被用於阻止惡意佔用攻擊,還是一種確定性的指標。例如,一個消耗gas X的程序總是會消耗X,不管是網絡中的哪個節點在執行它。gas的單價依賴於整個平臺的供求關係,經常會隨着以太坊網絡的交易負載量而發生變化。
EVM是如何設計的?爲什麼它是低效的?
l 架構尺寸過大
傳統計算機包含的指令集只接受32位或者64位的輸入。EVM與此不同並且很特殊,它是一臺256位的計算機,故意設計成這樣是爲了更易於處理以太坊的哈希算法,它會明確產生256位的輸出。
然而,實際運行EVM程序的計算機則需要把256位的字拆分成它們的本地架構來執行智能合約,從而使得整個系統變得非常低效和不實用。
另外,如果你想在以太坊上用它的基本OPCODES實現一個類似於SHA256的複雜算法,那你就自祈多福吧!爲了解決通過指令集運行復雜程序產生的高額gas問題,以太坊引入了預編譯的概念,把程序編譯進EVM並且消耗固定的gas。一個值得關注的預編譯是以太坊哈希算法,因爲如果在虛擬機中實現該算法,合約在調用時將會產生極其昂貴的費用。
l 臃腫的預編譯
預編譯帶來的問題是它會不斷增加虛擬機的臃腫度和複雜度,而不能解決核心問題:當前指令集和規範的低效而粗劣的設計。
如果我們能夠定義一種新的規範和指令集,不需要預編譯這些複雜程序,而只需要通過基本指令就可以高效實現呢?
走進WebAssembly
WebAssembly是由W3C開發的一個高效輕量級指令集標準,被譽爲網絡和高性能的顛覆者,支持跨瀏覽器執行。這意味着我們可以把包括C/C++, Go, Rust等在內的不同編程語言編譯成統一的標準格式,並將其作爲JavaScript的替代品以近乎原生代碼的效率在瀏覽器中運行。WebAssembly,或者簡稱爲WASM,是內存安全、平臺獨立的,可以完美高效地映射到所有類型的CPU架構上。
這和區塊鏈有什麼關係?
不依賴於EVM,現在我們有了一套優秀並且高效的指令集,可以編譯各種類型的語言,並且有信心它們可以在不同類型的平臺上執行且具有同等的性能 - 這對於去中心化應用來說是非常理想的!更進一步,通過去除浮點運算指令,WASM指令集可以很容易地變成確定性指令集,從而很適合作爲EVM的替代品。
EWASM團隊已經着手在以太坊上集成WebAssembly,從而保證以太坊2.0的執行層更加高效、簡單,適合作爲完全的去中心化計算平臺。https://github.com/ewasm
WASM已經被許多其他項目接納爲標準,包括Dfinity和EOS都使用它來強化它們的執行層。
Web的性能和智能合約平臺執行層的未來一片光明。不僅dApp會具有更高的性能,集成WASM也可以讓那些熟悉Rust和Go之類的主流語言的魯棒性的人更容易進行智能合約的開發,而不是需要學習solidity的各種細節才能在以太坊上開發有用的應用程序。
事實上,你已經可以在以太坊的Kovan測試網上根據Parity-Ethereum的教程來部署WASM合約了:https://github.com/paritytech/pwasm-tutorial
確保你對WASM和區塊鏈虛擬機執行的最新開發狀態持續保持關注 - 因爲這纔剛剛開始。
------
風險警示:藍狐筆記所有文章都不構成投資推薦,投資有風險,投資應該考慮個人風險承受能力,建議對項目進行深入考察,慎重做好自己的投資決策。
通往區塊鏈的新世界:關注「藍狐筆記」區塊鏈公衆號:lanhubiji
或加入藍狐筆記的知識星球:https://t.zsxq.com/iaQNnIq