LNノードを真面目に運用している方は、支払いを中継するときに失敗することがよくあることにお気づきかもしれません。この失敗の多くは「プロービング」という、様々な送金経路を試し、その送金がどこで失敗するかを計測することによりチャネルの残高の偏りを観測しようとする一部のノード運用者によるもので、主要なノードはこのせいで中継する支払いの9割以上が失敗となっています。(一部には98%以上ではという声さえあります!)
このプロービングは、ノード運用者からすると使えるツールの1つである一方で、中継するノードからすると大変迷惑なものです。今日は迷惑の文脈で語られることの多いプロービングがどのようにネットワークに影響を与えているのかをまとめました。
ちなみにLNを個人的に使う分には難しいことを考えず、中継機能はオフにしてノードを運用することをおすすめします。下手に運用しようとするより低リスクですし、よほど上手にまとまった金額を運用しなければ大した利益も見込めないためです。
プロービングの悪影響
プロービングの悪影響を論じる際、主に4つの観点が出てきます。中継ノードが保存するデータ量の膨張、中継ノードの経済的コスト、プライバシーの漏洩、支払い失敗の繰り返しによって中継ノードとして選択されにくくなる影響です。
中継ノードのデータ保存量増大
まず、中継ノードが保存すべきデータについてです。支払いを中継する際、中継するチャネルでも支払い後の状態に遷移できるHTLCが作られます。プロービングでは支払いが失敗するため、このHTLCは両方のノードの協力によって巻き戻されますが、相手がこのHTLCを後に公開して資金を盗めないように、中継ノードは失敗した送金についてもHTLCの内容を保存します。そうすれば、HTLCが後に巻き戻されたことを証明でき、相手の不正を罰する(残高を没収する)ことができるためです。
最もポピュラーなLNノード実装のLndではすべてのHTLCに加え様々な情報を保存しているため、中継ノードを運用しているとchannel.dbというデータベースファイルが肥大化していきます。大規模なルーティングノードに関しては、このファイルサイズが100GBを超えているものもあります。チャネルを閉じてまた開けばかなり削減できますが、経路選択アルゴリズムがチャネルの年齢(長期間存在するほど良い)を考慮していると経路として選択されにくい影響が考えられます。
このデータ保存問題を改善するため、DBの効率化によってLNDに劇的にデータ保存量を節約するプルリクエストが出ており、数カ月後のリリースに含まれるかもしれません。HTLCを上限まで含んだChannel Commitmentが747KBから24KB、HTLC1つあたり1.5KBから50バイトという大幅削減です。
中継ノードの経済的損失
次に、経済的コストの問題です。電気代、ストレージの故障リスクなども増加すると考えられますが、たまたま途中のノードでプロービングの送金がスタックしてしまい、オンチェーンで決済する必要が生まれる可能性があります。例えば1万回のプロービングごとに1度発生するとしても、状況によっては1000円といったコストが発生しうるので馬鹿にはできません。プロービングは送金者本人が受け取らず必ず失敗させるため、中継ノードの手数料収入にならず、単純に損失を生みます。
プライバシーの漏洩
プライバシーの漏洩はプロービングの目的そのものです。とはいっても、多くの場合プロービングはチャネルのバランスをなるべく正確に把握することが目的で、トランザクションの追跡が目的とは限りません。しかし、Chainalysisのようなブロックチェーン監視業者が高額な(オンチェーンより手数料がかかる=プライバシーにプレミアムを払っている)LNトランザクションの追跡目的でプロービングを行うのは時間の問題です。