Ewasm Vs EVM:Ewasm 帶來了什麼改變?

20191106-Ewasm-01.png

這篇文章是 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

EVM bytecode 及Webassembly(WASM)

以太坊的智能合約交易在執行時,例如:把Token 轉到別的地址,是將EVM bytecode 讀進以太坊的虛擬機執行,而 EVM bytecode 有如下幾點特點:github

  1. 256 位元且堆疊式(staked-based)的虛擬機
  2. 不少高階的指令,例如:SSTORE, SLOAD, SHA3, EC, Call/Create contract
  3. 與實體系統架構(一般是 32/64 位)有差別,而 256 位則須要靠模擬來完成
  4. 較少程序語言(Vyper, Solidity, …)

Webassembly(WASM)是爲了讓不一樣程序語言開發的套件都能在瀏覽器使用的一種二進制程序語言,WASM 有如下幾點特點:web

  1. 堆疊式(staked-based)的虛擬機:有獨立的區域空間(暫存器或是內存),存取堆疊前3 個物件(EVM 存取 16 個)
  2. 支持32 / 64 位的操做
  3. 沒有高階的指令
  4. RISC 指令集也能夠對應到CPU ISA
  5. 較大的社羣:主流的瀏覽器都支持,也有較多的程序語言(C++, Rust, GO, …)

Ewasm 1.0

接下來看看以太坊Ewasm 的特性:瀏覽器

  1. Ewasm 是wasm 的子集合
  2. 由於不能有偏差,因此不支持浮點數運算
  3. 只能import 以太坊的函式庫,避免 importㄒ系統函式庫
  4. 在每段指令以前插入useGAS 來計算 GAS 的花費

以太坊環境接口(EEI)

EVM 裏有不少像是SSLOAD, SHA3 的高階指令,這些指令在Ewasm 1.0 裏,由於 WASM 能夠動態讀取函式庫(模組),以太坊定義了以太坊環境接口(EEI),讓客戶端能夠用不一樣的語言實現相對應的函式庫,並且也更容易完成 prototype 跟升級。網絡

下圖是 Ethereum Environment Interface 定義的函數列表。架構

20191106-Ewasm-02.png

如何移除非法的指令?

Ewasm 使用 system contract 移除非法指令以及加入 useGas 的 bytecode,像是浮點數或是非法的 import,有如下兩種作法:less

  1. 使用 system contract 檢查合約的 bytecode
  2. 像目前的 precompiles 運行在客戶端上,在部署前先檢查合約

下圖是 Ewasm 1.0 的 stack,在部署合約前 Ewasm bytecode 會先通過 Sentinal 的檢查,成功部署後客戶端若是要執行合約會經過 EVM-C 與 Heru(Wasm Engine)溝通。函數

20191106-Ewasm-03.png

效能問題

使用Ewasm 效能真的會比較快嗎?Second State 的Hydai 分享了各個EVM 執行 Sha1 以及 BN128mul 的結果,發現EVM 在運行 BN128mul 時會是最快,主要是由於WASM 支持 32 / 64 位的操做,256 位則須要另外模擬(1 個 256 位元的運算能夠換成 25 個 64 位元的運算),因此WASM 在跑 BN128mul 時會比較慢。工具

Ewasm 2.0

Ewasm 2.0 的智能合約改叫 Execution Environments(EE),與 Ewasm 1.0 不同的有下列幾點post

  1. EE 所有都是 WASM 寫的
  2. 由於支持 cross shard,每一個 EE 都是在一個 shard 上執行
  3. EE 只能拿到 state root,而在合約的執行寫法也跟原來不同
  4. EE 是 stateless

下圖能夠看到ERC20 Token 在Ewasm 2.0 跟Ewasm 1.0 storage 的比較,Ewasm 1.0 每一個數據都會有相對應的 key,而Ewasm 2.0 只有存 state root,因此只能跟 state root 互動。

20191106-Ewasm-04.png

Phase One and Done

目前 Ewasm 2.0 到 phase one and done 的階段,也有測試的網絡能夠在 shard block 執行 EE,以太坊也有開源 Ewasm 2.0 的測試工具 Scout

20191106-Ewasm-05.png

上圖是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給你們分享的研究及貢獻的方向。

image

參考

Crosslink 簡報

webassembly.org (http://webassembly.org/)

Scout

Second State’s Soll Compiler

Compiling and deploying an ERC20 contract onto the eWASM testnet— YouTube

Ewasm overview and the precompile problem: Alex Beregszaszi and Casey Detrio @ Ethereum \\ Part 1 — YouTube

Ewasm overview and the precompile problem: Alex Beregszaszi and Casey Detrio @ Ethereum \\ Part 2 — YouTube

Wasm for blockchain&Eth2 execution: Paul Dworzanski,Alex Beregszaszi,Casey Detrio@Ethereum \\ Part 2 — YouTube

Ewasm for sharding

Ewasm updates

Ewasm design

wasm-intro

相關文章
相關標籤/搜索