在区块链的世界里,“记账”是核心概念之一,如果说比特币的记账模型相对简单,更像一个分布式的、公开的“账本”,记录着UTXO(未花费的交易输出)的流转,那么以太坊的记账模型则更为复杂和强大,它构建了一个支持智能合约的、动态的“世界计算机”的底层基础,以太坊采用的是账户模型(Account Model),这与比特币的UTXO模型有着本质的区别。
核心基石:账户(Accounts)
以太坊的记账模型围绕“账户”这一核心概念展开,每个账户都有一个唯一的地址,是以太坊网络中价值存储和智能合约执行的主体,账户主要分为两类:
-
外部账户(Externally Owned Accounts, EOAs):
- 这是由用户通过私钥控制的账户,类似于我们日常使用的银行账户。
- 特点:没有关联的代码,其状态变化完全由用户通过交易发起。
- 功能:可以发送以太币(ETH)、发起智能合约交互、部署新的智能合约等。
- 每个EOA都有一个nonce值,这是一个递增的计数器,用于防止重放攻击并确保交易的顺序性。
-
合约账户(Contract Accounts):
- 这是由智能代码控制的账户,其代码部署在以太坊区块链上。
- 特点:包含关联的智能合约代码,其状态变化由交易或来自其他合约的调用触发。
- 功能:可以存储数据(在合约状态变量中)、接收ETH、执行逻辑运算、与其他合约交互等。
- 合约账户也有nonce值,主要用于记录其创建的合约数量(对于创建合约的交易)或确保交易的顺序性。
账户的构成:状态(State)
每个账户(无论是EOA还是合约账户)都包含以下关键状态信息:
- Nonce:
- 对于EOA:该账户已发送的交易数量。
- 对于合约账户:该账户已创建的合约数量(当合约通过
CREATE指令创建时)。
- 余额(Balance):
账户中持有的以太币(ETH)数量,以“wei”为最小单位(1 ETH = 10^18 wei)。
- 存储(Storage):
- 仅合约账户拥有,这是一个持久化的数据存储区域,用于保存合约的状态变量,存储在以太坊的“世界状态”(World State)中,修改存储需要消耗大量的Gas。

- 仅合约账户拥有,这是一个持久化的数据存储区域,用于保存合约的状态变量,存储在以太坊的“世界
- 代码(Code):
- 仅合约账户拥有,这是部署在合约账户中的智能合约字节码,当合约账户被调用时,这部分代码会被EVM(以太坊虚拟机)执行。
核心载体:世界状态(World State)
以太坊的记账模型不仅仅是记录单个账户的变化,而是维护一个全局的、动态的“世界状态”,世界状态可以理解为一个键值对数据库,
- 键(Key):账户地址(160位整数)。
- 值(Value):该账户对应的上述状态信息(Nonce、Balance、Storage根哈希、代码哈希)。
这个“世界状态”是实时更新的,每当一笔交易被成功执行并打包进区块,世界状态就会相应地发生变化,当Alice向Bob转账1 ETH时:
- Alice的账户余额减少1 ETH,Nonce值加1。
- Bob的账户余额增加1 ETH,Nonce值加1。
- 世界状态数据库中Alice和Bob的账户记录被更新。
状态转换:交易的驱动
以太坊的记账过程是通过状态转换函数(State Transition Function)来实现的,就是一笔有效的输入交易(Transaction)会触发世界状态从一个有效状态S转换到另一个有效状态S'。
以太坊支持多种类型的交易,如:
- 普通转账(Transfer):改变EOA之间的ETH余额。
- 合约部署(Contract Creation):创建一个新的合约账户,并将初始代码存储其中。
- 合约调用(Contract Interaction):调用已部署合约的函数,可能改变合约的存储状态或触发其他操作。
每一笔交易都需要支付Gas,Gas费用用于补偿网络中的节点(矿工/验证者)进行交易验证、打包、状态计算和存储等工作的成本,Gas机制是防止恶意交易和无限循环计算的重要保障。
数据结构:Merkle Patricia Trie
为了高效地存储和验证庞大的世界状态,以太坊采用了Merkle Patricia Trie(MPT,默克尔帕特里夏树)这种数据结构。
- 世界状态树(State Trie):根节点代表整个世界状态的根哈希,这个哈希值会被打包到区块头中,作为区块的重要组成部分,通过这个根哈希,可以快速验证世界状态的完整性。
- 存储树(Storage Trie):每个合约账户的存储数据本身也存储在一个MPT中,该树的根哈希作为“存储”字段的值存储在状态树中对应合约账户的记录里。
- 交易树(Transactions Trie) 和 收据树(Receipts Trie):区块中的交易列表和交易执行后的收据(包含日志等信息)也分别用MPT存储,其根哈希同样位于区块头中。
这种树形结构带来了巨大的好处:
- 高效验证:可以快速证明某个特定账户的状态或某笔交易的存在性,而不需要下载整个世界状态。
- 数据完整性:任何数据的微小改动都会导致其根哈希发生巨大变化(雪崩效应),确保了数据不可篡改。
- 轻量化客户端:轻量级节点可以通过下载区块头和验证MPT证明来获取所需的状态信息,而无需存储完整的区块链数据。
以太坊记账模型的意义与优势
以太坊的账户型记账模型相较于比特币的UTXO模型,具有以下显著优势:
- 支持智能合约:这是最核心的优势,账户模型天然适合存储和管理合约状态,使得复杂的逻辑和状态交互成为可能。
- 状态查询直观:可以直接查询某个账户的余额、代码、存储状态等信息,类似于查询传统数据库中的记录,更为直观和便捷。
- 更丰富的应用场景:除了简单的转账,账户模型能够支撑去中心化应用(DApps)、去中心化金融(DeFi)、非同质化代币(NFT)等复杂应用场景。
- 账户状态连续性:每个账户都有持续的状态(余额、存储等),便于跟踪账户的历史变化和当前状态。
以太坊的账户型记账模型,通过账户、世界状态、Merkle Patricia Trie等核心组件,构建了一个动态、可编程、去中心化的“全球状态机”,它不仅记录了价值的转移,更重要的是记录了智能合约的状态变化和逻辑执行,为以太坊作为“世界计算机”的愿景奠定了坚实的基础,理解这一记账模型,是深入掌握以太坊工作原理、开发智能合约以及构建去中心化应用的关键一步,随着以太坊2.0的不断发展,其记账模型在可扩展性和效率上也将持续演进。