以太坊采用状态账户模型(State-based Account Model),而非比特币的 UTXO 模型。本文将深入剖析账户的分类、数据结构、状态存储方式,以及底层 Merkle Patricia Trie 的工作原理,为理解智能合约的执行逻辑打下基础。
📚 作者:Henry 🧱 系列:《以太坊工作原理全解析》 · 第 3 篇 👨💻 受众:Web3 开发者 / 区块链学习者 👉 系列持续更新中,建议收藏专栏或关注作者。
比特币使用的是 UTXO(Unspent Transaction Output)模型:
但以太坊的目标是成为通用计算平台,需要能够:
因此,以太坊选择了更像“账户账本”的状态账户模型(每个账户有状态,状态可变)。
类型 | 名称 | 控制方式 | 是否含代码 | 是否可主动发交易 |
---|---|---|---|---|
EOA | 外部账户(Externally Owned Account) | 私钥签名控制 | 否 | ✅ 可以发起交易 |
CA | 合约账户(Contract Account) | 被合约逻辑调用 | 是 | ❌ 只能被动响应调用 |
每个账户都由一个 20 字节的地址标识,其生成方式如下
address = last20bytes(keccak256(pubkey))
)address = keccak256(rlp(sender, nonce))
)📌 合约账户无法主动发交易,但可以在被调用时再发起内部调用。
每个账户在状态树中以键值对形式存储,包含以下核心字段:
{
"nonce": uint, // 发起交易的计数器(防重放)
"balance": uint, // 当前余额(单位:wei)
"storageRoot": hash, // 合约状态变量存储的根哈希
"codeHash": hash // 合约代码哈希(或空)
}
storageRoot
与 codeHash
为空storageRoot
指向其持久化变量存储, codeHash
存储 runtime bytecode 的哈希以太坊采用Merkle Patricia Trie,一种混合结构,用于确保状态可验证、压缩、高效查找。
![03_mpt.png](https://img.learnblockchain.cn/attachments/2025/...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!