用語集 / トランザクションと手数料
Child pays for parent
別名はCPFP、Ancestor miningです。
- Child pays for parentとは?
- Child pays for parentは、手数料の低いトランザクションの未承認の出力を、両方の手数料を賄う2つ目のトランザクションで使用することで、そのトランザクションを救済する仕組みです。マイナーはこの2つをまとめて評価するためです。
マイナーはトランザクションを1件ずつ選ぶわけではありません。Bitcoin Coreはバージョン0.13.0、2016年8月から祖先の手数料率でトランザクションを選択しているため、気前のよい子トランザクションがけちな親トランザクションを同じブロックに引き込みます。この単一の設計上の選択が、停滞した支払いの受取人に、応答しないかもしれない送金人を待つのではなく、行動する手段を与えています。
仕組み
手数料率は比率であり、child pays for parentは1件のトランザクションではなくグループの比率を改善することで機能します。
ブロックを埋めるマイナーは、仮想バイトあたりのサトシをできるだけ多く得たいと考えます。mempool内のトランザクションが未承認の親トランザクションに依存している場合、マイニングのコードはそれを単独で取り込むことができないため、祖先の集合全体を評価します。親と子の手数料の合計を、両者のサイズの合計で割った値です。その数値が競争相手を上回れば、両方が取り込まれます。Bitcoin Coreのマイニングの選択は0.13.0以降、この方法で機能しています。これはトランザクション単位の単純な並べ替えを祖先の手数料率による並べ替えに置き換えたリリースです。
この計算は一度手で行う価値があります。仮想バイト141の親トランザクションが1 sat/vB、つまり141サトシを支払うとします。このペアを25 sat/vBに到達させたいと考えます。そのコインを使用する入力1、出力1の子トランザクションは約111仮想バイトなので、パッケージは252仮想バイトとなり、合計で6,300サトシが必要です。親トランザクションがすでに141を負担しているため、子トランザクションは6,159を負担する必要があり、これは子トランザクション単独で約55 sat/vBの手数料率に相当します。子トランザクションは常に割増を支払います。自分のバイトだけでなく他者のバイトのためのブロック空間も買っているからです。
2つの制限がこれを制約します。未承認のトランザクションの連鎖は、デフォルトで祖先または子孫が25を超えることはできず、そのファミリーの合計サイズは約101キロ仮想バイトに上限が設けられているため、子トランザクションを無制限に積み重ねることはできません。また、中継は自動ではありません。長年にわたり、支払い不足の親トランザクションを引き上げる子トランザクションは、すでに親トランザクションを破棄したノードによってそれ自体が拒否されていました。そのためBitcoin Coreは2024年10月の28.0で、1つの親と1つの子からなるペアの機会的な中継を追加し、ペアが1つの単位としてネットワークを伝わるようにしました。
同じ依存関係には、より厄介な形があります。他人が共有された未承認のトランザクションに、大きく手数料の低い子トランザクションを付け加えることができれば、そのファミリーのサイズを膨らませ、その手数料の引き上げを法外に高価にすることができます。この攻撃はトランザクションのピニング(pinning)と呼ばれ、ライトニングネットワークや他のコントラクトプロトコルが現在、単純な手数料の引き上げに頼るのではなく、制限されたトランザクションのトポロジーを使用している理由です。
ビットコインを購入するときにこれが重要な理由
child pays for parentは受取人が利用できる唯一の手数料の修正手段であり、停滞した取引所からの出金のためのツールとなっています。
流れはこうです。取引所から出金すると、取引所は数時間前に選んだ手数料率で、あなたの支払いを他の50件とバッチにまとめており、手数料の圧力が高まってバッチが未承認のまま残ります。replace-by-feeはここでは役に立ちません。その入力に署名したのは取引所だからです。できることは、入金されたコインを未承認のまま、高い手数料率で自分のウォレットの別のアドレスに使用することです。マイナーは今や、マイニングする価値のあるパッケージを見ることになり、両方のトランザクションが一緒に承認されます。
ウォレットが対応している必要があります。Bitcoin Core、Sparrow、Electrumでは、未承認の入金コインを選択して使用できます。いくつかのモバイルウォレットは未承認の残高を完全に隠し、クリックできるものを何も提供しません。自己管理で実際の資金を保有する予定なら、必要になる前、手数料の急騰中ではなく、これに対応しているか確認してください。
2つの注意点があります。第一に、子トランザクションは受け取ったまさにそのコインを使用するため、手数料は出金したばかりの資金から差し引かれ、少額の出金ではそのコストが出金額の相当な割合になることがあります。第二に、子トランザクションは新しいアドレスに新しいコインを作成し、公開記録上で両者を結び付けます。出金がプライバシーを意識した設定の一部であった場合、この方法で手数料を引き上げるのは、承知のうえで行うべきトレードオフです。
4 sat/vBのバッチで停滞した0.02 BTCの出金を救出する
取引所が4 sat/vBを支払うバッチで0.02 BTCを送金し、朝には30 sat/vB未満では何も承認されていないとします。バッチは大きく、おそらく1,500仮想バイトあり、その全体を支払うのはあなたの役目ではありません。あなたのコインを含むパッケージが魅力的に見えることだけが必要です。
ここに人々を驚かせる落とし穴があります。マイナーが評価するパッケージには、親トランザクション全体、その1,500バイトすべてが含まれ、あなたの取り分だけではありません。111バイトの子トランザクションを加えるとパッケージは1,611仮想バイトになり、30 sat/vBに到達するには合計で48,330サトシを見つける必要があります。親トランザクションがそのうち6,000を提供しているため、子トランザクションは約42,330サトシを負担することになり、0.02 BTCの出金では実際のコストとなります。
これが、child pays for parentが日常的なツールではなく救出用のツールである理由であり、大きな取引所のバッチよりも、1人の人物が直接あなたに送った支払いのような小さな親トランザクションではるかにうまく機能する理由です。正直な答えが待つことである場合もあります。手数料率はほとんどの週末に下がり、トランザクションはノードが忘れるまでデフォルトで最大14日間mempoolに残ります。
child pays for parent vs replace-by-fee
どちらも手数料を引き上げますが、使うのは反対の当事者であり、残す痕跡も異なります。置き換えは元のトランザクションを書き換え、その入力に署名した鍵を必要とし、新しいトランザクションIDを生成し、最初のバージョンを消滅させます。child pays for parentはその上に新しいトランザクションを追加し、受け取った出力の鍵だけを必要とし、親トランザクションには何も変更を加えず、両方を永久にチェーン上に残します。
置き換えは利用できる場合には安価です。2件ではなく1件のトランザクションのバイト分だけを支払うからです。停滞した支払いが自分のウォレットから出たものであれば、常にこれを使用してください。停滞した支払いが他人から来たものであれば、子トランザクションに頼ってください。