WATS Wallet logoWATS Wallet
技术7 分钟阅读

Bundler 与 UserOperation:ERC-4337 交易如何运作

清晰而技术准确地梳理 ERC-4337 流程——UserOperation、备用内存池、bundler、EntryPoint 合约与 paymaster——以及它们如何拼合在一起。

ERC-4337 快速回顾

ERC-4337 是 Ethereum 用于账户抽象的标准——一种在不改动基础协议的前提下,赋予智能合约账户与外部拥有账户(EOA)一样一流的、发起并支付动作能力的方式。ERC-4337 不去修改共识层,而是引入了一套由更高层对象和链下基础设施组成的并行系统,最终通过普通的 Ethereum 交易来结算。如果你想先从头开始了解,我们关于什么是账户抽象的解释涵盖了它的动机,而什么是 ERC-4337则梳理了整个标准。本文聚焦于其中的机制:在系统中流动的对象,以及处理它们的角色。请注意,ERC-4337 是一个 EVM 标准——它适用于 Ethereum 及兼容 EVM 的链,而不适用于 Solana 或 TON 等非 EVM 链。

UserOperation 究竟是什么

ERC-4337 中的核心对象是 UserOperation。它表面上看起来像一笔交易,但更好的理解是把它看作一份签署过的意图声明:“这是我的账户想要完成的事,以及用于验证并支付它的参数。”一个 UserOperation 携带诸如发送方账户、nonce、要执行的 calldata、Gas 上限、手续费参数、可选的 paymasterAndData 字段以及一个签名等字段。

它与普通交易的关键区别在于由谁以及用什么来签名。一笔常规的 Ethereum 交易必须由某个 EOA 的私钥使用固定的 ECDSA 方案签名,并且由同一个账户支付 Gas。而一个 UserOperation 由发送方自己的智能合约账户逻辑来验证——该逻辑可以实现账户所定义的任何签名方案、多密钥规则或授权策略——并且它完全不必以原生 Gas 为自己付费。这种灵活性正是重点所在:是账户,而非协议,来决定什么才算一个有效的动作。

它们所栖身的备用内存池

UserOperation 不会进入常规的 Ethereum 交易内存池,因为它们还不是交易。它们会被广播到一个独立的备用内存池(通常称为 alt-mempool)——一个专门用于 ERC-4337 对象的点对点网络。钱包和 dApp 在此提交 UserOperation,而消费它们的基础设施则监听这个网络,而非基础层的内存池。这种分离让账户抽象流量在被打包进一笔真实交易之前,一直远离共识关键路径。

bundler 的角色

bundler 是把意图变为链上现实的链下角色。它的工作分为四个部分。第一,它从备用内存池收集 UserOperation。第二,它对每一个进行模拟和验证——在模拟环境中运行账户的验证逻辑,以确认签名有效、nonce 正确,且账户(或其 paymaster)能够承担成本——同时执行相应规则,阻止那些会消耗其无法支付资源的操作。第三,它把一个或多个有效的 UserOperation 打包进一笔普通的 Ethereum 交易。第四,它从自己的 EOA 把该交易提交到网络,预先支付基础层 Gas,并期望在链上获得补偿。

由于 bundler 垫付 Gas 并因打包上链而赚取手续费,它的行为很像是专门服务于账户抽象流量的区块构建者。它的模拟与验证步骤正是对它自身的保护:它不会打包一个无法向它偿付的操作。

EntryPoint 合约

一切都汇聚到一个单一、规范的智能合约上,称为 EntryPoint。bundler 的交易是对 EntryPoint 的一次调用,带有一个 UserOperation 数组。随后 EntryPoint 会运行一个严格的两阶段循环。在验证阶段,它针对每个操作调用发送方账户的验证函数(如果指定了 paymaster,还会调用 paymaster 的),以在链上重新核验签名、nonce 与付款安排。只有在批次中的所有操作都通过验证之后,它才进入执行阶段,在该阶段把每个操作的 calldata 派发给其账户,以真正执行转账、兑换或其他动作。

这种拆分很重要:把验证与执行分离开,使得一个批次的付款保证在任何改变状态的工作运行之前就已确立,也让 EntryPoint 能够一次性对众多操作精确核算 Gas。

