张立国丨被动项目研究

0/未确认,在内存池中 比特币转账长时间未确认不在内存池中的交易如何正确处理

问题:我们在进行比特币交易(转账)的时候,由于误操作不小心将转账手续费设置的太低,导致过了很长时间交易都得不得确认,转账迟迟到不了账,这种情况该如何正确处理?比特币交易长时间不被确认会不会被退回?我们的币究竟去了哪里?还能找回来吗?我们以当前这几个问题会在在以下文章中展开讨论。

第0章引言

现在比特币区块非常拥堵,经常会遇到长时间得不到确认的交易。这些交易得不到确认会被怎么处理,会退回到用户的钱包吗?会丢币吗?

第1章比特币交易生命周期

比特币交易首先是由私钥拥有者通过签名构造而来,当然这个是由软件来完成,用户能够看到的只不过是在图形界面的钱包里填入相应的金额,并且输入密码,实际的构造交易的过程由钱包完成。

交易构造完成后钱包就会向P2P网络广播这笔交易。

在比特币网络中,每一个节点(往往是完整节点)会接受并验证这笔交易,如果验证合法了,节点就会继续转发,如果不合法节点就会丢弃这笔交易。

最终这笔交易会被一个挖矿节点收到,并验证,如果这个挖矿节点挖到区块后,并且这笔交易的手续费足够吸引这个节点去打包进区块,那这笔交易就会被打包进区块。因此就得到了一个确认,这个矿工也拿走了相应的手续费。

这个挖矿节点打包后,会把区块广播给其他节点。其他节点验证并广播这个区块。

如果这个区块得到更多的挖矿节点的验证确认,那就得到了更多的确认。这样这笔交易就被记录到了比特币区块链,并成为了比特币账本的一部分。如果得到6个确认后,我们就认为它永远不可变了。

第2章矿工节点会嫌弃低手续费的交易

上述交易的生命周期中,节点(主要指普通完整节点,即非挖矿节点)验证交易的合法性往往只会验证你的签名和地址是否合法。只要合法,节点就会帮你广播转发。

最新的bitcoin core节点会还会把内存池收到的交易按手续费高低进行排名,如果排名太靠后,就会被挤出内存池。就不帮你广播了。但老节点都不会嫌弃低手续费的,只会按时间顺序进内存池,先来先进,满了就不管其他的了。而且其他客户端,比如BU客户端也有自己的排序规则。有些节点的规则还包含超过72小时没确认,就踢出内存池。反正全网是不统一的。

但挖矿节点因为可以拿交易里的手续费,所以一定会嫌弃那些低手续费的交易。挖矿节点会按交易的手续费从高到低排队,优先打包那些手续费高的,如果手续费太低,过了一定时间,比如三天,还没有轮到它的话,挖矿节点一般会把这样的低手续费交易从自己的内存池里删除掉。

挖矿矿节点是典型的只认钱,不认人的。

这就是为什么当你手续费付的少了,就得不到确认的原因,因为挖矿节点嫌弃你的交易。

那你的交易被矿池删除了后会怎么样呢?交易会退回到你的钱包吗?

这里引用OKCoin平台对此问题的解答:

对于OKCoin平台对此问题的解答,我给予不同的结论:答案是不会的。

任何节点删了你的交易,它们并不会通知你的钱包,所以你的钱包不可能知道“你的交易被退回”这回事。

另外你的交易往往会依然还存在其他非挖矿节点的内存池中,特别是那些老旧的,没有更新按手续费排序功能的老旧节点,除非它们也把你的交易删了。这些节点还会继续帮你广播,你的交易又有可能会被挖矿节点接受,然后再被它们轮奸一遍后发现你手续费太低而删除。

所以你的钱包发出去的交易,如果因为手续费太低,迟迟得不到确认,除非你主动做出查找,否则永远不会自动自己回到你钱包来。

第3章怎么办?

首先我们必须知道的是,如果你交易迟迟得不到确认,肯定不可能自动回到你的钱包上显示你发送交易之前的余额。

而且全网一定会有节点接受并继续帮你的交易进行广播,所以你的交易会像鬼魂一样一直在网络中游荡,而且会一直被挖矿节点抛弃而又接受,又再抛弃。直到全网节点的内存池被逐步清空,手续费降低,你的交易才有可能被确认。

最正确的办法就是把你的txid发给一家矿池,并且额外给矿池一些钱,叫他帮你添加到下一个区块当中。这就是我们常见的“交易加速处理服务”。

