Vai al contenuto
buybitcoinsmart

Glossario / Lightning e layer 2

Transazione di commitment

Che cos'è una transazione di commitment?
Una transazione di commitment è la transazione bitcoin firmata e non ancora trasmessa che ciascuna parte di un canale Lightning conserva, e che spende l'output di finanziamento secondo la ripartizione attuale del saldo.

Ogni pagamento Lightning sostituisce le transazioni di commitment di entrambe le parti con una nuova coppia, e la vecchia coppia viene revocata anziché eliminata. BOLT 3 fissa il peso atteso del commitment di un canale anchor a 1.124 unità di peso più 172 per ogni pagamento ancora in corso. Possederne una significa possedere una via d'uscita che puoi prendere da solo, a una commissione che la tua controparte ha accettato settimane prima.

Come funziona

Una transazione di commitment ha esattamente un input, l'output di finanziamento 2-di-2 del canale, e i suoi output sono la ripartizione attuale di quel denaro.

Ne esistono due in qualsiasi momento, una per controparte, e deliberatamente non sono la stessa transazione. Ogni copia ritarda il pagamento del proprio detentore dietro un lock OP_CHECKSEQUENCEVERIFY di to_self_delay blocchi mentre paga prima l'altra parte, così chi la trasmette è quello che aspetta. Con option_anchors persino l'altra parte non è immediata: l'output to_remote porta un lock CSV di un blocco, aggiunto affinché nessuna controparte possa intasare il commitment attaccandogli transazioni figlie a basso costo.

La transazione nasconde il proprio contatore. BOLT 3 imposta il campo della versione a 2, prende il numero di commitment di 48 bit, lo combina in XOR con i 48 bit inferiori di SHA256 sui due valori payment_basepoint di open_channel e accept_channel, poi ripartisce il risultato su due campi: i 24 bit superiori vanno nella sequence dell'input dietro il byte 0x80, i 24 inferiori nel locktime dietro 0x20. Entrambe le controparti lo ricalcolano in un attimo. Chiunque altro osservi la catena vede due numeri dall'aspetto arbitrario e non può contare quanti pagamenti ha trasportato il canale.

L'uscita la paga chi ha finanziato il canale. Prima che venga disposto qualsiasi output, la commissione di base viene sottratta alla parte che ha finanziato il canale, e con option_anchors dalla stessa parte escono anche due output anchor fissi di 330 satoshi ciascuno. Gli output vengono poi ordinati per valore dal più piccolo, poi per scriptPubKey confrontato byte per byte, poi per cltv_expiry per gli output HTLC, così entrambe le controparti arrivano a una transazione identica byte per byte senza mai inviarsela.

Tutto ciò che è troppo piccolo per valere la pena di essere scritto non viene scritto. BOLT 3 li chiama output trimmed: un HTLC il cui importo, meno la commissione che costerebbe la sua transazione di seconda fase, scende sotto il dust_limit_satoshis del proprietario non riceve alcun output, e il denaro diventa commissione per i miner invece che saldo di qualcuno. Le soglie elencate da BOLT 3 sono quelle di Bitcoin Core: 330 satoshi per pay-to-witness-script-hash, 294 per pay-to-witness-pubkey-hash, 240 per pay-to-anchor. Sono un minimo e non l'impostazione stessa, e BOLT 3 indica ai canali anchor di stare sopra, perché su quei canali la transazione di seconda fase non paga commissione e quindi smette del tutto di contribuire al trimming.

La forma più recente della transazione elimina la commissione incorporata. Dove si applica zero_fee_commitments, il campo della versione diventa 3, feerate_per_kw è fissato a 0, e viene aggiunto un output shared_anchor che porta lo script pay to anchor OP_1 <0x4e73> a quel limite di 240 satoshi. Chiunque può spenderlo, quindi il commitment arriva in un blocco con il child pays for parent al prezzo che il mercato delle commissioni chiede quel giorno, invece che a quello che costava quando la coppia è stata firmata.

Perché questo conta quando compri bitcoin

La transazione di commitment è il punto in cui un saldo Lightning smette di essere un numero sullo schermo e diventa satoshi meno commissioni, e due delle sue regole costano denaro reale.

La prima è il trimming. Gli importi piccoli dentro un canale non vengono arrotondati, vengono eliminati, e l'esempio pratico della specifica consegna ai miner 1.800 satoshi di pagamenti in volo perché ciascuno scendeva sotto il limite dust più il costo della sua seconda fase. Questo pone un minimo sotto il quale non vale la pena spostare nulla su Lightning. Phoenix, il wallet di ACINQ nella nostra recensione, addebita 1.000 satoshi per creare un canale e dichiara che riprendersi da una chiusura forzata richiede circa 720 blocchi, ovvero circa cinque giorni. Un canale finanziato con qualche migliaio di satoshi è un calcolo che non torna mai.

La seconda è che la commissione dentro una transazione di commitment è stata scelta quando è stata firmata. Il saldo di chi ha finanziato il canale è stato decurtato al feerate_per_kw di quel giorno, e se la mempool si è mossa da allora, la transazione che sta nel tuo wallet potrebbe non confermarsi al prezzo che porta. Gli anchor esistono esattamente per questo, e zero_fee_commitments esiste per spostare la decisione al momento della trasmissione.

