以太坊作为分布式状态机的核心在于其世界状态(World State)。所有节点从创世区块的初始状态开始,按顺序执行每个区块内的交易,这些交易对状态进行增加、删除或修改操作。由于所有节点执行相同的交易序列,最终状态在所有节点保持一致,这一全局一致的状态即为“世界状态”。本文将系统介绍以太坊世界状态的数据结构及其相关组件。
世界状态的核心作用
世界状态是以太坊区块链的核心,其他数据都围绕其构建。它代表了整个网络的当前状态,包括所有账户的余额、合约代码和存储数据。每当新区块被确认,世界状态就会更新,且一旦确认便不可更改。
State Trie:存储世界状态
在以太坊黄皮书的第4.3节中,区块头定义了15个字段,其中三个关键字段分别记录不同Trie的根哈希:
transactionsRoot:交易Trie的根receiptsRoot:收据Trie的根stateRoot:世界状态Trie的根
stateRoot一旦被写入区块头,便无法改变,确保了状态的一致性。
State Trie存储每个账户的信息,以键值对形式组织:
- 键:账户地址的Keccak256哈希值
值:账户信息的RLP编码数据,包括:
- nonce(交易计数器)
- balance(账户余额)
- storageRoot(仅合约账户有,存储合约数据的Trie根)
- codeHash(合约代码的哈希值)
当区块链发生重组(Reorganization)时,节点需要回滚到历史状态,这涉及状态树的修剪和恢复。
Modified Merkle Patricia Trie 结构
State Trie采用Modified Merkle Patricia Trie(MPT)结构,优化了存储效率和验证性能。MPT包含三种节点类型:
- 叶子节点(Leaf Node):无子节点,存储[encodedPath, value],其中encodedPath是键的部分路径,value是账户数据。例如,键"a711355"可能对应余额45.0 ETH。
- 分支节点(Branch Node):有子节点,存储17个项[v0...v15, vt]。前16项对应十六进制路径,最后一项vt存储值(如果存在)。
- 扩展节点(Extension Node):优化连续单子节点分支节点,存储[encodedPath, next-node],压缩路径并指向下一个节点。
这种结构高效平衡了存储空间和查询速度。
Storage Trie:存储合约数据
每个合约拥有独立的Storage Trie,其根哈希storageRoot存储在State Trie中。合约数据以键值对形式存储:
- 键:状态变量槽位的Keccak256哈希值
- 值:状态变量的当前值
例如,合约中定义的uint pos0存储在槽位0,键为Keccak256(0)。开发者可通过JSON-RPC方法如eth_getStorageAt查询合约存储数据。
Transactions Trie:记录交易数据
每个区块包含一个Transactions Trie,存储区块内所有交易的以下信息(基于黄皮书第4.2节):
- nonce
- gasPrice
- gasLimit
- to(接收地址)
- value(转账金额)
- v, r, s(签名参数)
键为交易索引的RLP编码,确保交易数据的不可篡改性和可验证性。
Receipts Trie:存储交易执行结果
每个区块的Receipts Trie记录交易执行结果,包括:
- status(交易成功或失败)
- cumulativeGasUsed(区块内累计Gas消耗)
- bloom(日志的布隆过滤器)
- logs(合约事件日志)
键同样为交易索引的RLP编码。Transactions Trie和Receipts Trie虽不直接改变世界状态,但提供了交易执行的可追溯证据。
常见问题
世界状态与区块状态有何区别?
世界状态反映整个网络的当前状态,而区块状态是特定区块确认后的瞬间状态。世界状态随每个新区块更新。
MPT结构如何保证数据一致性?
MPT的默克尔树特性使得任何状态变更都会导致根哈希变化,其他节点可快速验证状态一致性,确保网络安全。
合约存储数据如何被访问?
通过合约地址和存储槽位计算哈希键,即可查询Storage Trie中的数据。外部工具和节点API均支持此类查询。
状态树修剪如何工作?
旧状态节点在不再需要时被标记删除,减少存储空间占用,但历史状态仍可通过存档节点访问。
交易执行失败会影响世界状态吗?
失败交易可能消耗Gas,但不会改变世界状态(如余额或合约存储),仅记录在Receipts Trie中。
如何验证状态根的正确性?
全节点执行区块内所有交易,重新计算stateRoot,与区块头中的值比对,一致则验证通过。
通过以上机制,以太坊世界状态实现了高效、安全且可验证的分布式状态管理,为去中心化应用奠定了坚实基础。