内存池(mempool,memory pool 的缩写)是等待室:每一笔区块链交易会在你把它广播出去之后、在矿工或验证者把它写入区块之前,先停在这里。它是公开区块链中最不“光鲜”的组成部分之一,却也是最具影响力的部分之一。内存池会决定你需要支付多少手续费、你要等多久;并且在某些网络上,它还会决定交易机器人能否在你的订单执行之前就先看到它,并在你蒙受损失的情况下从中获利。理解内存池能把确认延迟从一团迷雾变成一目了然的市场信号。
当你付得过少时,大多数网络会提供“补救通道”。比特币支持按手续费替换(replace by fee),允许你用更高手续费重新广播同一笔交易,从而覆盖最初版本。一个相关技巧是“子支付父(child pays for parent)”:附带一笔手续费更高的后续交易去花费那笔卡住交易的输出,这样矿工就获得把两笔一起确认的动力。以太坊的钱包允许你用相同的 nonce 并提交更高 gas 价格的交易来重新提交,它会替换掉挂起的版本。知道这些工具存在,能把一笔卡住的交易从“紧急情况”转变成“麻烦事”。
拥堵也可能是人为制造的。垃圾信息攻击会向网络灌入大量低价值交易来堵住队列,并降低对其他所有人的服务质量——这是一种廉价的拒绝服务(denial of service)。网络会用最低中继手续费、逐出策略以及最终的经济因素来防御,因为持续的垃圾信息会让攻击者在手续费层面付出真实成本。2017 年针对以太坊测试网络的垃圾信息攻击,展示了对手续费压力薄弱的链来说,淹没式轰击能有多有效,并且把“手续费市场设计”推到了更靠前的研究议程。
当你的交易卡住时,诊断几乎总是相同:你的手续费低于当前的通行费率。按优先级粗略排列,你的选择通常包括:等待拥堵缓解;通过按手续费替换(replace by fee)或 nonce 替换来提高手续费;在支持的情况下使用子支付父;或者在比特币上,如果这笔支付不再重要,就直接等待它被逐出。你不应该做的是惊慌:资金不会丢失。未确认的交易最终要么完成确认,要么就实际上停止存在;而在后者情况下,这些币从未离开过你钱包里的控制范围。只有当交易被包含进区块时,资金才会被扣除。
什么是内存池(mempool)?加密货币的交易候客厅
你点击发送一笔加密货币交易,却什么都没有发生。钱包显示为挂起(pending)。区块浏览器则展示你的交易在“灰区”里漂浮:未被确认,而且没有明确说明它会在何时落地,或者根本不会落地。
大多数人第一次遇到内存池(mempool)正是在这种轻微恐慌的时刻,而且他们找到的大量建议都假设你已经知道内存池是什么。本指南将从零开始讲起。
内存池(mempool,memory pool 的缩写)是等待室:每一笔区块链交易会在你把它广播出去之后、在矿工或验证者把它写入区块之前,先停在这里。它是公开区块链中最不“光鲜”的组成部分之一,却也是最具影响力的部分之一。内存池会决定你需要支付多少手续费、你要等多久;并且在某些网络上,它还会决定交易机器人能否在你的订单执行之前就先看到它,并在你蒙受损失的情况下从中获利。理解内存池能把确认延迟从一团迷雾变成一目了然的市场信号。
本指南将说明:内存池究竟是什么、为什么区块链根本需要等待室、交易如何一步步在其中流转、手续费市场如何决定谁会被最先确认、为什么并不存在单一的内存池而是成千上万个略有不同的内存池、队列溢出时会发生什么、内存池如何变成具掠夺性的交易机器人的“狩猎场”、为什么 Solana 采取了彻底移除公共内存池的激进举措,以及当你的交易卡住时你可以采取哪些实际步骤。
内存池到底是什么
内存池是一种用于存放未确认交易的数据库,区块链网络中的每一个全节点都会在其工作内存中维护它。当你在钱包里对一笔交易进行签名并点击发送时,这笔交易不会被传到某个用于集中处理的服务器,因为根本不存在这样的服务器。相反,你的钱包会把已签名的交易交给一个节点。该节点开始向它的同伴节点(peer)传播,随后这些同伴节点再向各自的同伴节点继续传播,直到网络中大多数节点都拥有一份副本。每一个接收到该交易的节点都会进行一系列检查;如果交易通过检查,它就会被放入该节点本地的内存池中等待。
“mempool”这个词本身是 memory 和 pool 的缩写,而 memory 这一部分才是关键所在。节点会把内存池保存在内存(RAM)里,而不是写到磁盘上,因为速度才是重点。当矿工组装一个候选区块时,它需要在极短时间内把成千上万笔待处理交易按手续费排序,并选择其中最有利可图的那一组。当网络中的某个新块从其他地方传来时,如果该块的大多数交易已经躺在本节点的内存池里(并且已完成检查),节点就能更快完成对该区块的验证。
内存池就是一个缓冲地带:连接起混乱且持续的用户活动流与区块生产那种严格、周期性的“心跳”。
为什么区块链需要等待室
传统支付处理器会在交易到达的瞬间确认,因为只有一家企业掌控账本,它只需要把对应记录写入即可。公开区块链并没有这种权威。成千上万台彼此独立的节点必须就一段共同历史达成一致,而它们是以离散的步骤实现的:一次只确认一个区块。区块之间,网络需要一幅共享的、非正式的“下一步大家想让什么发生”的画面,而内存池就提供了这幅画面。
等待期还承担关键的安全任务。在某个节点把交易加入自己的内存池之前,它会验证数字签名是否有效、发送方是否真的控制着被花费的资金、交易格式是否正确,以及同一批币是否没有被重复花费。最后这一项检查比听起来更重要。来自不同来源的两笔相互冲突的交易——它们都在花同一批币——完全可能在同一时刻从网络的不同节点进入。一部分节点先看到其中一笔,另一部分节点则先看到另一笔。每个节点都会拒绝先到达的那笔还是后到达的那笔中“第二次到达”的那笔冲突交易,而当矿工把这两者中的某一笔纳入区块时,冲突最终才会被裁决。内存池正是这些竞争被发起、被解决的地方。
内存池还充当网络的早期预警系统。内存池迅速填满意味着需求正在飙升、恐慌情绪正在上来、空投领取窗口即将到来,或在任何相关内容进入已确认区块之前就已经出现了手续费高峰。交易者、矿工以及钱包手续费估算器都会像气象学家读取气压系统那样读取内存池。
一笔交易的生命周期:一步步来
沿着一笔具体交易在“流水线”中的走向,会让整体机制变得更具体。第一步是创建:你的钱包构造交易,指定金额、接收方以及你愿意支付的手续费,并用你的私钥对其签名。签名证明你拥有所有权,但不会暴露私钥本身。
第二步是广播:钱包把已签名的交易发送给一个或多个节点,由这些节点开始在点对点网络中中继传播。传播到网络中大多数节点通常只需要几秒钟,而且这一步并不需要信任最初的那个节点,因为每个后续节点在继续转发之前都会独立重新验证该交易。
第三步是验证:每一个接收到交易的节点都会独立进行检查。无效交易、错误签名、资金不足、格式错误的数据会被当场丢弃,并且永远不会进入内存池。
第四步是等待:现在,这笔交易在网络中成千上万个内存池里等待;任何运行节点的人或使用公共内存池浏览器的人都能看到它。等待多久几乎完全取决于你附加的手续费相对于其他人提供的手续费水平。
第五步是选择:在工作量证明(proof of work)链上,矿工从其内存池中挑选待处理交易来组装候选区块;在权益证明(proof of stake)链上,验证者也做同样的事。几乎总会按手续费密度进行排序,以便区块获得最大回报。
第六步是确认:区块被挖出或被提出,随后在网络中传播并被接受。每一个节点都会把该区块中的交易从自己的内存池中移除,而你的交易现在已经成为链的一部分。其后每增加一个建立在其上的区块,就会再带来一次确认,同时让“回滚/撤销”的难度呈指数级变得更高。
手续费市场如何决定谁先走
区块空间稀缺,而需求会波动,因此区块链用“拍卖”来分配空间。在比特币上,手续费以 satoshi / 每个虚拟字节(virtual byte)计量——也就是交易数据大小的单位,所以一笔交易的手续费率取决于你付了多少钱以及这笔交易占用了多少空间。在以太坊上,费用是 gas:其中基础费用(base fee)由协议销毁,而优先提示费(priority tip)会给到验证者。在这两种系统中逻辑是相同的:区块生产者是利润最大化者,所以会先把出价最高的交易塞进区块。
这意味着你在队列中的位置并不是固定的。中午看起来定价有竞争力的交易,到了晚上可能会严重地“出价偏低”,如果这时需求突然激增。钱包会通过读取当前内存池来估算手续费:查看待处理交易目前提供了什么水平、最近几个区块装得有多满,然后给出一个大概率能在你选择的时间窗口内确认的费率。这些估算是“有根据的判断”,而不是保证;在波动市场中还会很快过期。在一个平静的周日里,如果你的手续费刚好能在下一块被清算,到了清算连锁(liquidation cascade)爆发的时刻你却可能要等上数小时——因为别人的支付意愿发生了变化,而你的支付意愿原地不动。拍卖从不结束,并且会持续重新定价。
当你付得过少时,大多数网络会提供“补救通道”。比特币支持按手续费替换(replace by fee),允许你用更高手续费重新广播同一笔交易,从而覆盖最初版本。一个相关技巧是“子支付父(child pays for parent)”:附带一笔手续费更高的后续交易去花费那笔卡住交易的输出,这样矿工就获得把两笔一起确认的动力。以太坊的钱包允许你用相同的 nonce 并提交更高 gas 价格的交易来重新提交,它会替换掉挂起的版本。知道这些工具存在,能把一笔卡住的交易从“紧急情况”转变成“麻烦事”。
不存在单一的内存池
人们说“内存池”时,仿佛某处确实存在一个规范性的队列,但现实要更混乱也更有趣。每个节点都会维护自己的内存池,而且两者绝不可能完全一致。交易会在不同时间到达不同节点,节点应用略有差异的接纳策略,并且每个节点都管理自己的内存上限。我们所谓的“内存池”,其实是成千上万个私有内存池之间松散的统计重叠。
实际重叠往往很大,因为大多数节点运营者都使用默认设置。一个典型的比特币节点会把内存池限制在大约 300 megabytes 左右,最多保留交易两周,并拒绝任何低于大约 1 satoshi / 每个虚拟字节的最低中继手续费(minimum relay fee)的交易。当内存池超过容量上限时,节点会优先逐出手续费最低的交易(evicts the lowest fee transactions first),并提高最低接纳率——因此在拥堵时,极低手续费交易可能会直接消失,而不只是“继续等待”。一旦在所有地方都被逐出,这笔交易实际上就等同于被取消了,资金会像从未被花费那样仍留在发送者的钱包里。
分布式内存池带来的微妙后果是:挂起状态(pending)并不是承诺。浏览器里显示为挂起的交易,只存在于某些节点的内存中。它可能会被逐出、被替换,或被重复花费(double spent),直到它最终落入某个区块。接受零确认(zero confirmation)付款的商家会用昂贵的方式学到这一点;而这也正是 51% 攻击在链级别利用的机制:攻击者重写最近的区块,然后把被撤销的交易重新丢回内存池,仿佛它们从未被确认过一样。2025 年对门罗币(Monero)的重组攻击,就以完全相同的方式把一百多笔已确认交易推回到待处理队列。
政策、标准性,以及为何节点会拒绝“有效”的交易
一致性规则定义区块链在区块里会接受什么。内存池政策定义一个单独节点会保留并转发什么,而两者并不等同。一笔交易可能在一致性规则下完全有效,却仍然会被多数内存池拒绝,因为它违反了比特币开发者所说的标准性(standardness):一些非正式政策规则会过滤粉尘输出(dust outputs)、过大的脚本、荒谬地低的手续费,以及可能给网络带来负担的异常交易形状。政策就像节点级的免疫系统,是让共享队列保持可用性的第一道防线。
这种区别会在现实中造成真实的困惑。被公共内存池拒绝的交易,仍然可能被矿工直接挖出——只要它能直接抵达矿工本身。于是就出现了那些“绕开内存池”的服务:它们会直接接纳非标准交易,并将其提交给挖矿矿池(mining pools)。这也意味着你通过浏览器观察到的内存池反映的是那个节点的政策,而不是某种通用真相。两个浏览器之所以可能对你的交易是否仍在挂起上持不同意见,只是因为它们背后的节点应用了不同的过滤器。
政策的演进速度也会比一致性更快。多年来节点会反复调整围绕数据铭文(data inscriptions)、粉尘限制(dust limits)以及替换行为(replacement behavior)的中继规则。每一次调整都会改变你看到的待处理队列样子,但完全不影响一致性本身。对用户来说,实际的启示很简单:如果钱包警告某笔交易是非标准的,问题通常出在交易的构造方式,而不是资金背后的资产本身。
内存池还有一个更安静的机构级受众。交易所会监控待处理入金以便更快记账,合规团队会在确认之前筛查进入的交易,支付处理器则会通过检查一笔交易传播得有多好,以及是否存在任何冲突花费(conflicting spend)在流转,来评估“零确认转账”的风险。大多数网络的内存池都能就一笔交易达成一致时,它被重复花费的可能性会远低于一笔传播不佳的交易,因此公司也会相应定价。
拥堵、垃圾信息,以及“满内存池”的体感
内存池拥堵就像网络在喘口气。需求超过区块空间,队列不断增长,为了及时确认所需的手续费也随之上升。用户会把它体验为手续费变贵以及等待时间变长。比特币在 2017 年末的疯狂行情、2020 年的 DeFi 夏季、NFT 铸造的多轮浪潮,以及 2023 年 ordinals 铭文热潮,都曾造成以“天”为单位计算的内存池积压:队列里排着几十万笔交易,且手续费率会在一夜之间成倍放大。在最糟糕的时段里,低手续费交易可能要等超过一周,节点运营者还会看到内存池触及容量上限并开始“倾倒/削减(shed)”最便宜的流量。
拥堵也可能是人为制造的。垃圾信息攻击会向网络灌入大量低价值交易来堵住队列,并降低对其他所有人的服务质量——这是一种廉价的拒绝服务(denial of service)。网络会用最低中继手续费、逐出策略以及最终的经济因素来防御,因为持续的垃圾信息会让攻击者在手续费层面付出真实成本。2017 年针对以太坊测试网络的垃圾信息攻击,展示了对手续费压力薄弱的链来说,淹没式轰击能有多有效,并且把“手续费市场设计”推到了更靠前的研究议程。
拥堵同样也是信息。内存池膨胀、手续费上涨通常意味着紧急需求,常见场景包括交易所高峰、清算连锁、或重大市场变动之前。经验丰富的观察者会像债券交易者看收益率那样关注内存池深度,而一些分析机构会把这一信息源售卖出去。
黑暗森林:MEV 与池中的“窥探者”
内存池最具定义性的特征——完全透明——也正是它最大的脆弱点。每一笔待处理交易在执行之前都是公开的,这意味着任何人都能读取你的意图并先行动。在智能合约链上,这催生出围绕最大可提取价值(MEV,maximal extractable value)打造的一整套掠夺性产业:控制交易排序的人,能够获取其中的利润空间。
最经典的攻击是“夹心攻击(sandwich)”。机器人在去中心化交易所看到你一笔大额挂起的换币(swap),会先买入同一代币把价格推高,让你的交易以更差的价格执行;然后立刻卖出,从你的执行里切走一部分利润。抢先交易(front running)、跟单(back running)与清算狙击(liquidation sniping)也遵循同样的原理:看到挂起交易,在其周围布局,从中捕获差价。有研究者曾把公共内存池形容为一片黑暗森林:凡是能被看见的东西都会被猎杀。研究人员估计,仅以太坊上的 MEV 提取从 2020 年起已经达到数十亿美元级别。
而作为回应壮大的防御产业,如今规模也相当可观。诸如 Flashbots Protect 这样的私有交易中继(private transaction relays)允许用户把交易直接提交给区块构建者(block builders),从而跳过公共内存池——这样机器人就永远看不到订单本身。批量拍卖型交易所(batch auction exchanges)会把许多交易用一个单一的清算价格结算,从而移除排序带来的优势。钱包也越来越倾向于在默认情况下把大额交易路由到受保护的通道。上述做法并不会消除 MEV,但会改变“谁会被狩猎”。其经济逻辑很直接:隐藏订单的价值会随着订单规模增大而增长,所以大额交易者如今会像传统资金那样,把内存池隐私当作类似暗池(dark pools)的基本运营卫生。散户用户转移小额资金面临的风险要小得多,但如果在薄流动性交易对上通过公共队列进行一次大额换币,就可能在几秒之内为一个夹心攻击机器人支付三位数的“通行费”。
Solana 的答案:删除内存池
在所有主要网络里,Solana 做出了最激进的设计选择:它根本没有公共内存池。Solana 不再在全网之间通过“闲聊广播(gossip)”传播待处理交易,而是由 Solana 的 Gulf Stream 协议把交易直接转发给计划用于产出下一块区块的验证者(validator),这个角色被称为 leader。leader 的日程提前就已知晓,因此钱包和节点知道应该把流量准确发送到哪里。交易从用户到 leader 几乎没有公开等待期。
这种设计把速度放在第一位,并移除了经典的观察窗口,因为待处理交易从未被广播出来供公众检查。它并没有消除 MEV;相反,MEV 发展为一种私有拍卖经济:搜索者(searchers)通过 Jito 等基础设施向 leader 支付小费(tips),以便让他们的交易打包更有利地被放置。一个更通用的结论是:任何区块链上,排序都有价值;删除公共队列改变的是这种价值被捕获的地点,而不是这种价值是否存在。
其他网络正在收敛到中间路线。加密内存池(encrypted mempools)会在排序锁定之前隐藏交易内容。在以太坊上,proposer-builder 分离会把“选择交易”的工作与“提出区块”的工作拆开,把 MEV 推向一个更透明的拍卖过程。到 2030 年,内存池的样子大概率会与 2020 年那种公开集市(open bazaar)大不相同。不会改变的,是底层约束:每一条区块链都必须有某个组件在“交易创建”和“交易确认”之间暂存交易;而能够观察或影响该组件的人,就拥有对所有无法做到这一点的人的权力。
自己阅读内存池
你不需要运行节点也能观察队列。公共内存池浏览器会把待处理交易、手续费分布以及预计确认时间实时可视化,它们也是回答每一个卡住用户所问两件事的最快方式:网络有多繁忙,以及此刻到底需要多少手续费才能真正完成确认。
当你的交易卡住时,诊断几乎总是相同:你的手续费低于当前的通行费率。按优先级粗略排列,你的选择通常包括:等待拥堵缓解;通过按手续费替换(replace by fee)或 nonce 替换来提高手续费;在支持的情况下使用子支付父;或者在比特币上,如果这笔支付不再重要,就直接等待它被逐出。你不应该做的是惊慌:资金不会丢失。未确认的交易最终要么完成确认,要么就实际上停止存在;而在后者情况下,这些币从未离开过你钱包里的控制范围。只有当交易被包含进区块时,资金才会被扣除。
理解浏览器实际展示的内容也很有帮助。手续费直方图(fee histogram)显示每个手续费水平上累积了多少待处理量,因此你能知道此刻的清算价格在什么位置。预测区块视图(projected blocks)显示如果这些交易立刻被打包生产,未来几个区块会被哪些交易填满,从而告诉你队列在你前方延伸得多深。而在比特币浏览器里,“清除线(purge line)”会显示低于该手续费率的交易是否正在被节点主动逐出——这就是市场的有效底线。花 10 分钟学习这三种读数,你会在手续费第一次飙升时立刻“回本”。
最后再养成一个习惯:交易之前先看内存池,而不是交易之后才看。花 30 秒查看当前的手续费费率,既能避免你在平静时期过度支付,也能避免你在市场风暴时付得太低。队列是公开的。只有极少数人会去读它,这也正是那些会读的人拥有优势的原因。类似的逻辑也适用于我们在硬分叉与软分叉指南中介绍的那种网络升级:一旦把链拆开,就总会引发一阵内存池戏剧,因为分裂双方的钱包和节点都会重新整理“各自的待处理交易应该属于哪里”。
常见问题
用简单的话说,什么是内存池?
内存池是区块链交易的等待室。你发送一笔交易后,它会进入内存池,保持可见且为挂起状态,直到矿工或验证者把它包含进某个区块。每一个全节点都会在内存中保留这条队列的独立副本。
为什么我的交易卡在内存池里?
几乎总是因为你附加的手续费低于其他待处理交易正在提供的水平。区块生产者会优先选择出价更高的交易,所以手续费过低的交易会等到需求下降,或者被队列彻底逐出。
内存池里的交易能取消吗?
有时可以。在比特币上,“按手续费替换(replace by fee)”允许你用新版本覆盖一笔挂起交易;而如果一笔卡住的交易在所有内存池中都被逐出,它就可以视为已被取消。在以太坊上,你可以通过发送一笔带有相同 nonce、且手续费更高的新交易来替换挂起交易。
整个网络只有一个内存池吗?
不是。每个节点都会维护自己的内存池,而且不同节点之间的内容会因时间、设置与内存限制而略有差异。大家所说的内存池,其实是成千上万个独立队列之间的粗略重叠。
一笔交易最多能在内存池里待多久?
在比特币上,默认节点设置会在丢弃前最多保留两周的交易,但如果内存池填满且手续费较低,逐出可能会更早发生。其他网络有各自的保留与逐出规则。
内存池和 MEV 之间有什么关系?
在公共内存池中,待处理交易在执行前是可见的,因此机器人可以读取它们并围绕它们交易,通过夹心攻击与抢先交易来提取价值。对于像以太坊这样的链来说,这种可见性就是大多数 MEV 的原材料。
Solana 有内存池吗?
没有公开的。Solana 不会把交易广播到全网,而是把它直接转发给即将产生区块的 leader,从而移除了公共等待室。Solana 上的 MEV 则通过基础设施提供商运行的私有 bundle 拍卖来流转。
如果一笔交易永远无法确认,资金会丢失吗?
不会。一笔最终无法确认的交易会从内存池中被丢弃,而这些币会像从未发起过交易一样继续留在发送者的钱包里。直到交易被包含进区块时,才会扣除任何资金。
本文仅用于教育目的,不构成任何金融或投资建议。网络规则、手续费机制与默认节点政策会随时间变化。本文所述细节截至 2026 年 7 月 14 日准确。