AA Link to heading

EVM 交易工作流 Link to heading

  • 交易只能由 EOA (没有代码的账户)发起 EIP3607

  • 但 EOA 和合约账户在 EVM 上是一样的,有同样的属性:balance、nonce、code、 state

EOA 特点 Link to heading

  • EOA (Externally Owned Account 外部账号)

    • 用私钥控制的账号(MetaMask / ImToken … )

    • EOA特点:链下生产、所有账号一致

  • 问题:

    • 私钥、助记词、支付 Gas(普通用户太不友好)

    • 一次只能签一笔交易

    • 无法 Social Recovery、无法替换 Key

交易体验不佳 Link to heading

// ERC20
function approve(address _spender, uint256 _value) {
    allowance[msg.sender][_spender] = _value;
    return true;
}
// DEX
function swap( ) {
    token.transferFrom(msg.sender, address(this), amount)

}

合约账户(CA) Link to heading

  • 由合约代码控制的账户

  • 辑灵活:其他签名方式(如 Passkey secp256r1)、多签、Social Recovery、Gas 代付

  • 但是只能被动执行

先驱EIP-86 / EIP-2938 Link to heading

  • EIP-86:抽象验证证签名逻辑,创建“合约”来验证证交易签名

  • EIP-2938:让合约成为一等公民(可支付 Gas 及发起交易)对核心协议修改太大,暂时搁置

ERC- 4337 Link to heading

  • 不改变协议(不影响共识)

  • 合约作为账户(Smart Account),引入 Bundler 打包发送交易

  • 带来了前所未有的灵活性:

    • 多种签名逻辑 (在合约中验证签名)

    • 批量交易

    • 社交恢复

    • 用其他 Token 代付手续费,Paymaster 作为付款人

在一些 layer2 上原生支持 AA(RIP-7560):Starknet、zkSync 等

ERC-4337 案例 Link to heading

先理解传统 Web3 痛点(对比 Web2) Link to heading

  • Web2:用指纹 / 人脸(Passkey)、密码直接登录,无需关心 “私钥 / 助记词”,体验顺滑。
  • 传统 Web3:必须管理助记词 / 私钥,对普通用户不友好(丢私钥 = 丢资产),是大规模 adoption 的障碍。

目标:把 Web2 的 “无密码登录体验” 搬进 Web3,让用户用 Passkey(指纹 / 人脸)直接控制链上账户,同时保留 Web3 的 “去中心化、智能合约” 能力。

利用 Passkey 迁移传统 Web2 用户到链上

  • 基于 Passkey 方案为用户创建账户,让用户不用关注助记词和私钥。
  • Passkey 是基于FIDO2/WebAuthn标准的无密码登录标准,使用 secp256r1 (P‐256) 曲线在用>户设备上签名(表现为指纹、faceID 等),服务端验证证登录,主流的Web服务均支持.
  • 在合约中对验证 secp256r1 签名(RIP‐7212 已经引入 P‐256预编译),即可实现合约钱包,该钱包有 >Passkey 签名控制

ERC-4337 交易工作流 Link to heading

1. 先明确角色职责 Link to heading

  • Bundler: 是一个链下节点,职责是收集 UserOperation、模拟验证(调用 EntryPoint.simulateValidation),然后把合法的 UserOperation 打包成以太坊交易,提交到链上。
  • EntryPoint: 是链上的核心合约,负责接收 Bundler 提交的 UserOperation,执行 validateOp(验证)和 executeOp(执行)。
  • Smart Account(Bob 的合约账户): 是用户的智能合约钱包,需要实现 IAccount 接口(包含 validateUserOp 方法),在 validateOp 阶段验证签名、权限等逻辑。
  • PayMaster(可选):帮用户支付手续费(比如用其他代币支付 Gas)。

2. 流程拆解(对应图中步骤) Link to heading

  1. Bob 构造 UserOperation: Bob 想调用合约 B/C,但不用私钥签名 “传统交易”,而是构造一个 UserOperation(包含 todatagas 等信息),并用 Passkey(基于 P-256 曲线)签名
  2. Bundler 提交交易: Bundler 收集 UserOperation,模拟验证后提交给 EntryPoint
  3. EntryPoint 验证 & 执行
    • ValidateOp:检查签名是否合法(Passkey 签名是否通过验证)、账户是否有足够 Gas 等。
    • executeOp:如果验证通过,执行 UserOperation,让 Bob 的合约账户调用合约 B/C(此时 msg.sender = Bob 的合约账户)。

