用語集 / ライトニングとレイヤー2
強制クローズ
- 強制クローズとは?
- 強制クローズは、カウンターパーティの協力を得ずにライトニングチャネルを終了させる方法です。最新のコミットメントトランザクションをブロードキャストし、オンチェーンの手数料を支払い、自分の残高が使えるようになるまで遅延の経過を待ちます。
どのライトニングチャネルも、署名済みの出口を用意しています。強制クローズは、その出口を使うことです。実際のオンチェーントランザクション1件と、まだ処理中の各支払いにつきさらに1件のコストがかかり、アンカーチャネルでは、後から手数料を引き上げられるようにするためだけに、双方に330サトシの出力を確保します。資金が戻るのは1秒後ではなく、およそ1日後と考えてください。
仕組み
ライトニングチャネルから出る方法は2つあり、高コストなのが協力を必要としない強制クローズです。
協調クローズは交渉です。双方が最終的な配分に合意し、1件のトランザクションに署名すると、確認された時点で全員のコインは通常どおり使用できる出力になります。強制クローズは交渉を省きます。手元にある最新のコミットメントトランザクションを公開し、ピアの代わりにビットコインのコンセンサスルールが裁定を行います。この非対称性は意図的なもので、ボタンを押した側に不利に働きます。カウンターパーティの残高はすぐに使用できますが、自分の残高は、チャネル開設時に合意したto_self_delayブロック分のOP_CHECKSEQUENCEVERIFYによる遅延の後ろにロックされます。
この遅延が罰則のための猶予期間です。これは、ブロードキャストしたトランザクションが古いもので、すでに使用した残高を示していた場合に、相手側が罰則トランザクションを公開してすべてを取得する時間を確保するために存在します。BOLT 2はto_self_delayを16ビットの数値として保存するため、最大65,535ブロックまでの任意の値を取ることができ、不当に大きいとみなした値はピアが拒否することを要求しています。遅延が大きいほど、自分がだまされるのは難しくなり、自分の出口は遅くなります。
処理中の支払いは計算を複雑にします。それぞれに独自の後続トランザクションが必要で、アンカーチャネルではタイムアウトで解決するか秘密で解決するかに応じて666または706の重量単位を持ち、条件が満たされると個別にブロードキャストされます。330サトシのアンカー出力は、P2WSH出力のダスト限界の大きさで設けられており、mempoolが安かったときに署名されたコミットメントに対して、どちらの当事者も子トランザクションを付けて手数料を引き上げられるようにするために存在します。
発生する場面
強制クローズはよく起こりますが、そのほとんどは誰かが不正をしているわけではありません。
よくあるきっかけは、支払いの期限が近づく中でピアに長時間到達できない状態が続き、金額を失うリスクを避けるためにノードがクローズする場合です。プロバイダーは放置されたチャネルを整理します。ウォレットは更新後に相手側へ到達できないと自動でクローズします。いずれの場合も、残高の一部が突然保留中として表示され、自分の資金が入った見知らぬ相手のトランザクションがmempoolにあることで気づきます。
利用者の資金を守るルールは次のとおりです。シードフレーズだけからライトニングウォレットを復元し、そのまま使用してはいけません。シードはオンチェーンのコインを復元しますが、チャネルの現在の状態はそこに含まれておらず、古いコミットメントをブロードキャストすると罰則の対象になります。代わりに保管するのはチャネルのバックアップファイルで、これによって得られるのは、相手のペースで、自分では管理できない手数料で、ピアにクローズを依頼する権利です。これが、ライトニングが支出用であり、オンチェーンの自己管理が貯蓄用である実務上の理由です。
被害の大きさは手数料の環境で決まります。mempoolが落ち着いているときの強制クローズは数千サトシのコストです。同じクローズでも手数料が急騰しているときには、小さなチャネルが保有する額を超えるコストがかかることがあり、残高がスイープのコストを下回るチャネルはそのまま放置されます。