ERC-4337 是一个 以太坊 标准,旨在彻底改变以太坊生态系统中用户账户的处理方式,作为 Shapella 升级的上海 硬分叉 的一部分。它是一种账户抽象的方式,允许创建智能账户。这些账户是可以执行多项任务、处理多因素身份验证、启动和维持加密货币订阅等的实体,所有这些都通过代码实现。 [1]
2023 年 3 月 1 日,在丹佛举行的 WalletCon 期间,以太坊基金会的安全研究员 Yoav Weiss 宣布,ERC-4337 的主要合约(区块链开发者通常将其称为“账户抽象”)已经过 Open Zeppelin 的审计,并获准在所有以太坊虚拟机 (EVM) 兼容网络上使用,包括 Polygon、Optimism、Arbitrum、BNB 智能链、Avalanche 和 Gnosis 链。 [2]
ERC-4337 的主要目标是将 智能合约 的功能引入钱包。传统上,钱包仅限于管理私钥和签署交易。但是,通过 ERC-4337,钱包与智能账户同义,从而可以实现更复杂的功能。ERC-4337 旨在通过简化用户体验并使非开发人员更容易与以太坊生态系统交互来增加 web3 技术的采用。 [3]
通过 ERC-4337,以太坊计划为用户账户带来新想法,并使其更易于使用。 账户抽象是一个 区块链 专用术语,指的是从与账户交互的合约代码中抽象出账户实现的细节的能力。这意味着开发人员可以编写可以与不同类型的账户交互的合约代码,而无需了解每种账户类型的具体实现细节。 [3]
术语“抽象”指的是删除或提取用户账户的旧处理方式,例如依赖私钥和需要助记词。账户抽象使平台能够提供 加密货币 服务,而无需用户创建传统的钱包并手动保存其助记词或私钥。这是可能的,因为加密密钥可以本地保存在硬件安全模块 (HSM) 中,从而可以创建安全的自托管加密货币钱包。 [4]
ERC-4337 具有多种功能和机制,用于创建和执行用户操作的 智能合约,同时保持 以太坊 网络上的安全性。 [5]
它提供了在将 UserOperation 添加到 mempool 并捆绑到交易中之前验证 UserOperation 的规则和机制。验证过程检查禁止的操作码、有限的存储访问以及对 CALL 操作码的限制。不允许 UserOperation 访问与其他 UserOperation 或合约相关的任何数据,并且三个特殊合约与该账户交互:工厂、付款人和签名聚合器。 [5]
该代码还旨在通过实施一组处理用户操作和聚合操作的入口点方法来确保平台的安全。这些方法执行各种检查和验证,以确保仅执行有效的操作,并且以安全有效的方式执行这些操作。 [5]
例如,handleOps 函数进行两个循环,即验证循环和执行循环,以验证和执行每个用户操作。在验证循环中,如果账户尚不存在,则该函数会创建该账户,并调用账户上的 validateUserOp 以验证操作的签名、支付所需的费用并验证账户的存款。在执行循环中,该函数使用用户操作的 calldata 调用该账户,并且由该账户选择如何解析 calldata 并执行操作。为了防止恶意行为者破坏平台,该代码为付款人实施了一个信誉系统,付款人可以赞助其他用户的交易。付款人接口包括用于验证用户操作和管理其存款以及添加和提取股份的函数。 [5]
该代码还包括检查以防止付款人的 DoS 攻击,并确保他们有足够的 ETH 存入入口点以支付操作费用。如果付款人的 validatePaymasterUserOp 函数返回一个“上下文”,则 handleOps 函数必须在进行主执行调用后调用付款人的 postOp,并通过在内部调用上下文中进行主执行来保证 postOp 的执行。 [5]
该协议还包括多个函数,以使账户抽象不仅安全而且高效。一些主要函数包括 eth_sendUserOperation(用于提交 UserOperation 对象)、eth_estimateUserOperationGas(用于估计 gas 值)、eth_getUserOperationByHash(用于基于哈希返回 UserOperation)、eth_getUserOperationReceipt(用于基于哈希返回 UserOperation 收据)和 eth_supportedEntryPoints(用于返回受支持的 entryPoint 地址数组)。 [5]