钱包类型与账户模型
深入理解EOA、合约钱包、MPC钱包的区别,掌握以太坊账户模型,完成测试网实操
核心概念
什么是以太坊账户?
一句话定义: 以太坊账户是一个可以持有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组件