BTC 68,420 ▲ +2.34% ETH 3,542 ▲ +1.08% SOL 168.4 ▼ -0.82% BNB 604.1 ▲ +0.46% USDT 1.000 ▲ +0.01% ARB 0.842 ▼ -1.24% MATIC 0.523 ▲ +3.11% AVAX 34.62 ▼ -0.55% BTC 68,420 ▲ +2.34% ETH 3,542 ▲ +1.08% SOL 168.4 ▼ -0.82% BNB 604.1 ▲ +0.46% USDT 1.000 ▲ +0.01% ARB 0.842 ▼ -1.24% MATIC 0.523 ▲ +3.11% AVAX 34.62 ▼ -0.55%
内存池Gas入门

内存池是什么?交易为什么会停在「待确认」

交易广播之后、写进区块之前,会先待在内存池里。讲清手续费怎么决定排队顺序,以及待确认时比特币和以太坊分别能不能加速或取消。

编辑部 |

转账点了确认,钱包却一直显示待确认。区块浏览器里查得到这笔交易,余额又像还没扣掉。这不是转丢了,也不是已经到账。它正停在内存池里,等被写进下一个区块。

内存池是节点的候车室

你发出一笔交易,会先广播给网络上的节点。节点检查它是否合法:签名对不对、钱够不够、有没有和已有交易冲突。通过之后,节点把它放进自己的内存池(mempool),等打包的人来选。

它还不是账本的一部分。区块才是已经确认的记录。内存池里的交易,全网还没有共同承认。

每个节点的内存池也不保证完全一样。你的钱包连着的节点看到了,不代表每一个矿工或验证者都看到了同一份名单。所以「浏览器上显示待确认」说明至少有节点收下了它,不等于它下一秒就会进块。

谁先被打包,看的是手续费

区块的空间有限。打包的人会优先选对自己更划算的交易。

在比特币上,这个价格通常按每字节多少聪来比,不是按你转了多少钱。一笔金额很小但体积很大的交易,费率仍然可能很低,于是排在后面。体积为什么会变大,和花费很多张未花费输出有关。

在以太坊上,你付的是 Gas。拥堵时,给得更高的优先费会先被选走。同一地址还要按序号排队:前一笔还在内存池里,后一笔即使手续费更高,也不能插到它前面。

所以待确认最常见的原因就是:手续费低于当前市场愿意收的水平,或者卡在同一地址更早的那一笔后面。

待确认的时候,钱在哪

交易没进区块之前,付款方的钱在规则上还没交出去。钱包为了防止你把同一笔钱花两次,会先把这笔标记成占用。对方还不能把它当成已到账。

交易所因此要求若干个确认。确认数是这笔交易后面又叠了多少个区块,不是内存池里的等待时间。0 确认意味着它仍可能被替换,或者一直进不了块。确认数要到多少才比较稳,见确认数与最终确定。

如果费率太低,而节点的内存池满了,这笔交易可能被丢掉。丢掉之后,比特币那边这笔钱回到可花费状态;以太坊那边这个序号重新空出来。钱包有时仍显示待确认,刷新或重新同步之后会回到未发送。它没有被某个陌生人领走。

能不能加速或取消

可以,但两条链的做法不同,而且都要再付更高的费用。

比特币。 如果原来那笔交易标记了允许替换(RBF),你可以再广播一笔花同样输出、手续费更高的交易,矿工会倾向于打包新的那笔。没有这个标记时,有的钱包会再花掉「找零」并附上高手续费,让矿工觉得两笔一起打包更划算。旧的那笔一旦先进了区块,就不能再用这种方式换掉。

以太坊。 用同一个序号再发一笔,手续费高到足以替换内存池里的旧交易。要取消,常见做法是向自己的地址转一笔 0,序号用卡住的那一笔,手续费开高。替换成功之后,原来的调用不会执行。

两件事不要做:对同一笔待确认交易反复从不同入口各发一次,却不处理序号或替换规则;以及相信私信里「付一笔解卡费就能让矿工立刻确认」。矿工和验证者认的是协议里的手续费,不认转账备注里的客服。

交易在进块之前是公开的。别人看得到你的兑换方向和滑点上限,这就是三明治攻击能发生的原因。加速一笔兑换,不会让它变成隐私交易。

怎么少碰到长时间待确认

  • 手续费用钱包建议的正常或偏快档,而不是永远选最便宜
  • 比特币不急的转账可以等费率下降再发;已经发出又想尽快完成,再用钱包里的加速,而不是另抄一个地址重转
  • 以太坊上一笔还在转圈,先处理这一笔,再发下一笔
  • 用区块浏览器看它是「待确认」还是「已失败」。失败是执行了但回滚,待确认是还没进块,处理方式不同

常见问题

Q:待确认超过一小时,是不是已经丢了? 不是。低费率的比特币交易可能等更久,甚至最终被内存池丢掉,钱仍在你的钱包里。用交易哈希看它还在不在待确认列表里,比看钱包上的转圈更准确。

Q:对方说没收到,我要不要再转一次? 先别转。第一笔可能还在内存池里,确认之后会到账。再转一次就是第二笔。确认哈希的状态,再决定要不要加速原来的那笔。

Q:内存池是不是一个全球统一的队列? 不是。每个节点自己维护一份。它们大部分时候很接近,但在网络抖动、费率下限不同的时候,名单会有差别。

Q:提高手续费会不会让已经发出的交易付两次钱? 替换成功时,进块的是新的那笔,旧的那笔不会同时生效。你付的是新交易上的手续费,不是两笔叠加。替换失败、旧交易先进了块,则只付原来的那笔。

Q:Layer 2 上也有内存池吗? 有等待打包这件事,但很多 Layer 2 由排序器收交易,不和以太坊主网共用一个内存池。主网上的待确认,不能用 L2 的到账速度来估计。

小结

内存池是交易进区块之前的等候区。手续费更高的先被选走,同一以太坊地址还要按序号排队。待确认表示钱被你自己的钱包先占上了,对方还不能当到账;被节点丢掉之后,钱回到可花费状态。要加快,就用钱包替换原来那笔并支付更高费用,而不是再向同一地址转一次。

Related // 延伸阅读
RPC钱包

RPC 节点是什么?钱包连不上时先看这一层

钱包自己不保存整本账,它通过 RPC 节点读余额、广播交易。讲清公共节点和自建节点差在哪,连错网络时余额为什么会暂时消失,以及换节点时为什么不能把助记词交给对方。

测试网入门

测试网是什么?上面的币为什么换不成钱

测试网是和主网分开的练习账本,币多由水龙头发放,没有市场价格。讲清地址可以长得一样、资产却互不相通,以及领测试币时怎样避免把主网的钱转出去。

确认数区块链

交易确认数是什么?多少个确认才算真的到账

区块浏览器上的确认数,还不等于这笔交易永远改不了。讲清比特币靠后续区块抬高改账成本,以太坊大约两个纪元后才最终确定,以及交易所入账用的是另一套标准。