以太坊,作为一个全球去中心化的计算平台,其核心在于能够安全、可靠地执行用户发起的交易,并更新整个网络的状态,而驱动这一切动态变化的核心机制,便是“账户状态转换”,理解这一概念,如同理解了以太坊引擎每一次跳动的脉搏,是掌握其工作原理的关键。

什么是状态?

在以太坊中,“状态”指的是在特定时间点,整个以太坊网络中所有账户信息的总和,你可以将其想象成一张巨大的、分布式的电子表格,记录了网络中每一个账户的实时数据,这张“表格”存储在以太坊的底层——以太坊虚拟机(EVM)所能访问的数据库中,即世界状态树(World State Tree)

每个账户在以太坊中都有四种基本属性:

  1. 余额(Balance):账户拥有的以太币(ETH)数量,以“wei”为单位(1 ETH = 10^18 wei)。
  2. Nonce:一个递增的计数器,对于外部账户(EOA),它代表该账户已发送的交易数量;对于合约账户,它代表该账户已创建的合约数量。
  3. 代码(Code):仅合约账户拥有,是一段智能合约的字节码,定义了合约的行为逻辑。
  4. 存储(Storage):仅合约账户拥有,是一个持久化的键值对数据库,用于存储合约运行过程中需要持久化的数据。

什么是状态转换?

“状态转换”指的是当一笔交易被网络确认并执行后,以太坊的世界状态如何从一种状态(S_old)转变为另一种新状态(S_new),这个过程是确定性的——给定相同的初始状态(S_old)和相同的交易,无论在哪个节点上执行,最终得到的新状态(S_new)都将完全一致。

状态转换函数可以抽象地表示为:S_new = U(S_old, T)

  • S_old 是交易执行前的世界状态。
  • T 是被执行的交易。
  • U 是状态转换函数,即EVM执行交易的过程。
  • S_new 是交易执行后的世界状态。

状态转换的详细步骤:一笔交易的旅程

一笔交易从被创建到最终导致状态转换,主要经历以下几个关键步骤:

  1. 交易广播与验证

    • 交易由发送者的外部账户(EOA)创建,并通过节点广播到以太坊网络。
    • 网络中的每个节点在将其纳入内存池(mempool)待处理前,会进行基本验证,包括:
      • 签名是否有效。
      • 发送者的Nonce是否与当前状态中的Nonce匹配。
      • 发送者的余额是否足够支付交易费用(Gas Fee)。
      • Gas Limit是否合理等。
  2. 交易执行(EVM的核心作用)

    • 当一个区块被挖出后,区块中的交易按顺序被挑选出来,由每个节点的EVM逐个执行。

    • EVM会根据交易类型(如转账、合约部署、合约调用)执行相应的操作,以下是几种常见交易类型导致的状态转换:

      随机配图