当我们谈论区块链时,账本是一个核心概念,它记录了系统中的所有关键信息,以太坊作为全球第二大区块链平台,其账本远比简单的交易记录列表要丰富和复杂得多,它是一个去中心化的、全球共享的、状态化的巨型数据库,记录了以太坊网络的一切活动,以太坊账本具体包括什么呢?我们可以从几个关键层面来理解。

核心基石:区块(Blocks)与交易(Transactions)

这是账本最直观的组成部分,也是所有区块链共有的基础。

  1. 交易(Transactions): 这是账本上最基本的执行单元,每一笔交易都是用户发起的一个指令,要求以太坊网络执行某个操作,以太坊上的交易类型多样,主要包括:

    • 价值转移:最常见的以太币(ETH)转账,从一个地址发送到另一个地址。
    • 合约交互:调用智能合约的函数,例如去中心化交易所(DEX)的代币交换、NFT市场的购买等,这是以太坊区别于比特币等简单转账区块链的关键。
    • 合约创建:部署一个新的智能合约到以太坊网络上。

    每一笔交易都包含发送者地址、接收者地址(或合约代码)、值、数据负载、Gas限制和价格等关键信息,并经过发送者的数字签名以确保其有效性。

  2. 区块(Blocks): 交易并非立即被确认,而是被矿工(或验证者)打包进一个个“区块”中,区块就像一页页账本,按时间顺序通过密码学方法链接起来,形成不可篡改的“区块链”。

    • 区块头:包含了区块的元数据,如前一个区块的哈希值(确保链的连续性)、时间戳、难度目标、随机数(Nonce)以及最重要的——交易根哈希(Transaction Root)。
    • 交易列表:区块体内包含了该区块打包的所有交易数据。

这种“区块+链”的结构,为以太坊账本提供了高吞吐量、可追溯和防篡改的特性。

网络的“状态”:世界状态(World State)

如果说区块和交易是账本的“流水账”,记录了“发生了什么”,那么世界状态就是账本的“资产负债表”,记录了“当前是什么情况”,它是以太坊账本最核心、最独特的部分之一。

  • 定义:世界状态是一个巨大的、持久化的键值数据库,它实时记录了以太坊网络在任何一个时间点的快照,键是地址(账户地址或合约地址),值是与该地址相关联的数据。
  • 账户模型:以太坊采用账户模型,而非比特币的UTXO模型,账户分为两类:
    • 外部账户(EOA, Externally Owned Account):由用户私钥控制的账户,用于发起交易,其状态包括:nonce(发送交易的数量,防止重放攻击)、balance(账户的ETH余额)。
    • 合约账户(Contract Account):由代码控制,不能主动发起交易,只能被其他账户调用,其状态包括:nonce、balance、code(合约的字节码)和storage(合约的持久化存储数据)。
  • Merkle Patricia Trie(默克尔帕特里夏树):为了高效地存储和查询这个巨大的状态数据库,以太坊使用了Merkle Patricia Trie数据结构,这种树形结构不仅保证了数据完整性(任何微小的改动都会导致根哈希的巨大变化),还能让轻量级客户端(如手机钱包)通过下载状态根哈希来验证某个特定状态的有效性,而无需下载整个数据库。

智能合约的“硬盘”:存储(Storage)

智能合约的storage是其状态的一部分,但它值得单独强调,你可以把它想象成每个智能合约自带的、去中心化的“硬盘”。

  • 持久化数据:当智能合约需要记录一些长期、持久化的信息时(一个DeFi协议中每个用户的存款数量,一个NFT的当前所有者),就会将其写入storage。
  • 链上成本高昂:由于所有数据都存储在成千上万的节点上,storage的写入和读取操作非常消耗Gas(交易手续费),开发者会谨慎地将数据放在storage中,有时会采用更优化的数据结构或利用链下存储(如IPFS、Arweave)来降低成本。

数据的“临时缓存”:内存(Memory)

与storage相对的是memory,它存在于智能合约执行的短暂过程中。

  • 临时性:memory是每个合约调用时创建的临时区域,合约执行结束后就会被销毁,它不记录在区块链上,也不消耗Gas(除了在计算Gas时会考虑内存大小)。
  • 计算用途:memory用于存储合约执行过程中的中间变量、计算结果和临时数据,在复杂的数学运算或处理数组时,数据会先被加载到内存中进行计算。

历史的见证:收据(Receipts)

每笔交易执行后,都会生成一个交易收据,它本身不是账本的核心数据,但却是账本功能的重要补充。

  • 执行结果记录:收据记录了交易执行后的结果,
      随机配图