比特币交易拥堵是一个常见问题。随着并发交易数量增加,很多矿池会对内存池中的交易按照手续费高低排列,优先处理高手续交易。理想情况下,高手续费 交易先解决,低手续费交易后解决。但是在实际中,由于新的交易不断出现,低手续费交易可能永远得不到处理,长时间甚至甚至永久处于0确认状态。这种情况 下,这笔资金相当于被锁定了,发送者和接收者都不能使用这笔资金。
背景
比特币交易拥堵是一个常见问题。随着并发交易数量增加,很多矿池会对内存池中的交易按照手续费高低排列,优先处理高手续交易。理想情况下,高手续费 交易先解决,低手续费交易后解决。但是在实际中,由于新的交易不断出现,低手续费交易可能永远得不到处理,长时间甚至甚至永久处于0确认状态。这种情况 下,这笔资金相当于被锁定了,发送者和接收者都不能使用这笔资金。
本文作者近期遇到这种情况,一共有26笔交易处于0确认状态,已经过了10天都没有处理,不得已,只能自己寻求解决方案。
处于0确认状态的交易,相当于通过邮局汇款,汇款方已经将钱交给邮局,但是邮局的汇款单没有送到接收方。在0确认期间,这笔资金相当于被冻结了,汇款方和接收方都无法使用这笔资金。
为了解冻这种资金,必须采用一定的措施,在比特币中,这种措施被称为“交易加速”。
通过查阅网络资料,找到一些有用资料。主要包括:
http://www.8btc.com/bitcoin-transaction-stuck“交易拥堵太闹心?试试这些方法吧”
http://8btc.com/thread-46298-1-1.html“技术加速已经发出的比特币交易”
上述两个网址介绍的方法比较详细,本文作者就是通过这两篇文章解决了问题。但是这两篇文章写的比较简单,在实际操作时有许多“坑”需要跳过,本文将详细介绍具体的解决步骤。
#解决办法
根据上述两个网址和其他网络资料,找到许多解决办法,经过尝试,有两种方法确实可行。我将依次介绍。
1、利用网站提供的“交易加速”服务。
目前已经有一些网站提供交易加速服务,可以通过百度搜索“比特币交易加速”。目前能找到的网址包括:
https://pool.viabtc.com/tools/txaccelerator/(只有内部会员可用)
https://xueqiu.com/7317078788/66175852 (只能加速BTCC)
https://bitcoinworld.com/accelerate?s=btc123(花钱即可,支付比特币)
上述3个网站中,第一个viabtc只为内部会员服务,代价比较高,第二个雪球只能加速BTCC。。第3个网站“bitcoinworld”比较实用,直接使用微信、支付宝充值,就可以使用服务。
在图中的搜索框中输入0确认交易的哈希值,点击“估价”就可以查询加速这条交易所需的费用。只要支付手续费,就可以享受加速服务。图3中显示了我的一个交易已经通过这种加速服务得到确认。
对于一般的同学,直接使用这种网站的加速服务就可以了,通常可以在较短时间内(我的交易经过2.5个小时得到确认)。
这种交易加速方法的实质是:网站控制的矿池手动的将您的交易从交易池中取出,打包到待挖矿区块中,只要矿池挖到新的区块,您的交易就得到确认了。交易加速的时间取决于矿池的挖矿能力。
这种交易加速方法的缺陷是收费较高。尤其是对有较多子交易的交易,手续费会直线提升。我的25个交易的手续费接近0.03个比特币。这是我不能承受的。因此,我继续寻找其他方法。
2、利用轻钱包手动创建“双花”,实现交易加速
0确认交易得不到确认的原因是比特币网络中不断有新的交易产生,因此手续费低的交易始终在队列尾部,不能被打包。理论上,一个比特币客户端所在服务 器的交易内存池会定期清理未处理的交易(常规说法是3天),这样0确认交易可以被撤销,即解冻,发送方可以重新发送交易。但是,实际上,由于比特币网络中 某些节点会设置“不清理内存池中的交易”,因此,0确认交易很可能永远不会撤销。例如,本文作者的26笔交易已经过了10天依然处于“0/未确认,在内存 池中”状态。
针对这个问题,另外一种解决办法是使用“轻节点”对0确认交易中的比特币重新创建交易,花掉这些被“冻结”的比特币。这种办法的理论依据是:“全节 点”在创建交易时,会去比特币网络中检查交易的输入资金是否已经被用过,从而避免“双花”。因此,凡是使用过的资金不能用于输入,包括“0确认”交易。
但是,在“轻节点”中,“轻节点”不需要询问比特币网络,而只需要询问“轻节点”连接的节点,只要这些节点的内存池中没有“0确认”交易,"轻节 点”就可以使用“0确认”交易中的资金创建新的交易。轻节点创建的交易一旦被比特币网络确认,这笔被“锁定”的资金就被成功使用了。原来的“0确认”交易 会因为交易冲突而被所有节点抛弃。
下面先展示这种方案的结果,然后在介绍操作步骤。
结果:
下面介绍使用轻节点解决“0确认”交易的步骤:
1、在bitcoin-qt软件中输入指令“listaddressgroupings”查找包含资金的比特币地址。
“0确认”交易相当于把交易中输入的资金给锁定了,因此,解锁的第一步是找到资金所在的地址。
使用“listaddressgroupings”指令是一种办法,还可以想起他办法,例如查询比特币交易网站。
2、获取包含资金的比特币地址的私钥
获取私钥的目的是将这笔资金转移到“轻节点”中去。既然在bitcoin-qt这种全节点中无法使用被锁定的资金,那么就将资金转移到“轻节点”去执行。
3、利用私钥在轻节点中执行交易
图中的界面是轻节点Electrum程序中利用私钥创建交易的界面。窗口调出操作:wallet-private keys-sweep 。这一步操作的本质是在轻节点中创建交易,花掉被“0确认”交易锁定的资金。本文中使用私钥创建交易,应该还有其他创建交易的办法,例如钱包导入等等。
本文使用的轻节点是Electrum,官方网址是“https://electrum.org/#download”。
4、资金被转移到轻节点的地址
经过第3部操作,被“锁定”的资金将转移到“轻节点”的地址中去,实际上已经完成了解锁操作。之后就可以正常使用这笔资金了。
结论
1、比特币系统处理“0确认”交易的机制非常不友好,一般用户很难找到解决办法。而且,由于比特币系统去中心化的特点,也没有一个中心机构能够提供技术支持。普通用户使用比特币的门槛还是很高,未来应该会出现公司专门提供比特币交易技术支持服务。
2、利用网站提供的交易加速服务最简单,风险最小。但是,需要支付一笔加速费用。
3、利用“轻节点”人工创建冲突交易能够解决“0确认”交易问题,但是过程繁琐,需要使用不同的钱包和指令,还涉及“私钥”,如果操作不当,有可能丢失比特币。