返回知识库
Day 2

钱包类型与账户模型

深入理解EOA、合约钱包、MPC钱包的区别,掌握以太坊账户模型,完成测试网实操

2025-01-12
钱包EOA合约钱包MPC账户模型Sepolia

核心概念

什么是以太坊账户?

一句话定义: 以太坊账户是一个可以持有ETH余额、发送交易的实体,由地址唯一标识。

类比理解: 就像银行账户,有账号(地址)、余额(balance)、交易记录(nonce),但区别是你自己保管"银行卡密码"(私钥)。

为什么要理解账户类型?

  • 不同钱包有不同的安全模型和功能
  • 选择合适的钱包影响资产安全
  • 账户抽象(AA)是Web3重要趋势
  • 面试必考知识点

钱包类型详解

1. EOA (Externally Owned Account) - 外部拥有账户

定义: 由私钥直接控制的账户,是最基础的以太坊账户类型。

特点:

特点说明
控制方式私钥(助记词)
创建成本免费,无需Gas
功能只能发起交易,不能被调用
代码无合约代码
安全性单点故障,私钥丢失=资产丢失

代表产品: MetaMask, Rabby, Rainbow, Trust Wallet

结构:

EOA账户
├── address: 0x123...abc (20字节)
├── nonce: 5 (已发送交易数)
├── balance: 1.5 ETH
├── codeHash: 空 (keccak256(""))
└── storageRoot: 空

2. Contract Account - 合约账户/智能钱包

定义: 由智能合约代码控制的账户,可以实现复杂的访问控制逻辑。

特点:

特点说明
控制方式合约代码逻辑
创建成本需要部署合约,消耗Gas
功能可被调用,支持复杂逻辑
代码有合约代码
安全性可实现多签、社交恢复等

核心功能:

  • 多签 (Multi-sig): 需要多个密钥同意才能执行交易
  • 社交恢复: 指定监护人帮助恢复账户
  • 批量交易: 一次交易执行多个操作
  • Gas代付: 让别人帮你付Gas费
  • 交易限额: 设置单笔/每日限额

代表产品: Safe (Gnosis Safe), Argent, Sequence

结构:

合约账户
├── address: 0x456...def (20字节)
├── nonce: 0 (合约不主动发交易)
├── balance: 10 ETH
├── codeHash: 0x789... (合约代码哈希)
└── storageRoot: 0xabc... (存储状态)

3. MPC Wallet - 多方计算钱包

定义: 使用多方计算技术,将私钥分片存储在多个参与方,无单点故障。

特点:

特点说明
控制方式分布式密钥分片
私钥存储分片存储,无完整私钥
签名方式多方协同计算签名
安全性无单点故障
链上表现看起来像普通EOA

工作原理:

传统私钥:
完整私钥 → 签名 → 交易

MPC私钥:
分片1 (用户) ─┐
分片2 (服务商) ├─→ 协同计算 → 签名 → 交易
分片3 (备份) ─┘

任何单一分片都无法独立签名

代表产品: Fireblocks, Coinbase, ZenGo, Dfns


三种钱包对比

对比项EOA合约钱包MPC钱包
私钥管理用户完全持有无私钥概念分片持有
创建成本免费需要Gas免费
多签支持✅ 原生支持✅ 通过分片
社交恢复✅ 可实现⚠️ 依赖服务商
Gas代付✅ 可实现
批量交易✅ 可实现
兼容性最好部分DApp不支持最好(看起来是EOA)
适用场景个人用户团队/大额资产机构/企业

以太坊账户模型

账户状态结构

每个以太坊账户有4个核心字段:

Account State
├── nonce (uint64)
│   └── EOA: 发送的交易数量
│   └── 合约: 创建的合约数量
│
├── balance (uint256)
│   └── 账户持有的Wei数量 (1 ETH = 10^18 Wei)
│
├── codeHash (bytes32)
│   └── EOA: keccak256("") 空哈希
│   └── 合约: 合约代码的哈希
│
└── storageRoot (bytes32)
    └── 存储树的根哈希 (合约状态)

Nonce的作用

为什么需要Nonce?

1. 防止重放攻击: 同一笔交易不能被执行两次

2. 保证交易顺序: 交易必须按nonce顺序执行

3. 取消/加速交易: 发送相同nonce的新交易可覆盖旧交易

示例:

当前nonce: 5

发送交易:
- nonce=5 的交易 → 成功,nonce变为6
- nonce=7 的交易 → 等待(需要nonce=6先执行)
- nonce=4 的交易 → 失败(nonce太低)

链上实操记录

操作1: 领取Sepolia测试网ETH

步骤:

1. 打开MetaMask,切换到Sepolia测试网

2. 复制钱包地址

3. 访问水龙头: https://sepoliafaucet.com/

4. 输入地址,完成验证

