当我们谈论区块链时,账本是一个核心概念,它记录了系统中的所有关键信息,以太坊作为全球第二大区块链平台,其账本远比简单的交易记录列表要丰富和复杂得多,它是一个去中心化的、全球共享的、状态化的巨型数据库,记录了以太坊网络的一切活动,以太坊账本具体包括什么呢?我们可以从几个关键层面来理解。
核心基石:区块(Blocks)与交易(Transactions)
这是账本最直观的组成部分,也是所有区块链共有的基础。
-
交易(Transactions): 这是账本上最基本的执行单元,每一笔交易都是用户发起的一个指令,要求以太坊网络执行某个操作,以太坊上的交易类型多样,主要包括:
- 价值转移:最常见的以太币(ETH)转账,从一个地址发送到另一个地址。
- 合约交互:调用智能合约的函数,例如去中心化交易所(DEX)的代币交换、NFT市场的购买等,这是以太坊区别于比特币等简单转账区块链的关键。
- 合约创建:部署一个新的智能合约到以太坊网络上。
每一笔交易都包含发送者地址、接收者地址(或合约代码)、值、数据负载、Gas限制和价格等关键信息,并经过发送者的数字签名以确保其有效性。
-
区块(Blocks): 交易并非立即被确认,而是被矿工(或验证者)打包进一个个“区块”中,区块就像一页页账本,按时间顺序通过密码学方法链接起来,形成不可篡改的“区块链”。
- 区块头:包含了区块的元数据,如前一个区块的哈希值(确保链的连续性)、时间戳、难度目标、随机数(Nonce)以及最重要的——交易根哈希(Transaction Root)。
- 交易列表:区块体内包含了该区块打包的所有交易数据。
这种“区块+链”的结构,为以太坊账本提供了高吞吐量、可追溯和防篡改的特性。
网络的“状态”:世界状态(World State)
如果说区块和交易是账本的“流水账”,记录了“发生了什么”,那么世界状态就是账本的“资产负债表”,记录了“当前是什么情况”,它是以太坊账本最核心、最独特的部分之一。
- 定义:世界状态是一个巨大的、持久化的键值数据库,它实时记录了以太坊网络在任何一个时间点的快照,键是地址(账户地址或合约地址),值是与该地址相关联的数据。
- 账户模型:以太坊采用账户模型,而非比特币的UTXO模型,账户分为两类:
- 外部账户(EOA, Externally Owned Account):由用户私钥控制的账户,用于发起交易,其状态包括:
nonce(发送交易的数量,防止重放攻击)、balance(账户的ETH余额)。 - 合约账户(Contract Account):由代码控制,不能主动发起交易,只能被其他账户调用,其状态包括:
nonce、balance、code(合约的字节码)和storage(合约的持久化存储数据)。
- 外部账户(EOA, Externally Owned Account):由用户私钥控制的账户,用于发起交易,其状态包括:
- Merkle Patricia Trie(默克尔帕特里夏树):为了高效地存储和查询这个巨大的状态数据库,以太坊使用了Merkle Patricia Trie数据结构,这种树形结构不仅保证了数据完整性(任何微小的改动都会导致根哈希的巨大变化),还能让轻量级客户端(如手机钱包)通过下载状态根哈希来验证某个特定状态的有效性,而无需下载整个数据库。
智能合约的“硬盘”:存储(Storage)
智能合约的storage是其状态的一部分,但它值得单独强调,你可以把它想象成每个智能合约自带的、去中心化的“硬盘”。
