ここ数日メモリプール(未確認トランザクション)の総サイズが60MB(blockchain.infoより)を超え過去最高レベルの混雑度になっています。ということで、手数料不足でトランザクションがなかなか確認されないときの解決法が、日本語サイト・ブログで意外と見つからなかったのでまとめておきます。
1.待つ
ひたすら待てばいつか確認されるか、トランザクションがなかったことになりウォレットに残高が戻るかどちらかになります。一番単純な解決策で、初心者からどうしたらよいか聞かれたらとりあえず「待て」と言っておきましょう。
次からは事前に手数料を高めの設定にしてから送ってください。
2.RBF(後から手数料を変更できる設定にしてから送金)
詳細は過去のRBFの記事参照。Replace-by-Feeの略です。
事前にトランザクションに「このトランザクションは後から手数料が変更される可能性があるよ」とラベルを付けて送信することによって、送信後であってもあとから手数料を変更できます。
対応しているウォレットが非常に少ないのが難点で、主要ウォレットのなかで現在実装しているのはGreenAddress(GreenBits)とElectrumしかありません。公式クライアントBitcoin Coreも次バージョンの0.14からウォレットの機能としてようやく実装するようです。
3.CPFP(未確認トランザクションの確認を待たずに次の送金を実行)
Child Pays For Parentの略です。直訳すれば「親のために子供が(手数料を)支払う」といったところでしょうか。
ちょっとわかりにくいので例を出してみましょう。
A→B
アドレスAからアドレスBにBTCを送信するとします。このときの取引手数料の設定が低すぎたためになかなかトランザクションが確認されません。そんなときにトランザクションの確認をまたずにさらにBからCに送金を実行します。
A→B→C
このとき、B→Cの手数料を十分多くすれば、マイナーは「A→B→C」を一連の取引と考え、A→Bの取引手数料とB→Cの取引手数料の合計を「A→B→C」全体の取引手数料と見なし、A→Bの取引手数料が低かったとしても早めに確認してくれます。
ただしこの方法には、わざわざ2取引分以上の取引手数料を余分に支払わなければならない点、自分が管理するアドレスへの入金トランザクションでないと実行できない点(ただし大抵の場合、「おつり」を自分のアドレスに送り返してるはずなので、意外と使える場面は多くあります。)などの欠点があります。どこか他人のアドレスに送ったトランザクションがなかなか確認されないというときには使えません。
また、一見「代わりにこっちで手数料支払ってあげるから手数料無料で送っていいよ」というような応用が効きそうな気がしますが、最初のA→Bの取引手数料があまりにも少なすぎると、そもそもノードからトランザクションが拒否されビットコインネットワークから直ちに除外されてしまうため、そのような応用はできません。
実際に行う時には以下の方法があります。
①未確認トランザクションを送金できるウォレット
そもそもそのウォレットが、未確認トランザクションによって送られてきたコインを確認を待たずにさらに送金できる必要があります。多くのウォレットでは対応していると思いますが、未確認トランザクションは結果的に確認されないリスクがありトラブルのもととなるため、デフォルトの設定では無効になっていたり、そもそもできないウォレットもあるかもしれません。
対応しているウォレットの場合、未確認トランザクションを含めた全残高をまとめてすべて自分のウォレット内のアドレスに送りかえすことでCPFPを利用することが可能です。要するに、全残高を使用すれば、必然的になかなか確認されない未確認トランザクションも含まれてCPFPになるということです。
お分かりのように、この方法はトランザクションサイズが大きくなり、それに伴い必要手数料が2取引分だけにとどまらずかなり大きくなってしまう可能性があります。入出金がかなり少ないウォレットでは使えるかもしれません。
②コインコントロール機能が使えるウォレット
コインコントロールというのは、どのUTXOを使うか、どのアドレスから送るかを選べる機能のことです。この機能も対応しているウォレットが非常に少なく、現在のところBitcoin CoreやElectrum、Armory等しかありません。
該当の未確認トランザクションのUTXOを使う取引を作成すれば、CPFPが適用できます。この場合は、2取引分だけの手数料で済みますし、自分のウォレットに送り返すことも、他の外部のウォレットに送って無駄な手数料を支払うことなく一度に済ませてしまうこともできます。
4.二重支払い
2のRBFのところで事前にRBFのマークを付けて送信しないと、後から手数料を変えられない・・・、と書きましたが、他の記事でも何回か書いているようにRBFもCPFPもマイナーやノードのローカルルールでしかありません。普通の取引であっても後から手数料だけを上げた二重支払い的な取引を作成・送信することで、後に送信された取引を確認させることが可能です。
当然と言えば当然のことながら機能として二重支払いが可能なウォレットはありませんが、自力で生のトランザクションデータを作成できる知識があればだれでも簡単にできますし、知識がない人でも英語で検索すれば腐るほど情報がでてきます。
RBFの記事では、サポートしているマイナーが少ないので成功する確率は低いと書きましたが、ハッシュレートの1%を占めているマイニングプールだけがサポートしていたとしても100ブロックに1回、つまり1日に1回を超える期待値で確認されることになります。
前の取引から間髪入れずに次の取引を送信しても、ノードから拒否されてマイナーまで伝わる可能性は高くないかもしれませんが、現状は経験的に1日程経過すればほぼ確実に二重支払いが成功するようです(時間が立つと一部のノードの再起動などによりメモリプールがリセットされたり、一部のメモリプール内の最低必要手数料が上がること等によりトランザクションが除外され、二重支払いの取引とは認識しないノードが増えます。)。
もちろん悪用すると犯罪行為になる恐れもあるので、自己責任で十分理解している人が必要な範囲で行ってください。
まとめ
ということで、ビットコインに慣れてきた人はただ待つだけではなく2や3(や4)の方法を試してみてはいかがでしょうか。
おまけ
2も3も4も面倒だから知り合いのマイニングプールに優先して確認してもらいたいよ、という人にはBitcoin Unlimitedを支持していることで有名になった?ViaBTCというマイニングプールが提供しているTransaction Acceleratorというツールもあります。このツールにトランザクションIDを入力すると優先度を高くしてViaBTCが確認してくれます。ViaBTCのハッシュレートの占有率は現在5%弱なので、20ブロックに1回、つまり3~4時間に1回程度の期待値で採掘されることになります。
なんでこんなことを無償でしているかというと、リンク先のツールを見れば分かるようにBitcoin Coreの開発チームがいかに悪くビットコインを駄目にしているかということを長々と説明しています。つまり政治的な主張の一環として無償でツールを提供しているわけです。
スパム対策のために0.0001BTC/kb以上、1時間に最大100トランザクションという制限があるため、人気が出てきたときは使えなくなりますし、Bitcoin CoreとBitcoin Unlimitedのコミュニティの分裂問題が何らかの形で決着するまでの期間限定だとは思いますが、特に抵抗がなければ利用してみるのもいいかもしれません。