本文へスキップ
buybitcoinsmart

用語集 / ライトニングとレイヤー2

ダストHTLC

ダストHTLCとは?
ダストHTLCとは、コミットメントトランザクションで独自のアウトプットを持てないほど少額のライトニング決済のことで、強制クローズが起きると、その金額はチャネルの当事者のどちらでもなくマイナーに渡ります。

ライトニングチャネルは、ダストリミットとそれを回収する手数料を足した額を下回る進行中の支払いについては出力を作成せず、その額はマイナーへの手数料になります。ダストリミットが546 サトシ、手数料率が5,000(キロウェイトあたり)の場合、3,861 サトシ未満はすべてトリミングされます。資金が失われるのは、その支払いがまだ移動中にチャネルが強制クローズされた場合だけです。

仕組み

ダストHTLCは判断ではなく計算で決まります。チャネルの所有者が選んだダストリミットに、その支払いをオンチェーンで受け取る際のコストを加えたものです。

BOLT 3は、破棄される出力をトリミング済み(trimmed)と呼びます。自分が提供する支払いでは、チャネルは金額からHTLC-timeoutトランザクションの手数料を引いた額を確認します。自分が受け取る支払いでは、金額からHTLC-successトランザクションの手数料を引いた額を確認します。アンカーなしのチャネルではこれら2つのトランザクションの重さが663と703ウェイトユニットなので、feerate_per_kwが5,000の場合、費用は3,315と3,515 サトシになります。ダストリミット546 サトシに対して、提供側のしきい値は3,861 サトシ、受取側のしきい値は4,061になります。

BOLT 3の計算例がその損失を示しています。その手数料率で進行中の支払いが4件あります。提供するHTLCが5,000と1,000 サトシ、受け取るHTLCが7,000と800です。5,000と7,000にはそれぞれ出力が作られます。1,000と800はトリミングされ、コミットメントトランザクションの手数料は基準値の5,340 サトシから7,140に上がります。この増えた1,800 サトシは、消えた2件の支払いに正確に対応し、クローズをマイニングする者に支払われます。

各側はそれぞれ独自のdust_limit_satoshisを選ぶため、1つのチャネルの2つのコミットメントトランザクションは、どの支払いがダストに数えられるかについて食い違うことがあります。BOLT 2は、相手側が354 サトシを下回る値を提案した場合にノードがそのチャネルを失敗させ、また、大きすぎると判断した値を拒否できるようにしています。上限の高い相手側は、トリミングされた支払いで埋め尽くされたコミットメントを公開できるからです。

アンカーチャネルはこの計算を変えました。option_anchorsまたはzero_fee_commitmentsの下では、第二段階のHTLCトランザクションに手数料がかからないため、計算に寄与しなくなり、しきい値はダストリミットそのものまで下がります。BOLT 3は、その場合にdust_limit_satoshisを意図的に引き上げるようノードに指示しています。リミットを超えていても実際の手数料率ではスイープできない出力は、UTXOセットを汚すだけだからです。

BOLT 2はまた、各支払いではなく合計を制限します。ノードのmax_dust_htlc_exposure_msat(それ自体がポリシーの問題です)を超えると、ノードはコミットされた時点で受信HTLCを失敗させるべきであり、プリイメージを明かすべきではありません。これにより、起こり得た損失がきれいな失敗に変わります。

どこで見られるか

ダストHTLCはウォレットのインターフェースではなくカストディモデルに現れ、当サイトの41件のウォレットレビューはこの点で明確に分かれます。

Phoenixは端末上で実際の自己管理型ライトニングノードを稼働させるため、チャネルは自分のものであり、このエクスポージャーも自分のものです。ACINQは送金に0.4%に加えて4 サトシを請求し、その送金の1件1件がトリミングの対象になり得るHTLCです。BlueWalletのライトニング側はLNDHubサーバー上のアカウントなので、チャネルは運営者が保持します。トリミングされた支払いのリスクを負うことはなく、代わりにその運営者のリスクを負うことになります。

トリミングはクローズの時点でも再び現れます。BOLT 2は、ダストHTLCを含め、どちらのコミットメントトランザクションにもHTLCが残っていない場合にのみクローズの交渉を認めています。そのため、オンチェーンの観察者には見えない300 サトシの支払いでも、協調クローズは保留されたままになります。

ダストHTLC vsダストリミット

ダストリミットはノードが選ぶ数値です。ダストHTLCは、その数値に手数料を加えたものとの比較に敗れた支払いです。

リミットはチャネルのパラメータであり、open_channelとaccept_channelで設定され、それ以降のメッセージには引き継がれません。トリミングは変動する結果です。アンカーがなければしきい値はfeerate_per_kwに追随するため、同じ2,500 サトシの支払いでも、mempoolが空いていれば実際の出力となり、混雑していればトリミングされます。

両者も適用される段階は異なります。Bitcoin Coreのしきい値、すなわちレガシー出力では546 サトシ、pay-to-witness-script-hashでは330は、存在するトランザクションに関するリレーポリシーです。トリミングされたHTLCは出力が書かれないため、このテストに到達することはありません。

混同しやすい用語

よくある質問

ダストHTLCで実際に資金を失うことはありますか?

はい。ただし失われるのはトリミングされた金額だけで、しかもその決済がまだ処理中の間にチャネルが強制クローズした場合に限られます。正常に決済または失敗した決済は影響を受けません。トリミングは、誰かが公開した場合にコミットメントトランザクションがどうなるかを決めるだけだからです。

ライトニングノードが少額の決済を拒否したのはなぜですか?

理由の1つは、ダストHTLCの最大エクスポージャーの上限です。BOLT 2は、受け入れることでチャネルのトリミングされた金額の合計が運営者の設定した上限を超える場合、ノードはコミットされた時点でそのHTLCを失敗させ、プリイメージを保留するよう指示しています。

アンカーチャネルはダストHTLCをなくしますか?

いいえ。アンカーチャネルでは第2段階のHTLC手数料が計算から除外されるため、しきい値は通常のダストリミットに戻ります。BOLT 3が、第2段階のそのコストを賄うためにdust_limit_satoshisを引き上げることに意味があると述べているのも、ノードがピアに対してBitcoin Core自身の値である240サトシから546サトシの範囲を上回る上限を認めるべきだというのも、そのためです。

次に読む

関連用語

ライトニングとレイヤー2のその他の用語

このページを英語で読む