什么是账户抽象(ERC-4337)?

  • Tiny熊
  • 更新于 2023-06-07 16:05
  • 阅读 3630

理清账户抽象的关键概念, 以及为什么 ERC-4337 很重要

正如ERC-4337所定义的那样,账户抽象 "允许用户使用包含任意验证逻辑的智能合约钱包,而不是使用EOA作为其主要账户"。

ERC-4337 带来许多用户体验的优化,最引人注目的是使人们能够使用智能合约作为他们的主要账户。

ERC-4337在区块链之上运行,不需要对区块链本身做任何改变。这使得它今天可以在以太坊或任何EVM链上使用,无需对底层区块链基础设施进行任何重大改变。

2023年3月1日,来自以太坊基金会的Yoav Weiss宣布,在EntryPoint合约首次部署时,ERC-4337已经在以太坊主网上运行。

账户抽象的关键概念是什么?

账户抽象的关键概念是UserOperation, Bundler, Sender, EntryPoint, Paymaster, 和 Aggregator。这些概念结合在一起,使web3开发者能够建立智能合约钱包使DApp与智能合约钱包(SCW)兼容

img

图中显示了用户如何定义UserOperation,这些操作被捆绑起来,发送到EntryPoint合约,然后代表用户智能合约钱包执行。

1. UserOperation

UserOperation是一个 "伪交易对象",代表用户的交易意图。任何UserOperation都可以包含多个指令和附加数据,以执行由智能合约账户发起的智能合约调用。UserOperation 代表了 一个 4337 合约钱包交易的开始。

UserOperation 和 传统交易对象(TX)之间有什么区别?

传统交易对象通常类似于这样的结构:

{
  from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
  to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
  data: "0x.....",
  gasLimit: "21000",
  maxFeePerGas: "300",
  maxPriorityFeePerGas: "10",
  nonce: "0",
  value: "10000000000"
}

EOA 会对该交易对象签名,并发送到节点处理(mempool)。

UserOperation 结构如下:

    struct UserOperation {
        address sender;
        uint256 nonce;
        bytes initCode;
        bytes callData;
        uint256 callGasLimit;
        uint256 verificationGasLimit;
        uint256 preVerificationGas;
        uint256 maxFeePerGas;
        uint256 maxPriorityFeePerGas;
        bytes paymasterAndData;
        bytes signature;
    }

UserOperation 和传统交易对象之间的三个主要区别是:

  • 附加字段 - UserOperation 交易结构中的有一些新字段(如:paymasterAndData 等)
  • 另一个mempool - UserOperation 被发送到一个单独的mempool,在那里捆绑器可以将 UserOperation 打包成真实的交易,并被包含在一个区块中。
  • 认证方式 - 对于一个传统交易,认证总是通过一个私钥的签名来完成,这个私钥对于一个给定的发起者来说永远不会改变。在UserOperation中,认证是可编程的。

2.捆绑器(Bundler)

捆绑器会监控一个专门为UserOperation建立的 mempool。捆绑器将多个UserOperation捆绑成一个交易,并将该交易提交给入口点(EntryPoint)合约。捆绑器通过抽取部分 Gas 费用来获得补偿。

捆绑器是实现ERC-4337的基础设施的关键部分,由于所有以太坊交易都需要由一个外部拥有的账户(EOA)发起。捆绑器通过EOA 把多个UserOperation 作为交易提交上链,在一个账户抽象化的生态系统中,捆绑器是唯一需要EOA的参与者。ERC-4337的主要目标之一是钱包抽象(Web3不再关注使用EOA 还是 合约钱包),让web3 用户可以不再需要自己的EOA钱包。

3. 入口点(EntryPoint)

EntryPoint是一个单例智能合约,用来接收来自捆绑器的交易,然后验证和执行UserOperation。

EntryPoint的验证过程是如何进行的?

智能合约账户可以定义自己的验证,因此也可以定义自己的认证。在验证过程中,EntryPoint合约会检查钱包是否有足够的资金来支付它可能使用的最大Gas量,这是基于UserOperation中的Gas字段。如果钱包没有足够的资金,EntryPoint合约会拒绝交易。

EntryPoint的执行过程是如何进行的?

在执行过程中,EntryPoint合约通过使用UserOperation中指定的 calldata 来执行UserOperation,并从智能合约账户中取钱给捆绑器报销合适的ETH来支付Gas。

4. Paymaster

Paymaster 是一个ERC-4337定义的智能合约,处理Gas 支付政策。支付政策为 Gas 的支付方式(例如,用什么货币)和由谁支付创造了灵活性,这消除了用户持有区块链原生代币才能与区块链交互的限制。

例如,以太坊的原生区块链代币是ETH,Polygon的原生区块链代币是MATIC。因此,用户可以用任何ERC20代币如美元币(USDC)或Tether(USDT)来支付以太坊交易的Gas费用,而不是用原生代币(如ETH)来支付。

img

图:EntryPoint合约如何与Paymaster合约交互以执行灵活的Gas支付政策。

Paymaster 允许应用程序开发人员:

  • 为他们的用户赞助 Gas 费用
  • 使用稳定币代为 Gas支付
  • 使用其他ERC-20代币实现 Gas 支付

Paymaster 从用户那里抽象出Gas支付,同时以一种稳健的方式让应用程序决定这种抽象应该是什么(例如,赞助交易,用稳定币支付Gas,等等)。

5.聚合器(Aggregator)

聚合器是一个智能合约,它实现了一个支持聚合的签名方案(即一个可以验证聚合签名的合约)。

如果多个消息用不同的密钥签名,那么可以生成一个单一的组合签名,验证组合签名,并确认(推导)所有的组成签名也是有效的。

通过将多个签名合并成一个签名,聚合器有助于节省calldata成本,多个捆绑的 UserOperation 在一个步骤中得到验证。

img

图:ERC-4337如何为UserOperation 使用 mempool和一个捆绑器,将一捆 UserOperations 组合成一个交易,并包含在以太坊的区块中。

ERC-4337 先烈:EIP-2938 和 EIP-3074

ERC-4337 建立在之前的以太坊改进提案(EIP)2938 和 3074 之上。EIP-2938 提出了使智能合约可用来 "支付费用和发起交易执行" 一等账户的想法,而EIP-3074提出了将 "外部拥有账户(EOA)的控制权委托给智能合约 "的想法。

EIP-4337 使用了EIP-2938和EIP-3074引入的想法,并将其与使用独立 mempool 的想法和不需要改变共识层的实施路线相结合。

感谢 Chaintool 对本翻译的支持, Chaintool 是一个为区块链开发者准备的开源工具箱

点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Tiny熊
Tiny熊
0xD682...E8AB
登链社区发起人 通过区块链技术让世界变得更好而尽一份力。