ERC-4337:账户抽象已经到来

文章介绍了ERC-4337标准,即账户抽象化技术,如何通过免除以太坊协议更改解决智能合约钱包的UX问题,并提供了具体实施步骤和代码示例。

ERC-4337: 账户抽象已经到来

作者 Kristof Gazso

在 Ismael Darwish 的大力帮助下。

私钥真糟糕。它们可能被盗、丢失,并允许在任何时间、任何地点对你的资产进行完全和无限制的访问。没有办法设置限制,没有办法冻结资金,丢失时也无法恢复访问权限。

然而,我们已经在不断进步。社交恢复钱包和多签钱包在安全钱包技术方面走在前列,尽管会增加更高的手续费。它们是保护大量资本的事实标准。

不幸的是,存在一个问题。游戏从一开始就对智能合约钱包设置了障碍。目前,Ethereum 的一个基本限制是,仅支持外部拥有账户(Externally Owned Accounts,EOAs)发起交易。EOAs 是由私钥保护的账户,而智能合约账户则受其代码控制。这意味着如果你想与智能合约(换句话说:酷)钱包进行交互,你要么需要在某个 EOA 中保存一些 Ether 以调用你的智能合约钱包(用户体验噩梦),要么就得依赖某些中继服务来为你调用智能合约钱包(这就意味着中心化)。

以太坊的研究人员已经提出了许多解决这个问题的方法(一个很好的例子是 EIP-3074),这些方法解决了用户体验问题而不妨碍去中心化。然而,他们忙于合并和其他巨大的以太坊改进。因此,Vitalik(EF)、Yoav(OpenGSN)、Dror(OpenGSN)、Namra(Nethermind)和 Kristof(Nethermind)提出了 ERC-4337 来尝试寻找解决方案。我建议阅读 Vitalik 这篇精彩的文章 以及更为 技术的 EIP,但本质上我们要求矿工代表智能合约钱包所有者进行调用,以换取钱包中的一些资金。这既是去中心化的,因为这些伪调用被保留在节点的内存池中,也是用户体验友好的,钱包所有者只需签署一条链外消息即可进行交易,过程并不复杂。

幸运的是,这不再仅仅是一个理论提案。得益于 OpenGSN 的工具提供 ethers.js 支持、兼容的智能合约钱包和支付方,以及 Nethermind 的客户端实现来包含这些调用,现在可以在 Goerli 上试验该提案,并在其基础上开始构建应用程序。

让我们尝试通过部署自己的 ERC-4337 兼容钱包来试验这个提案!

下载 OpenGSN 的包含所有重要工具的代码库:

git clone https://github.com/eth-infinitism/account-abstraction
cd account-abstraction

使用 yarn 安装依赖:

yarn

设置以下 环境变量

ETHERSCAN_API_KEY 从 Etherscan

INFURA_ID 从 Infura

AA_URL 设置为 https://account-abstraction-goerli.nethermind.io (如果 URL 没有响应,请保持该环境变量为空,以便通过你的地址触发所有功能,而不是由矿工触发)

MNEMONIC_FILE — 指向包含用于 Goerli ETH 钱包的助记词的文件路径。你可以从 这里 获取 Goerli ETH。

一个 wallet.txt 示例内容,MNEMONIC_FILE 指向它:

vote dance type subject valley fall usage silk essay lunch endorse lunar obvious race ribbon key already arrow enable drama keen survey lesson cruel

既然一切都准备好了,剩下的就是通过运行以下命令向 Nethermind Goerli 验证器发送一个 UserOperation:

yarn runop --network goerli

此命令会做几件事情。首先,它会确保 EntryPoint.sol(所有 ERC-4337 User Operations 经过的合约)已经在基于 ERC-2470 Singleton Factory 的确定性地址上部署。然后,它会部署与 ERC-4337 功能兼容的 SampleWallet.sol 钱包,并在此过程中为其注入一定数量的 ETH。最后,它将查找或部署一个 TestCounter.sol 合约。在所有的合约部署完成后,它将向计数器传播一个 count() 调用。此调用将被编码为 User Operation 对象,发送给矿工,后者会将此请求(以及同一时间收到的任何其他请求)批量打包成一个交易,并从你的 SampleWallet 中提取一些余额以支付Gas费,以换取对 TestCounter.sol 的 count() 调用。请注意,由于 Nethermind 的 Goerli 验证器只是众多验证器之一,因此你的 User Operation 被包含在一个区块中可能需要几分钟。你的钱包并不需要直接进行任何调用,你也不一定需要一个 EOA 来签署此交易(可以使用任何签名方案来验证 User Operation 是否被正确签署)。

这就是以太坊迫切等待的账户抽象,而它已经到来。

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

0 条评论

请先 登录 后评论
kristof.gazso
kristof.gazso
江湖只有他的大名,没有他的介绍。