チャネルクローズでルール違反するとどうなるか試した
ライトニングネットワークのチャネルを閉じる時にルール違反した場合、もう片方のノードがチャネル上の全資金を没収する事ができるようになっているとのことで、実際にやってみました。
結果がnode management アプリでどのように表示されるのかも確認しました。
ルール違反とは
ここでいう「ルール違反」を説明します。
自分のノードと他のノードとの間にチャネルがあります。
送金やルーティングが発生すると、チャネルの状態(バランス)が更新されます。
チャネルを閉じるときは、最新のチャネルの状態(例の場合は状態2)をブロックチェーンに取り込んでもらいます。チャネルクローズが完了すると、チャネル上の資金がオンチェーンのビットコインとして各ノードに返ってきます。
このときに、最新の状態ではなく古い状態(例の場合は状態1)で閉じると、チャネル上の資金の移動をキャンセルできてしまいます。
この記事では、これをルール違反と言ってます。
ルール違反のパターン
ルール違反をするとどうなるのかやってみました。次の3パターンがあります。
1. 相手がオンラインの時
2-1. 相手がオフラインでWatch Towerを使っていない時
2-2. 相手がオフラインでWatch Towerを使っている時
「相手」はルール違反される側のノードです。
この記事では「1. 相手がオンラインの時」をやってみました。
1. 相手がオンラインの時
ノードAがルール違反する側、ノードBがされる側です。
チャネルオープン
ノードAから50,000satsでチャネルオープンしました。
funding tx
LN送金
ノードAからノードBに30,000sats送金しました。
ルール違反
ここでノードAがチャネルオープン直後の古い状態(状態1)で強制クローズしました。
closing tx
少ししてから、各ノードでオンチェーンの残高を確認してみると、ルール違反したノードAには資金が返って来ず、ノードBに50,000sats(からオンチェーン手数料を引いた額)が返ってきていました。
justice tx
このパターン(「1. 相手がオンラインの時」)では、ノードBがオンラインなのでルール違反を見つけて資金を没収できたようです。
node manegement アプリの表示
ノードBのnode manegement アプリでは、全資金没収したtxが次のように表示されていました。(これをやってみたのは23年1月なので、最新のバージョンでは表示が変わっているかもしれません)
Ride The Lightning
トランザクションにはjusticetx、チャネルにはBreach Closeと表示されていました。
Torq
justicetxと表示されていました。なぜか2つ表示があります。
ThunderHub
特に他のトランザクションと見分けがつきませんでした。
Ride The Lightning 、Torqは justicetx がわかるようになってました。
justicetxはあまり見る機会はなさそうですが、見分けがつくようになっている方がなんとなくいいですね。