原文标题:《EIP-4337 详细工作流程》
原文作者:Ben Law
本文不会从头介绍 EIP-4337,仅介绍 4337 的主要合约是如何实现的。适合对 4337 有一定了解的开发者,由其是钱包开发者,以及爱好者或研究员阅读。
主要内容位于流程图中:
需要配合 4337 源码阅读 GitHub—eth-infinitism/account-abstraction at main。
4337 Spec 中有更多详细细节 EIP-4337: Account Abstraction using alt mempool。
请注意:
本流程图只画出了普通类型的交易,未涉及 Aggregator。掌握普通流程后才方便掌握聚合型的交易。
波场推出DeFi创业者生态联盟计划,将拨出1.2亿美元专门扶持波场生态开发者:据最新消息显示,波场TRON基金会今日推出了“波场DeFi创业者生态联盟1.2亿美元扶持计划”。计划显示,除已入驻波场的开发者外,波场还欢迎其他公链上的优秀开发者入驻,以全面推动波场生态进入高速发展阶段。一旦申请成功,除大量资金支持外,项目还将获得在技术、运营、商务资源方面的扶持,如项目上所推荐、JustSwap白名单优先审核通道等。目前波场上的生态开发者数量呈稳定增长趋势,截至今日,TRON通证总数已超13万。[2020/9/30]
流程图中箭头不代表程序的调用栈或输入输出,仅代表相关角色、函数、事件的发生的先后顺序。
为方便读者对宏观架构的快速理解,流程图中省略了一部分函数调用和逻辑。被省略的部分有可能对你研究的问题或疑惑有很大意义,具体看你想了解什么内容,所以还是需要你必要时仔细阅读源码。
研究 4337 需要掌握以下核心概念:
前比特币核心开发者:第二层技术确实让比特币更接近更具可扩展性的区块链:比特币第二层解决方案闪电网络被吹捧为解决比特币扩展难题的方法之一。自2018年推出以来,作为该领域一项有前途的技术,闪电网络已经取得长足的进步。在这一过程中出现了一些问题,比如有研究声称这项技术容易受到DDoS攻击。闪电网络的增长缓慢但稳定。Bitcoin Visuals数据显示,截至3月6日,闪电网络节点数量超过5200个。在2018年9月至2019年5月期间进行了大规模采用,之后的数据似乎停滞不前。除此之外,在经历了两次大跌之后,闪电网络锁定的美元总价值也在稳步增长。前比特币核心开发者Peter Todd表示,第二层技术确实让比特币更接近一个更具可扩展性的区块链。他接着说,“它(实现可扩展性)并不容易,它不一定适用于一切。”(AMBCrypto)[2020/3/9]
UserOperation 的内容 EntryPoint 实现 Wallet 实现 Paymaster 实现验证阶段、执行阶段的执行流程与错误处理 Gas 的支付流程与计算
动态 | Block.one在推特分享EOSIO开发者门户网站:刚刚Block.one在推特分享了EOSIO开发者门户网站。据悉EOSIO 是一个免费开源的区块链协议,为开发者和企业者提供构建,部署,运营高性能区块链应用的平台。[2019/12/4]
一种内容类似 transaction 的伪交易对象,通过新的 RPC 方法 eth_sendUserOperation 提交给节点。
UO 中的字段含义大部分是显然的,仅挑选几个容易误解的进行分析:
sender,此处指的是要交互的 wallet,而非 msg.sender 或 tx.origin 等其他任何概念 verificationGasLimit,验证交易时的 gasLimitcallGasLimit,执行交易时的gasLimitpreVerificationGas,补偿 bundler 调用 handleOps () 时会一部分未计算在内的 gas 成本(如提交交易的 calldata 成本)。
声音 | BCH开发者:BCH转PoS为不实消息,BCH主链依旧采用PoW共识:据报道,BCH开发者考虑转至PoS,以实施可大幅缩短BCH汇款时间的Avalanche协议。但据BCH中文社区表示,并未听说此消息。另向多位BCH开发者求证,开发者均回复此消息为假新闻,并没有 BCH 要转 POS 的消息,只是有开发者在大会上提到把 PoS 协议叠加至目前 BCH 目前使用的 Avalanche 上作为一种实现方式,但 BCH 主链依旧是 PoW 共识,采用 PoW 挖矿模式。(区块律动)[2019/10/1]
这个并非 UO 中的一个字段,而是由上面三个 gas 参数计算而出。代表了该 UO 在 验证阶段 预先支付给 EntryPoint 的总成本。Prefund 虽然是在验证阶段支付的,但包含了 preVerificationGas,验证和执行三部分的成本。之后不会再向 EntryPoint 进行支付 gas。
动态 | 比特币核心开发者建议将BTC最低价格设为5万美元:据bitcoinist报道,比特币核心开发者Luke-jr认为,比特币的低价格已经持续太久了,当前的价格水平必须结束。为了解决这种情况,比特币网络应该接受两个比特币改进建议(BIP),从2020年4月1日起,将BTC / USD的最低价格设置为5万美元。[2019/4/2]
具体计算参见 EntryPoint 中的 _getRequiredPrefund。
EntryPoint 是所有功能的核心入口。每个项目自行部署自己的 EntryPoint。Bundler,Wallet 和 Paymaster 都需要围绕 EntryPoint 工作。
链下验证 UO,剔除不符合要求和有问题的 UO。链下验证一是防止 DoS,二是避免 bundler 在链上损失 gas。
打包合规的 UO,提交上链。
向 EntryPoint 支付 gas 费
只响应来自 EntryPoint 的消息
执行来自 EntryPoint 的具体交易内容
注意,EntryPoint 不是 Wallet 的 factory。官方给出的图片容易给人造成这种误解,但官方实现并非如此。
向 EntryPoint 确认自己的为某 UO 服务的意愿
在 EntryPoint 内质押才能成为 paymaster
我们可以看到 Wallet 与 Paymaster 都有可能向 EntryPoint 支付 gas。gas 余额会存储在 deposits 这个 mapping 中。
注意,虽然 deposits 字面意思为充值,但并非必须一个需要预先手动完成的动作,也可以在每一笔 UO 发生时,计算缺少多少 gas 并自动充值。
最终,若所有操作的 actualGasCost 小于 prefund, EntryPoint 会将多余额度退款至你的 deposit。
注意, validationActualCost & callActualCost 仅仅是为了说明而作的标记,并非真实存在的变量。它们是由 gasPrice() 累加的。
代表用户最终使用的钱包。需要开发者至少实现以下两个自定义方法:
签名验证:你可以使用任何密码学手段来实现签名验证,比如,为了配合使用苹果的 Security Enclave 而实现 NIST P-256 的 ECDSA。如果没有特殊需求可直接使用以太坊的 ECDSA。
处理交易:EntryPoint 通过 address (sender).call (callData) 来调用 wallet 中的具体的交易功能。那么 call 需要有至少一个可执行的函数,如 transferEther (),callAnotherContrat () 等。
开发者还需要自行实现 wallet factory,需要创建钱包时,工厂会被 SenderCreator 合约调用。新建钱包应使用 CREATE2 方法以保障生成地址的确定性。
Paymaster 可以为用户支付 gas,因此可以实现:
免费交易:用户激励,让用户免费使用钱包
gasless 交易:不直接用 ether 支付 gas,而使用其他 token 或 nft 等
等等其他类似的赞助交易功能
Paymaster 需要开发者实现:
validatePaymasterUserOp ():由于 paymaster 的开放性,验证逻辑需要开发者完全自己定义。验证后有可能需要实现类似 wallet 中 payPrefund () 的功能。
postOp:必须重写此方法,否则会被 revert。此方法可以定义在 paymaster 赞助完交易后需要做什么,如在验证时为用户支付了 ether,则此处要求用户支付等价的 ERC-20。
区块律动BlockBeats
媒体专栏
阅读更多
金色早8点
金色财经
去中心化金融社区
CertiK中文社区
虎嗅科技
念青
深潮TechFlow
Odaily星球日报
腾讯研究院
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。