以太坊采用状态账户模型(State-based Account Model),而非比特币的 UTXO 模型。本文将深入剖析账户的分类、数据结构、状态存储方式,以及底层 Merkle Patricia Trie 的工作原理,为理解智能合约的执行逻辑打下基础。
比特币使用的是 UTXO(Unspent Transaction Output)模型:
但以太坊的目标是成为通用计算平台,需要能够:
因此,以太坊选择了更像“账户账本”的状态账户模型(每个账户有状态,状态可变)。
| 类型 | 名称 | 控制方式 | 是否含代码 | 是否可主动发交易 |
|---|---|---|---|---|
| EOA | 外部账户(Externally Owned Account) | 私钥签名控制 | 否 | ✅ 可以发起交易 |
| CA | 合约账户(Contract Account) | 被合约逻辑调用 | 是 | ❌ 只能被动响应调用 |
每个账户都由一个 20 字节的地址标识,其生成方式如下
address = last20bytes(keccak256(pubkey)))address = keccak256(rlp(sender, nonce)))📌 合约账户无法主动发交易,但可以在被调用时再发起内部调用。