本文介绍了使用EIP-7702实现账户代理的实验,允许外部拥有的账户(EOA)指定一个智能合约作为其“实现”,从而使EOA拥有类似于智能合约账户的功能,如批量交易、交易赞助和任意签名密钥等。该实验利用EIP-7702和RIP-7212将一个支持P256的委托合约注入到EOA上,并演示了如何使用WebAuthn密钥控制EOA。
2024.10.18·实验
过去几年,人们对 账户抽象 和 智能合约账户 产生了浓厚的兴趣,将其作为在以太坊账户上启用新用例的一种手段,例如:批量交易、任意签名者类型(例如 WebAuthn、P256 等)、社交账户恢复等等。
然而,广泛采用的一个障碍是,现有(甚至新的)外部拥有账户(EOA)无法拥有与智能合约账户相同的功能。
EIP-7702 是一项提案,包含在下一个以太坊硬分叉(Pectra)中,它添加了一种新的交易类型,允许 EOA 指定一个智能合约作为其“实现”。 这将允许 EOA 的功能类似于智能合约账户,并启用以下功能:
在这个实验中,我们将探索使用 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)。你可以单击“注册”以创建一个新账户,或单击“登录”以登录到你之前创建的现有账户。
通过单击上面的“注册”按钮,后台将:
注意:在此示例中,我们不会保留或持久化在步骤 1 中生成的私钥。在签署 EIP-7702 授权后,它将被丢弃。
接下来,让我们演示如何使用由我们的 WebAuthn 密钥控制的账户(EOA)执行合约调用。
尝试将一些 实验 ERC20 (EXP) 代币 铸造到你的账户:
铸造交易将由 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 才会处理交易:
value
正好是 0
我们的 ExperimentDelegation
合约还支持在单个交易中发送多个调用。
让我们通过将一些 EXP 代币发送到几个任意账户来演示这一点。按下下面的“发送”按钮,将一些 EXP 发送到这些生成的账户。
在发送代币后,我们正在:
execute
函数(该账户代理到 ExperimentDelegation
合约)。ExperimentDelegation
合约使用 RIP-7212 P256 预编译 来验证 WebAuthn 签名。execute
函数后,我们再次向 Sequencer 广播一个交易。这是一个简单的演示,展示了使用 EIP-7702 进行账户委托的潜力,我们可以想象除了 WebAuthn-P256 密钥、赞助交易 和 批量调用 之外的各种用例,例如:
现在轮到你在 Odyssey 上实验账户委托和 EIP-7702 了。
- 原文链接: ithaca.xyz/updates/exp-0...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!