用語集 / ライトニングとレイヤー2
フィーチャービット
- フィーチャービットとは?
- フィーチャービットは、あるノードが特定のプロトコル拡張に対応していることを他のライトニングノードに伝えるもので、奇数は任意であることを、偶数は必須であることを示します。
ライトニングにはピアが比較できるバージョン番号がないため、2つのノードは接続した瞬間にビットフィールドを交換することで、互いに何ができるかを判断します。BOLT 9は、ビット0からビット67までにわたる25組の名前付きペアを割り当てており、1つのペアの両方のビットを設定してはなりません。あるウォレットが拒否したインボイスを別のウォレットが支払える場合、欠けているフィーチャービットは確認すべき点の1つです。
仕組み
フィーチャービットはビットフィールドの最下位ビットから数え、ビット0から始まります。このビットは値0x1を持ち、偶数として扱われます。
フィーチャービットはペアで割り当てられ、このペアリングが要点のすべてです。奇数ビットはそのノードが機能に対応していることを、偶数ビットはその機能を必須としていることを意味します。したがって、ある機能は任意として提供を開始し、目立たないまま広まり、後に必須へと格上げされることがあります。BOLT 9によれば、旧式のノードはこれを拒否するため、不一致は支払いの途中ではなく2つのノードが出会ったときに明らかになります。要件は残りを明快に述べています。起点ノードは1つのペアの両方のビットを設定してはならず、それでも両方のビットを受け取った受信ノードは、その機能を必須として扱います。
一部の機能は他の機能に依存しており、送信側が依存関係の連鎖全体を担います。基本のマルチパート支払いはビット16と17を使用し、payment_secretに依存します。zeroconfチャネルは50と51を使用し、option_scid_aliasに依存します。66と67のoption_onion_messages_only_channelsは、通常のオニオンメッセージに依存します。起点ノードは推移的な依存関係をすべて設定しなければならないため、単一の機能ゲートの背後にあるコードは、依存するビットを再検証するのではなく、それらが存在すると見なせます。
25組のうち5組は、現在ASSUMEDとのみ記載されています。0/1、8/9、12/13、14/15、44/45です。いずれも非常に広まったため、すべてのノードが持っていると見なされ、その意味は仕様の以前のリビジョンにのみ残っています。表では番号も飛んでおり、2/3、20/21、30/31、32/33、52から59、64/65には何も割り当てられていないため、欠番は普通のことです。
どこに現れるか
フィーチャービットはいくつかの異なる場所を伝わり、BOLT 9の表のContext列が、各ペアがどの場所に属するかを示しています。25行のうち6行は空欄です。
Iは2つのピアが接続時に交換するinitメッセージ、Nはゴシップグラフにブロードキャストされるnode_announcement、Cはchannel_announcement、9はBOLT 11のインボイス、Bはブラインド経路のallowed_featuresフィールド、Tはチャネル開設時に合意されるchannel_typeを表します。多くのビットは1つのコンテキストにのみ現れます。ビット48と49のoption_payment_metadataはインボイスのみに現れ、22と23のoption_anchorsはinit、ゴシップ、チャネルタイプには現れますが、インボイスには決して現れません。
2つのコンテキストが矛盾する場合、インボイスが優先されます。BOLT 9の根拠は、node_announcementとBOLT 11の両方で伝えられるフラグについて、インボイスの値がアナウンスされた値より優先されると述べています。そのため、ウォレットは、宛先が数時間前にゴシップネットワークへアナウンスした内容ではなく、あなたが貼り付けたインボイスから機能を読み取ります。
ACINQが自身のEclair実装で構築したPhoenixは、あなたのスマートフォン上で実際のノードを動かすため、マルチパート支払いやブラインド経路を受け入れるかどうかは、マーケティングページではなく、ピアと交換したビットフィールドによって決まります。Muunはオンチェーンとライトニングを1つの残高として表示し、そのライトニング支払いも依然としてインボイスのビット次第です。
フィーチャービットvsバージョンビット
フィーチャービットは2つのライトニングピア間で機能を交渉します。バージョンビットはビットコインのブロックヘッダーでソフトフォークをシグナリングします。BIP-9はマイナーにヘッダーのバージョンフィールドのビット0から28を与え、メインネット上の2,016ブロックのウィンドウのうち1,916でデプロイメントを確定させ、その後は続くすべてのブロックで有効になります。フィーチャービットは誰も拘束しません。それは2つのピア間の主張であり、ある接続では真で次の接続では偽であり、しきい値もタイムアウトもネットワーク全体のアクティベーションもありません。ライトニングは2つのノードが互いのために何を行うかを交渉し、ビットコインは全員が何を受け入れなければならないかを決めます。