以太坊虚拟机(EVM)
定义
以太坊虚拟机(EVM)是一个巨大的虚拟机,允许部署和执行代码。你只需安装必要的客户端软件即可访问EVM,并使用它在以太坊上执行程序。本质上,EVM充当“世界计算机”,在分散的环境中执行软件操作。
由于没有集中控制,EVM由几个个人/公司维持,这些个人/公司向系统提供计算能力,以换取奖励。因此,它有助于创建任何一方都无法单方面关闭的抗审查应用程序。
EVM是图灵完备的,因为它可以用于执行各种复杂度的计算。这就是以太坊与比特币的区别,因为比特币是图灵不完整的,限制了其功能。
比特币的主要功能是“分布式账本”,它规定了价值转移的规则。除了处理价值转移,以太坊(通过EVM)还支持智能合约的部署。因此,以太坊被描述为“分布式状态机”。
“State”(状态)是指在任何时间点有关系统的信息。在以太坊中,状态指的是特定时刻存在的地址、账户余额和智能合约代码。每个事务都会导致以太坊的状态发生变化(状态转换),这种变化会反映在整个网络中。
以太坊虚拟机是如何工作的?
Opcodes(机器码)
EVM使用一系列称为“操作码”的指令来执行不同的任务。EVM中有140多个操作码可以执行不同的进程,因此以太坊将其描述为图灵完成。
我们需要操作码,因为EVM无法解释用Solidity编写的指令,Solidity是用于编写智能合约的语言。因此,智能合约代码被转换为操作码,因此它们可以在EVM环境中执行。
例如,可以使用create操作码创建智能合约,也可以使用STOP操作码暂停正在运行的合约。您可以在这里查看以太坊操作码的详细概述。
Gas(燃料)
Gas是在EVM环境中执行代码的资源,以“gwei”(以太单位)为单位。就像你在现实生活中需要汽油来驱动汽车一样,EVM也需要汽油来执行操作。
前面,我们提到了“操作码”——可以用来在EVM中执行不同操作的特定指令。Gas只是执行特定操作所需的计算资源量。
每次代码执行都会产生一笔Gas费,这取决于许多因素,比如操作的复杂性和网络范围的需求。汽油费激励个人将计算能力借给以太坊。如果没有Gas费,EVM就不能像一台分散的计算机一样工作。
Gas还有另一个用途:防止执行恶意操作,如分布式拒绝服务(DDoS)攻击。虽然EVM几乎可以运行任何计算,但很难预测每个操作的运行时间。
精心设计的恶意操作可以无限运行,导致网络失去稀缺的计算能力,最终崩溃。Gas燃料费用通过迫使恶意参与者为计算过程中执行的每一步付费来防止这一问题。
在开始一个操作之前,你必须指定一个“燃料极限”:你愿意在计算上花费的最大Gas量。一旦超过Gas极限,计算立即停止。这再次阻止任何人部署可能威胁以太坊健康的“无限循环”计算。
智能合约
智能合约是在满足预定义参数集后执行的代码片段。智能合约使用条件编程(如果是y,那么是x)来执行操作。
智能合约是不变的、自治的和透明的。这些特性结合在一起,使得智能合约特别有吸引力,尽管它们并非没有缺陷。
“不变性”意味着一旦部署到区块链上,智能合约的代码就无法更改。智能合约是自主的,因为它们可以在没有外部控制的情况下自行执行。它们是透明的,因为管理其性能的规则是用公开的代码编写的。
一些智能合约用于在区块链上创建和交换代币。例如,ERC-20代币有一个智能合约,定义了它们的命名、创建、交换、总供应和其他属性。
交易
一笔交易是来自以太坊帐户的指令。一个示例交易是将以太从钱包发送到一个地址。在这里,您指示EVM将价值从您的钱包转移到区块链上的另一个位置。
并非以太坊上的每笔交易都涉及价值转移;有些可能会传输任意数据。交易的结果还取决于接收者。
一个普通的外部所有账户(EOA)只需接收发送的信息。然而,一旦交易成功,合同账户可能会执行代码。如前所述,事务会导致“状态转换函数”,即以太坊状态的变化。
以太坊虚拟机的特点
确定性
在编程中,确定性是指程序在每个实例中为特定输入生成相同输出的能力。确定性确保开发人员可以独立地设计程序来执行特定的操作并产生所需的结果。
EVM是确定性的,因此无论执行多少次计算,操作码都会提供相同的结果。这一点很重要,因为以太坊的智能合约驱动的DAPP能够处理高价值的交易,并且必须可靠地执行。否则,用户就不会有信心在使用它们时不出现预期的故障。
单独性
EVM是单独的,这意味着代码无法访问计算机上的进程。您可以在EVM中安全地部署程序,同时保护您的硬件/软件免受潜在问题的影响。
此外,智能合约在EVM内的隔离环境中运行。因此,影响特定智能合约的bug或黑客不会损害底层协议。
可终止的
EVM是图灵完备的,因此理论上,如果它有正确的资源和指令,它可以用来执行任何计算。然而,每次计算都依赖于分配给它的气体。如果Gas耗尽,则操作停止。
在这种情况下,您可以将以太坊视为“准图灵完成”或“可终止”,因为代码执行可以在特定时间终止。但是,此功能对于确保程序不会永远(意外或恶意)运行并导致网络停滞非常重要。