用語集 / ライトニングとレイヤー2
チャネルアナウンス
- チャネルアナウンスとは?
- チャネルアナウンスとは、公開チャネルが存在することをライトニングネットワークに伝える署名済みのゴシップメッセージであり、4つの署名によってファンディングアウトプットの所有権を証明します。
公開されたライトニングチャネルはすべて、このメッセージのいずれかを通じてルーティンググラフに参加し、1つのチャネルにつき有効なアナウンスは1つしか存在できません。ファンディングトランザクションが6回の承認を得るまで送信できず、ピアはアウトプットが使用された後72ブロックでチャネルを忘れます。アナウンスすることはプライバシーを犠牲にします。というのも、このメッセージはチャネルに資金を提供しているオンチェーンのアウトプットを公開し、それを自分のノードの公開鍵と結びつけるからです。
仕組み
チャネルアナウンスを偽造するにはコストがかかり、それこそがこの設計の狙いです。
ゴシップの送信は無料なので、そうでなければノードが架空のチャネルでネットワークを溢れさせることができてしまいます。BOLT 7は、すべての主張をブロックチェーンに対して検証可能にすることでこれを防ぎます。メッセージはタイプ256で、特定の1つのアウトプットを指すshort_channel_idを含みます。これはブロック高の3バイト、トランザクションインデックスの3バイト、アウトプットインデックスの2バイトからなります。受信したノードはそのアウトプットを参照し、指定された2つのBitcoinキーに支払う未使用のP2WSHでない限り、そのアナウンスを破棄します。
4つの署名が先頭に付きます。2つはノードの識別キーから、2つはオンチェーンのアウトプットを管理するファンディング鍵(bitcoin_key_1とbitcoin_key_2)から得られます。4つとも同じハッシュに署名します。これはバイトオフセット256からメッセージの末尾までを対象に計算された二重SHA256ハッシュです。ノードキーとBitcoinキーを対応させることで、チャネルをアナウンスする2つのノードが、それを資金提供した当事者であり、他人のアウトプットを指す見知らぬ者ではないことが証明されます。またnode_id_1は2つの圧縮公開鍵のうち辞書順で小さい方でなければならず、受信したノードはこの順序に反するアナウンスをすべて無視しなければなりません。
アナウンスはオプトインであり、チャネルを開設する際にannounce_channelビットで設定します。設定されていれば、ファンディングトランザクションが十分な深さに達した時点でピア同士がannouncement_signatures(タイプ259)を交換し、その後はどちらの当事者もその結果をブロードキャストできます。スプライスは新しいトランザクションに対する新しいアナウンスを生成します。そのためノードはファンディングアウトプットが使用された後、チャネルを忘れるまでに72ブロック待ちます。この使用はクローズではなくサイズ変更かもしれないからです。
どこで見られるか
チャネルアナウンスは、ライトニングのエクスプローラーがネットワークグラフを描くときに読み取っているものです。
各チャネルの横に表示される識別子は、メッセージからそのまま取り出したものです。short_channel_idが539268x845x1と書かれている場合、ブロック539268内のインデックス845のトランザクションのアウトプット1を意味するので、誰でもそのアウトプットをオンチェーンで確認できます。アナウンスには一覧と呼べるものは一切含まれません。手数料も容量も運営者の名前もありません。少なくとも一方が手数料と有効期限の差分を含むchannel_updateを送るまで、チャネルは利用できず、ノード名は別途node_announcementで届きます。
この分離が、チャネルが存在し続けているのにエクスプローラーから消える理由を説明します。どちらかの方向で最新のchannel_updateが2週間(1209600秒)より古い場合、ノードはそのチャネルを自身のビューから削除することがあります。アナウンスが自動で更新されることはないため、運営者が条件に再署名し続ける間だけチャネルはグラフ上に残ります。
ウォレット側では、チャネルアナウンスを目にするのは、主にそれが存在しないときです。チャネルのアナウンスが必要になるのは、見知らぬ人にそのチャネルを通じて支払いをルーティングしてもらいたい場合だけであり、スマートフォンのウォレットは中継点となるためではなく、支払いと受け取りのために存在します。そのため当サイトのPhoenixとMuunのレビューで実際的な問題となるのは、公開された手数料表とバックアップファイルであり、公開グラフ上の位置ではありません。
チャネルアナウンスvsチャネル容量
チャネルアナウンスはチャネルが存在することを証明するのに対し、チャネル容量はその中にあるサトシの数であり、メッセージには金額がまったく記載されていません。そのフィールドは4つの署名、機能ベクトル、チェーンハッシュ、ショートチャネルID、4つの公開鍵です。容量の数値を引用する人は、アナウンスをチェーンデータと結合し、識別子が指すアウトプットの値を読み取っています。アナウンスされていないチャネルに容量はあっても公開された数値がないのはそのためです。どのアウトプットを読むべきかをネットワークに伝えるものが何もないからです。