[Coin] EVM到底是怎麼運作的?

作者: adamcha (生於安樂 死於憂患)   2022-02-25 12:41:08
各位前輩 韭菜 大家好
小弟我又來發問了
在研究過比特幣一陣子後
現在想把重心轉移到乙太坊上
乙太坊最吸引人的點 就是可以跑智慧合約
而智慧合約是靠EVM(乙太坊虛擬機)所執行
我感到不解的是
這個乙太坊虛擬機 到底是怎麼運作的?
按照去中心化的思想 這個虛擬機絕對不可能是只跑在某幾台特定機器上
而是整個ETH網路的每一台礦機都是這個虛擬機的一部分 對吧?
那麼智慧合約的程式碼是在所有機器上都跑完一遍
然後把輸出的結果互相比較 以多數的為準 這樣嗎?
因為以前在學校學到的分散式運算
都是把一個很大的工作拆分成好幾個子任務 在不同cpu或thread上執行 最後合併
但區塊鏈的智能合約 完全不是這樣 所以實在難以理解
懇請前輩給予指點
作者: Ayukawayen (亞布里艾爾發芽>//<)   2022-02-25 12:46:00
簡單講:一台算,其他台驗算。你是算的還是驗算的,看你有沒有挖到礦決定。
作者: adamcha (生於安樂 死於憂患)   2022-02-25 12:51:00
喔喔 好像有點懂了 感謝ayu大
作者: MACD (MACD)   2022-02-25 15:04:00
你連的RPC主機負責算,打包節點負責驗算。
作者: ripple0129 (perry tsai)   2022-02-25 16:03:00
後面的問題怎麼感覺跟是不是EVM沒什麼關係,EVM不就是跟docker類似的東西嗎
作者: kugwa (kugwa)   2022-02-25 18:17:00
所有機器看到的合約程式碼以及交易順序都是一致的(都來自鏈上)所以所有機器的計算結果會完全一樣算不一樣的就是亂搞的 就會被排擠簡單說 合約程式碼和交易序列就決定了運算結果 算出不是這種結果的就是有問題為了在去中心的前提下形成共識 這種執行結果的確定性是必要的反過來說 這也是為什麼EVM沒辦法支援那種每個機器會算出不同結果的operation例如「獲取機器本地時間」EVM裡面要抓時間只能抓區塊的timestamp才能大家看到一樣VM這個字其實有點泛用 做系統的人會覺得VM裡面跑的程式碼原本是直接跑在真實機器上 只是現在被放進隔離的環境但其實EVM的VM跟JVM的VM含意比較像 就是一套自定義的程式語言 & bytecode & run-time執行環境
作者: adamcha (生於安樂 死於憂患)   2022-02-25 20:05:00
感謝苦瓜大詳解 Orz
作者: viudo (viudo)   2022-03-01 02:36:00
感謝推文講解

Links booklink

Contact Us: admin [ a t ] ucptt.com