通俗易懂的 EVM 入门文章,理解以太坊与 EVM 的关系,深入了解 EVM 的架构
来源 | medium.com/@somubhargava97 作者 | Somu Bhargava
图片来源:executium ,unsplash
EVM 对于以太坊状态机就好比处理器对于计算机般至关重要。它主要是用于执行智能合约的逻辑和进行相应的状态转换。在我们深入 EVM 时,现在先简单看看以太坊吧。
以太坊是开源、去中心化的区块链,具有智能合约的额外功能。它意味着,在网络上发生的交易种类大致是 ETH 转账 (或) 智能合约部署 (或) 智能合约调用——所有这些都会改变以太坊区块链的状态。一堆这些交易按照特定顺序组合成一个区块,执行该区块里交易合起来所需的 gas 应小于或等于区块 gas 上限 (译者注:EIP-1559 后 gas 上限是 30 m) 。
一笔交易大概如下:
Transaction -
nonce - 由交易发件人发送的交易号
gas price - 这笔交易的 gas 价格 (单位为 wei)
gas limit - 这笔交易可以使用的最高 gas 量
to - 这笔交易的受款人
value - 转给受款人的 wei 数值
data - 信息调用的输入数据
v, r, s - 可恢复的发件人 Secp256K1 签名
以太坊的世界状态就是地址和其对应的账户状态之间的映射。账户状态大概如下:
Account -
nonce - 到现在从该相应账户发送的交易数量的值
balance - 这个账户持有的 wei 数量
storageRoot - 256 位键值对之间的映射
codeHash- 属于这个账户的的 EVM 代码的不可变哈希值。当有人与这个账户进行交易时,此代码将被执行。
矿工通过汇集一些交易来形成一个区块,并获取打包该区块的工作量证明。这个区块随后会在网络被广播到其他参与以太坊区块链的节点。现在,其他接收到此区块的节点必须验证其有效性,因为矿工可能是恶意的,可能会出现传输错误,中间人攻击 (man-in-the-middle attack)。每个节点 (大致) 从以下方面验证区块:
以太坊虚拟机 (Ethereum Virtual Machine, EVM) 负责执行交易和更新区块链状态。让我们在下文了解更多 EVM 的细节。
智能合约可以被编译成 EVM 字节码。作为类比,把 Solidity 代码 (编写智能合约的通用语言) 想象成 C++代码。把 EVM 字节码看作是机器代码,它是可以被处理器理解和执行的。因此,EVM 可以被认为是以太坊的一个处理器。EVM 字节代码是操作码和数据序列,可以被 EVM 处理,形成状态转换。
因此,EVM 在执行交易中的作用:
transaction.data
栏位获取的输入数据)。现在,任何账户都可以有与 EVM 相关的字节码吗?答案是否定的。以太坊有两种类型的账户——外部所有账户 (EOA) 和合约账户 (CA)。EOA 是具有私人密钥关联的账户,由像个人、组织等的外部实体操作。另一方面,合约账户是通过部署智能合约创建的。它们没有相关私钥,并由外部实体对其进行的代码调用 (通过区块链上的交易) 控制。
基本上,每个节点上都会启动一个 EVM 实例来执行每笔交易。但是,只有当交易的受款方 (或目标) 是一个合约账户时,EVM 实例才会执行字节码。
现在,让我们来看看 EVM 的架构。
图表来自 https://ethereum.org/en/developers/docs/evm/
启动的每个 EVM 实例都是为运行一个特定的字节码 (由于交易的目标是一个合约账户)。因此,字节码就像是 EVM 实例的 ROM,是不能修改的。类似于[图灵机](notion://www.notion.so/Turing Machine),EVM 由一个程序计数器 (Program Counter)、堆栈 (Stack)、内存 (Memory) 和外部存储器。这个外部存储器对所有交易进行永久存储,但其余组件的存储是易失的,并会对 EVM 的每个实例进行重新实例化。
让我们来逐个了解这些组件——
与计算机处理器如何根据每个指令集理解特定的操作码类似,EVM 也需要理解操作码。每个 EVM 操作码都是一个字节,因此根据理论,最多可以有 256 个操作码,但这里就不列出全部 256 个操作码了。EVM 操作码主要可分为以下几类——
很快会出下一篇更详细的关于操作码的文章。敬请关注!
ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ethereum.cn,若需长期转载,请联系eth@ecn.co进行授权。
本文首发于:https://news.ethereum.cn/Technology/introduction-to-evm-part-1
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!