BitcoinTechnical intermediate

CPFP (Child Pays for Parent): ビットコイントランザクションの高速化

ビットコインにおけるChild-Pays-for-Parent(CPFP)の仕組み — パッケージリレーの仕組み、手数料の計算方法、受信者と送信者のユースケース、RBFとの比較、実際のウォレットでの使用例を解説します。

· 2分

ビットコインの受取を待っているとします。送信者が手数料を低く設定したため、トランザクションがメムプールで何時間も未確認のままです。RBFは送信者しかトランザクションを置き換えられないため使えません。しかし、手立てがないわけではありません。これから受け取る未確認の出力(output)を使い、マイナーが両方のトランザクションをまとめて確認したくなるほど高い手数料を付けて新しいトランザクションを作成できます。この手法を**Child Pays for Parent(CPFP)**と呼びます。

CPFPはRBFの補完手段です。RBFが送信者に自分の滞留トランザクションを置き換える手段を与えるのに対し、CPFPは受信者を含む使用可能な出力を持つ誰もが確認を加速できるようにします。この2つが滞留したビットコイントランザクションを解決するための主要なツールです。

CPFPの仕組み

CPFPの仕組みは、マイナーがブロックに含めるトランザクションを選択する方法に基づいています。マイナーはトランザクションを個別に評価するのではなく、トランザクションパッケージとして評価します。手数料の低い親トランザクションに手数料の高い子トランザクションが紐づいている場合、合理的なマイナーはパッケージ全体の手数料率が他のトランザクションより高いため、両方を含めます。

手順は以下のとおりです:

  1. 親トランザクションが不十分な手数料率でメムプールに存在します(例:メムプールの最低要件が8 sat/vBのとき2 sat/vB)。
  2. 親の出力の1つを使用する子トランザクションを作成します — 受信者であれば受取出力を、送信者であればお釣り出力を使います。
  3. 両トランザクションの平均手数料率が現在の優先度しきい値を超えるよう、子の手数料を十分高く設定します。
  4. マイナーは親+子のパッケージをまとめて含めた方がスキップするより高い手数料率を得られると判断し、同じブロックで両方をマイニングします。

子がオンチェーンで有効になるためには、親が必ず先に確認される必要があります。子が使用する出力は親が確認されるまで存在しないからです。この依存関係こそが、マイナーに親を含めることを強制します。

必要な子トランザクションの手数料計算

子トランザクションは親の手数料不足分を補填する必要があります。計算式は以下のとおりです:

target_package_fee = desired_rate × (parent_vsize + child_vsize)
required_child_fee = target_package_fee - parent_fee
child_fee_rate     = required_child_fee / child_vsize

計算例

パラメータ
親の仮想サイズ225 vB
親の手数料450 sats(2 sat/vB)
子の仮想サイズ141 vB
目標パッケージ手数料率12 sat/vB
target_package_fee = 12 × (225 + 141) = 4,392 sats
required_child_fee = 4,392 - 450 = 3,942 sats
child_fee_rate     = 3,942 / 141 ≈ 28 sat/vB

パッケージ全体を12 sat/vBに引き上げるには、子が約28 sat/vBを支払う必要があります。これは目標手数料率よりかなり高くなりますが、子が親の不足分まで補填するためです。

誰がCPFPを使えるのか

受信者 — これがRBFに対するCPFPの最大の利点です。誰かが低い手数料でビットコインを送ってきた場合、その未確認の出力を高手数料の子トランザクションで使用できます。送信者の協力は必要ありません。

送信者 — トランザクションに自分のウォレットに戻るお釣り出力がある場合、そのお釣り出力をCPFPの子として使用できます。元のトランザクションでRBFが有効になっていなかった場合に有用です。

使用可能な出力を持つ誰でも — 複数の出力があるトランザクションでは、どの出力の所有者でも子を作成できます。CoinJoinやLightningチャネルクローズなどのマルチパーティプロトコルでも、使用可能な出力を持つ参加者であればCPFPを使えます。

実際の使い方

Sparrow Wallet

未確認の受信トランザクションを右クリック → **“Accelerate Transaction (CPFP)“**を選択します。Sparrowが必要な子の手数料を自動的に計算し、トランザクションを作成します。

Bitcoin Core

未確認のUTXOを高い手数料で自分自身に送信します:

