Aller au contenu
buybitcoinsmart

Glossaire / Lightning et couche 2

HTLC poussière

Qu'est-ce qu'un HTLC poussière ?
Un HTLC poussière est un paiement Lightning trop petit pour obtenir sa propre sortie dans la transaction d'engagement, si bien qu'une fermeture forcée le remet aux mineurs plutôt qu'à l'un ou l'autre des partenaires du canal.

Les canaux Lightning refusent de créer une sortie pour tout paiement en cours valant moins que la limite de poussière plus ses frais de sauvetage, et ce montant devient des frais de minage. Avec une limite de poussière de 546 satoshis et un taux de frais de 5 000 par kilo-unité de poids, tout ce qui est sous 3 861 satoshis est écarté. L'argent n'est perdu que si le canal se ferme de force pendant que ce paiement est encore en cours.

Comment cela fonctionne

Un HTLC poussière résulte d'une arithmétique et non d'un jugement : la limite de poussière choisie par le propriétaire du canal, plus ce que coûterait la réclamation du paiement on-chain.

Le BOLT 3 qualifie de trimmed la sortie écartée. Pour un paiement que vous proposez, le canal vérifie le montant moins les frais d'expiration du HTLC ; pour un paiement que vous recevez, le montant moins les frais de succès du HTLC. Ces deux transactions pèsent 663 et 703 unités de poids sur un canal sans ancres, donc à un feerate_per_kw de 5 000 elles coûtent 3 315 et 3 515 satoshis. Face à une limite de poussière de 546 satoshis, le seuil des paiements offerts s'établit à 3 861 satoshis et celui des paiements reçus à 4 061.

L'exemple détaillé du BOLT 3 montre la perte. Quatre paiements sont en cours à ce taux de frais : des HTLC offerts de 5 000 et 1 000 satoshis, des HTLC reçus de 7 000 et 800. Le 5 000 et le 7 000 obtiennent chacun une sortie. Le 1 000 et le 800 sont écartés, et les frais de la transaction d'engagement passent d'une base de 5 340 satoshis à 7 140. Ces 1 800 satoshis supplémentaires correspondent exactement aux deux paiements disparus, versés à qui mine la fermeture.

Chaque partie choisit son propre dust_limit_satoshis, de sorte que les deux transactions d'engagement d'un même canal peuvent diverger sur les paiements considérés comme poussière. Le BOLT 2 oblige un nœud à faire échouer le canal si son pair propose une valeur inférieure à 354 satoshis, et lui permet de refuser une valeur qu'il juge trop élevée, car un pair doté d'une limite haute peut publier un engagement rempli de paiements écartés.

Les canaux à ancres ont changé l'arithmétique. Sous option_anchors ou zero_fee_commitments, les transactions HTLC de second niveau ne portent aucun frais, donc elles cessent d'alimenter le calcul et le seuil se réduit à la seule limite de poussière. Le BOLT 3 demande aux nœuds d'élever délibérément le dust_limit_satoshis dans ce cas, car une sortie qui dépasse la limite sans pouvoir être balayée aux taux de frais réels ne fait que polluer l'ensemble des UTXO.

Le BOLT 2 borne aussi le total plutôt que chaque paiement. Au-delà du max_dust_htlc_exposure_msat d'un nœud, lui-même affaire de politique, le nœud devrait faire échouer un HTLC entrant une fois engagé et ne pas révéler la préimage, transformant une perte possible en un échec net.

Où cela se voit

Les HTLC poussière apparaissent dans le modèle de conservation d'un portefeuille plutôt que dans son interface, et les 41 avis de portefeuilles publiés ici se divisent nettement sur ce point.

Phoenix fait tourner un véritable nœud Lightning en auto-conservation sur votre téléphone, donc ses canaux sont les vôtres et cette exposition aussi ; ACINQ facture 0,4 % plus 4 satoshis pour envoyer, et chacun de ces envois est un HTLC que l'écartement peut atteindre. Le volet Lightning de BlueWallet est un compte sur un serveur LNDHub, donc l'exploitant détient les canaux : vous ne portez jamais un paiement écarté, et vous portez cet exploitant à la place.

L'écartement réapparaît au moment de la fermeture. Le BOLT 2 n'autorise la négociation de fermeture que lorsqu'il ne reste plus aucun HTLC dans l'une ou l'autre transaction d'engagement, HTLC poussière compris, si bien qu'un paiement de 300 satoshis qu'aucun observateur on-chain ne peut voir maintient encore ouverte une fermeture coopérative.

HTLC poussière vs limite de poussière

La limite de poussière est un nombre qu'un nœud choisit ; un HTLC poussière est un paiement qui a perdu une comparaison face à ce nombre plus des frais.

La limite est un paramètre de canal, fixé dans open_channel et accept_channel et porté par aucun message ultérieur. L'écartement est un résultat qui évolue : sans ancres, le seuil suit le feerate_per_kw, donc un même paiement de 2 500 satoshis est une sortie réelle dans une mempool calme et se trouve écarté dans une mempool chargée.

Les deux interviennent aussi à des étapes différentes. Les seuils de Bitcoin Core, 546 satoshis pour une sortie legacy et 330 pour pay-to-witness-script-hash, relèvent de la politique de relais et concernent des transactions qui existent. Un HTLC écarté n'atteint jamais ce test, car sa sortie n'est jamais écrite.

À ne pas confondre avec

Questions fréquentes

Un HTLC poussière peut-il réellement me faire perdre de l'argent ?

Oui, mais seulement le montant écarté, et seulement si le canal se ferme de force pendant que ce paiement est encore en cours. Un paiement qui se règle ou échoue normalement n'est pas touché, car l'écartement ne fait que déterminer à quoi ressemblerait une transaction d'engagement si quelqu'un la publiait.

Pourquoi mon nœud Lightning a-t-il refusé un paiement minuscule ?

L'une des raisons est le plafond d'exposition maximale aux HTLC poussière. Le BOLT 2 demande à un nœud de faire échouer un tel HTLC une fois engagé, et de retenir la préimage, lorsque l'accepter porterait le solde total écarté du canal au-delà de la limite fixée par l'exploitant.

Les canaux à ancres éliminent-ils les HTLC poussière ?

Non. Les canaux à ancres excluent les frais de HTLC de second niveau du calcul, de sorte que le seuil revient à la simple limite de poussière, ce qui explique pourquoi le BOLT 3 indique qu'il est judicieux de relever `dust_limit_satoshis` pour couvrir ce coût de second niveau, et pourquoi un nœud devrait autoriser son pair à utiliser une limite supérieure aux valeurs de Bitcoin Core, qui vont de 240 à 546 satoshis.

À lire ensuite

Termes associés

Plus de termes : Lightning et couche 2

Lire cette page en anglais