Skip to content

EIP-7702 技术实现

本文档详解 EIP-7702 的技术原理、生命周期、Gas 成本和应用场景。EIP-7702 通过给 EOA 设置代码值,使其具备智能合约能力,是账户抽象演进的重要一步。


一、背景

1.1 为什么需要 EIP-7702?

尽管 AA 钱包在推广,大量用户仍停留在 EOA。用户希望 EOA 具备 AA 能力,又不想理解复杂概念。

EIP-7702 由 V神牵头提出,在 Pectra 升级中包含(代替原来的 EIP-3074)。

1.2 行业关注

MetaMask、WalletConnect、Biconomy、Uniswap、TrustWallet、Safe 等主流钱包团队都在关注。所有 EVM 系公链都在积极准备。

1.3 AA 账户现状痛点

对现有 Web3 用户

  • 不想放弃 EOA 切换到空账户
  • 不信任 AA 服务提供商
  • Gas 比 EOA 高(4337 经过 EntryPoint + 复杂验证)

对新用户

  • AA 概念理解成本更高
  • 随着深入会发现 Gas 问题,转向 EOA

二、核心原理

2.1 一句话理解

EIP-7702 将 EOA 指向一个智能合约的代码,让 EOA 同时具备 EOA 和智能合约的能力

2.2 特性总览

特性说明
无需中心信任点不需要 Bundler 和 EntryPoint
兼容性与 ERC-4337 基础设施完全兼容
验证执行结合减少中断,简化调用
面向未来技术负担低,无需硬分叉

2.3 用户体验

graph LR
    A[我的EOA] -->|签署授权| B[设置合约代码]
    B --> C[EOA具备合约能力]
    C --> D1[批量交易]
    C --> D2[Gas代付]
    C --> D3[策略执行]
    C --> D4[Passkey控制]
    C --> E[随时可恢复纯EOA]

用户感受:

  • ✅ 在 EOA 中随时设置需要的功能
  • ✅ 用 EOA 直接发起交易,Gas 可接受
  • ✅ 使用自己的 EOA,有安全感
  • ✅ 不需要特定服务商账户
  • ✅ 不用理解 AA 概念

三、技术详解

3.1 新交易类型

EIP-7702 定义了交易类型 0x04,新增 authorization_list 字段:

authorization_list = [
    [chain_id, address, nonce, y_parity, r, s],
    [chain_id, address, nonce, y_parity, r, s],
    ...
]
  • 每个元素是一个包含用户 EOA 签名的授权
  • address 指向供 EOA 执行逻辑的合约代码
  • chain_id = 0 代表授权多链有效(注意安全风险!)
  • 委托指定代码格式:0xef0100 ++ address

3.2 签名方式

两层签名

第一层(签消息): keccak(0x05 || rlp([chain_id, address, nonce]))
第二层(签交易): rlp(整个 type=4 交易)

3.3 完整交易结构

rlp([
    chain_id,
    nonce,
    max_priority_fee_per_gas,
    max_fee_per_gas,
    gas_limit,
    destination,          // 交易目标地址
    value,
    data,
    access_list,
    authorization_list,   // 新增!
    signature_y_parity,
    signature_r,
    signature_s
])

四、完整生命周期

4.1 设置合约地址

sequenceDiagram
    participant Alice as Alice(EOA)
    participant Chain as 以太坊

    Alice->>Alice: 签署 authorization<br/>(chain_id, contract_addr, nonce)
    Alice->>Chain: 发送 0x04 类型交易<br/>携带 authorization_list
    Chain->>Chain: 验证 authorization 签名
    Chain->>Chain: 设置 Alice.code = 0xef0100 + contract_addr
    Chain->>Chain: Alice.nonce += 1
    Note over Chain: Alice 的 EOA 现在具备合约能力

重要注意事项

  • 即使没发普通交易,Nonce 也会增加 1
  • 0x04 交易有 tocalldata,可同时做合约设置和其他交互
  • 多个重复 authorization 取最后一个有效
  • chainId = 0 时一次钓鱼可能损失全链资产
  • 可能出现 Nonce 跳跃现象

4.2 执行合约调用

设置完成后,EOA 具有两大特性:

特性说明交易类型
作为 EOA 使用完全控制权:转账、合约调用、重设/删除普通交易
作为 CA 使用发交易给自己,触发智能合约功能普通交易(不需要0x04)

⚠️ 注意:别人对此地址的转账可能触发合约回调,存在交易失败的可能。

4.3 重置或取消

  • 发送新的 0x04 交易覆盖原设置
  • 将合约地址设为 0x0000...0000 即取消,恢复为普通 EOA

4.4 被动执行

  • 如果合约没有接受 ETH 的方法 → 无法接收 ETH
  • ERC20 转账不受影响(不与用户地址合约交互)

五、Gas 成本分析

5.1 计算公式

基础成本 = 21,000 + 16 * 非零calldata字节 + 4 * 零calldata字节
+ PER_EMPTY_ACCOUNT_COST(25,000) * authorization数量

