Glossario / Lightning e layer 2
Chiusura forzata
- Che cos'è una chiusura forzata?
- Una chiusura forzata chiude un canale Lightning senza l'aiuto della controparte: trasmetti alla rete la transazione di commitment più recente, paghi le commissioni on-chain e attendi un ritardo prima che il tuo saldo sia spendibile.
Ogni canale Lightning tiene pronta un'uscita firmata, e una chiusura forzata è l'uso di quella uscita. Costa una transazione on-chain reale più un'altra per ogni pagamento ancora in corso, e i canali anchor lasciano un output da 330 satoshi su ciascun lato solo perché la commissione possa essere aumentata in seguito. Aspettati di riavere il tuo denaro in circa un giorno, non in un secondo.
Come funziona
Esistono due modi per uscire da un canale Lightning, e quello costoso è la chiusura forzata, che non richiede cooperazione.
Una chiusura cooperativa è una negoziazione: entrambe le parti concordano la suddivisione finale, firmano una transazione e i bitcoin di tutti sono normali output spendibili non appena essa viene confermata. Una chiusura forzata salta la negoziazione. Pubblichi la transazione di commitment più recente che detieni, e le regole di consenso di bitcoin fanno da arbitro al posto del tuo peer. L'asimmetria è deliberata e gioca contro chi preme il pulsante: il saldo della controparte è subito spendibile, mentre il tuo resta bloccato dietro un ritardo OP_CHECKSEQUENCEVERIFY di to_self_delay blocchi, concordato all'apertura del canale.
Quel ritardo è la finestra di penalità. Esiste perché, se la transazione che trasmetti si rivela vecchia e mostra un saldo che hai già speso, l'altra parte abbia il tempo di pubblicare una transazione di penalità e prendere tutto. BOLT 2 memorizza to_self_delay come numero a 16 bit, quindi può essere qualsiasi valore fino a 65.535 blocchi, e impone a un peer di rifiutare un valore che ritenga irragionevolmente grande. Un ritardo maggiore rende più difficile truffarti e rende più lenta la tua uscita.
I pagamenti in corso complicano l'aritmetica. Ognuno richiede una propria transazione successiva, che pesa 666 o 706 unità di peso in un canale anchor a seconda che si risolva per timeout o per segreto, e ciascuna viene trasmessa separatamente una volta soddisfatta la sua condizione. Gli output anchor da 330 satoshi, dimensionati al limite dust per un output P2WSH, esistono perché ciascuna parte possa collegare una transazione figlia e aumentare la commissione su un commitment firmato quando la mempool era economica.
Dove lo vedi
Le chiusure forzate sono comuni, e nella maggior parte dei casi nessuno sta truffando.
L'innesco abituale è un peer irraggiungibile da troppo tempo mentre si avvicina la scadenza di un pagamento, così il tuo nodo chiude invece di rischiare di perdere l'importo. I provider eliminano i canali rimasti inattivi a lungo. I wallet chiudono automaticamente quando non riescono a raggiungere l'altra parte dopo un aggiornamento. In ogni caso te ne accorgi perché una parte del tuo saldo compare all'improvviso come in sospeso e una transazione di uno sconosciuto è nella mempool con dentro il tuo denaro.
La regola che fa risparmiare: non ripristinare mai un wallet Lightning solo da una frase di recupero e poi usarlo. Una frase di recupero recupera i bitcoin on-chain, ma lo stato attuale di un canale non è in essa, e trasmettere un commitment obsoleto espone alla penalità. Quello che conservi invece è un file di backup dei canali, e quello che ti dà è il diritto di chiedere ai tuoi peer di chiudere, ai loro ritmi, con commissioni che non gestisci. È la ragione pratica per cui Lightning serve per spendere denaro e l'autocustodia on-chain per i risparmi.
È l'ambiente delle commissioni a decidere il danno. Una chiusura forzata con la mempool tranquilla costa qualche migliaio di satoshi. La stessa chiusura durante un picco di commissioni può costare più di quanto contenga un canale piccolo, e i canali il cui saldo è inferiore al costo per spostarlo vengono semplicemente abbandonati.