了解以太坊虚拟机(EVM)
以太坊虚拟机(Ethereum Virtual Machine,简称EVM)
是以太坊网络的核心组件之一,它承担着智能合约执行
的重要任务
特点
-
智能合约执行环境:EVM提供了一个安全的环境,用于
执行智能合约
。这些合约以Solidity
等高级编程语言编写,并在以太坊区块链上部署和执行 -
不可篡改性:EVM的设计目标之一是确保智能合约执行的
不可篡改性
。一旦部署到以太坊区块链上,智能合约的代码将永远不会改变,保证了合约的可靠性和安全性 -
分布式执行:EVM运行在整个以太坊网络上的节点之上,通过共识算法确保所有节点对智能合约的执行结果达成一致
-
燃料机制:为了防止恶意用户
滥用资源
,EVM引入了燃料机制
。执行智能合约需要支付一定数量的以太币作为燃料费用,确保合约的执行成本被合理控制
状态与数据模型
- 存储区域(Storage):
存储区域
是每个以太坊账户的持久性存储空间
,用于永久性地存储合约的状态信息
。这些状态信息包括合约的变量
、状态标志
、以及其他重要的数据,这里指的是每个节点的状态数据库。
比如
ERC20代币
合约,它存储了每个用户的余额信息
。在合约的存储区域中,将会存储每个用户的地址与对应的余额
数据
- 内存区域(Memory):内存区域是EVM提供的一个临时性的存储空间,用于在合约执行期间存储临时数据。通常用于存储中间计算结果或其他临时数据。
在一个复杂的数学计算合约中,可能需要使用内存区域来存储中间计算结果,以便在执行过程中进行多步计算
- 合约数据区域:合约数据区域是用于存储合约的代码的特殊存储空间。每个合约的代码都存储在合约数据区域中。
一个智能合约的
字节码文件(由代码编译而来)
存储在合约数据区域
中的数据。当合约被部署到以太坊网络上时,会被存储在这个特殊的存储空间中
注意
交易和合约调用(
其实也是一种交易
)的信息会存储在区块链上
,但是这些交易引发的状态变更
(比如Alice向Bob转了1ETH)是不会记录在区块链中
的,状态变更数据库
是节点根据区块链中的交易构建而成的。所以我们上面说的存储区域
和合约数据区域
是节点根据区块构建出来的。
为什么要构建状态数据库?
构建状态数据库之后节点可以快速的校验交易的合法性,以及验证新区块
- 从计算机的角度看:状态数据库
可能存在计算机的硬盘里,也可能存在计算机的内存中
,要看节点的具体实现 - 从EVM的角度看:先对于内存区域而言,这些数据被
"物理"
的存储了
结论
- 以太坊虚拟机(EVM)是以太坊生态系统的核心组件之一,它为智能合约的安全执行提供了一个可靠的环境
- EVM的特点和状态与数据模型为开发者提供了丰富的功能和灵活性,使得以太坊成为了一个强大而多样化的智能合约平台