用語集 / ライトニングとレイヤー2
Maximum HTLC value in flight
- Maximum HTLC value in flightとは?
- Maximum HTLC value in flightは、各Lightningピアが、相手側が同時に保留できる支払いの合計額に対して設定する上限です。
上限は単一のフィールドmax_htlc_value_in_flight_msatで、チャネルを開くときに合意され、以後すべての支払いで適用されます。Eclairは既定値として5,000,000,000ミリサトシまたはチャネル容量の45%のいずれか小さい方を設定するため、60mBTCのチャネルは27mBTCになります。大きなLightningの支払いが、見た目には十分な資金があるチャネルで失敗することがあり、多くの場合その理由はこれです。
仕組み
Maximum HTLC value in flightは課されるものではなく交渉されるものです。各側が、相手に守ってほしい上限を宣言します。
このフィールドはopen_channel(メッセージタイプ32)で送られ、accept_channel(タイプ33)で返されます。デュアルファンディングのチャネルではopen_channel2(64)とaccept_channel2(65)で運ばれます。BOLT 2はこれを"a cap on total value of outstanding HTLCs offered by the remote node, which allows the local node to limit its exposure to HTLCs"と説明しています。方向に注意してください。送る数字が制約するのは自分ではなくピアであるため、1つのチャネルには一致する必要のない2つの上限が存在します。
適用は両端とも容赦のないものです。送信側ノードは、すでに提示した合計額に新しい支払いを加えると相手の上限を超える場合、その支払いを追加してはなりません。また、ピアが規則に違反した受信側ノードには、警告を発して接続を切断するか、チャネルを直ちに失敗させることが求められます。姉妹フィールドのmax_accepted_htlcsは保留中の支払いを測定せずに数えるもので、仕様はこれに483という厳格な上限を設け、チャネルがゼロ手数料コミットメントを使用する場合は114まで下がります。値の上限にはこれに相当する天井がありません。これは純粋にノードのポリシーであり、仕様上の唯一の防御は、受信側が数値が小さすぎると見えるチャネルを拒否できることです。
動いていない資金は影響を受けません。上限は移動中の支払い、すなわちチャネルが不適切に閉じられた場合にオンチェーンで解きほぐす必要がある支払いのみを数えるため、チャネルは決済済み残高として上限の何倍も保持できます。
どこで見られるか
Maximum HTLC value in flightは公開のLightningグラフには決して現れないため、どのチャネルエクスプローラーもこれを表示しません。
それが漏れるのは1つの特定の経路です。BOLT 7は、channel_updateを公開するノードに対し、転送する最大の単一支払いであるhtlc_maximum_msatを、ピアから受け取ったmax_htlc_value_in_flight_msat以下に設定することを求めています。したがって、非公開の数値が公開の数値に固い天井を課します。慎重なピアは公表される数値を押し下げますが、ノードはピアが許すより少なく公表する自由があります。
既定値は実装間で異なり、それが問題になります。Eclairのリファレンス設定はmax-htlc-value-in-flight-msatを5,000,000,000に、max-htlc-value-in-flight-percentを45に設定し、小さい方を適用し、この設定は方向ごとであるため、両方を合わせると数値の2倍に達することがあると注記しています。またEclairはmax-accepted-htlcsを30に設定する一方、LNDのサンプル設定はdefault-remote-max-htlcsを仕様の最大値である483にしています。未変更の既定値で運用する2人のオペレーターは、数だけでも16倍の差が生じ得ます。
購入者にとっての症状は、説明なく失敗する支払いです。金額を分割しても、各部分が同じチャネルを通る場合は救われません。上限はそれらを合算するためです。これらのeclair既定値を公開しているACINQは、当サイトでレビューしているスマートフォンウォレットPhoenixも提供しています。ユーザーに代わってチャネルを開くウォレットは、こうした数値をユーザーのために選びます。
Maximum HTLC value in flight vsチャネル容量
チャネル容量はチャネルのファンディング出力にロックされた額であり、Maximum HTLC value in flightはその額のうち、ある瞬間に支払いの途中にあってよい額を規定します。
容量は公開の事実であり、ファンディングトランザクションによって固定され、ネットワーク全体に告知されます。移動中の上限は非公開で、2つのピアの間でのみ交換され、方向ごとに別々に設定され、算術ではなくポリシーによって選ばれます。Eclairの割合による既定値はその差を具体的に示します。45%は各方向に個別に適用されるため、容量の半分超が一度に一方向へ移動することを禁じられます。自分の側に十分な余裕があるように見えるチャネルでも支払いを拒否することがあり、それを拒否した数値は調べようがありません。