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