第4章如果使用”rescan”和”zapwallettxes”命令找回你的交易

如果你的交易很多天没有得到确认,而且还不想去加速,可以尝试使用以下办法找回来。

首先第一步你得知道以下知识,

全网绝大多数挖矿节点的内存池(就是接受并存储交易的地方)设定的上限是300M,也有更大的,并且会按手续费高低把交易进行排序,如果你的交易的排序跌出了300M之外,那你连内存池都进不去。但目前全网有两家公司的内存池人为调大了,就是支持零确认的区块链浏览器公司,blockchain.info和btc.com

你先去这两个区块链浏览器查询你的交易,直接用你交易的目标地址去查就好。如果查不到txid,那就说明这两个区块链浏览器公司的节点的内存池也把你的交易踢出了内存池。这种情况下,说明全网绝大多数节点都把你的交易踢出了内存池。因为就它们两家的内存池最大嘛。

好了,这种情况下,你就有可能能找回你的交易。

原理是将你交易从自己的节点的历史交易数据里删除,然后重新扫描下载区块链数据,就可以找回你的交易。

一般的SPV钱包会提供“重置交易”功能,这个功能会清空你钱包的所有的交易历史,在重新下载区块数据和接受其他节点广播给你的相应的未确认的交易。如果你的交易没有被打包,并且其他节点的内存池又找不到你这笔交易,那这个功能就能够找回你的余额。

如果你用的是完整节点,比如bitcoin,那先使用“zapwallettxes”命令,将自己的交易历史删除,然后使用“rescan”扫描区块链,就会同步你的交易记录,如果你的交易没有被打包进区块,并且被各大节点都排除出内存池的话,也可以找回自己的这笔低手续费交易之前的余额。

但是,如果上面说的btc.comblockchain.info两家公司的区块链浏览器能查到你的交易,那不好意思,你的交易之前的余额是找不回来的。只能去加速处理。

另外如果你用的是RBF交易,那还可以使用追加手续费的方式再发一笔更高手续费的交易来勾引矿工确认你之前的交易,接收方也可以使用CPFP功能来勾引矿工。

要额外声明的是,如果你在使用“rescan”命令重新下载区块链和相应的未确认交易时,刚好碰到那些老旧节点内存池里还保存了你的交易,并且发送给你,那你还得来一遍。

第5章如何使用交易加速处理服务让未确认的交易快速得到确认

以btc.com为例,先在网站上查询你的交易id,使用转账的接收地址或者直接查看比特币钱包“显示交易详情”都能查看到交易id,在btc.com查看交易详情,如果交易是未确认状态,会出现一个红色是闪电图标,这个图标就是交易加速处理服务,这个网站提供交易加速处理服务,以下是交易加速服务的网站地址:

https://pushtx.btc.com/#/

输入交易哈希,其实就是交易ID,很长很长一串的那个就是了,点击预估价格,会对当前这币交易进行价格评估,然后让你选择地区和支付方式。这个网站的交易加速服务还是不错的,就是收费有点高,支持支付宝付款,非常方便。付完款后,就启动了交易处理加速服务,这个时候只需要耐心等待就可以了,网站上说的平均确认时间是22分钟,实际测试是30分钟完成确认,速度还算不错,确认速度与比特币的网络拥堵有关系。

查看确认进度,直接在转账的比特币钱包或者btc.com都可以实时查看交易确认状态:

比特币钱包查看交易确认状态:

btc.com查看交易确认状态:

比特币10分钟1个确认,实际1个确认就到账了,6个确认交易就不可逆转了,也就是完整的确认需要60分钟。

免费的其实是最贵的,经过了这次贪便宜的教训,以后再进行比特币转账的时候一定要查看当前转账的最佳手续费是多少,可以在以下网站查看比特币当前最佳转账手续费,手续费不是固定的,是实时变动的,与比特币网络拥堵有直接关系:

https://btc.com/stats/unconfirmed-tx

 

第6章结束语

区块链根本不应该被满负荷运行。

版权说明:此文章转载至以下作者,我认为此文章写的很好,所以添加了自己实际解决问题的经验留作记录,文章版权归原创作者所有。
作者:闪电
链接:http://www.jianshu.com/p/367074794eeb
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

赞(0) 打赏
张立国 » 0/未确认,在内存池中

评论 抢沙发

Protected with IP Blacklist CloudIP Blacklist Cloud

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

帮助它人 等于帮助自己

联系站长加入组织