跳至内容
0%

ERC-4337 智能合约钱包是如何工作的?

发布于 2024年2月5日2 分钟阅读

使用账户抽象(ERC-4337)的智能合约钱包创建的是由智能合约管理的钱包,而不是像 EOA 钱包(外部拥有账户)那样由单一私钥管理的钱包。

智能合约钱包的可编程特性使得开发各种新用例成为可能。通过在不牺牲安全性或匿名性的前提下降低复杂性,智能合约钱包将有助于推动下一波区块链用户的入场。

想要在你的应用中添加嵌入式智能合约钱包?使用我们企业级的 Embedded Accounts 和垂直整合的 AA 基础设施,让用户无需助记词、Gas 或摩擦即可完成入场。

什么是智能合约钱包?

智能合约钱包使用智能合约来存储和管理数字资产(例如加密货币、NFT 等)。智能合约钱包是账户抽象的基础:账户抽象是指将各种 Ethereum 账户类型统一为单一类型的过程,做法是将账户的控制权从网络中“抽象”出来,改由智能合约定义。

一些使用 ERC-4337 的智能合约钱包示例:

  1. Soul Wallet
  2. Candide
  3. UniPass
  4. Castle
  5. Openfort

不使用 ERC-4337 的两个主要智能合约钱包是 SafeArgent

什么是合约账户(CA)?

合约账户也称为智能合约,包含用于管理各方之间信息交换的代码。合约账户被用于每一个 DeFi 协议、NFT 系列或 ERC-20 代币中。

合约的全部业务逻辑和状态变量都存储在链上。由于智能合约的状态和代码存储在链上,部署它的外部拥有账户必须支付一笔费用。

注意:在 web3 编程中,存在一种“智能合约工厂”模式,即一个合约可以通过预定义的接口部署其他合约。即便在这种情况下,发起该交易的仍必须是 EOA,并由 EOA 支付费用。

合约账户与**外部拥有账户(EOA)**在工作方式上有何不同?

智能合约账户与 EOA 账户的主要区别在于,智能合约账户可以包含逻辑。由于只有 EOA 账户才能发起交易,智能合约账户依赖 Bundler 的 EOA 账户将用户操作打包成一笔提交到区块链上的单一交易。

在当前的 Ethereum 协议下,无论是合约调用还是价值转移,EOA 都是唯一能够发起交易的账户类型。即使是一个合约账户调用另一个合约账户,交易的发起来源始终是某个外部拥有账户。

以下是合约账户与 EOA 账户的对比:

EOA
CONTRACTS

Controlled by a human, through a private key

No private key. Governed by its own code

Can initiate transactions

Can never be the origin of a transaction initiation

Does not contain code

Contains code and state, stored in storage

Created offchain for free

Created onchain for a cost, incurred by the deployer

那么,既然智能合约钱包无法自行发起交易,它们是如何执行交易的呢?

ERC-4337 智能合约钱包的工作原理

由于智能合约钱包无法自行发起交易,它们必须由一个 EOA 钱包来调用。这一流程由多个账户抽象基础设施提供商(例如 Bundler)和智能合约(例如 EntryPoint)共同支持。

智能合约钱包交易的典型流程如下:

  1. 用户想要执行一个 UserOperation
  2. UserOperation 被发送到一个“替代内存池”(alternative mempool)
  3. 一个拥有 EOA 钱包的 Bundler 将所有 UserOperation 打包并发送给 EntryPoint 合约
  4. EntryPoint 合约对所有 UserOperation 进行验证并执行
  5. 打包这些 UserOperation 的 EOA 钱包会由用户的钱包或 Paymaster 偿还其代垫的 ETH
展示 UserOp 如何被打包、验证和执行的示意图
展示 UserOp 如何被打包、验证和执行的示意图

虽然从技术角度理解智能合约钱包的工作原理可能有一定难度,但对最终用户而言,智能合约钱包相比 EOA 钱包提供了许多改进,例如可编程性以及支持社交恢复等功能。

了解智能合约钱包工作原理的更多资源

有关账户抽象各组成部分如何工作的更多信息,请阅读我们的系列文章《你也能发明账户抽象》("You Could Have Invented Account Abstraction"),作者是 Alchemy 账户抽象基础设施工程团队的 David Philipson

  1. UserOps、Bundler 与 EntryPoint 合约
  2. 使用 Paymaster 赞助 Gas
  3. 创建智能合约钱包
  4. 聚合签名

常见问题

什么是智能合约钱包?

智能合约钱包使用智能合约(而非单一私钥)来存储和管理加密货币、NFT 等数字资产,是账户抽象的基础。

ERC-4337 智能合约钱包如何工作?

ERC-4337 钱包的流程是:用户创建 UserOperation,将其发送到一个替代内存池,Bundler 收集这些操作并提交给 EntryPoint 合约进行验证和执行,随后由钱包或 Paymaster 偿还费用。

智能合约账户和 EOA 账户有什么区别?

智能合约账户包含可编程逻辑,但不能自行发起交易;而 EOA 账户可以发起交易,但不具备可编程特性。

什么是 UserOperation?

UserOperation 是用户创建的交易请求,会被发送到一个替代内存池,供 Bundler 收集后通过 EntryPoint 合约进行处理。

Bundler 在 ERC-4337 中扮演什么角色?

Bundler 是拥有 EOA 钱包的节点,它们从替代内存池中收集 UserOperation,将其打包在一起,并提交给 EntryPoint 合约进行验证和执行。

什么是 EntryPoint 合约?

EntryPoint 合约是一个链上智能合约,用于验证并执行 Bundler 提交的打包 UserOperation。

智能合约钱包需要支付 Gas 费吗?

智能合约钱包可以使用 Paymaster 来赞助 Gas 费,从而实现无 Gas 交易,用户无需直接支付 Gas。

能否举例说明 ERC-4337 智能合约钱包?

例如 Soul Wallet、Candide、UniPass、Castle 和 Openfort;而 Safe 和 Argent 则是不使用 ERC-4337 的智能合约钱包。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。