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