Nessuna delle due regole ti riguarda se il canale lo detiene qualcun altro. Strike, valutato 4,6 nella nostra recensione degli exchange, è nativo Lightning e custodiale finché il tuo saldo resta nell'app, e Coinbase applica ai prelievi Lightning un prezzo inferiore a quello di un invio on-chain per importi piccoli e superiore per quelli grandi. Ciò a cui rinunci è documentato nelle recensioni dei wallet: Wallet of Satoshi, valutato 2,7 e contrassegnato con un avviso di cautela, ha smesso di servire i clienti degli Stati Uniti il 23 novembre 2023, e in seguito ha ritirato il suo servizio Lightning custodiale in tutta l'Unione Europea man mano che i periodi transitori di MiCA si chiudevano. Non avevi alcuna transazione di commitment su cui contare.

Passo per passo nell'esempio di commissione di BOLT 3

BOLT 3 pubblica un solo calcolo di commissione svolto, e seguirlo dall'inizio alla fine mostra dove va davvero il denaro di un canale.

La configurazione è un feerate_per_kw di 5.000, un dust_limit_satoshis di 546 e quattro pagamenti in volo: HTLC offerti di 5.000 e 1.000 satoshi, HTLC ricevuti di 7.000 e 800 satoshi. A quel tasso di commissione una transazione HTLC timeout costa 3.315 satoshi e una transazione HTLC success costa 3.515.

Il peso parte da 724, la cifra per un canale senza option_anchors, la configurazione che tutto questo esempio presuppone. L'HTLC offerto di 5.000 satoshi supera 546 più 3.315, quindi riceve un output e il peso sale a 896. L'HTLC offerto di 1.000 satoshi non lo supera e viene eliminato. L'HTLC ricevuto di 7.000 satoshi supera 546 più 3.515, quindi riceve un output e il peso sale a 1.068. L'HTLC ricevuto di 800 satoshi viene eliminato.

La commissione di base è 5.000 moltiplicato per 1.068 e diviso per 1.000, cioè 5.340 satoshi, sottratti solo dall'output di chi ha finanziato il canale. La commissione che un miner incassa davvero è di 7.140 satoshi, perché si aggiungono i due HTLC eliminati. Dei 13.800 satoshi in volo, 1.800 smettono di esistere come saldo di qualcuno, e il totale può salire ancora se l'output di chi ha finanziato il canale scende sotto il limite dust una volta sottratta la commissione.

Transazione di commitment vs transazione di penalità

Una transazione di commitment paga una ripartizione firmata da entrambe le controparti; una transazione di penalità prende l'intero canale a una controparte che ha pubblicato una ripartizione che aveva già revocato.

Le due spendono cose diverse. Una transazione di commitment spende l'output di finanziamento. Una transazione di penalità spende gli output di una transazione di commitment che si è rivelata obsoleta, usando la chiave di revoca che il suo detentore ha consegnato quando quello stato è stato sostituito. Lo script to_local scrive entrambi i futuri in un solo output: un ramo richiede la chiave ritardata dopo to_self_delay blocchi, l'altro richiede una firma di revoca e funziona senza alcun ritardo.

Transazione di commitment vs chiusura forzata

Una transazione di commitment è un oggetto che possiedi; una chiusura forzata è l'evento in cui qualcuno ne trasmette una.

La distinzione conta perché non devi essere tu ad agire. Se la tua controparte forza la chiusura su uno stato corrente, la sua copia paga la tua parte senza alcuna mossa da parte tua, soggetta solo al lock CSV di un blocco che i canali anchor pongono sull'output to_remote. La tua copia è il ripiego per una controparte che è diventata silenziosa, ed è la copia che ti fa attendere il ritardo. Possedere una transazione di commitment è normale, continuo e gratuito; trasmetterne una è un evento che preferiresti non dover mai vivere.

Da non confondere con

Domande frequenti

Una transazione di commitment viene mai effettivamente trasmessa?

Di solito no. Un canale che si chiude in modo cooperativo firma una transazione diversa e più economica, e la coppia di commitment viene semplicemente scartata. Una transazione di commitment viene trasmessa solo quando una delle parti rinuncia alla cooperazione, ed è ciò che rappresenta una chiusura forzata.

Perché ho recuperato meno del mio saldo Lightning quando si è chiuso un canale?

Due regole trattengono una parte. La commissione base viene detratta dal lato che ha finanziato il canale, e tutto ciò che resta sotto il limite dust fissato dai due peer, che BOLT 3 pone a 330 satoshi o più per il tipo di script usato dagli output Lightning, non viene scritto affatto come output e va al miner.

La mia controparte del canale può riscrivere la mia transazione di commitment senza di me?

No. Ogni nuovo stato richiede entrambe le firme, quindi nessun saldo cambia se non lo firmi tu. Ciò che la tua controparte può fare è trasmettere un vecchio stato che ha già firmato, ed è proprio il caso che la chiave di revoca e la finestra di ritardo esistono per punire.

Leggi anche

Termini correlati

Altro in Lightning e layer 2

Leggi questa pagina in inglese