[{"data":1,"prerenderedAt":19},["ShallowReactive",2],{"blog-content-zh-bundler-and-useroperation-explained":3},{"slug":4,"title":5,"excerpt":6,"description":7,"bodyHtml":8,"faqItems":9},"bundler-and-useroperation-explained","Bundler 与 UserOperation：ERC-4337 交易如何运作","清晰而技术准确地梳理 ERC-4337 流程——UserOperation、备用内存池、bundler、EntryPoint 合约与 paymaster——以及它们如何拼合在一起。","ERC-4337 究竟如何运作：UserOperation、备用内存池、bundler、EntryPoint 合约，以及 paymaster 在交易流程中的位置。","\u003Ch2>ERC-4337 快速回顾\u003C\u002Fh2>\n\u003Cp>ERC-4337 是 Ethereum 用于\u003Cem>账户抽象\u003C\u002Fem>的标准——一种在不改动基础协议的前提下，赋予智能合约账户与外部拥有账户（EOA）一样一流的、发起并支付动作能力的方式。ERC-4337 不去修改共识层，而是引入了一套由更高层对象和链下基础设施组成的并行系统，最终通过普通的 Ethereum 交易来结算。如果你想先从头开始了解，我们关于\u003Ca href=\"\u002Fblog\u002Fwhat-is-account-abstraction\">什么是账户抽象\u003C\u002Fa>的解释涵盖了它的动机，而\u003Ca href=\"\u002Fblog\u002Fwhat-is-erc-4337\">什么是 ERC-4337\u003C\u002Fa>则梳理了整个标准。本文聚焦于其中的机制：在系统中流动的对象，以及处理它们的角色。请注意，ERC-4337 是一个 EVM 标准——它适用于 Ethereum 及兼容 EVM 的链，而不适用于 Solana 或 TON 等非 EVM 链。\u003C\u002Fp>\n\u003Ch2>UserOperation 究竟是什么\u003C\u002Fh2>\n\u003Cp>ERC-4337 中的核心对象是 \u003Cem>UserOperation\u003C\u002Fem>。它表面上看起来像一笔交易，但更好的理解是把它看作一份签署过的意图声明：“这是我的账户想要完成的事，以及用于验证并支付它的参数。”一个 UserOperation 携带诸如发送方账户、nonce、要执行的 calldata、Gas 上限、手续费参数、可选的 \u003Ccode>paymasterAndData\u003C\u002Fcode> 字段以及一个签名等字段。\u003C\u002Fp>\n\u003Cp>它与普通交易的关键区别在于\u003Cem>由谁\u003C\u002Fem>以及\u003Cem>用什么\u003C\u002Fem>来签名。一笔常规的 Ethereum 交易必须由某个 EOA 的私钥使用固定的 ECDSA 方案签名，并且由同一个账户支付 Gas。而一个 UserOperation 由发送方自己的智能合约账户逻辑来验证——该逻辑可以实现账户所定义的任何签名方案、多密钥规则或授权策略——并且它完全不必以原生 Gas 为自己付费。这种灵活性正是重点所在：是账户，而非协议，来决定什么才算一个有效的动作。\u003C\u002Fp>\n\u003Ch2>它们所栖身的备用内存池\u003C\u002Fh2>\n\u003Cp>UserOperation 不会进入常规的 Ethereum 交易内存池，因为它们还不是交易。它们会被广播到一个独立的\u003Cem>备用内存池\u003C\u002Fem>（通常称为 alt-mempool）——一个专门用于 ERC-4337 对象的点对点网络。钱包和 dApp 在此提交 UserOperation，而消费它们的基础设施则监听这个网络，而非基础层的内存池。这种分离让账户抽象流量在被打包进一笔真实交易之前，一直远离共识关键路径。\u003C\u002Fp>\n\u003Ch2>bundler 的角色\u003C\u002Fh2>\n\u003Cp>\u003Cem>bundler\u003C\u002Fem> 是把意图变为链上现实的链下角色。它的工作分为四个部分。第一，它从备用内存池收集 UserOperation。第二，它对每一个进行模拟和验证——在模拟环境中运行账户的验证逻辑，以确认签名有效、nonce 正确，且账户（或其 paymaster）能够承担成本——同时执行相应规则，阻止那些会消耗其无法支付资源的操作。第三，它把一个或多个有效的 UserOperation 打包进一笔普通的 Ethereum 交易。第四，它从自己的 EOA 把该交易提交到网络，预先支付基础层 Gas，并期望在链上获得补偿。\u003C\u002Fp>\n\u003Cp>由于 bundler 垫付 Gas 并因打包上链而赚取手续费，它的行为很像是专门服务于账户抽象流量的区块构建者。它的模拟与验证步骤正是对它自身的保护：它不会打包一个无法向它偿付的操作。\u003C\u002Fp>\n\u003Ch2>EntryPoint 合约\u003C\u002Fh2>\n\u003Cp>一切都汇聚到一个单一、规范的智能合约上，称为 \u003Cem>EntryPoint\u003C\u002Fem>。bundler 的交易是对 EntryPoint 的一次调用，带有一个 UserOperation 数组。随后 EntryPoint 会运行一个严格的两阶段循环。在\u003Cem>验证阶段\u003C\u002Fem>，它针对每个操作调用发送方账户的验证函数（如果指定了 paymaster，还会调用 paymaster 的），以在链上重新核验签名、nonce 与付款安排。只有在批次中的所有操作都通过验证之后，它才进入\u003Cem>执行阶段\u003C\u002Fem>，在该阶段把每个操作的 calldata 派发给其账户，以真正执行转账、兑换或其他动作。\u003C\u002Fp>\n\u003Cp>这种拆分很重要：把验证与执行分离开，使得一个批次的付款保证在任何改变状态的工作运行之前就已确立，也让 EntryPoint 能够一次性对众多操作精确核算 Gas。\u003C\u002Fp>\n\u003Ch2>paymaster 位于何处\u003C\u002Fh2>\n\u003Cp>\u003Cem>paymaster\u003C\u002Fem> 是一个可选合约，它同意代表账户为某个 UserOperation 付费。当一个 UserOperation 包含 paymaster 数据时，EntryPoint 会在验证阶段询问该 paymaster：它是否愿意代付这个操作，以及以什么条件代付。paymaster 可以无条件接受（真正的无 Gas 代付），也可以以换取价值为条件接受——最有用的方式是，向用户收取一种 \u003Cem>ERC-20 代币\u003C\u002Fem>，而非原生 Gas。要更深入地了解这一组件，请参阅\u003Ca href=\"\u002Fblog\u002Fwhat-is-a-paymaster\">什么是 paymaster\u003C\u002Fa>。paymaster 正是流程中那个把“用户用什么支付”与“网络收到什么”解耦开的挂钩点。\u003C\u002Fp>\n\u003Ch2>Gas 与失败如何处理\u003C\u002Fh2>\n\u003Cp>ERC-4337 中的 Gas 是分层的。bundler 为外层交易支付真实的 ETH；EntryPoint 按每个 UserOperation 声明的上限计量其验证与执行 Gas；而无论谁承担付款责任——账户或其 paymaster——都必须已质押或存入足够的金额来支付账单，最后由 EntryPoint 结算。失败则由“验证优先”的设计加以约束。如果某个操作在链上验证期间失败，它会被直接排除、无法落链，而 bundler 的链下模拟本就旨在提交前捕获这一点。如果某个操作通过了验证但其执行发生回滚，则执行产生的效果会被回滚，而已经花费的 Gas 仍会被核算并支付——因此 bundler 不会因诚实的工作而得不到补偿。这就是为什么 bundler 会如此谨慎地进行模拟：它防止被恶意消耗的手段，就是拒绝纳入任何不会向它偿付的东西。\u003C\u002Fp>\n\u003Ch2>WATS 如何运用这一点\u003C\u002Fh2>\n\u003Cp>在 EVM 链上，WATS 恰恰只依赖这一流程中的一个部件：ERC-4337 \u003Cem>paymaster\u003C\u002Fem>。当你在 WATS \u003Ca href=\"\u002Fhot-wallet\">Hot Wallet\u003C\u002Fa> 中进行转账、兑换或质押时，正是 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 收取）与这种销毁结合起来的钱包。完整图景请参阅 \u003Ca href=\"\u002Fats-fee\">ATS 手续费模型如何运作\u003C\u002Fa>。\u003C\u002Fp>",[10,13,16],{"q":11,"a":12},"UserOperation 与普通 Ethereum 交易有什么区别？","普通交易由外部拥有账户使用固定的 ECDSA 签名，并以链上的原生代币支付自己的 Gas。而 UserOperation 是一个更高层的意图对象，由发送方自己的智能合约账户逻辑来验证，该逻辑可以使用自定义规则，并且它不必以原生 Gas 为自己付费——可由 paymaster 承担手续费。UserOperation 还通过一个独立的备用内存池传播，而非标准的交易内存池。",{"q":14,"a":15},"ERC-4337 bundler 究竟做什么？","bundler 从备用内存池收集 UserOperation，对每一个进行模拟和验证，以确认签名、nonce 以及付款能够被覆盖，然后把有效的那些打包进一笔调用 EntryPoint 合约的普通 Ethereum 交易。它从自己的账户提交该交易，垫付基础层 Gas，并期望在链上获得补偿。谨慎的模拟正是保护 bundler 不去纳入那些不会向它偿付的操作的手段。",{"q":17,"a":18},"ERC-4337 是否允许我用 ETH 以外的代币支付 Gas 费？","在使用 paymaster 时可以。paymaster 是一个可选合约，它可以代付一个 UserOperation，并且不收取原生 Gas，而是接受以某种 ERC-20 代币付款，另行结算实际的网络手续费。这就是钱包能让你在不持有链上原生 Gas 代币的情况下交易的原理。ERC-4337 及其 paymaster 仅限 EVM；Solana 和 TON 等非 EVM 链则用一个等效的 fee-payer 或中继器实现类似的结果。",1784634303692]