EIP-4337 详细工作流程

开发者指南:详解账户抽象提案EIP-4337工作流程

EIP-4337 详细工作流程

本文不会从头介绍 EIP-4337,仅介绍 4337 的主要合约是如何实现的。适合对 4337 有一定了解的开发者,由其是钱包开发者,以及爱好者或研究员阅读。

主要内容位于流程图中:

需要配合 4337 源码阅读 GitHub—eth-infinitism/account-abstraction at main。

4337 Spec 中有更多详细细节 EIP-4337: Account Abstraction using alt mempool。

请注意:

  • 本流程图只画出了普通类型的交易,未涉及 Aggregator。掌握普通流程后才方便掌握聚合型的交易。

  • 流程图中箭头不代表程序的调用栈或输入输出,仅代表相关角色、函数、事件的发生的先后顺序。

  • 为方便读者对宏观架构的快速理解,流程图中省略了一部分函数调用和逻辑。被省略的部分有可能对你研究的问题或疑惑有很大意义,具体看你想了解什么内容,所以还是需要你必要时仔细阅读源码。

核心概念

研究 4337 需要掌握以下核心概念:

UserOperation 的内容 EntryPoint 实现 Wallet 实现 Paymaster 实现验证阶段、执行阶段的执行流程与错误处理 Gas 的支付流程与计算

UserOperation

一种内容类似 transaction 的伪交易对象,通过新的 RPC 方法 < code>eth_sendUserOperation 提交给节点。

UO 中的字段含义大部分是显然的,仅挑选几个容易误解的进行分析:

sender,此处指的是要交互的 wallet,而非 msg.sender 或 tx.origin 等其他任何概念 verificationGasLimit,验证交易时的 gasLimitcallGasLimit,执行交易时的gasLimitpreVerificationGas,补偿 bundler 调用 < code>handleOps () 时会一部分未计算在内的 gas 成本(如提交交易的 calldata 成本)。

Prefund

这个并非 UO 中的一个字段,而是由上面三个 gas 参数计算而出。代表了该 UO 在 < strong> 验证阶段 预先支付给 < code>EntryPoint 的总成本。Prefund 虽然是在验证阶段支付的,但包含了 preVerificationGas,验证和执行三部分的成本。之后不会再向 < code>EntryPoint 进行支付 gas。

具体计算参见 < code>EntryPoint 中的 < code>_getRequiredPrefund。

EntryPoint

EntryPoint 是所有功能的核心入口。每个项目自行部署自己的 EntryPoint。Bundler,Wallet 和 Paymaster 都需要围绕 EntryPoint 工作。

Bundler 在 EntryPoint 内实现两个功能

链下验证 UO,剔除不符合要求和有问题的 UO。链下验证一是防止 DoS,二是避免 bundler 在链上损失 gas。

打包合规的 UO,提交上链。

Wallet 与 EntryPoint

向 EntryPoint 支付 gas 费

只响应来自 EntryPoint 的消息

执行来自 EntryPoint 的具体交易内容

注意,EntryPoint 不是 Wallet 的 factory。官方给出的图片容易给人造成这种误解,但官方实现并非如此。

Paymaster 与 EntryPoint

向 EntryPoint 支付 gas 费

只响应来自 EntryPoint 的消息

向 EntryPoint 确认自己的为某 UO 服务的意愿

在 EntryPoint 内质押才能成为 paymaster

我们可以看到 Wallet 与 Paymaster 都有可能向 EntryPoint 支付 gas。gas 余额会存储在 < code>deposits 这个 mapping 中。

注意,虽然 deposits 字面意思为充值,但并非必须一个需要预先手动完成的动作,也可以在每一笔 UO 发生时,计算缺少多少 gas 并自动充值。

最终,若所有操作的 actualGasCost 小于 prefund, EntryPoint 会将多余额度退款至你的 deposit。

注意, validationActualCost & callActualCost 仅仅是为了说明而作的标记,并非真实存在的变量。它们是由 gasPrice() 累加的。

Wallet

代表用户最终使用的钱包。需要开发者至少实现以下两个自定义方法:

签名验证:你可以使用任何密码学手段来实现签名验证,比如,为了配合使用苹果的 Security Enclave 而实现 NIST P-256 的 ECDSA。如果没有特殊需求可直接使用以太坊的 ECDSA。

