用語集 / ライトニングとレイヤー2
ゴシッププロトコル
- ゴシッププロトコルとは?
- ゴシッププロトコルとは、ライトニングのノードが署名済みのチャネルとノードのアナウンスをお互いにフラッディングして広める仕組みであり、これにより各ノードはサーバーに問い合わせることなく自らネットワークの地図を構築できます。
ライトニングにはディレクトリが存在しないため、ノードは何が存在するかを互いに伝え合い、各ノードが自身のコピーを保持します。BOLT 7ではそのための3つのメッセージが定義されており、受信したノードは、資金提供のアウトプットの確認数が6未満のチャネルを無視すべきです。ウォレットがルートを見つけられるのは、ウォレット自身、またはウォレットが信頼するノードが、そのやり取りを先に受信していたからです。
仕組み
ゴシッププロトコルは3種類のメッセージを伝達し、それぞれがチェーン上または署名によって何かを証明しなければ、ピアはそれを転送しません。
channel_announcement(タイプ256)はチャネルが存在することを主張します。受信したノードはブロックチェーン上で資金提供のアウトプットを照合します。アウトプットが期待されるP2WSHスクリプトでないメッセージ、またはすでに使用済みのメッセージは無視しなければならず、アウトプットの確認数が6未満のメッセージは、ノードが単にブロックに追いついていないだけかもしれないほど十分に新しい場合を除き、無視すべきです。したがってチャネルのアナウンスには実際のオンチェーン取引のコストがかかり、これがスパム対策の設計のすべてです。誰も1,000のチャネルを無償ででっち上げることはできません。
node_announcement(タイプ257)は運営者自身の情報を伝達します。既知のチャネルに関連付けられていないノードは、「to avoid trivial denial of service attacks」という理由で無視されるため、何の利害も持たない運営者が誰かの地図に載ることはありません。
channel_update(タイプ258)は方向ごとに1つずつ価格を伝達し、実際に変化するメッセージです。手数料と有効期限デルタはここに含まれ、運営者が手数料を引き上げる場合、新しい情報が伝わる必要があるため、仕様は同じ運営者が少なくとも10分間は旧パラメータの受け入れを続けることを推奨しています。
伝播は意図的にゆっくりと行われます。ノードは受信した内容を保存し、同じ送信元からの古い更新を置き換え、60秒ごとにバッチを一括送信します。仕様はこれを時間差ブロードキャストと呼び、1人の多忙な運営者が全員の帯域幅を埋め尽くすことを防ぎます。
忘却についても規定されています。チャネルの資金提供のアウトプットが使用されると、ノードはチャネルを削除する前に72ブロック分の確認を待つため、spliceはクローズに見えるのではなく、自身をアナウンスする時間を持てます。別途、どちらかの方向の最新のchannel_updateが2週間(1,209,600秒)より古い場合、ノードはチャネルを完全に除去してもかまいません。
どこで見られるか
ゴシップがあるため、起動したばかりのライトニングノードはしばらく役に立たず、その後突然役に立つようになります。
接続すると、ノードは不足しているものを要求します。query_channel_range(タイプ263)で一定のブロック範囲にどのチャネルが存在するかを把握し、query_short_channel_ids(261)で一度も見たことのない特定のチャネルを取得し、gossip_timestamp_filter(265)でそれ以降に送信されるすべてに時間枠を設定します。最後のメッセージは設定ではなくスイッチです。これを送信するまで、ピアは自身が生成したもの以外を転送しないため、小型デバイスは小型のままでいられます。
その影響は手数料としてウォレットに現れます。ルートの見積もりは、ウォレットがたまたま保持しているchannel_updateメッセージから組み立てられるため、古い情報では試行が失敗し、表示された価格と一致しない価格になります。スマートフォンのウォレットは他者の地図に依存します。Phoenixは端末上で真の自己管理型ノードを実行しますが、ACINQ自身のノードを経由して接続するため、当サイトのレビューに記録されているとおり、ACINQが支払いの宛先と金額を知ることになります。カストディ型の口座は企業がルーティングするため、ゴシップを完全に省略します。
ゴシッププロトコルvs P2Pメッセージ
ゴシッププロトコルはライトニングノード間で動作し、ビットコインのP2Pメッセージはビットコインノード間で動作します。両者はフラッディングという習慣以外に何も共有しません。
ビットコインノードはinv、getdata、txなどのコマンドで取引とブロックを中継し、誰のチャネルについても何も知りません。ライトニングのゴシップは別のやり取りであり、メッセージタイプ256から265を伝達し、アナウンスされた資金提供のアウトプットが実在し未使用であることを確認するためにのみブロックチェーンにアクセスします。支払いがゴシップで伝達されることは決してありません。金額と宛先は中間ノードが読めないオニオンパケット内を移動するため、公開された地図はチャネルがどこにあるかを示すだけで、何がその中を流れたかは示しません。