3. validateOpexecuteOp 的完整流程(与 Bundler 的关系) Link to heading

为了说清楚,我们把流程拆成 “链下模拟验证”“链上实际执行” 两个阶段:

阶段 1:链下 - Bundler 模拟验证(调用 simulateValidation Link to heading
  1. Bundler 收集 UserOperation: Bob 构造 UserOperation(包含调用合约 B 的指令、签名等),发送给 Bundler。
  2. Bundler 调用 EntryPoint.simulateValidation: Bundler 会模拟在链上执行 validateOp 的过程,但不会真正改变链上状态。这一步的作用是:
    • 检查 UserOperation 是否合法(提前筛掉无效操作,避免上链后失败浪费 Gas)。
    • 预估执行这个 UserOperation 需要多少 Gas。
  3. simulateValidation 内部触发 validateOp: 在模拟执行中,EntryPoint 会调用 Bob 的智能合约账户的 validateUserOp 方法(这就是 validateOp 的核心逻辑),验证:
    • 签名是否正确(比如 Passkey 签名是否合法)。
    • 账户是否有足够余额支付 Gas(或 Paymaster 是否愿意代付)。
    • 是否有其他自定义规则(比如每天只能调用一次合约 B)。
  4. Bundler 决定是否打包: 如果模拟验证通过,Bundler 会把这个 UserOperation 打包成以太坊交易;如果验证失败,Bundler 会拒绝打包,这个 UserOperation 就不会上链。

4:链上 - 实际执行 validateOpexecuteOp Link to heading

  1. Bundler 提交交易到链上: Bundler 把包含 UserOperation 的交易提交到以太坊网络,这个交易的目标合约是 EntryPoint
  2. 链上执行 EntryPoint.handleOps: 当交易被矿工打包上链后,EntryPoint 会执行 handleOps 函数,处理 Bundler 提交的 UserOperation
  3. 第一步:validateOp(真正链上验证)EntryPoint 会再次调用 Bob 的智能合约账户的 validateUserOp 方法(和模拟验证逻辑一样),确保:
    • 签名、权限等规则仍然有效(防止模拟验证后,链上状态变化导致规则失效)。
    • 如果验证失败,整个交易回滚,不会执行后续操作。
  4. 第二步:executeOp(执行交易): 验证通过后,EntryPoint 会调用 Bob 的智能合约账户的 execute 方法(或类似逻辑),实际执行 UserOperation 中的指令(比如调用合约 B 铸造 NFT),此时 msg.sender = Bob 的智能合约账户地址

简单说:

  • validateOpexecuteOp 是链上的 “验证 + 执行” 流程,由 EntryPointSmart Account 协作完成。
  • Bundler 是链下的 “搬运工 + 质检员”,负责收集 UserOperation,并通过模拟验证确保它们有资格上链执行。

ERC-4337 主要组件 Link to heading

  • Smart Contract Wallet: ḵ证和执行 UserOp 中的 callData , 可以有自定义的ḵ证᭦辑

    • 通常由 Account Factory 创建
  • Bundler : 将用户的 UserOp 发ᭆ到᱾上 EntryPoint

  • EntryPoint : 单例智能合约, 用来ḵ证(Validation)和执行(Execution)UserOp(对应着原来客户端的实施)

  • PayMaster (可选): 代付手续费

ERC-4337 基础设施(服务商) Link to heading

• SDK:Zerodev 、 Safe Wallet 、Pimlico、biconomy、etherspot、Alchemy AccountKit 、thirdweb

• 使用这些 SDK 方便在自己的应用里集成钱包

• 理解 ERC4337 实现参考文章:

https://learnblockchain.cn/article/5426

https://learnblockchain.cn/article/5432

https://learnblockchain.cn/article/5442

https://learnblockchain.cn/article/5483