---
title: "什么是模块化账户抽象？"
description: "了解智能合约账户如何使用模块和插件创建新的扩展功能"
---

# 什么是模块化账户抽象？

Modular AA 是一场旨在推广模块化智能账户的运动。其目标是让账户对用户来说可定制，并让开发者能够构建具有丰富上下文且自成一体的账户功能。

模块化智能合约账户（SCA）让开发者能够为账户创建[实用的新扩展功能](https://www.alchemy.com/overviews/smart-contract-wallet-benefits)。举例如下：

1. **社交恢复（Social Recovery）** - 允许受信任的设备或朋友在你失去账户访问权限时协助你恢复账户
1. **消费限额（Spending Limits）** - 允许[应用](https://www.alchemy.com/dapps/top/defi-dapps)代表你消费代币，但不超过指定限额
1. **Passkey 支持** - 使用生物识别（如 FaceID）登录

通过将模块化标准化，可以大幅降低交易对手风险，从而带来简单且安全的 web3 用户体验。

[ERC-4337 标准](https://www.alchemy.com/overviews/what-is-account-abstraction)规定了一套基础设施组件和编码标准，实现该标准后，用户就能以智能合约作为其主要账户类型，而不是私钥。此前，主要账户类型是 EOA（外部账户），与 SCA 不同，EOA 不具备自定义的验证和执行逻辑。

本文将概述模块化账户抽象（Modular Account Abstraction）：它能实现什么，以及现有的标准和实现方式。

<CalloutBlock>
  通过将[模块化智能账户钱包嵌入](https://www.alchemy.com/smart-wallets)你的 web3 应用，让用户无需助记词或 gas 即可上手，并借助我们纵向整合的 AA 基础设施进行扩展。
</CalloutBlock>

## 模块化智能合约账户有哪些不同类型？

[智能合约账户](https://www.alchemy.com/overviews/what-is-account-abstraction)本质上是智能合约：它们可升级、可扩展，也可被继承。根据 SCA 的具体实现方式，其可能允许或不允许添加插件/模块。本文将探讨模块化 AA 的两种不同概念：ERC-6900 和 SAFE Modules。

### **1. ERC-6900：模块化智能合约账户与插件**

[ERC-6900](https://eips.ethereum.org/EIPS/eip-6900)的目标是定义标准 Account 与 Module 实现之间的一套接口。该提案希望在切换账户实现时，改善开发者体验、Module 互操作性以及数据可移植性。

该标准的灵感来自 ERC-2535，但它并不要求开发者遵循 Diamond 模式。

#### 什么是用于模块化智能合约账户的 ERC-6900 插件？

<ExternalVideo
  url="https://youtu.be/YHy_d1pvtsw?si=KyuT9ynLNDm0zRCc"
  provider="youtube"
  providerUid="YHy_d1pvtsw"
/>

#### ERC-6900 定义了哪些类型的插件？

根据该标准，插件可分为三种类型：

1. **验证方案（Validation Schemes）** - 定义模块化智能合约账户（MSCA）在何种情况下会批准代表其执行的交易
1. **执行逻辑（Execution Logic）** - 在执行期间执行的任意逻辑
1. **钩子（Hooks）** - Hooks 可以在[用户操作（user operation）](https://www.alchemy.com/overviews/user-operations)执行前后触发要执行的任意逻辑

<ImageBlock
  src="https://media.alchemy.com/1703864824-erc-6900-module-diagram.jpeg"
  alt="ERC-6900 模块图"
  width={895}
  height={301}
  caption="ERC-6900 模块图"
/>

**该标准还定义了：**

1. 如何为 MSCA 实现 Validation、Execution 和 Hook 插件。
1. 符合标准的账户实现应如何添加、移除、更新和查看插件。
1. **FunctionReference** 等辅助类型。

<ImageBlock
  src="https://media.alchemy.com/1703864850-transaction-flow-to-erc-6900-sca.jpeg"
  alt="交易通过入口点流向 ERC-6900 SCA 的流程图"
  width={2778}
  height={1500}
  caption="交易通过入口点流向 ERC-6900 SCA 的流程图"
/>

#### ERC-6900 定义了哪些类型的接口？

ERC-6900 规范定义了三个主要接口：IPluginUpdate、IPluginLoupe 和 IStandardExecutor。

##### **1. IPluginUpdate**

IPluginUpdate 接口定义了：

- 插件操作 **ADD**、**REMOVE** 和 **REPLACE**
- Validator 类型和 Hook 类型
- 用户定义的 **struct**，用于更新各类插件
- 标准化的 **updatePlugins** 函数（在更新插件时调用）以及在更新后触发的 **ExecutionPluginUpdate** 事件

##### **2. IPluginLoupe**

IPluginLoupe 的灵感来自 ERC-2535，ERC-6900 定义了 dapp 或其他合约如何读取 MSCA 所支持的插件。

##### **3. IStandardExecutor**

IStandardExecutor 是模块化智能合约账户应实现的接口，以支持开放式执行。

### **2. SAFE modules**

所有基于 SAFE 的账户都支持 SAFE Modules。为了维持高安全标准，SAFE 团队遵循关注点分离模式，实现了不同的模块类型。

- **Modules** - 白名单地址，可以代表 Safe 智能账户执行交易。
- **Guard** - 一种合约，可以设置用于对将要执行的交易进行额外检查。
- **Fallback Handler** - 一种合约，可以设置用于处理任意传入（读取）调用。

更多信息可参见 Safe 的[模块化 SCA 架构文章](https://safe.mirror.xyz/t76RZPgEKdRmWNIbEzi75onWPeZrBrwbLRejuj-iPpQ)。

#### **什么是 SAFE SCA modules？**

SAFE 的 Modules 是独立的智能合约，拥有权限在用户的 SAFE 智能合约账户上执行交易。Modules 可以通过 **execTransactionFromModule** 函数在 SAFE 账户上执行任意交易。由于 SAFE 团队决定了 SAFE 账户的具体实现方式，插件开发者必须遵守相应的规则和指南。SAFE modules 仅_与 SAFE 账户兼容_。

模块开发者与用户之间存在重大的信任假设，因此经过实战检验的模块更有可能持续被采用。

<ImageBlock
  src="https://media.alchemy.com/1703864926-safe-account-module.jpeg"
  alt="SAFE Account 模块图"
  width={1920}
  height={1080}
  caption="SAFE Account 模块图"
/>

#### **什么是 SAFE SCA guards？**

Guard 是可为 SAFE 账户设置的智能合约，用于对传入交易执行额外的安全检查。在交易执行前，会先调用 Guard 并传入所有交易参数；如果 Guard 没有回滚（revert），交易才会继续执行。

执行后会再次调用 Guard，以进行状态变更检查或执行任意逻辑。

Guard 也可以被视为一种 hook，因为它适用于交易前后的状态检查。

<ImageBlock
  src="https://media.alchemy.com/1703864905-safe-sca-guards-protect-accounts.jpeg"
  alt="Safe 智能合约账户 Guard 在执行前后检查交易的流程图"
  width={1920}
  height={1080}
  caption="SAFE SCA Guard 如何保护账户"
/>

#### **什么是 SAFE SCA fallback handler？**

Fallback Handler 会执行所有发送给 SAFE 账户、且可由其处理的调用。这有助于符合行业通用标准，例如合约签名（EIP-1271）。据 SAFE 所述，“插件完全独立于核心 SAFE 合约，并维护各自的存储”。

<ImageBlock
  src="https://media.alchemy.com/1703864999-safe-sca-fallback-handler.jpeg"
  alt="SAFE SCA Fallback Handler 工作原理图"
  width={1920}
  height={1080}
  caption="SAFE SCA Fallback Handler 工作原理图"
/>

## **结论**

正如 ERC-6900 所描述、Safe Modules 所设计的那样，模块化账户抽象旨在通过插件扩展智能合约账户的能力——这些插件可由开发者构建，并由智能合约钱包用户安全安装。

如需了解更多信息，请浏览我们的 ERC-4337 教育中心，或了解我们开箱即用的 Embedded Accounts，立即开始构建。
