12月初的时候,比特币价格爆涨,我并没有打算卖出,而且把币转到冷钱包,准备领BTG糖果给自己发个年终奖。行情太好也很烦人,比特币的交易费也是高得让人无法接受,转到冷钱包的交易就花了我0.0027 BTC,为了安全地领取糖果,这几百元也就忍了。
但另外一件发币的事情就有点让人发狂了,因为以前说起过《金炜搞了一件大事》,现在联合挖矿的规模不断扩大,每10天要给200多人发币,工作量可不轻。金老板整天要处理场地、机器、供电等事务,不堪重负,把发币的重任交给我来办。
我写的C#发币程序已经更新到了2.2版本,基本原理并不复杂,就是用BitcoinLib调用Bitcoin Core的RPC接口,根据每人参与的份额把所有的发币操作放在一笔交易中,这样不仅发币效率大大提高(1分钟之内搞定),还节省了大笔的手续费。
以这笔交易为例(txid为7ae1fd5dc58bbeb7680d2d31931a15408cfb1e2898fca4b6eaf348e5d830a8b2),同时给100多人发币,手续费只用了0.0003 BTC,平均每人手续费为0.000003 BTC,还不到1元钱。
不过这种幸福的日子没过多久,比特币的区块链严重拥堵,12月16日发出的这笔交易(txid为d7028391bbb41415ed1c837a1eb8e03b3583cbd22486529dc2d1890327bb903f)仍按往常一样将手续费设为0.0003 BTC,所有的矿池都拒绝受理,至今仍为零确认。
这笔交易不仅堵在比特币网络里,更是堵在我的心头,不除之不快。
交易加速的几种方法
这种事情当然不能用X度了,我直接用google,关键词用“transaction stuck”,最权威的一篇贴子在bitcointalk.org上,请访问外国网站访问这个网址:
https://bitcointalk.org/index.php?topic=1802212.0
交易被堵住的最主要原因就是手续费设置得太低,矿池是逐利的,优先挑选高额手续费的交易打包,而行情火爆,你的交易可能永远排在队伍的最末尾,也就是永远无法被打包。
1)等待
如果你不会一些高级操作,就只能等待了,如果运气特别好,几天后可能会被确认。或者,过了很久,让整个比特币网络忘记了你的这笔交易,你可以重新发起一笔新的交易。不过,我的那笔交易等了10多天,没看到任何被确认的迹象,也没看到被清除的可能性。
2)找矿池加速
有些矿池提供交易加速的服务,比如 https://pool.viabtc.com/tools/txaccelerator,但免费加速的名额非常有限,收费服务大概按每KB支付0.01 BTC计算,像我们的5000字节的交易,大概要花0.05 BTC,不知道最近加速服务的行情是不是也上涨了?
3)Replace-By-Fee (RBF)
这种办法实际上是一种双重支付(Double-Spend),后面发起的交易可以提高手续费,在Bitcoin Core 0.15版本中提供了界面可以进行这种操作,但前提是发起交易时要加上Replace-By-Fee选项。
我转币到冷钱包的那笔交易就是用的这种办法,但在调用RPC接口的程序中并没有用这个选项,这种办法也不成。
4)发起Child-Pays-For-Parent 交易
这种交易的意思是,被堵的交易作为父交易,里面的输出项是0确认的,但你有私钥可以控制,这样你可以发起一个子交易,用父交易中的一个未确认的输出当作新交易的输入,而交易费必须给足,让矿池愿意打包,打包子交易时会一起把父交易打包。
我最后采用的就是这个办法,父交易为5400字节(txid为7b02b4066ab66fc965a897a5f72414f886a8fd150245f8acf0ab1cafcb414ca4),我又发起了一个子交易为8000字节(txid为756d5afa45c5ef9a9ce2725de54f8538f4993e8156576ddeb9be34e6c45f2819),总共约13 KB,按当时交易费行情大概为0.004 BTC/KB,我应该设置手续费为0.052才是安全的。
我最后采用了0.056的手续费,再加上父交易的0.0015,总共为0.0575 BTC,看来找矿池加速也就这个价。不过,我在加速交易的同时,还完成了给200多人发币的任务。
堵了几天的交易终于被清除了,今天终于可以睡个安稳觉了。
--- END ---