Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CPFP carve out

CPFP carve out

GBECの解説動画の資料です。
https://goblockchain.network/2020/12/cpfp-carve-out/

shigeyuki azuchi

December 16, 2020
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 CPFPとは?
 Child pays for parent(CPFP)
 
 Bitcoinにおいて送信済みトランザクションの手数料を上げるためのテクニック。
 
 


    親 Tx
 Inputs
 Input 1
 Input 2
 Outputs
 送金先アドレス
 お釣り用アドレス
 手数料(低)
 子 Tx
 Inputs
 Input 1
 Outputs
 自分のアドレス
 手数料(高)
 送信済みTxに設定されている手数料が低く 
 なかなかブロックに入らない場合に、 
 そのTxのアウトプットのUTXOを使って
 送金をする子Txを作成し、その手数料を 
 高く設定することで、親子セットで 
 ブロックに入れてもらうアプローチ。 
 (必ず親が先)
 
 ほとんどのTxにはお釣りで自分に 
 返ってくるUTXOが存在するので、
 このアプローチで手数料のBUMPが可能。 
 ※受信者が行うアプローチもあり。 
 ※RBFと違ってTxに特殊な設定が必要ない。 

  2. 2 CPFPに関する制限
 CPFPは複数の子Txチェーンについても機能するが、あまりにも多いと
 マイナーがブロックテンプレートを作成するのに時間がかかってしまう
 
 【Bitcoin Coreの制限】
 
 • -limitancestorcount=<n>

    (default: 25)
 mempool内の祖先の数がn以上ある場合、Txを受け入れない
 • -limitancestorsize=<n> (default: 101)
 mempool内の全祖先のサイズがn KB以上になる場合、Txを受け入れない
 • -limitdecendantcount=<n> (default: 25)
 祖先がn以上の子孫をmempoolに持つようになるTxを受け入れない。
 • -limitdesendantsize=<n> (default: 101)
 祖先がn KBを超える子孫をmempoolに持つようになるTxを受け入れない。
 

  3. 3 Transaction pinning Attack
 マルチパーティコントラクトにおけるDoS攻撃の一種
 
 Bitcoin CoreのCPFPの制限を悪用する
 
 親

    Tx
 Inputs
 Input 1
 …
 Outputs
 Bobへの送金
 Malloryへの送金
 手数料(低)
 Malloryがlimitdescendantsize 制限付近の子Txを作成することで、Bobが親Tx のUTXOを使用した子Txを作れないようにする。 
 
 結果、BobはCPFPを使って親Txの手数料を 
 上げることができない。 
 ※ 通常の支払いであれば大きな問題にならないが、 
 LNのような時間に依存するプロトコルにおいては問題に。 
 状況によってはマルチホップ支払い(HTLC)のコインが盗難に。 
 子 Tx

  4. 4 CPFP carve out
 Bitcoin Core v0.19.0で導入された新しいmempoolポリシー CPFP carve out


    
 • Txの未承認の祖先Txが1つしかない場合 
 ◦ Txチェーンの深さの制限(count)と、サイズの制限(size)を適用しない 
 親 Tx
 Inputs
 Input 1
 …
 Outputs
 Bobへの送金
 Malloryへの送金
 手数料(低)
 Malloryががlimitdescendantsize 制限の子Txを
 作成しても、Fee Bump Txには制限が適用されず、 
 Bobは手数料の上げることが可能になる。 
 
 親Txのアウトプット毎に必ず1つは Fee Bumpを
 可能にするポリシーの変更。 
 
 このポリシーによりLNの
 Anchor Outputが使用可能に。
 子孫 Tx
 Fee Bump Tx