WebAssembly和區塊鏈計算的未來
前言: ofollow,noindex">以太坊 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和區塊鏈虛擬機器執行的最新開發狀態持續保持關注 – 因為這才剛剛開始。
——
風險警示:藍狐筆記所有文章都不構成投資推薦,投資有風險,投資應該考慮個人風險承受能力,建議對專案進行深入考察,慎重做好自己的投資決策。
宣告:登載此文出於傳遞更多資訊之目的,並不意味著贊同其觀點或證實其描述。