EIP-7702:步骤、存储安全与链上钱包的未来

本文深入探讨了以太坊EIP-7702提案,该提案引入了一种新的交易类型0x04,允许外部账户(EOA)像智能合约一样直接执行代码,从而实现交易批量处理、受限访问权限委托和余额恢复等新功能。文章还讨论了如何设置这些功能,解答了关于委托合约、预部署、存储使用等问题,并分享了一个收集了delegate合约实现的仓库。

EIP-7702:步骤、存储以及链上钱包的未来

这里我们将更仔细地研究新的交易类型 0x04。它允许 EOA 像智能合约一样直接执行代码。

这开启了新的可能性,例如:

  • 交易批处理: 想象一下,approve 和 transferFrom 可以在同一笔交易中发起。
  • 有限访问授权: 在不泄露密钥的情况下授予临时的、有限的权限。
  • 余额恢复: 如果密钥丢失,可以实施逻辑来恢复你的资金。

附言:互联网上已经有很多关于此类的文章和资源,所以为了不浪费时间重复造轮子,我只会概述最重要和最有趣的几点。我会在所有地方留下我用来理解该技术及其实现的资源链接。

设置新的链上世界的所有这些好处需要哪些步骤?

https://mapleblock.capital/blog/may-2024-eips-and-the-state-of-the-ethereum-ecosystem/

这里有一个通过 EIP-7702 进行 EOA 授权的快速摘要:https://learnblockchain.cn/article/18810 逐步说明:

签署授权

客户端钱包调用 signAuthorization({ contractAddress }),接收一个签名 [chain_id, address, nonce, y_parity, r, s],该签名保证只有指定的合约可以成为 EOA 代码。

将 bytecode 写入 EOA (Set-Code Transaction)

发送一个类型为 0x04 的交易,其中包含 authorizationList 字段,并将接收到的签名放置在该字段中。在协议层面,委托指示器 0xef0100||delegateAddress 被写入 EOA 代码中。

形成和发送操作

现在 EOA 的行为类似于智能合约:所有对其地址的 CALL 都会执行委托代码。

你可以像 EIP-1559 一样调用 execute(calls) 方法,或者生成一个 ERC-4337 UserOp(具有相同的 authorizationList)并将其发送到 EntryPoint,EntryPoint 可以为你或使用你的 ERC 代币支付交易费用,并在你的 EOA 上调用 execute。

当然,始终可以选择取消委托

要将 EOA 返回到其原始“空”状态,可以发送另一个 tx 0x04,其中包含相同的签名,但 address = 0x00…00。这会清除 codeHash 并重置 EOA 代码。

我一开始的一些问题(我建议将它们分开列出,因为在我看来,它们能使整体理解更清晰)

  1. 每次我都可以委托给一个新的合约吗?

在 EIP-7702 中,我们可以通过授权机制(交易类型 0x04 中的 `authorizationList`)将任何智能合约指定为我们的 EOA(外部账户)的委托。这意味着如果已经部署,则可以在每个新交易中指定一个新的智能合约进行委托。

委托保持活动状态,直到我们更改它(通过指定一个新的合约)或撤销它(通过指定一个空地址,就像 `revokeDelegation` 函数中那样)。

2. 合约需要预先部署吗?

该标准不提供智能合约的自动部署。为了将 EOA 执行委托给一个合约,该合约必须已经存在于网络上(即,已部署并具有有效的地址)。

这意味着在使用 EIP-7702 之前,你(或其他人)必须部署一个将执行委托操作的智能合约。

3. 任何地址都可以连接到已部署的合约吗?

任何 EOA 都可以发送 Type 4 交易,指定一个已部署的智能合约的地址作为委托。该合约不限制谁可以将执行委托给它,只要授权是正确的(例如,签名对于赞助交易有效)。

任何 EOA 都可以使用一个已经部署的合约进行委托,只要该合约支持 EIP-7702(例如,它具有 `execute` 函数并正确处理授权)。

但是,该合约可能包含额外的检查(例如,签名验证或访问限制)以防止未经授权的使用。

4. 将使用哪个存储?

在这里处理存储将像在 Proxy 合约中一样安排。也就是说,所有数据都将存储在你的 EOA 的存储中,而不是存储在调用委托到的合约中。因此,在划分存储和更改委托时,你需要小心谨慎。

但是在这里,一切都已经为我们考虑好了。 为了保护自己(不完全,但尽可能多地)免受存储问题的影响,你需要依赖以下标准:

  • ERC-7201 给出了一个公式,用于如何从一个模块的字符串或位标识符中获得存储中的偏移量,以便不同的模块不会踩到彼此的“尾巴”。** ](https://learnblockchain.cn/docs/eips/EIPS/eip-7779) 描述了如何安全地从一个模块(codeHash)重新委托到另一个模块的过程,检查命名空间偏移量是否不存在交叉,从而避免存储冲突。

奖励

在一个聊天中,开发者分享了仓库 “Awesome EIP-7702 Delegations”,他在其中收集了委托合约的可能实现:https://github.com/Arvolear/awesome-eip-7702-delegations

即使我想在下一篇文章中考虑使用新标准的实际方法,我们也可以简要地看看现在提供给我们的内容。

  • 各种实现合约(委托目的地):从非常轻量级的“无状态”批处理执行器到功能齐全的智能账户,支持 Session Keys、PassKeys 和恢复。
  • 来自 MetaMask、Ambire、Uniswap、OKX、OpenFort 和其他项目的示例。

为什么这很重要: 为了不“从头开始”编写你自己的自定义委托,而是立即采用经过验证的合约来完成所需的任务。这可能有助于轻松理解新事物。

  • 快速测试 EIP-7702 功能(在一个 tx 中 approve+transferFrom,gas 赞助,会话,社交恢复等)。
  • 形成对 web3 中变化的理解。
  • 比较不同的方法,并为你的钱包或 dApp 选择最佳的方法。

该存储库还包含一个指向钱包列表的链接,该列表跟踪特定钱包是否已切换到 EIP-7702 标准。

  • 原文链接: coinsbench.com/eip-7702-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
CoinsBench
CoinsBench
https://coinsbench.com/