EIP-7702
以太坊改进提案,允许外部持有账户(EOA)通过签署授权元组为自己设置委托代码,使 EOA 在不迁移资产、不更换地址的前提下获得智能账户能力,属于账户抽象大方向的一部分
时间轴 (近 90 天)
EIP-7702 随以太坊 Pectra 升级上线,允许 EOA 通过签署授权元组为自己设置代码,代码变为委托指示符格式 0xef0100 || <委托地址>。
EIP-7702 授权后账户仍是 EOA——地址、私钥、nonce 语义全部保留,只是每次调用会额外执行被委托地址的代码,不把 EOA 变成合约账户。
EIP-7702 授权元组包含六个字段:chain_id、address、nonce、y_parity、r、s;签名者可通过 ecrecover 从元组中恢复。
区块链浏览器通常不会主动高亮「地址代码已被委托给另一合约」这一信息,只展示交易历史、余额和代币持有情况,造成信息不对称。
对任意地址调用 eth_getCode:返回空表示普通 EOA,返回以 0xef0100 开头表示已委托,接下来的 20 字节为委托地址;委托账户可以拥有完全干净、很短的交易历史。
0xef0100 是由 EIP-3541 保留的魔法字节前缀,普通合约无法部署以它开头的代码,因此可作为判断地址是否被 EIP-7702 委托的确定性标志。
eth_getCode 对 EIP-7702 委托账户返回以 0xef0100 开头的 23 字节数据(3 字节前缀 + 20 字节委托地址)。
在一个被委托给吸血合约的 EIP-7702 钱包案例中,研究者对六个授权元组用 ecrecover 恢复签名者,发现全部六个来自同一把密钥且全部指向同一个委托地址。
在该案例中,委托地址的字节码很短,收到转账时直接转发到一个硬编码地址,没有任何条件分支,发送 0.01 ETH 即被全部转走。
对刚发生转账的被委托钱包,「小额测试」不是有效安全策略,唯一安全的转账金额是零。
还有 1 条时间轴事件
全部知识事实 (11)
针对 EIP-7702 吸血陷阱的链上预检流程包括三步:读地址代码(eth_getCode)、读委托合约代码、读授权元组并 ecrecover 验证签名者。
50%待验证EIP-7702 授权后账户仍是 EOA——地址、私钥、nonce 语义全部保留,只是每次调用会额外执行被委托地址的代码,不把 EOA 变成合约账户。
50%待验证EIP-7702 授权元组包含六个字段:chain_id、address、nonce、y_parity、r、s;签名者可通过 ecrecover 从元组中恢复。
50%待验证区块链浏览器通常不会主动高亮「地址代码已被委托给另一合约」这一信息,只展示交易历史、余额和代币持有情况,造成信息不对称。
50%待验证对任意地址调用 eth_getCode:返回空表示普通 EOA,返回以 0xef0100 开头表示已委托,接下来的 20 字节为委托地址;委托账户可以拥有完全干净、很短的交易历史。
50%待验证0xef0100 是由 EIP-3541 保留的魔法字节前缀,普通合约无法部署以它开头的代码,因此可作为判断地址是否被 EIP-7702 委托的确定性标志。
50%待验证eth_getCode 对 EIP-7702 委托账户返回以 0xef0100 开头的 23 字节数据(3 字节前缀 + 20 字节委托地址)。
50%待验证EIP-7702 随以太坊 Pectra 升级上线,允许 EOA 通过签署授权元组为自己设置代码,代码变为委托指示符格式 0xef0100 || <委托地址>。
50%待验证在该案例中,委托地址的字节码很短,收到转账时直接转发到一个硬编码地址,没有任何条件分支,发送 0.01 ETH 即被全部转走。
50%待验证对刚发生转账的被委托钱包,「小额测试」不是有效安全策略,唯一安全的转账金额是零。
50%待验证在一个被委托给吸血合约的 EIP-7702 钱包案例中,研究者对六个授权元组用 ecrecover 恢复签名者,发现全部六个来自同一把密钥且全部指向同一个委托地址。
50%