ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

Electrum2.7系で実装されたビットコインの「opt-in RBF」とは何か

最近はSegwitやら価格上昇やらZcashやらが話題になっているようですが、中でも最も実利用に影響が出ているのが、ビットコインネットワークの混雑が原因の必要取引手数料の上昇です。しばらく前に普通に送れた取引手数料ではなかなか承認・確認されず、数十円相当以上の手数料にするのが安全な状況のようです。

そんな手数料の話題に関連して、実際にはちょっと古めの話ですが、「opt-in RBF」について書きたいと思います。Bitcoin Coreには0.12.0(2016年2月リリース)の段階ですでにopt-in RBFが実装されているので、当時も少し話題になったことがありましたが、現実問題として他に実装するウォレットがほぼ皆無であったため、使用する人はほとんどいなかったと思います。(opt-in RBFを有効にしたトランザクションを検知する機能はほとんどのウォレットが実装済み)

10月末現在でも、実装されている主要ウォレットはGreenAddress(GreenBits等含む)と最近実装したばかりのElectrumしかありません。

opt-in RBFとは何か?

opt-in RBFはopt-in Replace-by-Feeの略です。Replace by Feeという言葉が示すように、最初に送ったトランザクションが未確認の状態の時に、手数料を引き上げることによってトランザクションを再送信して、前の古いトランザクションと置き換えることが可能となります。要するに、あるアドレスAからBにBTCを送信したとき、仮に手数料が少なすぎて全くブロックに取り込まれず未確認状態が続く場合、手数料だけを引き上げてAからBに同じものを再送信することですぐ確認してもらえるので、非常に便利な機能といえます。

RBFの前についているopt-inには選択などの意味があります。opt-in RBFを利用するときは、必ず「送信時にRBFを使用します」というマークを付けることになります。受け手は、マークを見ることで、このトランザクションは新しい別のトランザクションに置き換わるかもしれない、と判断することが可能になります。つまり、受け手としては未確認の状態のopt-in RBFマークがついたトランザクションを受け取ったとき、最低でも1確認を待たないと二重支払い的な攻撃をされる恐れがあるので注意する必要があるといえます。RBFは0確認ができなくなるからけしからん!という人はマークのついたトランザクションをすべて拒否すればいいでしょう。

このことから、実際に確認したわけではありませんが、未確認状態でも支払い完了と見なす通販などでのビットコイン決済では、opt-in RBFマークのついているトランザクションは拒否している可能性が高いと思われ、商品・サービス購入の支払いの際にはopt-in RBFは使用しないのが無難です。友人等個人相手に送信するときや、寄付を送る時などに限定して使用するのがいいでしょう。

そもそもRBFって今まで不可能だったの?

opt-in RBFという機能自体はビットコインの最初期にすでに実装されており、中本哲史が実装したものでした。しかし、初期のRBFは元のトランザクションよりも低い手数料でも置換することが可能であることなどから、ネットワーク攻撃に利用されてしまったため、長い間機能が無効にされていました。それが一部改良され今年実装されたということになります。

ただし、この「機能」はブロックに取り込まれず未確認の状態、つまりビットコインのコンセンサス外のことであり、ビットコインネットワークのプロトコルというわけではなくマイナーやノードのローカルルール的なものです。例えば、とあるマイナーが手数料が高い以外は同じ後から来たトランザクションで置換するということは今も昔も変わらずに可能ではありました。公式のBitcoin Coreを使用しているノードがほとんどだとは思いますが、Bitcoin Core以外に独自ノードを作成・運用すれば、opt-in RBFのような機能を実装したり、あるいはopt-in RBFマークが付いていようがいまいが、すべて置換可能にすること(Full RBFと呼ばれる)はいつでも可能ですし、実際にBitcoin Coreへの実装前からそのように運用されているノードもあったようです。

今年公式のBitcoin Coreで実装されたというのは、事前にマークさえ付ければ手数料を引き上げて再送信し早く取引を承認させることが、非常に高い確率で可能になったという意味があります。(以前もRBFを採用するマイナーに運良く拾われれば可能ではありましたが、多くの場合単なる二重支払いと見なされ成功確率は低いものでした。)

実際にElectrumでRBFを使用してみよう

デフォルトの設定では、ElectrumはRBFはオフの設定になっています。メニューの「ツール」→「設定」から「Enable Replace-By-Fee」にチェックを入れましょう。すると送信タブに「Replaceable」欄が表示されるので、この欄にチェックを入れるとRBFマークを付けて送信できます。

取引履歴を見ると「Replaceable」の表示がつき、なかなか確認されない場合は右クリックで「Increase Fee」を選ぶにより手数料を上げることができます。決済などでは拒否される可能性もあるので、使用場所は十分考えてください。