---
title: "Account abstraction（ERC-4337）与 meta transactions（ERC-2771）对比"
description: "了解开发者选择 Account Abstraction 而非 Meta Transactions 的原因"
---

# Account abstraction（ERC-4337）与 meta transactions（ERC-2771）对比

[Meta Transactions](https://www.alchemy.com/smart-wallets)（元交易）和账户抽象是改善 Ethereum 用户体验的技术。Meta Transactions 需要更新智能合约，这也是它逐渐被淘汰的原因。

## 账户抽象与元交易有何不同？

账户抽象的目标是抽象掉比 gas 费用更多的 Ethereum 账户复杂性。

从技术角度看，元交易与账户抽象的区别在于消息的结构及其向后兼容性。

## 了解更多关于账户抽象的内容

<ExternalVideo
  url="https://youtu.be/Vpk_MhY-EeE?si=jb8KXjjgr51eiNta"
  provider="youtube"
  providerUid="Vpk_MhY-EeE"
/>

### 账户抽象中的 UserOp 是什么？

在 Meta Transactions 的场景下，行业标准是使用基于 EIP712 的消息，这要求所有智能合约都进行升级。

账户抽象标准化了一种特殊的交易格式，称为 _UserOperations_。

UserOperation 包含了确定用户意图执行何种交易所需的全部信息，包括用于决定使用哪个 Paymaster 的字段、用户愿意支付的金额（在自行赞助的情况下），以及已签名的 UserOperation。

### 账户抽象中的 paymaster 是什么？

ERC-4337 账户抽象标准中的 Gas 抽象部分引入了 _Paymasters_。

Paymasters 是**具有任意验证逻辑的链上智能合约**，可用于定义有效的 gas 赞助规则。这里的区别在于*执行是在链上进行的*。

[DAOs](https://www.alchemy.com/dapps/top/daos)、[apps](https://www.alchemy.com/dapps/top/defi-dapps) 和其他团队可以部署自己的定制化 paymaster，具备 ERC-20 gas 支付等功能。

这些定制化 Paymasters 可以使用 ERC-4337 与现有的 Bundler 服务即插即用。这与需要 Provider 采纳的 Meta Transactions 不同。

<CardWithCta
  text="使用 Gas Manager API 赞助交易"
  ctaLabel="开始使用"
  ctaHref="#"
  theme="gradient_blue"
/>

### Relayer 与 paymaster 对比

在 Meta Transaction 概念中，Relayer 是由 Infra 提供商控制的私钥，而账户抽象的 Bundler 则是标准化的节点。在不同的 Bundler 之间切换，就像更改 API key 和 API URL 一样简单。

账户抽象中不存在 MinimalForwarder 的概念，因为赞助验证是在 Paymaster 合约内部的链上完成的。

在 Meta Transaction 的情况下，一笔原生交易内只能包含一笔交易，而 Bundler 可以将多个 _UserOperations_ 打包成一个 bundle（一笔原生交易）！

<CardWithCta
  text="使用 Bundler API 可靠地将 userOps 上链"
  ctaLabel="开始使用"
  ctaHref="#"
  theme="gradient_blue"
/>

## 账户抽象相较元交易的 5 个优势

### 1. 无需更改智能合约

Meta Transactions 需要对所有采用它的现有合约进行更新，而账户抽象建立在现有基础设施之上。这意味着所有智能合约默认就支持账户抽象，这使其成为优于 Meta Transactions 的选择。

### 2. 在 bundler 和 paymaster 服务之间无缝切换

在 ERC-4337 下，所有 Bundler 和 Paymaster 都遵循特定的标准进行通信。团队甚至可以为自己的应用创建具有条件逻辑的 Paymaster。

### 3. 无需采用专有的 relayer

专有的 Relayer 缺乏一致性；每个 Relayer 都可能针对自己的用例使用不同的消息格式。这导致需要修改智能合约才能兼容每一个不同的 Relayer。

### 4. 更高的去中心化程度

随着越来越多的提供商推出自己的 Bundler 服务，开发者可以实现交易流程的去中心化。这也让开发者能够放弃任何表现不佳的 Bundler。

### 5. 不受开发者工具的锁定

使用 Meta Transactions 时，还需要使用 Infra 提供商的 SDK。这会导致工具锁定，在迁移 Relayer 时增加了摩擦成本。

而在账户抽象中，所有 SDK 都支持标准功能，开发者可以根据自身的专业知识进行选择，并根据偏好随时切换！

此外，由于每个供应商都将采用 UserOperation 标准，构建诸如 UserOperation Explorer 之类的工具也变得可行。

## 如何将元交易升级为账户抽象？

如果你已经为支持 Meta Transactions 而对智能合约进行了修改，迁移过程可以很简单地撤销这些更改。

与 Meta Transactions 不同，msg.sender 和 msg.data 在账户抽象中可以直接照原样使用。

如果需要定制化的 Paymaster 或 Account Factory，那么开发这些组件将是迁移过程中的下一步。

对于标准实现，我们建议使用经过充分审计的现有 AA 提供商，以减少开发时间和自身引入的 bug。

[Alchemy 的 Gas Manager](https://www.alchemy.com/docs/reference/how-to-sponsor-gas-on-evm) 提供了细粒度的控制项，例如*每个地址的 Gas 用量限制*、*可赞助的 UserOperations 数量上限*、*地址白名单、赞助截止时间以及域名级别的白名单*！

<ImageBlock
  src="https://media.alchemy.com/1703859980-alchemy-gas-manager-spending-rules.jpeg"
  alt="Alchemy Gas Manager 控制台：配置 gas 赞助支出规则"
  width={2390}
  height={1028}
  caption="Alchemy Gas Manager 的支出规则界面"
/>

<ImageBlock
  src="https://media.alchemy.com/1703860007-alchemy-gas-manager-ui.jpeg"
  alt="Alchemy Gas Manager 中用于设置赞助限额和地址白名单的策略配置"
  width={2382}
  height={564}
  caption="Gas Manager 界面（续）"
/>

[Gas Manager Admin API](https://www.alchemy.com/docs/wallets/api/gas-manager-admin-api/admin-api-endpoints/create-policy) 支持以编程方式创建、读取和更新 Gas 策略。除此之外，开发者还能获得一个直观的可视化仪表盘，查看每一笔已赞助的 UserOperation！

<ImageBlock
  src="https://media.alchemy.com/1703860035-alchemy-gas-manager-spending-dashboard.jpeg"
  alt="Gas Manager 支出控制台Gas Manager 操作视图"
  width={2406}
  height={516}
  caption="Gas Manager 支出控制台Gas Manager 操作视图"
/>

### **结论**

账户抽象（ERC-4337）是将无 gas 交易融入应用的新方法，也是更优的方法，它具备避免合约层面代码更改、无缝切换供应商、与其他现有基础设施的可组合性，以及更高的去中心化程度等优势。
