以太坊虛擬機入門1-介紹

以太坊虛擬機介紹

近期打算寫一些關於以太坊虛擬機(後面簡稱EVM)的文章,這是其中的第一篇。這一系列文章想站在EVM指令集的角度,帶領讀者逐步理解EVM工作原理,進而理解以太坊區塊鏈技術細節。由於網上介紹以太坊的文章也比較多,所以這一系列文章將最大程度減少不必要的廢話,直接提供文章想要表達的信息。

EVM基本信息

編程語言虛擬機一般有兩種類型,基於棧,或者基於寄存器。大部分我們所熟知的語言都採用基於棧的虛擬機,比如最著名的Java虛擬機。在遊戲領域非常流行的Lua語言則採用了基於寄存器的虛擬機。和JVM一樣,EVM也是基於棧的虛擬機。

既然是支持棧的虛擬機,那麼EVM肯定首先得有個棧。爲了方便進行密碼學計算,EVM採用了32字節(256比特)的字長。EVM棧以字(Word)爲單位進行操作,最多可以容納1024個字。這就是我們在這篇文章裏需要了解的EVM信息,在後面的文章裏,我們會逐步介紹更多的EVM細節。下面是EVM棧的示意圖:

stack

EVM指令集

和JVM一樣,EVM執行的也是字節碼。由於操作碼被限制在一個字節以內,所以EVM指令集最多隻能容納256條指令。目前EVM已經定義了約142條指令,還有100多條指令可供以後擴展。這142條指令包括算術運算指令,比較操作指令,按位運算指令,密碼學計算指令,棧、memory、storage操作指令,跳轉指令,區塊、智能合約相關指令等。我們會在後面的文章裏逐步討論這些指令,下面是已經定義的EVM操作碼分佈圖(灰色區域是目前還沒有定義的操作碼):

opcodes

其他文章

以太坊虛擬機入門2-棧操作指令
以太坊虛擬機入門3-算術運算指令
以太坊虛擬機入門4-位移運算指令
以太坊虛擬機入門5-比較操作指令
以太坊虛擬機入門6-密碼學運算指令
以太坊虛擬機入門7-存儲操作指令

廣告

如果大家對編程語言虛擬機有更多的興趣,請關注我寫的《自己動手寫Java虛擬機》,以及馬上將要出版的《自己動手實現Lua:虛擬機、編譯器、標準庫》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章