当我们谈论以太坊时,常常会提到它是一个全球去中心化的计算机,能够运行智能合约和处理各种应用,一个核心问题随之而来:以太坊上的数据,尤其是那些需要持久化存储的数据,究竟存储在哪里?以太坊的数据并非存储在某个单一的服务器或中心化数据库中,而是巧妙地分布在全球的节点网络中,并采用了不同的存储策略来处理不同类型的数据。

要理解以太坊的存储机制,我们首先需要区分以太坊区块链本身存储的数据以及与以太坊交互的应用数据。

以太坊区块链本身:数据存储在“区块”中

以太坊区块链的本质是一个分布式账本,由一个个按顺序相连的“区块”组成,每个区块都包含了一些关键信息:

  1. 区块头:包含了前一个区块的哈希值、时间戳、难度目标、随机数、以及最重要的——状态根交易根收据根,这些“根”实际上是Merkle树的根哈希值,它们指向了区块内的具体交易和状态数据,但不直接存储这些数据。
  2. 交易列表:记录了在该区块中被执行的所有交易的具体内容。
  3. 状态数据(部分):以太坊的全局状态,包括账户余额、合约代码、合约存储等,其哈希值(状态根)记录在区块头中,但完整的状态数据并不是每个区块都完整重复存储,而是通过状态根的变迁来维护其一致性。

关键点:这些区块数据,包括区块头和交易列表,会被所有或部分以太坊节点下载并存储,根据节点类型的不同,它们存储的数据范围和完整度也有所差异:

  • 全节点:存储了从创世区块至今的所有区块数据,包括完整的交易历史和状态历史(虽然状态会定期修剪,但完整节点通常会保留最新状态),全节点是维护以太坊网络完整性和安全性的基石,它们能够独立验证所有交易和状态转换。
  • 归档节点:这是最“完整”的节点,不仅存储所有区块数据,还保留了所有历史状态的完整快照,可以查询到任何历史时刻的状态数据,归档节点对存储空间要求极高。
  • 轻节点:只下载区块头,并通过与全节点的交互来获取特定交易或状态信息,不存储完整的区块数据,因此对存储空间要求很小。
  • 随机配图