
内存池:你的交易在成真之前等待的地方
你按下发送,钱包提示交易已广播。区块浏览器里能看到它——但状态是“待处理”,而不是已确认。在几秒、几分钟,偶尔甚至几个小时里,你的交易既存在,又不存在。
它在这段空档里所处的地方叫作内存池(mempool)。理解内存池,就能明白为什么手续费每分钟都在变,为什么有些交易会卡住,以及为什么一笔待处理的交易只是一个承诺,而不是一笔付款。
内存池到底是什么
“Mempool”是 memory pool(内存池)的简称。它是一个节点保存在内存中的一组有效但尚未确认的交易,等待区块生产者把它们打包。
第一个出人意料之处是:并不存在唯一的内存池。每个节点都维护着自己的内存池。当你广播一笔交易时,钱包会把它交给一个节点,节点检查后转发给它的对等节点,对等节点再继续转发。几秒钟之内,网络中的大部分节点都会拥有一份副本——但每个节点的交易池可能略有不同,取决于哪些交易到达了它、它的容量上限以及它自己的规则。
内存池中的交易已经通过了基本检查:签名有效,所花费的币确实存在。但它还没有被打包进区块,在被打包之前,它仍然可能最终不会发生。
交易是如何被挑选的
区块空间有限,而区块生产者——工作量证明链上的矿工、权益证明链上的验证者——部分收入来自手续费。所以大体上,他们会优先用那些为所占空间支付最多的交易来填满区块。
在 Bitcoin 及类似的链上,这指的是费率:每虚拟字节多少聪,而不是总手续费。一笔支付适中手续费的小交易,可能胜过一笔总额付得更多的大交易。在 Ethereum 和其他 EVM 链上,这指的是优先小费,它加在网络逐块自动调整的基础费用之上。
这就是手续费随需求涨跌的原因。内存池清闲时,几乎任何合理的手续费都能进入下一个区块。拥挤时——热门项目上线、市场恐慌、一波活跃交易——交易之间相互竞价,低手续费的交易只能停下来等待。
交易为什么会卡住
一笔手续费相对当前行情过低的交易并不会失败,它会等待。如果需求一直很高,它可能在内存池里停留很久。不过节点不会永远保留交易:交易池满了,它们会丢弃出价最低的交易,许多节点还会丢弃存在超过大约两周的交易。
被丢弃的交易从未被确认,所以资金从未移动——但在它从所有地方消失之前,它仍然可能在之后被确认。这就是令人不安的中间状态:付款既没有完成,也没有取消。
解决办法通常是多付手续费。手续费替换(RBF)及类似技术可以让你广播同一笔交易的新版本并附上更高的手续费,用它替换内存池中的旧版本。
待处理就是公开的
内存池里的一切都是可见的。任何运行节点的人、任何区块浏览器,都能在交易最终确定之前看到你要做什么:金额、地址,以及在智能合约链上你调用的具体函数。
对大多数转账来说,这没什么大不了。但对交易兑换来说,影响可能很大。机器人会盯着内存池寻找大额兑换,并在其前后放置自己的交易,从价格波动中获利——抢先交易与三明治攻击都依赖于在你的交易待处理时看到它。
这对收款方也很重要。一笔待处理的入账交易仍可能被替换或丢弃。它还不是你已经拥有的钱。
从待处理到最终确定
被打包进区块就是第一次确认——交易离开了内存池,进入了链上。其后每多一个区块,撤销它就更难一分。多少次确认才算足够取决于链和金额,但规则处处相同:待处理意味着可能,已确认意味着大概率,深度确认才意味着最终。
在 SSP 中是什么样子
在 SSP 中发送时,你可以选择为多高的优先级付费。发送页面会根据当前网络状况提供慢速、普通和快速三档预设,并估算每一档大概需要多长时间;在 EVM 链上,如果你想自己设定手续费,还可以使用自定义选项。
在任何内容被广播之前,SSP Wallet 和 SSP Key 都必须批准。一旦交易进入网络,内存池对 SSP 和对其他任何人都一样:你选择的手续费决定它被打包的速度,而在确认之前,它都处于待处理状态。
坦诚的总结
内存池是“已发送”与“已完成”之间的候车室。它不是一个房间,而是许多个房间;它是公开的;它优先照顾为区块空间出价最高的人。
根据你需要确认的快慢选择合适的手续费,不要把任何待处理的交易——无论是你自己的还是别人的——当作已最终确定,并且记住:你广播的一切,在结算之前都对整个网络可见。