5. 等待1-2分钟到账

观察:

  • 领到 0.5 Sepolia ETH
  • 在Sepolia Etherscan可以看到incoming交易
  • 测试币没有实际价值,仅用于测试

操作2: 发送第一笔交易

步骤:

1. 在MetaMask创建Account 2

2. 从Account 1向Account 2发送 0.01 ETH

3. 设置Gas (使用默认即可)

4. 确认交易

观察:

  • Gas费约 0.000021 ETH (21000 gas × gas price)
  • 交易确认约12秒(一个区块)
  • nonce从0变为1
  • Etherscan显示: From, To, Value, Gas Used, Nonce

交易详情解读:

Transaction Hash: 0x...
Status: Success
Block: 12345678
From: 0x你的地址 (Account 1)
To: 0x你的地址 (Account 2)
Value: 0.01 ETH
Transaction Fee: 0.000021 ETH
Gas Price: 1 Gwei
Gas Limit & Usage: 21000 | 21000 (100%)
Nonce: 0

操作3: 体验Safe多签钱包

步骤:

1. 访问 https://app.safe.global/

2. 连接MetaMask (Sepolia网络)

3. 点击 "Create new Safe"

4. 设置签名者和阈值 (如2/3多签)

5. 部署合约 (需要Gas)

观察:

  • 创建Safe需要部署合约,消耗约0.01 ETH Gas
  • Safe地址是一个合约地址
  • 可以设置多个Owner和签名阈值
  • 转账需要达到阈值数量的签名才能执行

今日思考

问题1: 为什么EOA存在安全隐患?

  • 私钥是单点故障,丢失即永久丢失资产
  • 无法设置交易限额或延迟
  • 被钓鱼签名后无法撤销
  • 不支持密钥轮换

问题2: 账户抽象(AA)要解决什么问题?

  • 让合约账户也能发起交易(目前只有EOA可以)
  • 统一EOA和合约账户的体验
  • 支持Gas代付、批量交易等功能
  • ERC-4337是目前主流的AA方案

问题3: 企业应该选择什么钱包?

  • 大额资产: Safe多签 (透明、链上验证)
  • 高频交易: MPC钱包 (快速、无链上成本)
  • 混合方案: MPC + 多签 (兼顾效率和安全)

学习资源

视频教程

资源语言说明
Finematics - Crypto Wallets英文钱包类型全面介绍
What is a Smart Contract Wallet英文合约钱包详解
MPC Wallets Explained英文MPC原理讲解

文档阅读

资源说明
ethereum.org 账户官方账户模型文档
Safe文档多签钱包原理
ERC-4337账户抽象标准
Vitalik - 账户抽象之路AA愿景

工具网站

工具用途
Sepolia Etherscan测试网区块浏览器
Sepolia Faucet领取测试ETH
Safe多签钱包
Argent移动端智能钱包

面试题准备

Q: EOA和合约钱包的区别?

30秒版本:

EOA由私钥直接控制,创建免费但功能有限;合约钱包由智能合约控制,支持多签、社交恢复等高级功能,但创建需要Gas。EOA适合个人用户,合约钱包适合团队和大额资产管理。

2分钟版本:

  • 控制方式: EOA由私钥控制,合约钱包由代码逻辑控制
  • 创建成本: EOA免费,合约钱包需要部署合约
  • 功能对比:
  • EOA: 只能发起交易,功能固定
  • 合约钱包: 多签、社交恢复、批量交易、Gas代付
  • 安全性: EOA有单点故障风险,合约钱包可以分散风险
  • 实际应用: MetaMask是EOA,Safe是合约钱包
  • 趋势: 账户抽象(ERC-4337)正在模糊两者边界

可能追问:

  • 什么是账户抽象? → 让合约账户拥有EOA的能力,统一用户体验
  • Safe如何实现多签? → 通过合约存储owner列表和阈值,交易需要收集足够签名

Q: 什么是账户抽象(Account Abstraction)?

30秒版本:

账户抽象是让用户可以使用智能合约作为主账户的技术,实现Gas代付、批量交易、社交恢复等功能,降低Web3使用门槛。ERC-4337是目前主流实现方案。

2分钟版本:

  • 问题背景: 当前只有EOA能发起交易,用户必须持有ETH付Gas
  • AA目标: 让合约账户也能"发起"交易
  • ERC-4337方案:
  • 引入UserOperation替代传统交易
  • Bundler打包用户操作
  • Paymaster可以代付Gas
  • 用户收益: 无需持有ETH、支持任意验证逻辑、更好的用户体验
  • 案例: Pimlico、Stackup、Alchemy AA

明日预告

Day 3: 交易结构、Gas机制、Nonce

  • 理解交易的完整结构
  • Gas Price、Gas Limit、Priority Fee
  • 如何加速/取消交易
  • 优化GasTracker组件