实验1:使用EIP-7702进行账户代理

  • ithaca
  • 发布于 2024-10-19 19:13
  • 阅读 15

本文介绍了使用EIP-7702实现账户代理的实验,允许外部拥有的账户(EOA)指定一个智能合约作为其“实现”,从而使EOA拥有类似于智能合约账户的功能,如批量交易、交易赞助和任意签名密钥等。该实验利用EIP-7702和RIP-7212将一个支持P256的委托合约注入到EOA上,并演示了如何使用WebAuthn密钥控制EOA。

EXP-0001:使用 EIP-7702 进行账户委托

2024.10.18·实验

目录

背景

过去几年,人们对 账户抽象智能合约账户 产生了浓厚的兴趣,将其作为在以太坊账户上启用新用例的一种手段,例如:批量交易、任意签名者类型(例如 WebAuthn、P256 等)、社交账户恢复等等。

然而,广泛采用的一个障碍是,现有(甚至新的)外部拥有账户(EOA)无法拥有与智能合约账户相同的功能。

EIP-7702 是一项提案,包含在下一个以太坊硬分叉(Pectra)中,它添加了一种新的交易类型,允许 EOA 指定一个智能合约作为其“实现”。 这将允许 EOA 的功能类似于智能合约账户,并启用以下功能:

  • 批量调用:在单个交易中发送多个调用。
  • 交易赞助:将交易执行(以及 gas 费的支付)推迟给第三方(例如 Sequencer 或钱包服务器)。
  • 任意签名密钥:使用各种密钥类型(例如 WebAuthn、P256、BLS 等)来验证操作。
  • 会话和范围限定密钥:使用特定的寿命或权限授权签名密钥。
  • …以及更多。

概述

在这个实验中,我们将探索使用 EIP-7702 (设置账户代码)RIP-7212 (P256 预编译) 将一个实验性的(启用 P256 的)委托合约注入到一个账户(EOA)上。

委托合约的目的是使账户能够授权 WebAuthn 公钥用于调用委托。

然后,第三方(例如 Sequencer、钱包服务器等)可以使用由授权的 WebAuthn 签名密钥计算的 WebAuthn 签名代表账户执行调用。

(也可以完全消除第三方,并让账户自己执行调用)

我们将在下面的示例中演示这一点。此示例已发布在 GitHub 上。我们鼓励构建者去 fork 该存储库,并在 Odyssey 测试网上部署他们自己的实验。

示例

让我们演示一下如何利用 EIP-7702 进行账户委托,以创建一个由 WebAuthn 密钥(例如 Passkey)控制的 外部拥有账户(EOA)。 由 WebAuthn 密钥生成的签名将使用 RIP-7212 P256 预编译 进行验证。

在此示例中,我们将使用 Odyssey 测试网并与之交互。我们还将使用 ExperimentDelegation 合约 进行账户(EOA)委托。

链 ID: 911867

RPC URL: https://odyssey.ithaca.xyz/

区块浏览器: https://odyssey-explorer.ithaca.xyz

委托合约: 0x35202a6E6317F3CC3a177EeEE562D3BcDA4a6FcC

你也可以在 GitHub 上查看完整的示例。

初始化账户

首先,我们将初始化一个账户(EOA)。你可以单击“注册”以创建一个新账户,或单击“登录”以登录到你之前创建的现有账户。

image.png 通过单击上面的“注册”按钮,后台将:

  1. 使用随机私钥生成一个账户(EOA)
  2. 提示最终用户创建一个 WebAuthn 密钥(例如 Passkey)
  3. 签署一个 EIP-7702 授权,指定 ExperimentDelegation 合约 到该帐户。
  4. 发送一个 EIP-7702 交易,其中包含步骤 3 中的授权,并授权该账户上的 WebAuthn 公钥。

注意:在此示例中,我们不会保留或持久化在步骤 1 中生成的私钥。在签署 EIP-7702 授权后,它将被丢弃。

执行(赞助的)调用

接下来,让我们演示如何使用由我们的 WebAuthn 密钥控制的账户(EOA)执行合约调用。

尝试将一些 实验 ERC20 (EXP) 代币 铸造到你的账户:

image.png

铸造交易将由 Sequencer 执行(通过 odyssey_sendTransaction RPC 方法),gas 费将由其承担。

什么是 Sequencer?

Sequencer 是一种从用户那里收集交易并将其广播到网络的服务。Odyssey 测试网的 Sequencer 还支持通过 odyssey_sendTransaction 发送赞助交易的功能。 将来,如果你希望使用自己的委托合约并控制交易的赞助方式(更多详细信息即将推出),则部署你自己的“轻量级” Sequencer(专用 Sequencer 的变体)将非常简单。

什么是 odyssey_sendTransaction

odyssey_sendTransaction 是一种实验性的 RPC 方法,用于将 Sequencer 赞助的交易发送到网络。它遵循 EXP-0000 提案,并旨在发展成为未来的 ERC。

该 API 有意与 eth_sendTransaction 几乎相同,因此开发人员可以在使用 EIP-7702 和 Sequencer 进行实验时轻松地将其用作直接替代品。

重要的是要注意,只有在满足以下条件时,Sequencer 才会处理交易:

  • 该交易是委托给授权合约地址之一的 EIP-7702 交易
  • 该交易是发送到当前委托给上述地址之一的 EOA 的 EIP-1559 交易
  • value 正好是 0

odyssey_ 命名空间链接:参考实现

批量合约调用

我们的 ExperimentDelegation 合约还支持在单个交易中发送多个调用。

让我们通过将一些 EXP 代币发送到几个任意账户来演示这一点。按下下面的“发送”按钮,将一些 EXP 发送到这些生成的账户。

image.png 在发送代币后,我们正在:

  1. 提示最终用户使用其 WebAuthn 密钥(例如 Passkey)签署对调用的授权
  2. 使用调用和 WebAuthn 签名调用账户上的 execute 函数(该账户代理到 ExperimentDelegation 合约)。ExperimentDelegation 合约使用 RIP-7212 P256 预编译 来验证 WebAuthn 签名。
  3. 在调用 execute 函数后,我们再次向 Sequencer 广播一个交易。

结论

这是一个简单的演示,展示了使用 EIP-7702 进行账户委托的潜力,我们可以想象除了 WebAuthn-P256 密钥赞助交易批量调用 之外的各种用例,例如:

  • 更多密钥类型:P256、BLS 或 ed25519 密钥的签名验证。
  • 会话和范围限定密钥:使用特定的寿命或权限授权密钥。
  • ERC-4337 兼容性:将现有 EOA 指定为 ERC-4337 兼容的智能合约(例如,Coinbase 的智能钱包)。
  • 多重签名执行:启用最少数量的签名来执行调用。
  • 自定义 Gas 代币:使用自定义 gas 代币(例如 USDC)供账户支付 gas 费。
  • 恢复机制:将多个实体指定为账户的可信恢复代理。
  • …以及更多。

现在轮到你在 Odyssey 上实验账户委托和 EIP-7702 了。

链接

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

0 条评论

请先 登录 后评论
ithaca
ithaca
Accelerating the crypto frontier. https://ithaca.xyz/