UmbrelでCPFPを実行する方法
ビットコインのトランザクションを詰まらせてしまった場合、CPFP (Child Pays For Parent) を使用し、手数料を上乗せすることでトランザクションを優先的に処理することができます。この記事では、Umbrelを使用してCPFPを実行する手順について説明します。
CPFPについて
CPFP(Child Pays For Parent)とは、トランザクションが未承認状態にあるとき、手数料を高く設定した新しいトランザクションを作成し未承認TXとセットでマイニングしてもらう機能です。未承認TXを「親トランザクション」、新しいTXを「子トランザクション」と呼び、その親子をひとまとめでマイニングしてもらうことで、未承認だった親トランザクションの処理を優先されるようにします。
つまり、子トランザクションによって手数料を引き上げてマイナーたちの関心を引き、親トランザクションの承認時間を早めるということです。
UmbrelにSSH接続する
現状Umbrelアプリの中でCPFPに対応したGUIアプリがないので、CUIを用いてUmbrelにSSH接続することが前提となります。
まずはターミナルを開き、UmbrelとSSH接続してください。
CPFPを実行する手順
以下の手順に従って、UmbrelでCPFPを実行してください。
-
コマンドラインで以下のコマンドを入力します。
~/umbrel/scripts/app compose lightning exec lnd lncli wallet bumpfee --sat_per_vbyte <XX> "<txid>:<output index>"
※「--sat_per_vbyte <XX>」の<XX>は、子TXが払う手数料レート(sat/vB)の値です。この値を変更することで、手数料を調整することができます。「"<txid>:<output index>"」は、親トランザクションのoutpointを入力してください。
※親トランザクションは下記コマンドから探せます。~/umbrel/scripts/app compose lightning exec lnd lncli listunspent
-
子トランザクションが生成されたかどうかを確認するには、以下のコマンドを入力してください。
~/umbrel/scripts/app compose lightning exec lnd lncli wallet pendingsweeps
以上が、UmbrelでCPFPを実行する手順です。トランザクションがスタックした場合は、この方法を試してみてください。また、手数料を調整する際には、適切な値を設定するようにしてください。
※子トランザクションの手数料レートの計算方法について
加重平均を使って算出するのが良いです。 以下の手順で計算できます。
- ブロードキャストされている親トランザクションのサイズ(vSizeの値)と手数料レートをmempool等で確認します。
- 子トランザクションのサイズは約100vBとなります。
上記から以下の計算式で実効feerateを調整します。
size = 親size + 子size(約100vB)
実効feerate = (親size x 親feerate) + (子size x 子feerate) / size
例
親size = 900vB, 親feerate = 1sats/vB, 子feerate = 50sats/vBとします。
size = 900 + 100 = 1000 vB
実効feerate = (900 x 1) + (100 x 50) / 1000 = 5.9 sats/vB
実効feerateはmempoolで高優先になる値が望ましいです。最悪でも中優先になる値。なぜなら、子TXの手数料もケチって詰まらせると孫TXをつくるはめになり、更に高手数料を払う地獄になるからです...。
Nayuta上野さんの記事も参考になります。
この記事はテスト的にChatGPTを用いました。(もちろん一部加筆修正はしています)
プロンプトと出力結果は有料部分に置いておきます。扱いに慣れればアシスタントとしてかなり優秀ですね。
Umbrelの調子が悪く、誤って1sat/vBで送ってしまい危うくgoxするところでしたが、この記事のおかげで救出できました。ごっつさん、感謝!