用語集 / ライトニングとレイヤー2
シャットダウンスクリプト
- シャットダウンスクリプトとは?
- シャットダウンスクリプトとは、チャネルが協調クローズした際にライトニングの残高が支払われるオンチェーンアドレスのことで、BOLT 2のshutdownメッセージ内で生のscriptpubkeyとして指定されます。
閉鎖するチャネルのそれぞれの側が自分の送金先を指定し、クローズ取引は両者にそれぞれの指定先へ支払います。BOLT 2はそのメッセージに型38を与え、ピア同士がフィーチャービット26と27をネゴシエートしていない限り、ウィットネスバージョン0のスクリプトのみを受け付けます。ライトニングの資金をコールドストレージに戻す人は、閉鎖の後にではなく、閉鎖の前にその送金先を確認すべきです。
仕組み
シャットダウンスクリプトは、型38のBOLT 2メッセージの中を運ばれます。このメッセージはチャネルID、2バイトの長さ、そしてスクリプトのバイト列そのものを順に含みます。
どちらのピアもこのメッセージを送ることができ、未処理の更新がなくなると、もう一方は自身のshutdownで応答しなければなりません。その時点からチャネルは閉鎖に向かいます。shutdownの後にupdate_add_htlcが続くことは許されず、ノードはその後到着するHTLCのルーティングを拒否すべきです。このメッセージはchannel_readyより前に送ることもできるため、ファンディング取引がまだ承認待ちのチャネルは早い段階で放棄できます。
仕様はスクリプトが何であり得るかについて狭く定めています。常に合法な形式は2つあります。OP_0と20バイトのプッシュ、すなわちpay to witness public key hash出力か、OP_0と32バイトのプッシュ、すなわちpay to witness script hashです。ウィットネスバージョン1から16までと、それに続く2から40バイトのプッシュは、option_shutdown_anysegwitがネゴシエートされた場合、つまりフィーチャービット26と27の場合にのみ合法であるため、Taprootへの支払いはピアがそれに対応しているかどうかにかかっています。3つ目の形式はoption_simple_close、ビット60と61とともに導入されました。OP_RETURNに加えて6から75バイトのプッシュ、または76から80バイト向けのOP_PUSHDATA1の変種で、上限があるのはOP_RETURNスクリプトがBitcoin上で標準となるのが83バイトまでだからです。これは自分の取り分が出力にする価値がないほど小さい場合に存在し、その場合金額はゼロでなければならないため、手数料としてマイナーに渡ります。
ノードはチャネルを開く際にも、open_channelとaccept_channelのupfront_shutdown_scriptTLVレコード、型0、フィーチャービット4と5の中で送金先を固定できます。両方のピアがそれを告知し、長さがゼロでないスクリプトが指定されていた場合、それとは別のものを指定する後続のshutdownは接続を失敗させなければなりません。BOLT 2はそれが何をもたらすかについて率直で、この事前の確約を"a weak commitment (a malevolent implementation tends to ignore specifications like this one!)"(弱い確約。悪意ある実装はこのような仕様を無視する傾向があります!)と呼び、段階的な改善に値するとしています。というのも、後から送金先を変えるにはピアの協力が必要だからです。
どこで見られるか
シャットダウンスクリプトはチャネルを所有する者のものであり、その所有者が常にあなたであるとは限りません。
当サイトでレビューしている41種類のウォレットの中では、評価4.0で、端末上で実際の自己完結型ライトニングノードを実行するPhoenixと、評価2.7でカストディモードのため注意の印が付いたWallet of Satoshiを比較してください。Phoenixのチャネルはあなたのものであるため、協調クローズではあなたが管理するアドレスがshutdownメッセージに入ります。米国とEUから撤退したWallet of Satoshiのカストディモードでは、チャネルは企業のものであり、スクリプトはその企業のアドレスを指定し、あなたが保有するのは鍵ではなく請求権です。
2つ目に現れるのは、静かに失敗するクローズです。古いノードは今でもSegWitでないシャットダウンスクリプトを送ることができ、BOLT 2は、SegWitでない出力が546サトシを下回るクローズ取引は、dust_limit_satoshisがより低く設定されていた場合に起こり得るもので、マイナーに届くことはまずないと指摘しています。資金のリスクはありませんが、チャネルは決済ではなく強制クローズにする必要があります。option_simple_closeの下では、新しいclosing_completeが前のものを上書きするため、手数料と出力スクリプトの両方を改訂できます。ただし事前の変種がチャネルを開く時点で送金先を凍結していた場合は別です。
シャットダウンスクリプトvs強制クローズ
シャットダウンスクリプトが資金の着地点を決めるのは、協調クローズの場合だけです。
強制クローズはネゴシエーションを飛ばします。最新のコミットメント取引をブロードキャストし、その出力はチャネルを開いた際に交換したベースポイントから導出された鍵に支払われ、あなたが指定したアドレスには支払われません。注意深く設定したスクリプトは、ピアの許可を必要としない唯一の出口には何の効果もありません。意図するクローズのためにそれを設定し、意図しないクローズのためにチャネルバックアップを保管してください。