Glossario / Transazioni e commissioni
Numero di sequenza
Noto anche come nSequence.
- Che cos'è il numero di sequenza?
- Il numero di sequenza è un campo di quattro byte presente in ogni input di transazione che segnala la sostituzione con commissioni più alte, attiva il locktime e può codificare un blocco temporale relativo.
Specificato nel BIP-68.
Tre funzioni senza alcun rapporto tra loro condividono un unico campo perché bitcoin non poteva permettersi di aggiungerne un altro. Il piano originale di Satoshi per questo campo, un canale di pagamento rudimentale in cui ogni nuova versione aumentava il numero, fu abbandonato intorno al 2010 perché nessuna regola obbligava i miner a preferire quello più alto. Ciò che è sopravvissuto è un insieme di valori magici che decidono come si comportano le transazioni del tuo wallet.
Come funziona
Leggere un numero di sequenza significa confrontarlo con tre regole distinte, in ordine di anzianità.
Il valore finale. Un numero di sequenza di 0xffffffff, cioè 4.294.967.295 in decimale, contrassegna un input come finale. Se tutti gli input di una transazione sono finali, il campo locktime viene ignorato del tutto. Era il valore predefinito nei primi wallet ed è ancora quello che vedi nelle transazioni costruite da software che non ha mai considerato il campo.
Il segnale di sostituzione. Il BIP125 ha attribuito un significato all'estremo inferiore dell'intervallo: qualsiasi input impostato a 0xfffffffd o a un valore inferiore dichiara che il mittente può sostituire la transazione con una versione che paga di più. Il valore 0xfffffffe trova il compromesso, attivando il locktime senza dare il segnale di sostituzione. Questa distinzione ha perso gran parte della sua forza, perché Bitcoin Core inoltra le sostituzioni indipendentemente dal segnale dalla versione 28.0 di ottobre 2024.
Il blocco temporale relativo. Il BIP68 ha reinterpretato i bit bassi per le transazioni che dichiarano la versione 2 o superiore, e la regola è diventata applicabile al blocco 419.328 di luglio 2016. Quando il bit 31 non è impostato, i 16 bit inferiori indicano quanto tempo deve trascorrere dopo la conferma della moneta spesa da quell'input. Il bit 22 sceglie l'unità: non impostato significa blocchi, quindi un massimo di 65.535 blocchi o circa 455 giorni, mentre impostato significa periodi di 512 secondi, con un tetto vicino a 388 giorni. Il conteggio parte dalla conferma della transazione madre, non da una data fissa, ed è esattamente ciò che serve a un contratto tra due persone.
Dove lo vedi
Il numero di sequenza compare come colonna nei dump delle transazioni grezze e come casella di controllo nel software del wallet, e le due viste raramente usano le stesse parole.
Un block explorer che decodifica gli input stamperà valori come 4294967293 accanto a ciascuno. Quello è 0xfffffffd, e ti dice che il wallet ha costruito una transazione sostituibile. La chiamata decoderawtransaction di Bitcoin Core mostra la stessa cifra, e Sparrow e Electrum la espongono dietro un interruttore "replace by fee" invece che come numero.
Lightning è l'utilizzatore reale più intenso. Il ritardo di revoca di un canale, la finestra durante la quale la controparte può essere punita per aver pubblicato uno stato vecchio, è un blocco temporale relativo applicato tramite questo campo sull'input della transazione di commitment. Lo stesso meccanismo è alla base degli swap sottomarini, dei progetti di vault e di qualsiasi contratto in cui un percorso di rimborso deve diventare disponibile solo dopo che l'altra parte ha avuto una giusta occasione di agire.
Numero di sequenza vs locktime
I numeri di sequenza sono per input; il locktime è per transazione. È il modo più rapido per tenerli distinti, e spiega perché i due sono usati per cose diverse.
Il locktime fissa un'unica scadenza assoluta per l'intera transazione, espressa come altezza di blocco o come orario reale, e si applica sia che le monete spese abbiano un giorno sia che ne abbiano cinque anni. Un blocco temporale relativo in un numero di sequenza conta dalla conferma della specifica moneta spesa da quell'input, quindi ogni input può avere il proprio periodo di attesa e lo stesso script funziona indipendentemente da quando viene finanziato. I due dipendono anche l'uno dall'altro in modo scomodo: il locktime viene applicato solo quando almeno un numero di sequenza è inferiore al valore finale, quindi un wallet che imposta tutto a 0xffffffff disattiva silenziosamente l'altro campo.