Glossario / Lightning e layer 2
Dust HTLC
- Che cos'è un dust HTLC?
- Un dust HTLC è un pagamento Lightning troppo piccolo per avere un proprio output nella transazione di commitment, quindi una chiusura forzata lo consegna ai miner invece che a una delle due parti del canale.
I canali Lightning rifiutano di creare un output per qualsiasi pagamento in corso che valga meno del dust limit più la commissione necessaria a riscattarlo, e quell'importo diventa commissione per i miner. Con un dust limit di 546 satoshi e una commissione di 5.000 per kiloweight, tutto ciò che vale meno di 3.861 satoshi viene eliminato. Il denaro si perde solo se il canale si chiude forzatamente mentre quel pagamento è ancora in corso.
Come funziona
Un dust HTLC è deciso dall'aritmetica, non da una valutazione: il dust limit scelto dal proprietario del canale, più quanto costerebbe riscattare il pagamento on-chain.
BOLT 3 chiama trimmed l'output scartato. Per un pagamento che stai offrendo, il canale verifica l'importo meno la commissione della transazione HTLC-timeout; per uno che stai ricevendo, l'importo meno la commissione della transazione HTLC-success. Quelle due transazioni pesano 663 e 703 unità di peso su un canale senza anchor, quindi con un feerate_per_kw di 5.000 costano 3.315 e 3.515 satoshi. Rispetto a un dust limit di 546 satoshi, la soglia per i pagamenti offerti arriva a 3.861 satoshi e quella per i pagamenti ricevuti a 4.061.
L'esempio pratico di BOLT 3 mostra la perdita. Con quella commissione per kiloweight ci sono quattro pagamenti in corso: HTLC offerti di 5.000 e 1.000 satoshi, HTLC ricevuti di 7.000 e 800. Il pagamento da 5.000 e quello da 7.000 ottengono ciascuno un output. Quelli da 1.000 e da 800 vengono eliminati, e la commissione della transazione di commitment sale da una base di 5.340 satoshi a 7.140. Quei 1.800 satoshi in più sono esattamente i due pagamenti svaniti, pagati a chi esegue il mining della chiusura.
Ogni parte sceglie il proprio dust_limit_satoshis, quindi le due transazioni di commitment di uno stesso canale possono non concordare su quali pagamenti contano come dust. BOLT 2 impone a un nodo di far fallire il canale se il peer propone un valore inferiore a 354 satoshi, e gli consente di rifiutarne uno che ritiene troppo alto, dato che un peer con un limite alto può pubblicare un commitment pieno di pagamenti eliminati.
Gli anchor channel hanno cambiato l'aritmetica. Con option_anchors o zero_fee_commitments le transazioni HTLC di secondo stadio non portano commissione, quindi smettono di alimentare il calcolo e la soglia scende al solo dust limit. In questo caso BOLT 3 indica ai nodi di alzare dust_limit_satoshis deliberatamente, dato che un output che supera il limite ma non può essere riscattata a commissioni di mercato reali inquina soltanto l'insieme degli UTXO.
BOLT 2 limita anche il totale, non ogni singolo pagamento. Oltre il max_dust_htlc_exposure_msat di un nodo, che è a sua volta una questione di policy, il nodo dovrebbe far fallire un HTLC in entrata una volta inserito nel commitment e non dovrebbe rivelare la preimage, trasformando una possibile perdita in un fallimento netto.
Dove lo vedi
I dust HTLC compaiono nel modello di custodia di un wallet più che nella sua interfaccia, e le 41 recensioni di wallet presenti qui si dividono nettamente su questo punto.
Phoenix esegue un vero nodo Lightning in autocustodia sul tuo smartphone, quindi i canali sono tuoi e lo è anche questa esposizione; ACINQ applica 0,4% più 4 satoshi per inviare, e ognuno di questi invii è un HTLC che l'eliminazione può raggiungere. Il lato Lightning di BlueWallet è un conto su un server LNDHub, quindi l'operatore detiene i canali: non porti mai un pagamento eliminato, ma porti quell'operatore.
L'eliminazione ricompare al momento della chiusura. BOLT 2 consente di negoziare la chiusura solo quando non resta alcun HTLC in nessuna delle due transazioni di commitment, dust HTLC compresi, quindi un pagamento di 300 satoshi che nessun osservatore on-chain può vedere tiene comunque aperta una chiusura cooperativa.
Dust HTLC vs dust limit
Il dust limit è un numero che un nodo sceglie; un dust HTLC è un pagamento che ha perso un confronto con quel numero più una commissione.
Il limite è un parametro del canale, impostato in open_channel e accept_channel e non trasportato da alcun messaggio successivo. L'eliminazione è un esito che si sposta: senza anchor la soglia segue feerate_per_kw, quindi lo stesso pagamento di 2.500 satoshi è un output reale in una mempool tranquilla ed è eliminato in una mempool congestionata.
Inoltre i due si applicano in fasi diverse. Le soglie di Bitcoin Core, 546 satoshi per un output legacy e 330 per pay-to-witness-script-hash, sono policy di relay su transazioni che esistono. Un HTLC eliminato non arriva mai a quel test, perché il suo output non viene mai scritto.