WATS Wallet logoWATS Wallet
技术6 分钟阅读

什么是内存池(Mempool)?每笔交易都要经过的等候室

内存池是节点层面的暂存区,已签名的交易在这里等待区块生产者来拾取。本文讲清「待确认」、替换与驱逐究竟如何运作,公开池为何是抢跑机器人的礼物,以及 Solana 与 ERC-4337 为何另有做法。

内存池(mempool,即「memory pool」)是区块链节点用来存放那些已签名并广播到网络、但尚未被打包进区块的交易的暂存区。不存在单一的全球内存池:每个节点都保有自己的一份副本,并以八卦(gossip)方式传给相邻节点,因此「待确认」的真正含义是,你的交易正躺在大多数连接良好的节点的池子里,等着被拾取。区块生产者按手续费优先级从池中挑选,所以一笔出价过低的交易可能等上数小时、被一笔携带相同 nonce 而费用更高的版本替换掉,或者被驱逐并遗忘,却从未在链上失败。公开池人人可读,因此待确认的兑换在确认之前就已暴露在搜索者机器人眼前。并非每条链都这样运作——Solana 把交易直接流式发送给即将出块的生产者,而在 EVM 链上,像 WATS 这样的 ERC-4337 钱包会把 UserOperation 提交到一个独立的替代内存池,由 bundler 打包成普通交易。

签名与区块之间

当你按下发送,交易并没有进入区块链。它进入的是一条也许能进入区块链的队列。钱包把签名后的交易广播给节点,节点检查它格式正确、签名无误、nonce 合理且余额足够,然后它进入内存池——等待区块生产者拾取的待确认交易池。钱包里显示为「待确认」的一切都住在这个等候室里,而交易做出的大多数令人困惑的事——卡住、消失、被替换——都是内存池行为,不是区块链行为。

内存池究竟是什么

第一个意外:不存在单一的、权威的内存池。每个节点维护自己的待确认交易池,并把它们八卦给相邻节点,因此网络中存在成千上万份高度重叠却从不完全相同的副本。「在内存池里」实际上意味着「此刻已在大多数连接良好的节点的内存池里」。节点还会执行本地策略——接受一笔交易所需的最低手续费、单个账户可持有的待确认交易数量上限、以及池满时驱逐出价最低的条目——这就是为什么费用极低的交易可以在从未在链上失败的情况下悄然从网络中消失。什么都没花掉,因为什么都没被执行过。

交易如何离开:手续费拍卖

区块空间稀缺,内存池就是其市场出清之处。区块生产者会尽可能装入最有利可图的那一组待确认交易,实践中这意味着手续费优先级决定谁先离开等候室。在 EVM 链上,这个优先级就是你在 EIP-1559 之下附加在基础费之上的小费:付出现价,一两个区块内即可出场;出价过低,就得等到需求降温,或者眼看交易被驱逐。有一个后果不断让人栽跟头——由于 EVM 账户严格按 nonce 顺序执行,一笔卡住的廉价交易会挡住你之后发出的每一笔交易,无论后者出价多么大方。

待确认、被替换、被丢弃

因为待确认交易还不是历史,它仍可以用一种特定方式编辑:替换。用相同 nonce、明显更高的费用广播一笔新交易,等于告诉节点丢掉旧的——这是解救卡住交易的标准疗法;当替换交易是一笔发给自己地址的零值转账时,这也是取消交易的标准做法。既不确认也不被替换的交易最终会被丢弃:从各池中驱逐并被遗忘,仿佛从未发送过。什么都没丢,因为资金从未移动——但这一切在典型钱包界面上都看不见,大多数「我的交易去哪了?」式的恐慌正源于此。

一个非常公开的等候室

公开内存池里的一切在确认前对任何人可见,包括那些解析待确认兑换并据此行动的机器人。这种可见性正是抢跑(front-running)和滑点详解中所讲的三明治交易的原材料:一笔待确认的交易等于公告了你即将买入什么,以及你已同意接受的最差价格。这正是收紧滑点容忍度是一道真正防线的原因——它为三明治能榨走的金额设了上限。这也是为什么越来越多的 EVM 流量如今走私有提交通道,绕过公开池直达区块构建者,用透明度换取保护,同时也承担了新的信任假设。

不是每条链都有内存池

