作者adamcha (生於安乐 死於忧患)
看板DigiCurrency
标题[Coin] EVM到底是怎麽运作的?
时间Fri Feb 25 12:41:08 2022
各位前辈 韭菜 大家好
小弟我又来发问了
在研究过比特币一阵子後
现在想把重心转移到乙太坊上
乙太坊最吸引人的点 就是可以跑智慧合约
而智慧合约是靠EVM(乙太坊虚拟机)所执行
我感到不解的是
这个乙太坊虚拟机 到底是怎麽运作的?
按照去中心化的思想 这个虚拟机绝对不可能是只跑在某几台特定机器上
而是整个ETH网路的每一台矿机都是这个虚拟机的一部分 对吧?
那麽智慧合约的程式码是在所有机器上都跑完一遍
然後把输出的结果互相比较 以多数的为准 这样吗?
因为以前在学校学到的分散式运算
都是把一个很大的工作拆分成好几个子任务 在不同cpu或thread上执行 最後合并
但区块链的智能合约 完全不是这样 所以实在难以理解
恳请前辈给予指点
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.128.97.223 (台湾)
※ 文章网址: https://webptt.com/cn.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