钱包开发者必读:详述EIP-4337工作流程

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

主要内容位于流程图中Figma。

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

4337Spec中有更多详细细节EIP-4337:AccountAbstractionusingaltmempool。

Seed Club推出200万美元“消费者加密加速器”计划并开放第一批次申请:5月4日消息,加密社区Seed Club推出“消费者加密加速器”(The Consumer Crypto Accelerator),承诺向早期团队投入200万美元,其中第一批次申请现在开放2周(截止至太平洋时间5月15日23:59)。该计划将于六月正式开始,在为期3个月的计划中,通过申请的项目将获得高达20万美元的资金以及核心团队、顾问和网络的支持。[2023/5/4 14:41:40]

请注意:

本流程图只画出了普通类型的交易,未涉及Aggregator。掌握普通流程后才方便掌握聚合型的交易。流程图中箭头不代表程序的调用栈或输入输出,仅代表相关角色、函数、事件的发生的先后顺序。为方便读者对宏观架构的快速理解,流程图中省略了一部分函数调用和逻辑。被省略的部分有可能对你研究的问题或疑惑有很大意义,具体看你想了解什么内容,所以还是需要你必要时仔细阅读源码。核心概念

纽约州金融服务部:正使用新监测工具监管加密非法活动:2月22日消息,纽约州金融服务部官方发布公告称,该部门通过新的内幕交易和市场操纵风险监测工具,提高了在纽约州监管的从事虚拟货币活动的实体中发现欺诈和其他非法活动的能力。

新功能旨在检测潜在的内幕交易、市场操纵,以及与受部门监管的实体和申请人暴露或潜在暴露所列虚拟货币钱包地址相关的活动。纽约州金融服务部将继续使用其所有监管工具与行业保持同步,制定数据驱动的政策决策,并积极应对虚拟货币市场。[2023/2/22 12:21:45]

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

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

Beosin:sDAO项目遭受攻击事件简析:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin?EagleEye 安全风险监控、预警与阻断平台监测显示,BNB链上的sDAO项目遭受漏洞攻击,Beosin分析发现由于sDAO合约的业务逻辑错误导致,getReward函数是根据合约拥有的LP代币和用户添加的LP代币作为参数来计算的,计算的奖励与用户添加LP代币数量正相关,与合约拥有总LP代币数量负相关,但合约提供了一个withdrawTeam的方法,可以将合约拥有的BNB以及指定代币全部发送给合约指定地址,该函数任何人都可调用。而本次攻击者向其中添加了LP代币之后,调用withdrawTeam函数将LP代币全部发送给了指定地址,并立刻又向合约转了一个极小数量的LP代币,导致攻击者在随后调用getReward获取奖励的时候,使用的合约拥有总LP代币数量是一个极小的值,使得奖励异常放大。最终攻击者通过该漏洞获得的奖励兑换为13662枚BUSD离场。Beosin Trace追踪发现被盗金额仍在攻击者账户,将持续关注资金走向。[2022/11/21 7:53:09]

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

报告:加密货币相关垃圾邮件在过去两年中增加近3900%:金色财经报道,加密情报提供商LunarCrus发布报告称,加密货币相关垃圾邮件信息在过去两年中增加了3894%。此外,就推特而言,许多与加密货币相关的影响者都很活跃,垃圾信息在过去两年中增加了1374%。Lunacrush发言人称:“实际上垃圾邮件帐户比人们想象的要多。”(Cointelegraph)[2022/6/6 4:04:08]

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

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

两名韩国公民因帮助间谍获取军事机密而被指控:金色财经报道,韩国逮捕了两名公民,罪名是为一名朝鲜间谍窃取军事机密,后者向他们支付了加密货币。两人之一是一名加密货币交易所高管,自去年为该其工作以来已获得 600,000 美元。韩国尚未抓获朝鲜间谍,当局认为该间谍在海外活动。这位高管招募了一名 29 岁的军事上尉,指示他通过伪装成手表的相机拍摄军事数据,并向他发送“Poison Tap”USB 电脑黑客设备。韩国当局表示,这名上尉将韩国联合指挥和控制系统的登录信息交给了特工,但没有透露有关被盗数据的细节。据称,这位军事上尉因他的贡献而获得了大约 38,000 美元的加密货币。这两名韩国人本月早些时候被捕,现在面临违反该国《国家安全法》的刑事指控和长达数年的监禁。(cryptopotato)[2022/4/29 2:40:26]

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

prefund/gasPrice=callGasLimit+verificationGasLimit*mul+preVerificationGas

mul=mUserOp.paymaster!=address(0)?3:1;

具体计算参见EntryPoint中的_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余额会存储在deposits这个mapping中。

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

最终,若所有操作的actualGasCost小于prefund,?EntryPoint

会将多余额度退款至你的deposit。

actualGasCost/gasPrice=validationActualCost+callActualCost+preVerificationGas

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

Wallet

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

签名验证:你可以使用任何密码学手段来实现签名验证,比如,为了配合使用苹果的SecurityEnclave而实现NISTP-256的ECDSA。如果没有特殊需求可直接使用以太坊的ECDSA。处理交易:EntryPoint通过address(sender).call(callData)来调用wallet中的具体的交易功能。那么call需要有至少一个可执行的函数,如transferEther(),callAnotherContrat()等。开发者还需要自行实现walletfactory,需要创建钱包时,工厂会被SenderCreator合约调用。新建钱包应使用CREATE2方法以保障生成地址的确定性。

Paymaster

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

免费交易:用户激励,让用户免费使用钱包gasless交易:不直接用ether支付gas,而使用其他token或nft等等等其他类似的赞助交易功能Paymaster需要开发者实现:

validatePaymasterUserOp():由于paymaster的开放性,验证逻辑需要开发者完全自己定义。验证后有可能需要实现类似wallet中payPrefund()的功能。_postOp:必须重写此方法,否则会被revert。此方法可以定义在paymaster赞助完交易后需要做什么,如在验证时为用户支付了ether,则此处要求用户支付等价的ERC-20。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

[0:15ms0-1:408ms