什么是以太坊虚拟机EVM
扫描二维码
随时随地手机看文章
以太坊是仅次于比特币的第二重要、最受欢迎的加密货币。通常被认为是比特币在加密货币领域的竞争对手。
和比特币一样,以太坊也是分散式的,运行在区块链技术上,是一个开源项目。然而,以太坊比比特币更具灵活性和适应性。任何有知识的人都可以在该平台上创建新的应用程序。随着第二版本Ethereum Homestead的发布,这些应用程序已经可以安全使用。
Homestead为用户提供了创建任何他们想要的应用程序的自由,不管这些应用程序有多复杂。它还成为了一个平台,用于启动除加密货币之外的新的分散的区块链应用程序。
所有这些过程的核心是以太坊虚拟机(EVM),这是一种准图灵机,可以编写任意复杂的随机算法代码。
什么是虚拟机及其工作原理
为了更好地理解EVM是什么以及它是如何工作的,我们需要理解术语“准图灵”的含义。“准”是“部分”的意思,“图灵”是指“现代计算机科学之父”、因为图灵机器的创造者是艾伦·图灵。
在计算机世界中,有许多访问和修改数据的系统。这些系统包括中央处理单元和编程语言。
一个系统或机器,可以在数学上执行任何计算或问题,被认为是图灵完备。
以太坊虚拟机被标记为准图灵机,因为它可以解决的计算是由gas约束的,这意味着它可以执行的计算数量是有限的。
在以太坊网络上,天然气相当于一笔费用。你在以太坊网络上进行的每笔交易都有一个价格,而gas就是支付方式。
以太坊网络上的gas概念有两个方面——gas和gas价格。gas是测量工具:它标识执行特定计算所需的费用。天然气价格是用户愿意为每单位天然气支付的以太币。
Wei是汽油价格的计量单位。Wei以太币的最小单位,一个以太币=10¹⁸Wei。
在任何交易发生之前,必须设定燃气限额和燃气价格。如果你作为试图完成交易的人,没有足够的燃气,交易就会无效。
由于计算依赖于gas,因此EVM无法执行某些计算。这些问题包括采空区瓦斯限值太低,计算非常复杂,在经济上被认为是不切实际的。
EVM编程语言称为EVM字节码。如果使用更高级的编程语言,比如以太坊的 Solidity,来编写特定的代码,那么这些代码将被添加到EVM字节码中,以便EVM能够理解它。
EVM , 一个基于事务的状态机
EVM有很多用途;其中两个主要是处理网络上的计算和内部状态,以及处理与用户姓名和地址、当前油价、余额和块信息相关的帐户信息。
EVM是基于事务的状态机,这意味着它管理网络上的内部状态。没有EVM,就无法跟踪完成事务所需每个组件的状态。这些成分共同作用来调节复杂以太坊区块链的变化水平。
作为基于事务的状态机,EVM需要监视帐户状态、世界状态、存储状态、运行时环境信息和块信息。
帐户状态
以太坊网络由许多相互作用的小账户组成——合约账户或外部拥有的账户。
在两个外部拥有的帐户之间发生的通信称为价值转移。这两个帐户都可以使用私钥通过数字签名的事务相互发送消息。
外部拥有的帐户与合约帐户之间的通信使后者能够使用其代码执行不同的操作,例如创建和传输代币。
外部拥有的帐户可以促使合约帐户采取行动;合约帐户是反应性的。这意味着它们不能发起事务,只能响应它们接收到的其他事务。
合约帐户具有与之关联的代码或编程语言,并且此合约代码可以控制帐户。
外部拥有的帐户没有代码,但可以使用私钥进行控制。
任何外部拥有的帐户都可以向其他外部拥有的帐户发送消息,也可以向合约帐户发送消息。这种类型的帐户有一个用于签署帐户事务的私钥。
帐户状态有四个主要组件:nonce、balance、storageRoot和codeHash
- Nonce -在外部拥有的帐户中,Nonce表示从帐户地址发送的事务数量。在合约帐户中,它是由该帐户创建的合约数量。
- balance -账户地址所拥有的余额
- storageRoot - Merkle Patricia树根节点的256位哈希值。默认情况下,树是空的,它对帐户的存储内容进行编码。
- codeHash -这段代码是不可变的:没有人可以在它创建之后改变它。这个帐户的EVM的codeHash也是在这个地址接收到消息调用时执行的代码。
World State
World State由帐户状态和160位地址标识符之间的映射组成。该信息存储在Merkle Patricia树中。
存储状态
存储状态是EVM上运行时管理的特定于帐户的信息。
这是执行事务所需的信息。它包括:
-来源-交易的原始发件人的地址
-调用方-执行事务的帐户的地址
-燃气价格-交易发起者指定的燃气的当前价格
-代码大小-事务代码库有多大
块的信息
这些是支持事务所必需的状态值。信息包括:
- Blockhash -最近完成的块的哈希
- Coinbase -收件人地址
-当前块的时间戳
-当前块的编号
-当前块的难度级别
-电流块的气体极限