以太坊的核心理念很簡單:利用區塊鏈技術的信任最小化的本質,就計算機程序的輸出達成共識。也就是說,開發人員可以部署代碼,也就是所謂的智能合約,它是完全確定的,并且它的輸出可以被所有與之交互的各方所信任。從一開始就提出了各種各樣的好主意,包括利用以太坊智能合約創建公平拍賣或彩票的能力來創造預測市場,分散貿易往來等等。在這些用例中最臭名昭著的是在以太坊中創建可編程的代幣,它被用作公司籌集數百萬美元的ICOs的流行手段。
在其核心,以太坊實現了一個圖靈完整的虛擬機,被稱為以太坊虛擬機(簡稱EVM)。它的力量來自定義一個通用的、確定性的指令集,程序可以編譯成,世界各地的計算機都可以運行。在這個EVM上運行的每一個操作和程序都必須由以太網絡的每個完整節點運行,這意味著這個“世界計算機”需要有一個內置的機制來阻止垃圾郵件攻擊。為此,EVM實現了氣體的概念,它可以被認為是每一個需要在這臺全球計算機上運行的基本操作的“燃料”,它是預先支付的。區塊鏈計算機是具有決定性的圖靈完成意味著你可以在以太虛擬機上編碼和運行任何程序,只要你有足夠的氣體來支付所有的執行步驟。昂貴的操作,如訓練機器學習算法,由于其固有的約束,在EVM中是完全不可行的。EVM中的每一個指令,稱為操作碼,都有一個特定的固定成本。每一個操作碼都是決定性的,因為在以太坊上的每一個節點的輸出都是達成全球共識的要求。
以太坊整個系統從塊創建到事務執行:通過固定的操作碼成本,節點能夠準確地確定用戶需要多少錢來執行一個特定的程序。在這種情況下,氣體的概念不僅被用作防止垃圾郵件攻擊的一種方法,而且還被用作確定性的代理。例如,一個花費X氣體運行的程序將總是花費X氣體,而不管網絡中的哪個節點正在執行它。天然氣實際上有一個單位價格,它依賴于整個平臺的供應和需求,而且通常是相當不穩定的,這取決于以太網絡與交易的負載程度。EVM是如何設計的?為什么它效率低下?大建筑尺寸傳統計算機包含在32或64位大小的輸入上運行的指令集。EVM是不同的,它是特別的,因為它是一個256位的計算機,它是故意設計的,因它很容易處理以太的散列算法,它顯式地生成了一個256位的輸出。然而,實際運行EVM程序的計算機必須將其256位的單詞分解到它們的本地架構中,以執行智能合約,這使得整個系統非常低效和不切實際。
另外,如果你想要使用它的基本操作碼來實現一個復雜的算法,比如在以太坊上的SHA256,那我就只能祝你好運了!為了規避從指令集運行復雜程序的低成本效率,以太坊使用了預編譯的概念,這些程序是在EVM中進行的,并且有固定的成本。一個值得注意的預編譯是以太坊哈希算法,因為在VM本身中實現它對于任何調用的合同來說都是非常昂貴的。預編譯的問題預編譯的問題在于,它們不斷地增加VM的臃腫和復雜性,而不是解決核心問題——當前指令集和規范的低效率和糟糕的設計。如果我們可以定義一個新的規范和指令集,我們不需要將這些復雜的程序放入其中,那么我們是否可以有效地使用基本指令實現呢?進入WebAssembly
被譽為網絡和高性能的游戲規則,跨瀏覽器執行,WebAssembly是由W3C開發的一個標準組的有效率,輕量級的指令集。這意味著我們可以編譯不同類型的編程語言,從C / c++更成一個單一的標準,可以在瀏覽器中運行幾乎代替JavaScript。WebAssembly,簡稱WASM,是內存安全的、平臺獨立的,并且可以有效地映射到所有類型的CPU架構。這和區塊鏈有什么關系?我們現在有了一個優秀的、高效的指令集,我們可以編譯各種語言,并確信它將在不同類型的平臺上具有同樣的性能和可執行性——對于分散的應用程序來說是理想的!此外,WASM指令集可以很容易地通過移除浮點指令來確定,這將使它適合于EVM進行替換。