原因
设置了LockTime,交易需要到设置高度或者设置时间才会被打包进入区块
交易费设置太低,旷工会根据交易费排序,选择交易费高的交易进行打包(老的节点可能会按时间顺序排序),所以会出现两种情况
- 一直在交易内存池,没有旷工选择打包
- 交易内存池慢了,或者超时了,被删除掉了
产生上面的这些行为,我们的节点(接受RPC的节点)是无法感知到的,且交易也不会回退,我们用RPC查找的时候,会永远在交易内存池内。
如何处理
针对1情况,就不要设置LockTime。如果需要设置,一定要核对好。
针对2情况,有以下几种办法
- 重启自己的节点,
- 简单重启,它会重新广播交易,可能再次失败
- 加-zapwallettxes参数,删除钱包的所有交易记录;加-rescan参数,重新扫描区块链以查找遗漏的钱包交易,获取交易前的UTXO。这个方法不一定能够成功,因为交易可能还在某些节点上。
- 在btc.com上查找交易是否存在,如果不存在,则用https://btc.com/tools/tx/publish,再次广播交易,可能再次失败;也可以用别家的矿池
- 打开https://pushtx.btc.com/#/,提供一定的费用,让其矿池打包处理。最长需要4个小时才能进入区块。因为他家的矿池在4个小时内,挖到矿的概率是98%。可能费用比较高。
- 发送交易的时候,将交易设置成RBF模式(Replace by Fee),允许用高费用交易来替代掉老的交易
- 重启自己的节点,