ビットコインのソフトウェアは常にアップデートされています。目立つのはコンセンサスに関わる変更-ハードフォークやソフトフォークと呼ばれるもの-ですが、その頻度は非常に低いためあまり積極的に開発されているイメージは強くないかもしれません。しかしながら、それ以外の部分でも重要な改善が加えられています。

たとえばBitcoin Coreのフルノードの同期はサイズの割に高速ですが、これもノードの挙動をアップデートし最適化し続けている成果です。また、ポリシールールという、コンセンサスには影響しないがノードの挙動を決めるルールがあり、ネットワーク関連の機能に使われることが多いです。

今日はポリシールールとして近い将来に導入されるであろう"Package Relay"というトランザクションの伝播に関わる新しい仕様と、それがライトニングやDLCにとってどのような問題を解決するのかについて説明します。

メモリプールとトランザクションのリレー

ビットコインの手数料を意識したことのある方にとってメモリプールというものは馴染み深いものかもしれません。一応説明すると、フルノードが他のノードからまだブロックに取り込まれていないトランザクションを受け取った際、一時的にメモリに保有しているのがメモリプールです。

メモリプールには大量の安価なトランザクションを送りつけられてメモリを食いつぶされるというDoS攻撃を防ぐために容量の上限があり、既定値として300MBが一般的です。ではメモリプールが一杯になった場合にその後受信したトランザクションがどうなるかというと、メモリプールと比較して一番手数料の低いものが削除されます。

したがって、送金が詰まって満杯になったメモリプールに残った一番安いトランザクション手数料が10 sat/vbyteだった場合、手数料がそれ未満のトランザクションはたとえ伝播されてきても無視されます。

ライトニングやDLCに共通の弱点:時間制限

昔ならこれはそれほど問題のあることではありませんでした。せいぜい手数料が低すぎて承認されなかったトランザクションがネットワークから消えてしまうくらいで、それ以前でもより高い手数料を設定すればメモリプールに入れることができるからです。

しかし、今のビットコインにとって無視できない新しい種類のトランザクションがあります:ライトニングチャネルに関連するトランザクションです。

特にライトニングチャネルに関して問題になるのが、チャネルごとに更新しながら保持しているいくつかの(未公開の)ビットコイントランザクションの手数料水準です。ライトニングのセキュリティモデル上、これらのトランザクションを互いに持ち合っているのみならず、「相手の裏切りへの対応として公開する必要があった場合、制限時間以内にブロックに取り込まれること」が必須となっています。しかし、オンチェーンの手数料水準が急騰した場合にこれらのトランザクションを作成したとき指定した手数料が不十分となることがあります。

通常は手数料相場が大きく変動した場合などに"update_fee"というメッセージを通してチャネルを開いている相手のノードと協力してこれらのトランザクションを作り直し、両者が合意する水準まで手数料を調節することができます。しかし、相手が非協力的な場合(オフラインまたは攻撃者)、長期間ブロックに取り込まれないような低い手数料のままになってしまう可能性があります。そしてそれは場合によってはメモリプールの下限より低い水準かもしれません。

そうなってしまうと、裏切りを裁くトランザクションが承認される前に攻撃者のトランザクションが承認されてしまう恐れがあり、資金の盗難につながります。この問題はライトニングチャネルと似たメカニズムで資金をロックするDLCにも共通しています。

Package Relayの概要

ここでPackage Relayの出番です。これまではメモリプールの最低水準以下の手数料を指定したトランザクションはたとえ伝播されてきても門前払いされていました。

Package Relayはその名の通り、いくつかのトランザクションをまとめて伝播し、その合計の手数料水準が十分であればメモリプールに受け入れる(そして代わりに手数料の安いPackageされていないトランザクションや手数料の合計が少ないPackageを追い出す)、という仕組みです。単体ではメモリプールに弾かれてしまうトランザクションも、より高い手数料を払うトランザクションとまとめて伝播されれば門前払いは防げることになります。

このPackage Relayがあるおかげで、手数料が不十分なライトニング関連の不正対応トランザクションに関してCPFPで手数料を追加し、まとめて伝播することで制限時間内にブロックに取り込まれるようにすることができます。

CPFP (Child Pays For Parent)とは、手数料の低いある未承認トランザクションから生まれる予定のUTXOを、高い手数料を払うトランザクションで使用することで、子トランザクションと親トランザクションの手数料の合計が高くなり両方をブロックに取り込む経済合理性が生まれるテクニックです。

もちろんメモリプールの手数料によるサイズ制限はDoS耐性のためにあったわけで、Package Relayを導入する上で新しいDoS攻撃手段が生まれないことを確認するのに時間がかかっているようです。リリース予定が半年後あたりのBitcoin Core 23.0には間に合わないかもしれません。

CPFPと並んで有名なRBFについては、7月1日の「未承認トランザクションを置き換え可能にするRBFが既定ではない理由と、既定にするメリット」をご覧ください。そういえばRBFもポリシールールですね。
https://www.facebook.com/.../bitco.../posts/4068495236580120

まとめ

・送金が詰まってメモリプールが一杯になると、メモリプールの下限より手数料の低いトランザクションは伝播されなくなる

・ライトニングチャネルやDLCのセキュリティモデル上、期限内に正しいトランザクションが取り込まれない状況は悪用され盗難につながりうる

・Package Relayによって手数料の安いトランザクションと高いトランザクションをまとめて伝播し、トータルの手数料によってメモリプールに入れるかどうかを決められるようになる

・そうすると、手数料が低いライトニング関連トランザクションをCPFPで手数料追加し急いで承認させることができる