处理交易:EntryPoint 通过 < code>address (sender).call (callData) 来调用 wallet 中的具体的交易功能。那么 call 需要有至少一个可执行的函数,如 transferEther (),callAnotherContrat () 等。

开发者还需要自行实现 wallet factory,需要创建钱包时,工厂会被 < code>SenderCreator 合约调用。新建钱包应使用 < code>CREATE2 方法以保障生成地址的确定性。

Paymaster

Paymaster 可以为用户支付 gas,因此可以实现:

免费交易:用户激励,让用户免费使用钱包

gasless 交易:不直接用 ether 支付 gas,而使用其他 token 或 nft 等

等等其他类似的赞助交易功能

Paymaster 需要开发者实现:

validatePaymasterUserOp ():由于 paymaster 的开放性,验证逻辑需要开发者完全自己定义。验证后有可能需要实现类似 < code>wallet 中 < code>payPrefund () 的功能。

postOp:必须重写此方法,否则会被 revert。此方法可以定义在 paymaster 赞助完交易后需要做什么,如在验证时为用户支付了 ether,则此处要求用户支付等价的 ERC-20。

24小时热点

1U等于多少人民币?U币怎么兑换人民币?

U币(如USDT)是一种基于区块链技术的稳定币,其价值与美元 ...

251060

区块链圈小菜鸡

如何在小狐狸钱包中添加USDT与Solana币的完整指南

本文详细介绍了如何在小狐狸钱包中添加USDT和Solana币 ...

7224

丰溯

U币一个多少钱?一个U币等于多少人民币?

U币通常指USDT,其价值稳定在1美元左右。U币兑换人民币的 ...

100681

波场区块链浏览器

比特币与以太坊有什么区别?比特币为什么比以太坊未来更有发展?

本文深入分析了比特币和以太坊这两种主流加密货币的主要差异,包 ...

890

区块链网快讯

虚拟货币的概念、特征及分类

近年来,诞生于互联网世界的虚拟货币引起了各方关注,特别是以比 ...

53176

非小号

TRC收款地址怎么开通?TRC收款地址开通指南

要开启 TRC 收款地址(如 TRC20 的 USDT 收款 ...

15711

区块链圈小菜鸡

使用条款

使用条款 在您使用广东省区块链技术开发有限公司运 ...

19551

币世界

揭秘SO链真实价值与SolFlare钱包全指南 | 区块链技术深度解析

探索SO链的真实价值和可信度,全面分析SolFlare钱包的 ...

2632

14311113017

TP钱包指南:添加代币、选择区块链及安全防范全攻略

本文为您详细介绍了TP钱包的使用指南,包括如何添加代币、选择 ...

3419

14311113027

深入解析Sol币与令牌Literal:区块链中的投资机遇与未来趋势

了解Sol币与令牌Literal的基本概念和特点,探索它们在 ...

3260

14311113042

热点专题

区块链网是什么

中国区块链价值评价中心 中国区块链价值评价中心于2 ...

5292806

知信链

免费的行情软件app网站在国外有哪些?

区块链看行情的软件,简而言之,就是一类能够实时提供数字货币行 ...

2377018

波场区块链浏览器

雷达币最新进展:2024年主网上线时间及前景预测

近期有传闻称,新加坡的加密货币交易所推出了一款雷达币,这款被 ...

1827508

波场区块链浏览器

2024年最新十大不收费看盘软件排名公布

随着股市交易的普及和技术的发展,投资者对高效、可靠且免费的看 ...

1125849

波场区块链浏览器

元界(Metaverse)

元界(Metaverse)是一个去中心化的公有区块链项目,元 ...

992187

WEEX数字货币

BTC123

BTC123(www.btc123.com)成立于2011年 ...

839225

Kusama 测试网

最全传销名单,请告诉家人朋友,别让他们上当受骗后赔到血本无归

因为互联网的发展,让现代传销具备了更强的隐蔽性,更让社会经验 ...

785641

律动 BlockBeats

中币网zb——中币交易所

ZB.com是一个全球化的数字货币交易所,目前已获得泰国和迪 ...

751221

中币交易所

Bitfinex(香港B网)

Bitfinex交易平台目前仍处于试运营阶段,该平台由iFi ...

722733

Hi元宇宙

DAC币——达芬奇Davinci Coin

达芬奇项目的平台是通过叫作"Dchain"的自身区块链把可以 ...

715222

Mechanism Capital