之前我们提到过,以太坊智能合约是在称为以太坊虚拟机 (EVM) 中运行。EVM 能够运行某些 OPCODES,并处理存在于堆栈或堆中的数据。在本文当中,我们将更深入地研究 EVM 执行引擎以及数据在整个交易过程中是如何存储、操作和运行的。
状态转换
以太坊作为基于交易的状态机工作。从某个状态开始**s1
,交易处理某些数据以将世界状态转换为某个状态s2
**。
为了将事物组合在一起,交易被打包成块。一般来说,每个区块都会将世界状态从 s1
更改为s2
,并且转换是根据块内每个交易所做的状态更改和计算的。当我们想到这些状态变化时,以太坊可以被认为是一条状态链。
世界状态
那世界状态是什么?以太坊中的世界状态是地址和账户状态之间的映射。以太坊上的每个地址都有自己的状态,可以是用户帐户 (EOA) 或智能合约。
每个区块本质上操纵多个账户状态,从而操纵以太坊的整体世界状态。
帐户状态
那账户状态又是什么呢?
账户状态包含一些常见的东西,比如 nonce 和余额(以 ETH 为单位)。此外,智能合约还包含存储哈希和代码哈希。这两个哈希值作为对单独状态树的引用,分别存储状态变量和智能合约的字节码。