這篇文章是 Crosslink 2019 Taiwan 的一個議程紀錄:The next generation Ethereum Virtual Machine,由來自Second State 的工程VP Hung-Ying Tai(hydai) 分享 Ewasm VM 目前研究內容及將來的方向,內容很是精彩,包含了 EVM bytecode 、Webassembly、Ewasm1.0 以及 Ewasm2.0 。git
以太坊的智能合約交易在執行時,例如:把Token 轉到別的地址,是將EVM bytecode 讀進以太坊的虛擬機執行,而 EVM bytecode 有如下幾點特點:github
Webassembly(WASM)是爲了讓不一樣程序語言開發的套件都能在瀏覽器使用的一種二進制程序語言,WASM 有如下幾點特點:web
接下來看看以太坊Ewasm 的特性:瀏覽器
EVM 裏有不少像是SSLOAD, SHA3 的高階指令,這些指令在Ewasm 1.0 裏,由於 WASM 能夠動態讀取函式庫(模組),以太坊定義了以太坊環境接口(EEI),讓客戶端能夠用不一樣的語言實現相對應的函式庫,並且也更容易完成 prototype 跟升級。網絡
下圖是 Ethereum Environment Interface 定義的函數列表。架構
Ewasm 使用 system contract 移除非法指令以及加入 useGas 的 bytecode,像是浮點數或是非法的 import,有如下兩種作法:less
下圖是 Ewasm 1.0 的 stack,在部署合約前 Ewasm bytecode 會先通過 Sentinal 的檢查,成功部署後客戶端若是要執行合約會經過 EVM-C 與 Heru(Wasm Engine)溝通。函數
使用Ewasm 效能真的會比較快嗎?Second State 的Hydai 分享了各個EVM 執行 Sha1 以及 BN128mul 的結果,發現EVM 在運行 BN128mul 時會是最快,主要是由於WASM 支持 32 / 64 位的操做,256 位則須要另外模擬(1 個 256 位元的運算能夠換成 25 個 64 位元的運算),因此WASM 在跑 BN128mul 時會比較慢。工具
Ewasm 2.0 的智能合約改叫 Execution Environments(EE),與 Ewasm 1.0 不同的有下列幾點post
下圖能夠看到ERC20 Token 在Ewasm 2.0 跟Ewasm 1.0 storage 的比較,Ewasm 1.0 每一個數據都會有相對應的 key,而Ewasm 2.0 只有存 state root,因此只能跟 state root 互動。
目前 Ewasm 2.0 到 phase one and done 的階段,也有測試的網絡能夠在 shard block 執行 EE,以太坊也有開源 Ewasm 2.0 的測試工具 Scout。
上圖是Eth 2 的 Hello World EE,能夠看到main 函數裏第一行讀取pre state root,接下來驗證block data size 是否是爲 0,最後再將state root 存回去,Eth 2 的智能合約寫起來都會像這樣。
Ewasm 1.0 目前已經支持 EVM 1 大部分的功能,Ewasm 也有測試鏈了,Second State 開發了一個編譯器SOLL,能將 Solidity 編譯成 Ewasm,對Ewasm 感興趣的人能夠參考一下。
Ewasm 2.0 目前還在研究中,下圖是Hydai給你們分享的研究及貢獻的方向。
webassembly.org (http://webassembly.org/)
Compiling and deploying an ERC20 contract onto the eWASM testnet— YouTube