Skip to main content

Command Palette

Search for a command to run...

Eip4337分析(一)

Published
2 min read

本文是VB的文章学习笔记:https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a

Why

如果你关注Crypto,会发现,私钥泄露造成的损失,不计其数,最近的Harmony跨链桥Horizon,据分析可能是因为私钥泄露,链上资产被席卷一空。过往的个人、组织因为私钥泄露或者助记词丢失造成的损失,也很常见。

如果有一种钱包,跨越EOA(Externally-Owned Account)类别的标准钱包,例如Metamask等,以Smart Contract方式来存储和管理资产,具备多个私钥共同管理的特性,丢失某个私钥,可以通过Social Recovery方式恢复,那是否能够避免那么大的资产损失呢?或许有可能。

如同一个人原来具备很多社会关系:家庭、朋友或者几个有深度链接的社会组织,然后某日突然失踪,归来后无法证明自己是自己了,但是,自己拥有的社会链接有两端:一端是自身(过往的经历、信息掌握、技能、情感共鸣场景等等),一端是共同经历这些社会场景的社会关系。那这些社会关系,是可以完成我是我的证明的。究其根源,因为这些积累需要时间沉淀,并且具备多维度的复杂度,别人要仿冒,非常难完成在社会关系端的仿冒,因为你无法欺骗或者植入虚假信息给那么多社会关系,需要巨大成本也不一定能够完成。

EIP4337就是尝试完成这一目标(当然还有其他提升),我们来分析下具体的原理和可能的应用场景。

How

事实上,当下的EOA钱包为Crypto的推广和安全,立下了汗马功劳,但是,随着场景的展开,复杂度的提升,资产数额的增加,对EOA提出了很多挑战,不仅仅是需要Social Recovery一个场景提升。 我们分析和研究了如下资料:

  1. ERC4337概述 https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a
  2. https://github.com/ethereum/EIPs/blob/3fd65b1a782912bfc18cb975c62c55f733c7c96e/EIPS/eip-4337.md
  3. The road to account abstraction https://notes.ethereum.org/@vbuterin/account_abstraction_roadmap
  4. https://www.youtube.com/watch?v=r3ZSk4PeqxQ
  5. https://www.youtube.com/watch?v=r3ZSk4PeqxQ&ab_channel=BlockExplorer

Background

VB(Vitalik Buterin)总结了几个能够解决当下问题的抽象账户的新特性:

  1. 多签和社会化恢复
  2. 更高效简单的签名算法(例如Schnorr, BLS)
  3. 超量(Post-quantum)安全算法(例如Lamport, Winternitz)
  4. 可升级

对于抽象账户方案选择上,其实有很多种,完全另起炉灶的建设我们设计的对EOA不足之处的迭代产品,也是一个思路。但考虑到客户交互的兼容性、时间成本,我们选择了4337的协议实现逻辑为基础。事实上,在此之前已经有了EIP2938,不过是基于对于合约的较大改动。

先叙述下原来场景:EOA通过ECDSA椭圆曲线加密算法,对transaction进行打包后发送到区块链节点上链,需要最低21000 gas。折旧需要EOA提供gas或者第三方提供gas来完成。如果基于EOA构建,就会需要两个钱包(更复杂),或者依赖Relay中继来帮助(更中心化)。

EIP2938修改了底层协议,允许交易从一个合约发起,合约完成认证和payfee的工作,minner完成校验。EIP4337完成同样目标,但不会引起共识层的变动。

Smart contract wallet logic flow

EIP4337在更高层实现了transaction mempool的功能复制。用户发送UserOperation+签名和需要验证的data。

Miners or bundlers都可以用类似Flashbots的服务,对UserOperation进行打包,进入一个bundle transaction,然后进入一个以太坊区块。

敏感的读者会看到,原来新钱包思路通过合约方式复制mempool对交易的处理,从而达到可以发起独立交易、支付gas的功能,当然,还实现了上面的几个算法改进、可升级功能,听起来很不错。