bitcoin-cli -named sendtoaddress \
  address="your-address" \
  amount=0.0009 \
  fee_rate=30 \
  include_unsafe=true

include_unsafe=trueフラグにより、未確認の出力を使用できるようになります。

Electrum

Historyタブで未確認トランザクションを右クリック → **“Child pays for parent.”**を選択します。Electrumが手数料計算を自動的に処理します。

CPFP vs RBF

CPFPRBF
使用可能者送信者または受信者送信者のみ
メカニズム新しい子トランザクション置換トランザクション
シグナリングの必要性不要必要(opt-in RBF)またはfull RBF
新しいTXIDの生成はい(子が独自のTXIDを持つ)はい(置換トランザクションに新しいTXIDが付与)
親TXIDの変更いいえ — 親TXIDは維持はい — 元のTXIDは無効化
コスト効率低い(子TXの追加ブロック空間消費)高い(単一TX、追加オーバーヘッドなし)
適した場面受信者、non-RBFトランザクションRBF対応ウォレットの送信者

重要な違い:CPFPでは元の親TXIDが有効なまま維持されます。受信者のTXIDは変わりません。一方RBFでは、元のTXIDが無効化され新しいTXIDに置き換えられます。TXIDでトランザクションを追跡する加盟店や決済処理業者にとって、この違いは重要です。

パッケージリレーとメムプールポリシー

CPFPは、マイナーがトランザクションを個別ではなくパッケージとして評価することに依存しています。これはBitcoin Coreの**祖先手数料率(ancestor fee rate)**計算を通じて実装されています。

ブロックテンプレート用のトランザクション選択時、Bitcoin Coreは各トランザクションの祖先手数料率を計算します — そのトランザクションとすべての未確認祖先の合計手数料を、結合した仮想サイズで割った値です。トランザクションは祖先手数料率でソートされ、収益性の高いパッケージがまとめて含まれます。

メムプールへの受入

子トランザクションがメムプールに受け入れられるには、親がすでにメムプールに存在するか、パッケージリレーを通じて同時に送信される必要があります。Bitcoin Coreは祖先チェーンと子孫チェーンに以下の制限を適用します:

  • 祖先の最大数:25トランザクション
  • 祖先の最大サイズ:101,000 vB
  • 子孫の最大数:25トランザクション
  • 子孫の最大サイズ:101,000 vB

これらの制限は、過度に長いトランザクションチェーンによるサービス拒否攻撃を防ぎつつ、実用的なCPFPの使用を可能にしています。

パッケージリレー(BIP 331)

従来、CPFPにはニワトリと卵の問題がありました:親の手数料率がメムプールの最低値を下回ると、子が送信される前にノードが親を拒否していました。パッケージリレー(Bitcoin Coreで段階的に実装)は、親と子を単一のパッケージとして送信し、まとめて評価することでこの問題を解決します。

これはLightning Networkの強制クローズトランザクションにとって特に重要です。手数料急騰時に事前署名された手数料が不十分になる可能性があるためです。

Lightning NetworkでのCPFP

CPFPはLightning Networkのセキュリティにおいて重要な役割を果たします。チャネルが強制クローズされると、コミットメントトランザクションはチャネルが最後に更新された時点の手数料でブロードキャストされます — それが数日から数週間前の可能性もあります。その間に手数料が上昇していた場合、コミットメントトランザクションが滞留する可能性があります。

Lightningの実装は**アンカー出力(anchor outputs)**を使用します — CPFPで使用するために設計された小さな出力です。チャネルの各当事者は、コミットメントトランザクションの実効手数料率を引き上げるために使用できるアンカー出力を受け取ります。これにより、手数料が急騰しても、チャネルクローズが適時に確認されることが保証されます。

制限事項

  • コストオーバーヘッド — 子トランザクション自体がブロック空間を消費するため、送信者にとってCPFPはRBFより手数料効率が劣ります。
  • 使用可能な出力が必要 — すべての出力がロックされている場合(例:他の署名者が必要なマルチシグ)、CPFPは使用できません。
  • チェーン制限 — 25祖先/子孫の制限により、未確認トランザクションチェーンにCPFPを無限に適用することはできません。
  • ダスト出力 — 使用したい出力がダストしきい値(P2PKHで546 sats、P2WSHで294 sats)未満の場合、有効な子トランザクションを作成できません。

さらに詳しく

関連記事