你用助记词或私钥恢复了钱包,明明用的是自己备份的私钥,但Etherscan上还显示着一行委托合约地址。这不代表账户被盗了——可能只是旧委托记录还在链上。私钥恢复了,但链上状态需要自己清除。
先搞清楚:私钥恢复和委托状态是两件事
助记词或私钥恢复只能让你重新控制这个地址的签名权,它不会自动清除链上已有的代码委托。
EIP-7702的委托是存在链上状态里的。你恢复钱包时,只是把本地钱包的配置文件重建了,但以太坊链上记录"这个地址被委托给了谁"的那个字段,不会因为你重新导入私钥就自动归零。EIP-7702规范明确支持"通过Relayer在源链上清除委托",这意味着恢复后委托仍然存在是完全正常的场景。
最小可行步骤
清除链上的EIP-7702委托记录,让账户恢复为普通EOA,按顺序操作:
第一步:检查委托状态
打开Etherscan或其他区块浏览器,输入你的钱包地址。在"More Info"区域找到"Authorizations (EIP-7702)"或"Delegate Information"字段。如果显示非零地址,说明委托还在,需要清除。
完成标准:你确认了当前委托合约地址是谁。如果显示的是你信任的官方合约,风险可控;如果是你不认识的地址,需要尽快清除。
第二步:使用钱包的清除功能
情况A:使用Alchemy Wallet API(推荐,有Gas赞助)
Alchemy的undelegateAccount接口可以通过BSO(Bundler Sponsorship)策略赞助Gas,账户不需要持有原生币即可清除委托。
操作路径:调用wallet_prepareCalls并传入eip7702Auth capability,将委托目标指向零地址0x0000000000000000000000000000000000000000。然后用wallet_sendPreparedCalls提交签名即可。
情况B:使用eip7702reset工具(命令行)
安装Rust后执行:
cargo install eip7702reset eip7702reset clear --rpc-url <你的RPC> --gas-limit 50000
该工具会交互式地提示你输入私钥,并使用Relayer支付Gas。如果账户里没有ETH支付Gas,可以用eip7702-clean-delegation工具,它支持赞助交易模式——用另一个有ETH的账户作为Sponsor支付Gas。
情况C:使用Ethers.js手动清除
通过authorize方法创建一个指向ethers.ZeroAddress的授权,然后发送一笔type 4交易:
const revokeAuth = await signer.authorize({
address: ethers.ZeroAddress,
nonce: currentNonce + 1
});
const tx = await signer.sendTransaction({
type: 4,
to: signer.address,
authorizationList: [revokeAuth]
});完成标准:交易成功上链,Etherscan上的"Authorizations"字段变为空或显示零地址。
第三步:验证清除结果
在Etherscan重新查询你的钱包地址,确认"Authorizations"字段已消失或显示为0x0000000000000000000000000000000000000000。如果账户的code字段恢复为空,说明已成功恢复为普通EOA。
完成标准:Etherscan显示委托地址已清除,账户恢复为普通EOA。
失败排查
情况A:钱包界面提示"已清除",但Etherscan还显示委托
EIP-7702的交易执行部分是独立于委托设置的,即使外层交易回退,委托设置也不会回滚。所以不要只看钱包弹窗的"成功/失败",以Etherscan的eth_getCode结果为准。
情况B:清除后旧委托又出现了
可能有几种原因:一,你清除的是其他链,但旧委托在另一条链上还在;二,你的私钥确实已经泄露,攻击者在重新设置委托。如果确认是后者,优先把资产转移到新地址,而不是反复清除同一地址。
情况C:无法支付Gas或被恶意合约阻止清委托
EIP-7702原生支持赞助交易,但恢复支持取决于钱包和Relayer的具体实现。不要接受任何要求提供私钥或转账的第三方Relayer,应该通过钱包官方文档的指引操作。
验证收尾
清除委托后,在Etherscan上确认以下两项:
"Authorizations"字段为空或显示零地址
地址的code字段恢复为空(普通EOA状态)
如果这两项都满足,你的账户已恢复为普通EOA,可以正常使用所有功能。
操作完成的校验方式:在Etherscan上确认委托地址已清除,账户的code字段为空。如果钱包界面仍显示缓存提示,清除浏览器缓存后再次检查。