wallet1.png

Bundler会支付gas fee,通过批量的individual UserOperationgasfee得到补偿(有差价)。Bundler会基于gasfee优先的基本原则,和miners选择进入mempool的逻辑类似。UserOperation结构如下:

{
sender: the wallet making the operation
nonce and signature: parameters passed into the wallet’s verification function so the wallet can verify an operation
initCode: the init code to create the wallet with if the wallet does not exist yet
callData: what data to call the wallet with for the actual execution step
}

详细的参考这里github-4337,核心是sender发起人,nonce随机数,initcode,初始化创建参数,calldata。

Entry point

Smart contract 有两个功能:

  1. validateUserOp,输入UserOperation,验证signature and nonce,然后payfee,交易成功increment the nonce,交易失败抛错误。
  2. 解析calldata为钱包指令,并执行钱包指令,例如存入、支付、抵押、授权等等。这些动作是末端开放的,例如可以发起更多的calls,和其他组件交互。

类似多数的复杂合约,相比于用钱包合约自身保障安全性,更好的方式在一个global contract下,可以命名为entry pointvalidateUserOp的动作,可以通过require(msg.sender == ENTRY_POINT),即只相信通过一个特定网关来发起,然后钱包再执行指令、支付gas以及成功后的nonce increment等。entry point本质上完成对钱包的安全保障。通过受信任的entry point发起,合约钱包可以完成任何指令动作、gas支付。VB的观点是这些已经足够保护钱包不会被攻击了。

如果钱包不存在,entry point还负责创建这个钱包,根据initCode.

wallet2.png Entry point control flow when running handleOps

当解析validateUserOp时,对于mempool nodes and bundlers有一些约束,需要强制执行:

  1. 不能read or write storage of other contracts,你不能读写其他合约的storage。
  2. 不能使用 environment opcodes such as TIMESTAMP
  3. 不能调用其他合约,除非证明被调用合约是无法自毁的。

以上需要validateUserOp操作进行模拟,需要bundlers and UserOperation mempool nodes,对UserOperation进行验证。

如果被模拟执行成功,则UserOperation被保障包含进打包,直到sender有了其他internal state的变动。

其他的变动可能是同一个sender发出另外一个UserOperation,或者another contract calling the sender。出发这些需要额外的7500gas。

另外,UserOperation如果限定了validateUserOp步骤的gas limit,mempool nodes and bundlers 会拒绝,出发非常小,例如小于200000(这里没太懂)。

这些约束重复了以太坊交易用来防止DoS攻击的核心属性。Bundlers and mempool nodes 可以用此类似逻辑来确认是否include UserOperation。

Trade off

相比于常规的以太坊交易mempool而言,此协议增加、改变或者牺牲了什么属性?

上面叙述了EIP4337的工作流程,这里来做一些权衡对比。

维护的属性
  • 无中心化参与者; 所有的都是 peer-to-peer mempool。
  • DoS safety ,这个上面已经分析了。
  • 用户端无复杂设置: 用户不用关注钱包是否创建等细节, 钱包会以确定性的 CREATE2 addresses方式存在, 没有会自动重建。
  • 付费可覆盖前步交易, 可以发送一个新的UserOperation,用更高的gas来覆盖或者加速交易。
新增的属性
  • 灵活的验证属性: the validateUserOp 验证功能可以添加 arbitrary signature 和once 验证逻辑 (新签名格式, 多签…)

  • 重复实现执行层的 quantum-safe: 如果本协议普遍适用, 就不用在执行层再为量子安全做额外工作. 可独立升级钱包到本协议.

    尽管包装(wrapper)交易是安全的, minde可以用新创建的wallet, 因此hash保护的 EOA ,为每个交易bundle在打包进入一个区块前不会发布交易.

  • Wallet 可升级: wallet 认证逻辑可以是稳定的, 因此 wallets 可更改自己的publick keys,如果使用了代理调用),则可升级整体代码.

  • 灵活的执行逻辑: wallets 可以为执行步骤添加自定义逻辑 , 例如自动的原子多操作 (a key goal of EIP 3074)。

