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