当人们谈论区块链时,常常会问到一个问题:“它到底使用了什么数据库?” 对于像比特币这样相对简单的区块链,答案或许可以简化为一种键值存储,但对于以太坊这个复杂的、可编程的区块链世界来说,答案则要深刻和有趣得多,以太坊并没有使用我们传统意义上理解的、像MySQL或PostgreSQL那样的关系型数据库,它的“数据库”是一个由多种技术精心组合而成的、专为去中心化环境设计的独特状态存储系统。

以太坊的“数据库”核心是一个分布式、持久化的键值存储数据库,但它的巧妙之处在于,这个数据库的数据结构访问方式是由以太坊虚拟机(EVM)和其共识规则严格定义的。

下面,我们将深入探讨构成以太坊状态存储的几个关键组成部分。

核心概念:状态树(State Tree)

要理解以太坊的存储,首先要理解“状态”是什么,以太坊的状态,指的是在区块链的任何一个给定时间点,整个网络中所有账户的集合及其余额、代码、存储等信息的快照,为了高效地管理和查询这个庞大的状态,以太坊采用了Merkle Patricia Trie(MPT)数据结构,也就是我们常说的状态树

  • 键值对:状态树本质上是一个巨大的键值数据库,这里的“键”是账户地址的哈希值(20字节),而“值”是该账户所有信息的编码(包括余额、nonce、代码根、存储根等)。
  • 树形结构:MPT是一种将所有键值对组织成树形结构的数据结构,每个节点代表一部分数据,通过从根节点开始,根据键的路径一步步向下查找,最终可以快速定位到任何一个值。
  • Merkle特性随机配图