用語集 / ライトニングとレイヤー2
ペナルティトランザクション
- ペナルティトランザクションとは?
- ペナルティトランザクションとは、取引相手が失効済みのコミットメントを公開した際に、すでに保有している失効用の鍵で署名し、ライトニングネットワークのチャネルのすべてのアウトプットをオンチェーンで回収するトランザクションです。
ライトニングのチャネルは2人の参加者によって監視されており、ペナルティトランザクションはその執行手段です。BOLT 5は、その一掃(sweep)にメイン残高の出力用として160バイトのウィットネスを割り当てており、不正を働いた相手のタイムロックが失効する18ブロック前までに確認が取れていない場合は、出力ごとに分割するよう定めています。チャネルにビットコインを保有している場合、このトランザクションこそが、あなたと、あなたの残高を巻き戻そうとするピアとの間に立ちはだかるものです。
仕組み
ペナルティトランザクションは、出力の所有者がすでにあなたに取得する権利を譲り渡した出力を使用します。
チャネルの残高が動くたびに、双方は置き換えられる状態の背後にある秘密を明け渡します。その秘密を保持していれば、ピアの古いコミットメントトランザクションに対する失効用の秘密鍵を導出でき、これがそのトランザクションの相手側を解錠する鍵となります。BOLT 5はその帰結を1行で述べています。ノードが、自分が失効用の秘密鍵を持つコミットメントトランザクションを発見した時点で、資金提供トランザクションの出力は解決済みとなります。交渉する余地は何も残りません。
何を一掃するかは、古いコミットメントが何を運んでいたかによって決まります。仕様は、不正を働いた相手のメイン出力を失効用の鍵で解決すること、その相手が提供した各支払いを3通りのいずれかで解決すること(コミットメントを失効用の鍵で使用する、支払いのプリイメージを知っていればそれで使用する、または相手が公開した後に相手のHTLC-timeoutトランザクションを使用する)、そして相手のHTLC-successおよびHTLC-timeoutトランザクションも同様に失効用の鍵で解決することを求めています。さらに、ついでにインプットのウィットネスからプリイメージを取り出すよう指示しています。失いかけていた支払いが、あなたの1つ前のホップからまだ請求できる可能性があるからです。
3つのウィットネスの形がそのすべてをカバーしており、BOLT 5はそれぞれのサイズを示しています。メイン残高の出力には160バイト、提供された支払いには243バイト、受け入れられた支払いには249バイトです。インプット自体の164の重量を加えると、請求する各出力のコストは324、407、または413となります。トランザクションの残りの部分は、ウィットネス以外のデータの53バイトに、2バイトのウィットネスヘッダーを加えたものです。同じコミットメントから自分のメイン出力も組み込むことができ、これにより272が加算され、主に支払う手数料を削減するために用います。
ペナルティトランザクションがそうではないものが2つあります。自動ではありません。ビットコインは誰も罰しません。一掃が行われるのは、あなたが実行しているソフトウェア、またはあなたが雇ったソフトウェアが、古いトランザクションの確認を検知し、不正を働いた相手のタイムロックが切れる前に反応した場合だけです。また、無料でもありません。一掃は他のトランザクションと同様に時価の手数料率を支払うため、空にするコストよりも少ない額しか保有していないチャネルは、ルール上何が許されていようと守る価値がありません。
ビットコインを購入する際にこれが重要な理由
ペナルティトランザクションがあなたを守るのは、あなたが自分自身のコミットメントトランザクションを保持しているウォレットにおいてのみであり、これはほとんどの手軽なライトニングアプリを除外します。
当サイトの41件のウォレットレビューは、まさにこの線で分かれます。Phoenixは端末上で本物の自己管理型ライトニングノードを実行するため、罰則の仕組みはあなたのものであり、監視する義務もあなたのものです。ACINQの復元経路では、強制クローズを行い、おおよそ720ブロック、約5日待ってからチャネルの資金がオンチェーンで自分のものになります。BlueWalletはビットコイン専用で、オンチェーンでは異例なほど高性能ですが、そのライトニング側はLNDHubサーバー上のアカウントであり、そのサーバーがあなたのものでない限り、運営者がそれらのコインを動かせるため、誰かを罰するためのあなたのコミットメントトランザクションは存在しません。Wallet of Satoshiもデフォルトのモードではカストディ型であり、それが当サイトで推奨ではなく2.7の評価にとどまっている理由の一部です。
これは判定ではなく、トレードオフとして読んでください。カストディ型ライトニングは、不正を働くピアをあなたの脅威リストから削除し、代わりにサービスを凍結または引き揚げることができる1社に置き換えます。自己管理型ライトニングは、ペナルティトランザクションと、目を覚ましている義務をあなたに渡します。どちらの側でも人がつまずきやすい誤りは、古いシードバックアップを再利用することです。12語はオンチェーンのコインを復元しますが、どのチャネル状態が最新かを何も知りません。そのため、あなたが公開するコミットメントは古いものとなり、続いて発生するペナルティトランザクションはあなたを狙うことになります。
Phoenixのチャネルでの失効したクローズ
Phoenixのチャネルで、3件の支払いがまだ処理中であるときに、反対側のノードが先週のコミットメントを公開した状況を想像してください。
あなたのソフトウェアがtxidを見つけ、失効用の鍵を導出し、1つの一掃を構築します。その重量は、不正を働いた相手のメイン出力に324、3つの受け入れられた支払い出力のそれぞれに413、自分のメイン出力を組み込むことに272、トランザクション本体の53バイトの4倍、そして2バイトのヘッダーで、2,049重量単位、すなわち約512仮想バイトです。相手の資金は、チャネル開設時に双方が合意した相対タイムロックの背後にあり、その種の遅延は分ではなく日単位で進みます。Phoenixでの強制クローズからの復元には、おおよそ720ブロック、約5日かかります。あなたの分は、マイナーがあなたのトランザクションを取り込んだ瞬間に使用可能になります。
BOLT 5は上限も計算しています。標準の最大重量400,000と最大のインプット413に対して、単一のペナルティトランザクションは966の支払い出力に達し、ピアプロトコルがすでに許可している片側あたりの保留中の支払い483の2倍となるため、完全に詰め込まれたチャネルでさえ一度に空にできます。
次に、そうしない理由があります。チャネルがアンカー出力を使用している場合、不正を働いた相手自身の支払いトランザクションはSIGHASH_SINGLEとSIGHASH_ANYONECANPAYで署名されているため、相手は自分のインプットを追加し、あなたの統合された一掃を、相手のメイン出力のタイムロックが失効するのに十分な時間だけメモリプール内に留める(ピン留めする)ことができます。その出力が失効まであと安全遅延の範囲内にある時点で確認が取れていなければ、BOLT 5が18ブロックを推奨しつつノードのポリシーに委ねている期間ですが、作業を分割するよう指示されます。失効した出力ごとに1つのペナルティトランザクションを作成し、それぞれが確認されるまで手数料を引き上げます。手数料ゼロのコミットメントの場合、そのそれぞれがバージョン3のトランザクションが持つ10,000仮想バイトの上限内に収まらなければならず、さもなければマイナーに届かない可能性があります。
ペナルティトランザクションvs強制クローズ
強制クローズはチャネルからのあらゆる一方的な退出であり、一方、ペナルティトランザクションは不正な退出への応答です。
ほとんどの強制クローズは退屈なものです。ピアがオフラインになり、支払いの期限が近づき、誰かのノードが現在の状態を公開し、遅延が過ぎれば双方が自分に支払われるべき残高を受け取ります。ペナルティトランザクションは、公開されたコミットメントがすでに失効させられていたという狭い場合にのみ存在し、取り分ではなくチャネル全体を取得します。すべてのペナルティトランザクションは強制クローズに続いて発生しますが、強制クローズがペナルティトランザクションを生むことはほとんどありません。
ペナルティトランザクションvsウォッチタワー
ペナルティトランザクションは署名済みのビットコイントランザクションであり、一方、ウォッチタワーはあなたに代わってそれをブロードキャストしようと待機するマシンです。
ウォッチタワーは、失効したtxidの短いプレフィックスと、そのトランザクションがブロックに現れるまで復号できないブロブを保存します。内部の一掃はあなた自身のノードによって構築され署名されており、何か問題が起きる前に選ばれたアドレスへ支払うため、ウォッチタワーを雇うことで鍵を渡すことはありません。この2つを混同すると、誤った心配を生みます。ウォッチタワーを運用しないことは、ペナルティトランザクションをまったく弱めません。それは、あなたのノートPCが閉じている間にそれを送信するために起きている人が誰もいないということを意味するだけです。