正如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)兼容。 图中显示了用户如何定义UserOperation,这些操作被捆绑起来,发送到EntryPoint合约,然后代表用户智能合约钱包执行。 1. UserOperationUserOperation是一个 "伪交易对象",代表用户的交易意图。任何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. PaymasterPaymaster 是一个ERC-4337定义的智能合约,处理Gas 支付政策。支付政策为 Gas 的支付方式(例如,用什么货币)和由谁支付创造了灵活性,这消除了用户持有区块链原生代币才能与区块链交互的限制。 例如,以太坊的原生区块链代币是ETH,Polygon的原生区块链代币是MATIC。因此,用户可以用任何ERC20代币如美元币(USDC)或Tether(USDT)来支付以太坊交易的Gas费用,而不是用原生代币(如ETH)来支付。 图:EntryPoint合约如何与Paymaster合约交互以执行灵活的Gas支付政策。 Paymaster 允许应用程序开发人员:- 为他们的用户赞助 Gas 费用
- 使用稳定币代为 Gas支付
- 使用其他ERC-20代币实现 Gas 支付
Paymaster 从用户那里抽象出Gas支付,同时以一种稳健的方式让应用程序决定这种抽象应该是什么(例如,赞助交易,用稳定币支付Gas,等等)。 5.聚合器(Aggregator)聚合器是一个智能合约,它实现了一个支持聚合的签名方案(即一个可以验证聚合签名的合约)。 如果多个消息用不同的密钥签名,那么可以生成一个单一的组合签名,验证组合签名,并确认(推导)所有的组成签名也是有效的。 通过将多个签名合并成一个签名,聚合器有助于节省calldata成本,多个捆绑的 UserOperation 在一个步骤中得到验证。 图:ERC-4337如何为UserOperation 使用 mempool和一个捆绑器,将一捆 UserOperations 组合成一个交易,并包含在以太坊的区块中。 ERC-4337 先烈:EIP-2938 和 EIP-3074ERC-4337 建立在之前的以太坊改进提案(EIP)2938 和 3074 之上。EIP-2938 提出了使智能合约可用来 "支付费用和发起交易执行" 一等账户的想法,而EIP-3074提出了将 "外部拥有账户(EOA)的控制权委托给智能合约 "的想法。 EIP-4337 使用了EIP-2938和EIP-3074引入的想法,并将其与使用独立 mempool 的想法和不需要改变共识层的实施路线相结合。 感谢 Chaintool 对本翻译的支持, Chaintool 是一个为区块链开发者准备的开源工具箱 |