八卦式内存池是以太坊风格的设计选择,不是自然法则。Solana 基本跳过了它:出块者的轮值表是提前已知的,客户端因此把交易直接转发给即将出块的生产者,而不是去灌满一个全球池——这是其待确认状态如此短暂的原因之一。TON 通过自己的分片路由传送消息,而非一条共享队列。而 ERC-4337 在 EVM 本身之上加了一条并行车道:UserOperation 在属于自己的替代内存池中等待,由 bundler 拾取并包裹进一笔普通交易,正如bundler 与 UserOperation 详解所述。同样的等候室逻辑,换了一间房。

钱包在哪里与内存池相遇

内存池正是 WATS 替你打理、让你几乎不必去想的那一层:WATS 通过健康节点广播,并在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON——三个拥有三种不同等候室的生态——上于同一个界面背后追踪待确认状态,于是无论卡在哪间等候室,「待确认」对你而言含义相同。在 EVM 链上,WATS 的操作以 ERC-4337 UserOperation 的形式穿过替代内存池,由 paymaster 结算区块生产者索取的原生 gas,而你只用一种代币结账——ATS。这不是折扣——网络仍然拿到足额的现行费率,你的 ATS 扣费也随之浮动——它只改变由哪种代币来支付。ATS 是 LayerZero OFT,因此一个余额就能覆盖所有支持的链,而不必备着八种原生币余额;作为手续费收取的 ATS 会被销毁,推动供应量从 100,000,000 走向 30,000,000 的下限。WATS 是第一个也是唯一一个把 ERC-4337 与 OFT 单代币手续费同这一销毁机制结合起来的钱包,而这一切都不触及托管:WATS 完全非托管,钥匙由你持有,WATS 从不持有任何钥匙。

所以实用的结论很窄。你无法让内存池消失,也不该希望它消失——正是那场拍卖才让你的交易得以被打包。你能消除的,是那种与拍卖无关的失败模式:人在某条链上,却没有原生币可用来出价。如果你反复撞上的是这一版「待确认」,那么在 WATS Hot Wallet 里备好一份 ATS 余额就是解法,机制详见 ATS 费用页面

常见问题

用一句话说,内存池是什么?

内存池是区块链节点用来存放有效、已签名、已广播到网络但尚未被打包进区块的交易的暂存区。区块生产者从中挑选,一般按手续费优先级,因此内存池既是队列,也是一场争夺区块空间的拍卖。你的钱包标为「待确认」的一切,都在那里等着。

存在一个全球统一的内存池吗?

不存在。每个节点维护自己的待确认交易池,并通过八卦网络与相邻节点共享;存在的是成千上万个相互重叠的本地视图,而不是一条主队列。这就是为什么区块浏览器有时对同一笔待确认交易说法不一,也是为什么费用极低的交易可能存在于某些池中、被另一些池驱逐,最终被所有池遗忘。

为什么我的交易卡在待确认?能取消吗?

几乎总是因为它的费用低于现行费率而在内存池中等待——需求降温它就会确认,否则会无限期等下去。由于待确认交易可以被替换,解法是用相同 nonce、更高费用重新广播:要么发同一笔交易(加速),要么给自己的地址发一笔零值转账(取消)。钱包通常把这两者做成「加速」和「取消」按钮。在 EVM 链上,这件事的影响不止于这一笔交易,因为一个卡住的 nonce 会挡住该账户之后的每一笔交易。

别人能在确认前看到我的交易吗?

在公开内存池里,能——待确认交易完全可见,机器人会主动解析它们,这正是抢跑和三明治攻击得以存在的原因。收紧滑点容忍度能限制这类机器人从兑换中榨取的空间;在 EVM 上,越来越多的流量使用完全跳过公开池的私有提交通道,用那份透明度换取保护。

ERC-4337 的 UserOperation 也在同一个内存池里等待吗?

不。UserOperation 不是交易,它们走的是一个独立的替代内存池;bundler 在那里收集它们,并把它们包裹进一笔常规交易,这笔交易随后才进入普通内存池。WATS 在 EVM 链上走的正是这条路径:UserOperation 携带一个 paymaster 来结算原生 gas,这正是 WATS 用户能用 ATS 而不是各条链的原生币支付网络费用的原因。

要把交易从内存池里送出去,我需要每条链的原生币吗?

在 WATS 中不需要。WATS Hot Wallet 在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON 上都以同一种代币 ATS 收取网络费用,因此你绝不会仅仅因为这条链上没有 ETH、那条链上没有 BNB 就被挡住无法广播。在 EVM 上,这通过 ERC-4337 实现:由 paymaster 支付区块生产者所要求的原生 gas;而 ATS 是 LayerZero OFT,所以一个余额就覆盖所有支持的链。这不是折扣——网络照样收到足额费用,ATS 只是改变了由哪种代币来付。