Glossario / Lightning e layer 2
Transazione di penalità
- Che cos'è Transazione di penalità?
- Una penalty transaction è lo sweep on-chain che prende ogni output di un canale Lightning quando la tua controparte pubblica un commitment revocato, firmata con la chiave di revoca che possiedi già.
I canali Lightning sono sorvegliati dai loro due partecipanti, e la penalty transaction è l'applicazione delle regole. BOLT 5 assegna a quello sweep un witness di 160 byte per l'output del saldo principale, e dice di dividerlo per output se non ha ottenuto conferma 18 blocchi prima che scada il timelock di chi bara. Se tieni bitcoin nei canali, questa transazione è ciò che sta tra te e un peer che riavvolge il tuo saldo.
Come funziona
Una penalty transaction spende output il cui proprietario ti ha già ceduto il diritto di prenderli.
Ogni volta che il saldo di un canale si muove, ciascuna parte consegna il segreto dietro lo stato che sta sostituendo. Con quel segreto puoi derivare la chiave privata di revoca della vecchia transazione di commitment del tuo peer, che è la chiave che sblocca il suo lato di quella transazione. BOLT 5 riassume la conseguenza in una riga: una volta che un nodo scopre una transazione di commitment per cui ha una chiave privata di revoca, l'output della transazione di finanziamento è risolto. Non resta nulla da negoziare.
Ciò che recuperi con lo sweep dipende da ciò che portava il commitment obsoleto. La specifica ti impone di risolvere l'output principale di chi bara con la chiave di revoca, di risolvere ogni pagamento che ha offerto in uno di tre modi (spendere il commitment con la chiave di revoca, spenderlo con la preimage del pagamento se la conosci, oppure spendere la sua transazione HTLC-timeout una volta che la pubblica), e di risolvere con la chiave di revoca anche le sue transazioni HTLC-success e HTLC-timeout. Ti dice anche di estrarre la preimage dal witness dell'input mentre ci sei, perché un pagamento che stavi per perdere potrebbe essere ancora reclamabile dall'hop precedente.
Tre forme di witness coprono tutto questo, e BOLT 5 dà la dimensione di ciascuna: 160 byte per l'output del saldo principale, 243 byte per un pagamento offerto, 249 byte per uno accettato. Aggiungi il peso di 164 dell'input stesso e ogni output reclamato costa 324, 407 o 413. Il resto della transazione sono 53 byte di dati non witness più un'intestazione witness di 2 byte. Puoi anche incorporare il tuo output principale dallo stesso commitment, il che aggiunge 272 ed è lì soprattutto per ridurre la commissione che paghi.
Due cose che una penalty transaction non è. Non è automatica: bitcoin non punisce nessuno, e lo sweep avviene solo se un software che esegui tu, o che hai incaricato, vede confermarsi la transazione obsoleta e reagisce prima che scada il timelock di chi bara. Non è nemmeno gratuita. Lo sweep paga la tariffa corrente come qualsiasi altra transazione, quindi un canale che contiene meno del costo di svuotarlo non vale la pena difenderlo, qualunque cosa le regole consentano.
Perché questo conta quando compri bitcoin
Una penalty transaction ti difende solo in un wallet in cui detieni transazioni di commitment tue, il che esclude la maggior parte delle app Lightning semplici.
Le 41 recensioni di wallet su questo sito si dividono esattamente su questa linea. Phoenix esegue un vero nodo Lightning in autocustodia sullo smartphone, quindi il meccanismo di penalizzazione appartiene a te, e così il dovere di sorvegliare: la via di recupero di ACINQ ti fa forzare la chiusura e attendere circa 720 blocchi, circa cinque giorni, prima che i fondi del canale siano tuoi on-chain. BlueWallet è solo bitcoin e insolitamente capace on-chain, ma il suo lato Lightning è un conto su un server LNDHub, e, a meno che quel server non sia tuo, l'operatore può spostare quei bitcoin, quindi non esiste nessuna tua transazione di commitment con cui punire qualcuno. Wallet of Satoshi è custodiale anche nella sua modalità predefinita, e questo è parte del motivo per cui qui ha un punteggio di 2,7 invece di stare in una raccomandazione.
Leggilo come uno scambio, non come un verdetto. Il Lightning custodiale elimina i peer che barano dalla tua lista di minacce e li sostituisce con una sola azienda che può congelare o ritirare il servizio. Il Lightning in autocustodia ti consegna la penalty transaction e l'obbligo di essere sveglio. L'errore che coglie le persone su entrambi i fronti è riutilizzare un vecchio backup della frase di recupero: dodici parole ripristinano i bitcoin on-chain e non sanno nulla di quale stato del canale sia quello corrente, quindi il commitment che pubblichi è obsoleto e la penalty transaction che segue è diretta contro di te.
Una chiusura revocata su un canale Phoenix
Immagina un canale Phoenix con tre pagamenti ancora in volo quando il nodo dall'altro lato pubblica un commitment della settimana scorsa.
Il tuo software individua il txid, deriva la chiave di revoca e costruisce un unico sweep. Il suo peso è 324 per l'output principale di chi bara, 413 per ciascuno dei tre output di pagamento accettati, 272 per incorporare il tuo output principale, quattro volte 53 byte di corpo della transazione e un'intestazione di 2 byte: 2.049 unità di peso, cioè circa 512 byte virtuali. I loro soldi stanno dietro il timelock relativo che le due parti hanno concordato all'apertura del canale, e ritardi di quel tipo si contano in giorni, non in minuti: recuperare da una chiusura forzata su Phoenix richiede circa 720 blocchi, circa cinque giorni. Il tuo è spendibile nel momento in cui un miner prende la tua transazione.
BOLT 5 calcola anche il tetto. Contro un peso massimo standard di 400.000 e l'input più grande a 413, una singola penalty transaction arriva a 966 output di pagamento, il doppio dei 483 pagamenti in sospeso per lato che il protocollo tra peer già consente, quindi anche un canale completamente pieno può essere svuotato in un solo colpo.
Poi arriva il motivo per non farlo. Dove il canale usa output anchor, le transazioni di pagamento di chi bara sono firmate con SIGHASH_SINGLE e SIGHASH_ANYONECANPAY, quindi può agganciare input propri e bloccare il tuo sweep combinato nella mempool abbastanza a lungo perché scada il timelock sul suo output principale. Se la conferma non è arrivata quando a quell'output manca meno del ritardo di sicurezza per scadere, una finestra che BOLT 5 lascia alla policy dei nodi pur raccomandando 18 blocchi, ti si dice di spezzare il lavoro: una penalty transaction per ogni output revocato, con la commissione aumentata finché ciascuna non si conferma. Con commitment a commissione zero ognuna di queste deve anche restare entro il limite di 10.000 byte virtuali che le transazioni di versione 3 portano, altrimenti potrebbe non arrivare mai ai miner.
Penalty transaction vs chiusura forzata
Una chiusura forzata è qualsiasi uscita unilaterale da un canale, mentre una penalty transaction è la risposta a una chiusura disonesta.
La maggior parte delle chiusure forzate è banale. Un peer è andato offline, si avvicinava la scadenza di un pagamento, il nodo di qualcuno ha pubblicato lo stato corrente, e entrambe le parti ricevono il saldo che gli era dovuto una volta passato il ritardo. Una penalty transaction esiste solo nel caso ristretto in cui il commitment pubblicato era già stato revocato, e prende l'intero canale invece di una quota. Ogni penalty transaction segue una chiusura forzata, e quasi nessuna chiusura forzata ne produce una.
Penalty transaction vs watchtower
Una penalty transaction è una transazione bitcoin firmata, mentre una watchtower è una macchina che resta in attesa per trasmetterne una per tuo conto.
La torre conserva un breve prefisso del txid revocato e un blob che non può decifrare finché quella transazione non compare in un blocco. Lo sweep al suo interno è stato costruito e firmato dal tuo nodo, con pagamento a un indirizzo scelto prima che qualcosa andasse storto, quindi incaricarne una non ti costa nessuna chiave. Confondere le due cose produce la preoccupazione sbagliata. Non avere nessuna torre non indebolisce affatto la penalty transaction; significa che nessuno è sveglio per inviarla mentre il tuo laptop è chiuso.