paymaster 位于何处

paymaster 是一个可选合约,它同意代表账户为某个 UserOperation 付费。当一个 UserOperation 包含 paymaster 数据时,EntryPoint 会在验证阶段询问该 paymaster:它是否愿意代付这个操作,以及以什么条件代付。paymaster 可以无条件接受(真正的无 Gas 代付),也可以以换取价值为条件接受——最有用的方式是,向用户收取一种 ERC-20 代币,而非原生 Gas。要更深入地了解这一组件,请参阅什么是 paymaster。paymaster 正是流程中那个把“用户用什么支付”与“网络收到什么”解耦开的挂钩点。

Gas 与失败如何处理

ERC-4337 中的 Gas 是分层的。bundler 为外层交易支付真实的 ETH;EntryPoint 按每个 UserOperation 声明的上限计量其验证与执行 Gas;而无论谁承担付款责任——账户或其 paymaster——都必须已质押或存入足够的金额来支付账单,最后由 EntryPoint 结算。失败则由“验证优先”的设计加以约束。如果某个操作在链上验证期间失败,它会被直接排除、无法落链,而 bundler 的链下模拟本就旨在提交前捕获这一点。如果某个操作通过了验证但其执行发生回滚,则执行产生的效果会被回滚,而已经花费的 Gas 仍会被核算并支付——因此 bundler 不会因诚实的工作而得不到补偿。这就是为什么 bundler 会如此谨慎地进行模拟:它防止被恶意消耗的手段,就是拒绝纳入任何不会向它偿付的东西。

WATS 如何运用这一点

在 EVM 链上,WATS 恰恰只依赖这一流程中的一个部件:ERC-4337 paymaster。当你在 WATS Hot Wallet 中进行转账、兑换或质押时,正是 paymaster 让你的手续费能够以 ATS 收取,而非以链上的原生 Gas 收取——你从不需要持有 ETH、BNB 或任何其他 Gas 代币来交易。由于 ATS 是一个 LayerZero OFT,单一的 ATS 余额即可覆盖 EVM、Solana 和 TON 上的手续费(在非 EVM 链上,由一个等效的 fee-payer 扮演 paymaster 的角色),而所收取的 ATS 会从 100,000,000 朝着 30,000,000 的下限销毁。WATS 始终完全非托管——你持有自己的私钥——并且它是首个也是唯一一个将 ERC-4337 + OFT 单一代币手续费(以之替代原生 Gas 收取)与这种销毁结合起来的钱包。完整图景请参阅 ATS 手续费模型如何运作

常见问题

UserOperation 与普通 Ethereum 交易有什么区别?

普通交易由外部拥有账户使用固定的 ECDSA 签名,并以链上的原生代币支付自己的 Gas。而 UserOperation 是一个更高层的意图对象,由发送方自己的智能合约账户逻辑来验证,该逻辑可以使用自定义规则,并且它不必以原生 Gas 为自己付费——可由 paymaster 承担手续费。UserOperation 还通过一个独立的备用内存池传播,而非标准的交易内存池。

ERC-4337 bundler 究竟做什么?

bundler 从备用内存池收集 UserOperation,对每一个进行模拟和验证,以确认签名、nonce 以及付款能够被覆盖,然后把有效的那些打包进一笔调用 EntryPoint 合约的普通 Ethereum 交易。它从自己的账户提交该交易,垫付基础层 Gas,并期望在链上获得补偿。谨慎的模拟正是保护 bundler 不去纳入那些不会向它偿付的操作的手段。

ERC-4337 是否允许我用 ETH 以外的代币支付 Gas 费?

在使用 paymaster 时可以。paymaster 是一个可选合约,它可以代付一个 UserOperation,并且不收取原生 Gas,而是接受以某种 ERC-20 代币付款,另行结算实际的网络手续费。这就是钱包能让你在不持有链上原生 Gas 代币的情况下交易的原理。ERC-4337 及其 paymaster 仅限 EVM;Solana 和 TON 等非 EVM 链则用一个等效的 fee-payer 或中继器实现类似的结果。