一文读懂以太坊账户的基本原理,从私钥到世界状态

博主:neragonerago 2026-10-10 08:05:43 2

如果说区块链是一个巨大的全球共享账本,账户”就是这个账本上的基本记账单元,与比特币采用 UTXO(未花费交易输出)模型不同,以太坊从设计之初就选择了更为直观的账户模型,理解以太坊账户的基本原理,是深入学习智能合约、DeFi 乃至整个以太坊生态的第一步,本文将从账户类型、内部结构、地址生成机制等方面,系统剖析以太坊账户的核心原理。

一文读懂以太坊账户的基本原理,从私钥到世界状态

两种账户类型:EOA 与合约账户

以太坊中存在两种类型的账户,它们在地址格式上完全相同(均为 20 字节),但控制方式截然不同:

外部账户

  • 由私钥控制,私钥掌握在用户手中
  • 任何人都可以通过生成密钥对免费创建
  • 可以主动发起交易(转账、部署合约、调用合约)
  • 没有关联的合约代码

合约账户

  • 由智能合约代码控制,不存在对应的私钥
  • 由外部账户(或其他合约)通过交易创建
  • 不能主动“苏醒”,只能在被交易或消息调用触发时执行代码
  • 拥有持久化的存储空间和可执行的代码

一个关键区别在于:EOA 的行为由人决定,合约账户的行为由代码决定,这也是“代码即法律”理念的技术基础。

账户的内部结构:四个核心字段

无论哪种账户,在以太坊世界状态中都由以下四个字段描述:

nonce(交易计数器)

  • 对于 EOA,nonce 表示该账户已发送的交易数量
  • 对于合约账户,nonce 表示其创建的合约数量
  • 核心作用是防止重放攻击,确保每笔交易只能被执行一次,同时保证交易的处理顺序

balance(余额)

  • 账户持有的以太币数量,以 wei 为最小单位(1 ETH = 10¹⁸ wei)
  • 采用 256 位整数存储

storageRoot(存储根)

  • 指向该账户专属存储树的 Merkle 根哈希
  • 合约账户用它保存所有状态变量(如代币的持有人映射)
  • EOA 此字段为空

codeHash(代码哈希)

  • 账户智能合约代码的 Keccak-256 哈希值
  • 代码在部署后不可修改
  • EOA 的 codeHash 是空字符串的哈希

账户地址是如何生成的

以太坊账户体系建立在非对称加密之上,地址的生成遵循一条清晰的链条:

私钥 → 公钥 → 地址

  1. 私钥:一个随机生成的 256 位数字(32 字节),是账户的终极控制权所在,谁掌握私钥,谁就掌握账户。
  2. 公钥:使用 secp256k1 椭圆曲线算法从私钥推导出公钥(64 字节),这一过程在数学上是单向的。
  3. 地址:对公钥做 Keccak-256 哈希运算,取结果的后 20 字节(40 个十六进制字符),加上 0x 前缀即得到地址。

0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

注意:以太坊使用的是原始的 Keccak-256 算法,与 NIST 标准化的 SHA3-256 略有不同,EIP-55 引入了通过大小写混合实现的地址校验机制,帮助检测地址输入错误。

合约账户的地址则由部署者的地址及其 nonce 共同决定(CREATE 操作码),因此是可预先计算的,CREATE2 更进一步允许预先确定合约地址。

账户模型 vs UTXO 模型

维度 以太坊账户模型 比特币 UTXO 模型
记账方式 余额直接增减 未花费输出的集合
直观性 类似银行账户,易理解 需理解“找零”等概念
状态存储 全局世界状态 交易本身携带状态
智能合约 天然支持复杂状态 支持有限

账户模型

The End

发布于:2026-10-10,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。