前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以太坊虚拟机EVM究竟是个啥

以太坊虚拟机EVM究竟是个啥

作者头像
用户7634691
发布2022-05-31 08:29:38
1.4K0
发布2022-05-31 08:29:38
举报

基本概念

EVM(ETHereum Virtual Machine)是「以太坊虚拟机」的缩写。如果你有一些软件开发的背景,一定听过java虚拟机。通俗的解释java虚拟机的就是:

我们写的java代码(不只是java,groovy,scala等也可以)会被编译成字节码,但是字节码计算机是没办法识别的。java虚拟机的作用就是把字节码编译成计算机系统可以识别的机器码指令,然后在计算机上运行。如下图所示:

好,再说回来EVM。EVM的存在是为了能让我们用Solidity编写的合约代码,运行在以太坊的环境中。这样类比的话,以太坊就相当于计算机环境,EVM把合约代码编译成以太坊能识别的机器码运行。那现在可能还不止以太坊,市面上涌现了很多新的公链也兼容EVM(这个下面的章节会讲到)。我们把上面的图改一改,类比下:

EVM和公链有啥关系

目前市面上主流的公链,大部分都兼容EVM。所谓的兼容,就是假如你写了一个智能合约部署在以太坊上,那么同时你也可以迁移到任意的兼容链上。

为什么这些链要做EVM兼容呢?核心当然是以太坊在公链领域的影响力。目前市场上的各种公链此起彼伏,但是以太坊依然是公链领域的龙头。这些新兴的公链需要利用以太坊引流,如果开发者可以把智能合约直接无缝迁移到自己的链上,那就是最好的引流方式。

在这些公链产生之前,以太坊的生态里,EVM已经部署了大量的应用。如果你不兼容这些应用,前进的道路必然是举步维艰。就好像咱们的鸿蒙系统,是可以兼容安卓全部应用的,这也是鸿蒙其中一个最重要的战略。

下面这个图是截止到我写这篇文章,全球公链的市场份额:

然后你可以在下面这个网站看到所有兼容EVM的公链,

https://www.coincarp.com/zh/chainlist/

你会发现市场份额靠前的这些公链基本都是兼容EVM的。

技术细节

这部分比较偏技术,如果你觉得比较枯燥也可以跳过这部分。

大部分了解以太坊,会简单的认为它是跟比特币区块链一样的一个分布式账本,可以交易,有自己的货币,余额等。这个理解没错,但是以太坊不仅仅是这样,它还支持一种更强大的功能叫智能合约。这种情况下我们把以太坊比喻为分布式的状态机器可能更合适。它可以根据预定义的一组规则在不同的区块之间进行更改,并且可以执行任意的机器代码。在区块中更改状态的具体规则由 EVM 定义。

我们可以把以太坊看成是一个基于交易的状态机:在给定输入的情况下,它会产生确定性的输出。因此,将以太坊更正式地描述为具有状态转换函数非常有帮助:

代码语言:javascript
复制
Y(S, T)= S'

给定一个旧的有效状态 (S)> 和一组新的有效交易 (T),以太坊状态转换函数 Y(S,T) 产生新的有效输出状态 S'。

这个看起来是不是就很像计算机了。

智能合约会被编译成字节码,而这些字节码遵守EVM的opcodes指令,可以被执行。比如xor,and,add,sub等。关于所有的opcodes指令,感兴趣的可以看下面这里:

https://ethereum.org/zh/developers/docs/evm/opcodes/

前面我们提到了两个关键的词:交易和状态。交易触发了状态的改变,那么什么是状态呢?

在以太坊中,状态其实是一个叫默克尔树的数据结构。我在几年前写过一篇文章专门讲默克尔树,如下:

Merkle Tree与区块链

我这里再简单总结两句。

在默克尔树中,由叶子节点保存区块数据的哈希,而由非叶子节点保存其子节点的哈希。这样一个数据结构有两条很重要的特点:

  1. 判断两个默克尔数是否相同,只需要判断根节点的哈希值即可。
  2. 可以快速的判断数据是否存在于默克尔树中。

以太坊有个概念叫世界状态,它的数据结构就是默克尔树。世界状态里保存着账户的映射关系,随着交易的进行这些状态会不断的变化。

而以太坊的账户分为两种,一种是交易发币用的账户,一种是合约账户。后者是我们创建一个智能合约的时候建立的。所以智能合约的数据也是存储在账户中,它的状态也是随着交易的发生而变化。

总结

经常有人讨论,EVM和非EVM哪个好。我们其实可以看到排名靠前的公链里其实也有不兼容EVM的。那到底哪个好呢?未来又是谁能一统天下呢?

我个人的看法是,目前来看兼容EVM是主流。非兼容EVM的公链需要靠创意和落地的场景来打出自己的一片天地。目前各方竞争都很激烈,一切还未成定局,时间才是最好的见证者。


参考:

  • https://www.footprint.network/dashboards
  • https://ethereum.org/zh/developers/docs/evm/
  • https://zhuanlan.zhihu.com/p/203347169
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 犀牛的技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • EVM和公链有啥关系
  • 技术细节
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档