Alert Source Discuss
⚠️ Draft Standards Track: ERC

ERC-7902: 账户抽象的钱包能力

EIP-5792 能力允许 dApps 和钱包交换所有 AA 特定的 UserOp 字段

Authors Yoav Weiss (@yoavw), Alex Forshtat (@forshtat), Dror Tirosh (@drortirosh), Shahaf Nacson (@shahafn)
Created 2025-03-01
Discussion Link https://ethereum-magicians.org/t/erc-wallet-capabilities-for-account-abstraction/23122
Requires EIP-5792, EIP-7702

摘要

EIP-5792 定义了钱包和 dapps 之间通信的基本 JSON-RPC API, 并提供了使用“能力”扩展基本协议的能力。

本提案定义了一组钱包可能希望实现的“能力”,以便为账户抽象(AA)提供全面的支持。

这些“能力”使得可以传递使用 Paymaster 合约时可能需要的任何数据, 允许限制 UserOperation 被视为有效的时间范围, 提供了一种让 dApp 手动控制 UserOp 的半抽象 nonce 和 AA 特定的 gas 限制的方法, 甚至允许 dApp 参与选择 EIP-7702 账户实现。

动机

ERC-4337 引入了账户抽象,使智能合约账户能够作为以太坊中的一等公民发挥作用。 然而,尽管 ERC-4337ERC-7769 为账户抽象定义了底层 RPC API, 但它们没有指定高级 AA 感知 dApps 将其支持的特性和参数传达给高级 AA 钱包应用程序的方式。

本 ERC 通过定义一套为 AA 感知 dApps 和钱包应用程序量身定制的结构化能力来解决这个问题。

它利用 EIP-5792 钱包能力模型来表达 AA 的一些关键方面, 确保 dApps 可以无缝地适应不同的 AA 钱包,而无需自定义解决方案。

规范

EIP-5792 上下文中账户抽象的所有操作都必须在单个链上原子地完成。

我们定义了以下新的“能力”列表,它们共同涵盖了账户抽象所需的许多功能。 请注意,ERC-7677 中描述了由“paymaster web service”管理的 Paymaster 的使用。

创建 EIP-7702 授权能力

此功能旨在与 EIP-7702 一起使用,并请求钱包应用程序为指定地址提供 EIP-7702 授权元组作为 AA 交易的一部分。

标识符:

eip7702Auth

接口:

type SetCodeForEOACapabilityParams = Record<
  {
    account: `0x${string}`,       // EOA 地址
    delegation: `0x${string}`,    // 委托地址
  }
>

支持的钱包应用程序必须生成一个与 EIP-7702 兼容的交易,该交易将 account EOA 地址的代码设置为请求中指定的 delegation 的代码。

静态 Paymaster 配置能力

此功能的目的是允许应用程序与不需要钱包应用程序解析任何动态配置的 Paymaster 集成。

应用程序可以预先硬编码或解析这些参数,并通过此功能传递它们。

标识符:

staticPaymasterConfiguration

接口:

type StaticPaymasterConfigurationCapabilityParams = Record<
  {
    paymaster: string;
    paymasterData: string;
    paymasterValidationGasLimit: `0x${string}`;
    paymasterPostOpGasLimit: `0x${string}`;
  }
>;

有效期时间范围能力

此功能的目的是允许应用程序显式指定请求的操作在签名后有效的持续时间范围。

标识符:

validityTimeRange

接口:

type ValidityTimeRangeCapabilityParams = Record<
  {
    validAfter: `0x${string}`, // 操作仅在此时间戳之后有效 (以秒为单位)
    validUntil: `0x${string}`  // 操作仅在此时间戳之前有效 (以秒为单位)
  }
>

钱包应用程序必须验证时间范围 [validAfter..validUntil] 是否有效,并以人工可读的方式将其呈现给用户以在作为交易信息的一部分进行确认。

智能合约账户必须指定时间范围 [validAfter..validUntil] 作为交易有效期范围。

多维 Nonce 能力

此功能的目的是允许应用程序显式指定半抽象 nonce 的组成部分,如 ERC-4337 中所定义。

标识符:

multiDimensionalNonce

接口:

type MultiDimensionalNonceCapabilityParams = Record<
  {
    nonceKey: `0x${string}`,
    nonceSequence: `0x${string}`
  }
>

对于支持多维 nonce 值的智能合约账户, 钱包必须在批处理的实际链上执行期间指定这些参数。

账户抽象 Gas 参数覆盖能力

此功能的目的是允许应用程序覆盖钱包应用程序建议的所有与 gas 相关的参数的值。

此功能提供了对底层帐户抽象协议的非常底层的访问权限,并且只能由与特定协议的特定版本紧密耦合的应用程序使用。 它也可能在开发和调试的上下文中证明有用。

通常建议生产 dapps 依赖于钱包应用程序的更高级别功能。

标识符:

accountAbstractionGasParamsOverride

接口:

type AAGasParamsOverrideCapabilityParams = Record<
  {
    preVerificationGas?: `0x${string}`,
    verificationGasLimit?: `0x${string}`,
    callGasLimit?: `0x${string}`,
    paymasterVerificationGasLimit?: `0x${string}`,
    paymasterPostOpGasLimit?: `0x${string}`,
    maxFeePerGas?: `0x${string}`,
    maxPriorityFeePerGas?: `0x${string}`
  }
>

请注意,AAGasParamsOverrideCapabilityParams 中的所有字段都是可选的。 只需提供调用者想要覆盖的值。

钱包应用程序应警告用户有关调用提供的覆盖,并使用这些值代替。

钱包应用程序可以选择拒绝具有冲突配置的调用。

理由

安全注意事项

eip7702Auth

这是本文档中迄今为止最敏感的功能。 签署错误的功能可能会造成无法估量的损害。

钱包应用程序在处理 EIP-7702 时必须格外小心。

钱包应用程序必须维护一个严格的白名单,其中包含公认且公开审计的智能合约帐户实现,这些实现可接受作为 delegation

授权是一项极其敏感的操作,delegation 中的任何漏洞或恶意代码都将导致 account 的完全耗尽。

staticPaymasterConfiguration

此功能有机会为调用提供 paymasterpaymasterData 值。 不正确或恶意的值可能是一种攻击媒介。 例如,Paymaster 合约可以持有 ERC-20 代币的批准,这些代币可能会以这种方式耗尽。

钱包应用程序必须确保提供的值与用户的意图相符。 从根本上讲,这与必须验证常规交易的 calldata 没有什么不同。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Yoav Weiss (@yoavw), Alex Forshtat (@forshtat), Dror Tirosh (@drortirosh), Shahaf Nacson (@shahafn), "ERC-7902: 账户抽象的钱包能力 [DRAFT]," Ethereum Improvement Proposals, no. 7902, March 2025. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7902.