用語集 / ライトニングとレイヤー2
ショートチャネルID
別名はscidです。
- ショートチャネルIDとは?
- ショートチャネルIDは、Lightningがチャネルを指し示すために用いる8バイトのポインタであり、ファンディングトランザクションのブロック高、そのブロック内でのインデックス、および出力インデックスをまとめたものです。
Lightningは、公開チャネルを任意のラベルではなく、ファンディング出力がブロックチェーン上のどこにあるかによって指し示します。3バイトがブロック高、3バイトがトランザクションのインデックス、2バイトが出力のインデックスを担い、合計で64ビットとなり、人間向けには539268x845x1のように表記されます。この座標があることで、ウォレットが経路として使っているチャネルを、誰かのダッシュボードを信頼することなくチェーン上で検証できます。
仕組み
ショートチャネルIDの3つの構成要素は、最上位から順に連結されます。ファンディングトランザクションのブロック高、そのブロック内での当該トランザクションのインデックス、そしてチャネルに資金を提供する出力のインデックスです。固定幅により、ブロック高とトランザクションのインデックスは16,777,215、出力のインデックスは65,535が上限となります。
人向けの表記では、各数値は10進数で表記され、小文字のxで連結されます。したがって、ブロック高539,268のブロック内でインデックス845のトランザクションの出力1にあるチャネルは、539268x845x1となります。仕様の理由は次のとおりです。小文字のxはほとんどのフォントで数字よりも明らかに小さいため、目で各部分を区切ることができ、ダブルクリック1回で識別子全体を選択できます。
パックされた状態では単なる64ビットの数値であり、BOLT 11のテストベクターがそれを示しています。ルートヒント66051x263430x1800は、バイト列01 02 03 04 05 06 07 08の順であり、これは66051が0x010203、263430が0x040506、1800が0x0708であるためです。
ハッシュではなく位置であるため、ショートチャネルIDは、指し示すブロックが変わると正しくなくなります。そのため、チャネルはファンディングトランザクションが少なくとも6回の承認を得るまでアナウンスされず、ノードは出力の承認がそれより少ないアナウンスを無視すべきです。スプライシングも識別子を変えます。スプライスされたチャネルは、スプライストランザクションのショートチャネルIDの下で再びアナウンスされ、ノードは古い識別子をなお使う支払いを中継し続けます。
誰もアナウンスしていないチャネルには公開の識別子がないため、ピア同士は代わりにエイリアスを交換します。エイリアスを含む更新は、dont_forwardフラグを立てなければならず、プライバシーのため決して転送されてはなりません。
どこで目にするか
ショートチャネルIDはLightningゴシップのアドレッシング層であり、特定の1つのチャネルに関するあらゆるメッセージに現れます。
メッセージタイプ259、announcement_signaturesは、2つのピアがチャネルの公開に合意したときに1つを含みます。タイプ256、channel_announcementは、他のすべてのノードがオンチェーンでファンディング出力を見つけるために使うものを含みます。タイプ258、channel_updateは、手数料または有効期限が変わるたびに、方向ごとに1回それを繰り返します。タイプ261、query_short_channel_idsは、それらのリストの背後にあるアナウンスをピアに要求するもので、符号化バイト0の下で昇順の配列として送信されます。符号化バイト1はかつてzlib圧縮を意味し、現在は完全に禁止されています。ノードは、どちらかの方向で最新の更新が2週間、すなわち1,209,600秒より古いチャネルをプルーニングできます。
一般のユーザーがショートチャネルIDに出会う唯一の場所は支払い要求です。BOLT 11インボイスのrフィールドにはルートヒントが含まれ、各ホップはノードの公開鍵、64ビットのショートチャネルID、2つの手数料の数値、および有効期限の差分です。仕様の実例は589390x3312x1を指しています。
ショートチャネルID vsアウトポイント
ショートチャネルIDとアウトポイントはどちらも1つのトランザクション出力を指し示し、正反対の方向からそれを行います。アウトポイントは36バイトであり、32バイトのトランザクションIDに4バイトのインデックスを続けたもので、出力を作成したトランザクションによってその出力を指します。ショートチャネルIDは8バイトであり、同じ出力をそれが着地した位置によって指します。
そのトレードオフはサイズと安定性です。アウトポイントはトランザクションが存在した瞬間から、未承認のものも含めて有効であり、決して変わりません。ショートチャネルIDはトランザクションがブロックに入るまで存在せず、それを別のブロック高や位置で再マイニングする再編成が起きると、同じチャネルに対して異なる識別子が生じます。Lightningがそれを受け入れるのは、座標が出力を見つけるための指示を兼ねており、チャネルごとにゴシップする8バイトが36よりもはるかに安価だからです。