以太坊上的账户主要分为两类:
- EOA(Externally Owned Account):由私钥控制的普通钱包,只能发交易收款。
- 合约账户(Contract Account):拥有代码逻辑,可以自动执行操作,例如多签钱包、DeFi 合约等。
传统上,EOA 没有能力执行智能合约逻辑,这限制了用户体验和 UX 创新。EIP-7702 的目标就是让普通 EOA 也可以“半智能化”,无需迁移到合约钱包。
为什么需要 EIP-7702?
尽管智能合约钱包越来越强大,普通用户大多仍使用 EOA,但这导致以下限制:
- 批量操作困难
例如 ERC-20 approve + swap,需要两笔交易。 - 无法代付交易
DApp 项目方或第三方无法为用户支付 gas。 - 权限管理有限
例如限制子 key 只能操作部分资产或交互特定 DApp。
EIP-7702 提供了针对 EOA 的 短期功能扩展,解决这些痛点。
核心功能
1. 批量交易(Batching)
通过一次交易执行多个操作,例如:
1. ERC-20 approve
2. ERC-20 transferFrom
传统上需要两笔交易,现在可以一次完成,减少用户操作和 gas 成本。
2. 代付交易(Sponsorship)
允许第三方账户为 EOA 支付交易费,例如:
- DApp 项目方替用户支付 gas
- 用户签名授权,第三方代付
3. 子权限(Privilege De-escalation)
允许用户签署子 key,限制其权限范围,例如:
- 每日最多消费账户余额的 1%
- 仅可在指定 DApp 上操作
- 只能消费 ERC-20,不能操作 ETH
技术实现原理
EIP-7702 引入了 新交易类型:Set Code Transaction(类型 0x04)。
交易结构如下:
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])
核心流程
- EOA 发送交易,附带授权列表(authorization list)。
- 系统将 EOA 的代码替换为 Delegation Indicator:
0xef0100 || target_address
- 执行交易时,EOA 会“跳转”去执行目标合约逻辑。
如果目标地址为
0x0,表示清空委托,恢复普通 EOA。
Delegation Indicator 工作机制
0xef0100是保留 opcode,用于标识委托。- CALL、DELEGATECALL 等操作会执行目标合约逻辑。
- EXTCODE* 指令只访问委托指示本身,避免假装账户拥有不同代码。
- 循环委托:只执行第一层,避免无限循环。
- 不允许委托到预编译合约。
安全与注意事项
- 破坏旧假设
tx.origin == msg.sender只在顶层交易成立,可能影响依赖此检查的合约。
- 委托合约必须安全
- 防止重放攻击
- 限制 gas、value、调用目标
- 防止恶意控制 EOA
- 代付者风险
- 如果授权被撤销或账户清空,代付者可能白付 gas
Gas 成本
- 每个授权约 12500 gas
- 交易本身继承 EIP-2930 的基础成本
- 访问冷账户增加 COLD_ACCOUNT_READ_COST
交易发送者支付所有授权 gas,无论授权是否有效
简单示例(伪代码)
// 目标合约
contract Logic {
function greet() external pure returns (string memory) {
return "Hello from delegated EOA!";
}
}
// EOA 设置委托
SetCodeTx tx;
tx.authorization_list = [
[chainId, eoaAddress, nonce, yParity, r, s] // 签名授权
];
sendTransaction(tx);
// 调用 EOA 执行逻辑
call(eoaAddress.greet()); // 实际执行 Logic.greet()
好处
- 普通 EOA 拥有批量操作、代付、子权限能力
- 保持 EOA 易用性,同时向合约钱包过渡
- 与未来 ERC-4337(账户抽象)兼容
风险与限制
- 安全复杂度增加,钱包和 DApp 开发者需谨慎
- 依赖
tx.origin的合约可能需要调整 - 不允许执行 initcode 或直接部署新合约
总结
EIP-7702 是 EOA 的“半智能化升级”:
- 提升用户体验:批量操作、代付、权限管理
- 保持易用性:无需部署合约即可使用
- 面向未来:兼容账户抽象和智能合约钱包
想象一下,普通钱包也能拥有“半合约钱包”的魔法,而用户无需额外部署合约。



