• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 區塊鏈生態 查看內容
    • 22582
    • 0
    • 分享到

    以太坊漫談(一)

    2018-8-12 19:04

    來源: 兄弟連教育

    以太坊的代碼執行



    以太坊合約的代碼使用低級的基于堆棧的字節碼的語言寫成的,被稱為“以太坊虛擬機代碼”或者“EVM代碼”。代碼由一系列字節構成,每一個字節代表一種操作。一般而言,代碼執行是無限循環,程序計數器每增加一(初始值為零)就執行一次操作,直到代碼執行完畢或者遇到錯誤,STOP或者RETURN指令。操作可以訪問三種存儲數據的空間:


    • 堆棧,一種后進先出的數據存儲,32字節的數值可以入棧,出棧。

    • 內存,可無限擴展的字節隊列。

    • 合約的長期存儲,一個密鑰/數值的存儲,其中密鑰和數值都是32字節大小,與計算結束即重置的堆棧和內存不同,存儲內容將長期保持。


    代碼可以像訪問區塊頭數據一樣訪問數值,發送者和接受到的消息中的數據,代碼還可以返回數據的字節隊列作為輸出。


    EVM代碼的正式執行模型令人驚訝地簡單。當以太坊虛擬機運行時,它的完整的計算狀態可以由元組(block_state, transaction, message, code,memory, stack, pc, gas)來定義,這里block_state是包含所有賬戶余額和存儲的全局狀態。每輪執行時,通過調出代碼的第pc(程序計數器)個字節,當前指令被找到,每個指令都有定義自己如何影響元組。例如,ADD將兩個元素出棧并將它們的和入棧,將gas(瓦斯)減一并將pc加一,SSTORE將頂部的兩個元素出棧并將第二個元素插入到由第一個元素定義的合約存儲位置,同樣減少最多200的gas值并將pc加一,雖然有許多方法通過即時編譯去優化以太坊,但以太坊的基礎性的實施可以用幾百行代碼實現。


    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频