两种费用:

  • PER_EMPTY_ACCOUNT_COST (25,000):首次设置代理的成本
  • PER_AUTH_BASE_COST (2,500):无操作授权的成本

5.2 实测数据

操作类型原 Gas7702 Gas变化
转账 ETH21,00034,193+63%
转账 Token35,28741,937+19%
转账 ETH + Token56,28754,317-3.5%

注:以上为最简单的执行合约,无权限控制。实际使用 Gas 可能更高。

5.3 CeFi 归集场景对比

现有逻辑

  • 一次代币归集 = 打手续费(21,000) + 归集(35,000) = 46,000
  • n 次代币归集 = 46,000 × n

接入 7702 后

  • 设置合约:约 60,000(一次性)
  • n 次代币归集 = 60,000 + 41,937 × n

5.4 盈亏平衡点

场景结论
只有 ETH 充值永远老逻辑更省
单个 Token 充值n > 15 次后 7702 更省
多个 Token 充值2-3 个 Token 后 7702 更省

💡 建议:在用户有多个 token 需要归集时开启 7702,或直接开启提现大地址的 7702 功能。


六、应用场景

6.1 交易所一键归集

graph LR
    A[传统方式] -->|"1.充Gas到用户地址<br/>2.发起归集交易"| B[需要两笔交易]
    C[7702方式] -->|"设置转账逻辑合约<br/>专门地址触发转账"| D[一键完成]

6.2 一键 Swap

传统:先 approve → 再 swap(两笔交易) 7702:一笔交易完成(approve + swap 批量执行)

6.3 无缝接入 Web3

sequenceDiagram
    participant User as Web2用户
    participant App as 应用
    participant Chain as 链上

    User->>App: 使用 Passkey 签署
    App->>App: 生成随机私钥签署 authorization
    App->>Chain: 打包 passkey权限设置 + authorization → 一笔7702交易
    Note over Chain: 随机私钥只用这一次,无人知晓
    Note over User: 用户得到 Passkey 控制的 EOA 钱包

6.4 其他场景

场景说明
DeFi 策略批量执行一笔交易完成多个 DeFi 操作
策略交易会话密钥免 EOA 私钥签名
家庭模式多成员 Passkey 管理同一 EOA
CeFi + DeFiPasskey 同时管理 DeFi 和 CeFi
Gas 赞助EOA 实现 Paymaster 接口

七、风险提示

风险说明影响方
⚠️ 钓鱼风险用户签署不明授权损失巨大,比 4337 更高钱包团队
⚠️ 多链重放chainId=0 时多链有效,一次钓鱼全链损失钱包团队
撤销延迟需要额外交易重新委托用户
向前兼容tx.origin/code 判断逻辑受影响开发人员
存储残留重新委托后存储不清除开发人员

应对措施

  • 钱包侧加入恶意 code 检测
  • 存储管理(设置代码前初始化存储)
  • 预置白名单 code(钱包内提供安全常用功能合约)
  • 合约规范(注意 7702 带来的变化)

八、与 ERC-4337 对比

特性EOA (before)EOA (7702)ERC-4337
无需中心信任点❌ (需Bundler/EP)
无需每账户部署合约
低 Gas 消耗
无需特定钱包服务商
可使用相同地址
低授权风险
多签
外部执行者
批量交易
Gas 赞助
自定义签名(Passkey)
Recovery

打破的不变量

EIP-7702 上线后,多个以太坊"定律"被打破:

  1. ❌ 账户余额只能因源自该账户的交易而减少
  2. ❌ EOA nonce 每次只增加 1(可能同时增加多个)
  3. tx.origin == msg.sender 的防护逻辑
  4. ❌ EOA 无法发出事件
  5. ❌ EOA 接受资产必然成功(回调可能导致失败)

交易生命周期对比

graph LR
    subgraph "EOA 传统"
        A1[签名] --> A2[广播]
    end
    subgraph "ERC-4337"
        B1[部署CA] --> B2[多算法签名UO] --> B3[广播到Bundler池] --> B4[等待打包上链]
    end
    subgraph "EIP-7702"
        C1[部署CA] --> C2[EOA签名] --> C3[广播]
    end

九、EIP-7702 能解决 EOA 的哪些问题?

问题能否解决说明
私钥难保护CA 本质由原 EOA 私钥驱动
签名算法少但可伴随 BLS 升级
签名权限高部分 ✅CA 可设置分级权限地址
交易手续费批量操作可降低费用
交易隐私-
交易代付项目方可驱动用户 EOA 执行
抗 DoS符合 EIP-1559 逻辑
中心化风险不需要 EntryPoint 等中心
多币种支付代付时操作

总结

EIP-7702 通过模糊 EOA 和合约账户之间的界限,让用户无缝体验复杂功能。它与 ERC-4337 并行发展,适合不同场景:

  • 7702:轻量、低 Gas、保留 EOA 体验,适合存量用户升级
  • 4337:完整 AA 能力(多签、恢复),适合需要完整智能合约钱包的场景

对 CeFi 最大的价值在于优化多 Token 归集场景的 Gas 成本,对 DeFi 用户则带来批量操作和 Gas 赞助能力。