Glossario / Transazioni e commissioni
Locktime
Noto anche come nLockTime.
- Che cos'è il locktime?
- Il locktime occupa gli ultimi quattro byte di una transazione e stabilisce l'altezza di blocco o l'ora a partire dalle quali la rete la accetterà in un blocco.
Pensa al locktime come a un assegno postdatato scritto nel protocollo. Un campo, due significati, decisi da una soglia: qualsiasi valore inferiore a 500.000.000 conta blocchi, e qualsiasi valore pari o superiore conta secondi dal 1970. La maggior parte delle transazioni che invierai porterà un locktime, e non farà nulla se non proteggerti da un subdolo trucco dei miner.
Come funziona
Il locktime sta proprio alla fine della transazione serializzata e viene controllato prima di qualsiasi altro aspetto della spesa.
La regola della soglia è ciò che permette a un solo campo di svolgere due funzioni. Un locktime di 900.000 significa che la transazione non può comparire in un blocco sotto l'altezza 900.000. Un locktime di 1.800.000.000 è un timestamp Unix e significa che la transazione non può comparire finché il tempo mediano degli undici blocchi precedenti non supera quel momento. La linea di demarcazione, 500.000.000, corrisponde al 5 novembre 1985, una data ben precedente all'esistenza del bitcoin, ed è ben oltre qualsiasi altezza di blocco plausibile. Il campo è di quattro byte, quindi il momento massimo esprimibile è il 7 febbraio 2106.
C'è un interruttore. Il locktime viene applicato solo se almeno un input ha un numero di sequenza inferiore a 0xffffffff. Imposta ogni input a 0xffffffff e il campo viene del tutto ignorato, ed è così che le transazioni hanno funzionato per anni prima che i wallet ne trovassero un uso.
Quell'uso è la protezione dal fee sniping. Quando le commissioni sono alte, un miner che perde la corsa per un blocco ha un incentivo a provare a minare di nuovo il blocco precedente e a rubarne le commissioni invece di estendere la catena. Se i wallet impostano il locktime di ogni transazione sulla punta attuale della catena, quelle transazioni diventano invalide in qualsiasi blocco precedente, il che elimina gran parte del bottino e l'incentivo. Bitcoin Core lo fa sulle spese ordinarie, e circa una volta su dieci sceglie un'altezza in modo uniforme tra i 100 blocchi precedenti, così che le transazioni di software di wallet diversi non si distinguano tra loro.
Dove lo vedi
Apri una qualsiasi transazione recente su un block explorer e il campo locktime conterrà di solito un numero vicino all'altezza a cui è stata minata.
Questo è il comportamento di protezione dal fee sniping, e vederlo è una lieve impronta del software che ha costruito il pagamento. Anche i wallet che lasciano il campo a zero stanno annunciando qualcosa. Le società di analisi della catena leggono questo campo proprio perché pochi utenti ci pensano.
Gli usi deliberati sono più limitati. Un locktime nel futuro crea una transazione che può essere firmata e consegnata subito ma non trasmessa prima di un certo momento, ed è la base dei semplici schemi di eredità e dei percorsi di rimborso. Le transazioni di chiusura forzata di Lightning e i submarine swap usano timelock, così che una controparte che scompare non possa bloccare il tuo denaro per sempre. Chi costruisce queste transazioni dovrebbe notare l'ovvia debolezza: una transazione bloccata vale solo quanto i bitcoin che la sostengono, e se il mittente spende prima quegli input in un altro modo, la transazione postdatata diventa senza valore.
Locktime vs OP_CHECKLOCKTIMEVERIFY
Il locktime limita una transazione; OP_CHECKLOCKTIMEVERIFY limita un bitcoin. La differenza conta perché solo uno dei due vincola qualcuno che non sia la persona che firma.
Un locktime è scelto da chi costruisce la transazione, quindi non protegge nessuno: un mittente può semplicemente costruire un'altra transazione senza. OP_CHECKLOCKTIMEVERIFY, definito nel BIP65 e attivo sulla rete dal blocco 388.381 del 14 dicembre 2015, mette la condizione nello script dell'output stesso. Qualsiasi spesa futura di quel bitcoin deve a sua volta portare un locktime pari o successivo al momento indicato, e nessuna firma può aggirarlo. È questo che trasforma un timelock da intenzione in regola, ed è per questo che i progetti di vault, deposito a garanzia ed eredità si scrivono con l'opcode invece che con il campo.