带来的缺点
  • 轻微提升了DoS易攻击性 不考虑协议的好的影响, 因为验证逻辑允许比单一椭圆曲线加密更复杂的算法。
  • Gas 超量: 有的时候会比当下多一些的gas (尽管一些场景已经使用了multi-call).
  • 一次一个交易: 帐户不能队列话并将多个交易发送到内存池。不过执行原子多操作的能力让它变得不重要了。

More from this blog

让你的私钥随时更换,可以四处旅行

是的基于社交恢复和社区运行的TEE KMS,普通个体的私钥可以依赖多层安全机制:passkey+Email+社区KMS(硬件安全)+AA多签(可适配多种签名机制,增加抗量子签名模块)。听起来非常棒!是人类数字未来中需要的东西。下面是我的一个研究项目,进行中,有经验的大牛可以指点一下(嵌入式和硬件钱包开发、TEE、抗量子等等)。 STM32MP157F-DK2 Development Project STM32MP157F-DK2 开发项目 🇬🇧 Jump to English Vers...

Jan 25, 20263 min read

人性之光-以自由之名

以自由之名 v0.1.5 有点怪怪的标题,原谅理工男的简单和直接。 先分享一点感触和认知:某个角度看,人性是想象力、创造力和情感,是人类独有的特质。 人性是区别于AI和机器人,以及其他生命和造物的独有内核。人性是一种对自由的追求:发挥你的想象力、创造力,拥有自己的情感,是人存在的一种方式,这种方式,称为自由。 作为普通个体,想在人类社会拥有自由,除去国家和法律赋予的基础保障和基本权利之外,哈耶克有个观点是时间、空间和选择的范围,是自由的基础保障;而福柯则反向给出了规训的方式:时间空间和力量(并非...

Jan 25, 20261 min read

How to play with AI vibe coding?

我们要和 AI 沟通,要总结几个经验,供大家参考(血泪教学,迭代无数次): 三个重点 重设计、三层文档体系、渐进式开发。 第一点 最重要就是设计一定要占据你开发时间的一半以上,包括研究,包括和 AI 的交互讨论,包括提取一些专题,然后跟其他的 AI 交流生成深度的报告,包括自己阅读相关的报告和分析,以及一些范例的 repository。 第二点 要完整的文档体系,不管哪一种,都要跟随文档体系来去不断地迭代你的和 AI 交互的过程;我现在使用的是,嗯,三层的文档管理体系。第一层呢是backlog...

Aug 17, 20252 min read

It is Fun for me.

jFlow: from research to production 创新之路:最有趣的探索之路。 创新之路 Road of Exploration Research Input=Idea:描述你的 idea,进行严谨的论证过程,逻辑结构类似于缩小版本的 SCI 论文。通过分析论证,得出结论,是真正有价值创新。 output=Solution:定义你的产品,包括产品定位、目标用户、核心功能、商业模式,让团队、社区、早期投资者、用户、合作伙伴等,都快速了解你的产品的价值所在。 Devel...

Aug 12, 20251 min read

我的AI小助手:RAG 本地测试记录(updating...)

预期: 数据: 本地个人计划和隐私、正常论文相关的科研、业界跟踪和研究分析,三大类都存储在本地,不要流出个人电脑。 初步的7B模型(本人MiniMac的上限)进行大体分析。 可以使用外部deepseek和grok,claude等外部API,但沟通内容是隔离和脱敏的,最简单就是7B分析的结论,进行隐私脱敏(自行设定脱敏规则)和单独目录存储(独立知识库),这个动作是离线断网进行。 然后针对沟通外部的独立知识库,可以充分利用外部大模型能力。 个人计划是使用雷电连接mac book和mac m...

Mar 15, 20251 min read

jLab

69 posts

It is my Lab for curiosity!