Ethereum Virtual Machine的缩写,中文直译全称为以太坊虚拟机。对于没有接触过软件开发的用户来说,EVM看似晦涩难懂。但是如果我们先类比什么是Java虚拟机,或许会更好理解。
一、简单的类比:EVM之于以太坊,正如Java虚拟机之于Java语言
在做开发前,程序员需要把Java代码编译成字节码,但计算机无法识别字节码,Java虚拟机的作用就是把字节码编译成计算机系统可以识别的机器码指令,然后在计算机上运行。那么同样的,EVM的存在是为了能让程序员用Solidity编写的合约代码,运行在以太坊的环境中。
可见,以太坊就相当于计算机环境,而EVM负责把合约代码编译成以太坊能识别的机器码运行。在网络较为繁荣,也就是开发者搭建应用需求比较旺盛的时候,每天甚至每小时都会有成千上万条新的代码写入以太坊网络。但是,这些合约代码,如果无法被编译成系统可以识别的语言信号,就无法转化成具体的指令和程序。所以,我们可以把EVM看成是以太坊生态中最重要的资源转换器。没有了他,以太坊上的代码就无法生效,即便是开发者孜孜不倦地编写程序语言,也等同于停更。须知,任何一款程序的代码停止更新,就意味着他走向终结。另外,如果没有EVM,任何人都无法在以太坊协议上执行程序软件,因为这样一来他们写入系统的代码,全是Bug。
为进一步强化读者对EVM的概念,大家不妨先明晰两个概念:虚拟机和图灵完备性。
二、读懂两个最关键概念:虚拟机和图灵完备性
首先,虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
也就是说在实体计算机中能够完成的工作,在虚拟机中都能够实现。虚拟机通过生成现有操作系统的全新虚拟镜像,具有和Windows系统完全一样的功能,但它又是独立运行的,不会对真正的系统产生影。
因此,可以这么理解,以太坊的虚拟机(EVM)就是以太坊智能合约的运行环境,系统中的节点可借助EVM来运行自己的DAPP。另外,由于以太坊虚拟机的运行环境完全与主链隔离,这自然而然地形成了一种测试环境。这种测试环境,给了许多没有区块链技术经验的开发者大胆试错的机会,因为他们的错误代码完全不会影响到以太坊智能合约。
其次,图灵完备是个技术术语,得名自英国数学家艾伦·图灵(Alan Turing),发明了第一台图灵机器,它是当今计算机的先驱。后来,计算机业界用图灵完备代指可以处理任意复杂程度的计算。从理论上看,以太坊可以部署任何类型和功能的计算机程序,只是这些程序是分布式的,而非通常我们所看到的中心化的,而这一切,需要归功于EVM的底层设计。从这一角度来看,比特币并不是图灵完备的,因为他只是个分布式账本,无法执行任何应用程序。
最后,综合这两大概念,可知EVM是一个可以执行任何复杂度计算的、完全虚拟化的计算机系统,从这一点来看它又像以太坊的大脑。
三、EVM执行过程中的关键性模块
EVM的运转,紧紧地围绕着以太坊的生态。所以,很多让我们感到晦涩但又熟悉的以太坊术语,其实均与EVM有着莫大的关系。
首先是操作码。EVM就是通过操作码,来解释和转译Solidity编写的指令。目前EVM中有140多个不同的操作码,他们类似EVM直接发出的指令。例如,CREAT操作码对应着创建智能合约,STOP操作码意指暂停正
其次是Gas费。Gas费是在EVM环境中执行代码的资源,以“gwei”(以太单位)为单位。具体来看,执行任何一笔交易,都需要消耗算力资源和存储空间,就像我们在手机中任意下载一个应用,都需要占用电量和内存。这部分隐性的消耗,在链上就直观地转化成显性的Gas费成本。EVM和Gas费之间的关系,像是汽车和汽油,EVM每执行一项指令,都要消耗对应额度的Gas费;
最后是执行转账功能,这也是EVM和全体以太坊用户都能产生关联的地方。EVM在转账时的具体步骤如下:
1)核对是否有误差,包括转账数值和签名的有效性等;
2)计算转账所需要的Gas费,并执行收取Gas费指令;
3)将数字资产转账到指定的地址。
需要注意的是,EVM若检测出转账者未支付足够的手续费,那么转账会被回滚,且不退转账费,直接支付给矿工。另外,如果是收款人地址错误导致的交易失败,EVM会原封不动的把转账本金和手续费退回给付款人。
四、浅析EVM公链的概念和重要动向
以太坊在公链赛道,稳坐龙头地位,无论是生态应用数量和总锁仓量都占行业绝大多数。因此,市面上主流的公链,都选择兼容EVM,他们也因此得名EVM公链。
EVM兼容,指的是在其公链上搭建的智能合约,可以快速便捷而又低成本地在以太坊上来回迁移、无缝搬运。目前,很多公链在开发中,特意实现了EVM兼容的功能,以达到最大化承接以太坊外溢项目的功能,类似于移动互联网玩法中的引流。所以,许多公链项目方都将实现EVM兼容,作为其最大的卖点和看点。
当然,从目前的行情来看,EVM兼容链的最终优胜者,依然寥寥。
五、什么是eWASM?它和EVM的关系是什么?
熟悉以太坊生态的朋友都知道,以太坊2.0是以太坊的终极形态,它在实现了POW转POS机制后,能够高性能地处理一切计算任务,甚至媲美Web2的互联网产品。但是,按照目前EVM的底层设计和性能表现来看,EVM实在无法与以太坊2.0的理想状态适配。于是,eWASM(ETH版的WebAssemly)成为EVM的接棒者、替代品。
交待一下,WebAssemly即Web上的汇编,作为近年来兴起的Web执行环境,是一种为基于栈的虚拟机设计的的二进制指令格式。相对JavaScript,拥有更好的性能、较低的存储成本、更安全的执行环境、更多的语言支持等优势。
按照设想,因为相比于EVM,eWASM具有更好的性能以及更好的扩展性,可以支持Solidity、C++、Rust、AssemblyScript等编程语言,开发合约会更容易。eWASM也与当前的Web标准兼容,因而更容易在普通浏览器中运行,用户无需扩展程序即可访问DApp。
此外,以太坊并不是唯一一个使用WASM作为其底层执行引擎的,EOS、Dfinity、Polkadot、Tron、Cardano、Spacemesh等都已经或正在采用 WASM。
值得注意的是,以太坊2.0分为三个阶段:PoS、分片,以及排在最后的eWASM。目前大家最关心的转POS,也就是合并,还在准备过程当中。所以尚需时日的eWASM,其代码更新的频次并不多,但他的概念足够吸引人。eWASM能否真如其设想,撬动整个以太坊2.0,还将持续关注。
今天的分享就到这里,后期会给大家带来其他赛道的龙头项目分析。