Vai al contenuto
buybitcoinsmart

Glossario / Mining e consenso

Blocco versione 2

Noto anche come Blocco v2.

Che cos'è un blocco versione 2?
Un blocco versione 2 è un blocco il cui campo versione dell'intestazione vale 2, l'aggiornamento con cui il BIP34 ha imposto l'altezza del blocco stesso come primo elemento del suo script coinbase.

Specificato nel BIP-34.

I numeri di versione dei blocchi un tempo significavano qualcosa di semplice: 1 era il formato originale, 2 aggiunse una regola e ogni nuovo numero rendeva il formato precedente non minabile. La versione 2 è arrivata con il BIP34 e Bitcoin Core la applica a partire dal blocco 227.931. Nulla di ciò che fai come acquirente ne dipende, ma ogni explorer la mostra, e spiega perché gli script coinbase iniziano con un numero.

Come funziona

Stato: il campo versione ha smesso di essere un contatore nel 2016, quando il BIP9 ha ridefinito i suoi bit superiori come un bitfield di segnalazione, quindi un blocco moderno mostra un valore come 0x20000000 invece di 2, 3 o 4. La regola del BIP34 introdotta dalla versione 2 è permanente ed è ancora verificata su ogni blocco.

I blocchi versione 2 esistono per risolvere un problema di identità duplicata. Una transazione coinbase non ha input che la rendano unica, quindi due miner che per caso usassero lo stesso script di output e gli stessi byte coinbase arbitrari potevano produrre transazioni identiche byte per byte con lo stesso ID di transazione. Non è un'ipotesi: i blocchi 91.842 e 91.880 contenevano ciascuno una transazione coinbase identica a una di un blocco precedente, e la copia successiva ha sovrascritto la voce precedente nell'insieme degli output non spesi, distruggendo bitcoin spendibili. Il BIP30 ha vietato del tutto i duplicati come misura provvisoria, e il BIP34 ha eliminato la possibilità alla fonte.

Il meccanismo è piccolo. Un blocco versione 2 deve iniziare il proprio script coinbase con l'altezza del blocco stesso, scritta come numero di script codificato in modo minimo. Poiché due blocchi non condividono mai la stessa altezza, due transazioni coinbase non possono più entrare in collisione. Il deployment ha usato una soglia invece di una data fissa: una volta che una supermaggioranza dei blocchi recenti portava la versione 2, i blocchi versione 1 sono diventati non validi, e la rete ha superato quel punto a marzo 2013.

Lo stesso schema si è ripetuto altre due volte. I blocchi versione 3 hanno reso obbligatoria la codifica stretta DER delle firme al blocco 363.725, e i blocchi versione 4 hanno introdotto OP_CHECKLOCKTIMEVERIFY al blocco 388.381. Dopo, la sequenza si è fermata, perché trattare un campo di 32 bit come un contatore sprecava 31 bit che il BIP9 ha trasformato in segnali di aggiornamento paralleli.

Dove lo vedi

La versione compare nella pagina del blocco di qualsiasi explorer e nella chiamata RPC getblock sia come version sia come versionHex. Guarda un blocco del 2011 e vedi 1; guardane uno della metà del 2013 e vedi 2; guardane uno di oggi e vedi un bitfield.

L'altezza del BIP34 è più facile da individuare della versione stessa. Decodifica un qualsiasi script coinbase recente e i primi byte sono l'altezza, di solito seguita dal testo identificativo di un pool e dallo spazio di nonce extra che l'hardware per il mining percorre. Gli explorer spesso stampano quella coda in ASCII, ed è così che il coinbase di un blocco rivela quale pool lo ha minato.

Blocco versione 2 vs transazione versione 2

Un blocco versione 2 e una transazione versione 2 condividono un numero e nulla più. La versione 2 delle transazioni viene dal BIP68 e attiva i locktime relativi, permettendo a un input di richiedere che il suo output genitore abbia una certa età prima di poter essere speso. Lightning vi si affida per i timeout dei canali. La versione 2 dei blocchi viene dal BIP34 e riguarda l'unicità del coinbase. Oggetto diverso, BIP diverso, anno diverso, e nessun rapporto oltre alla coincidenza che entrambi i contatori abbiano raggiunto 2.

Da non confondere con

Domande frequenti

Quale versione di blocco usa bitcoin oggi?

Nessuna nel vecchio senso di contatore. Dal BIP9 il campo versione è un bitfield usato per segnalare il supporto agli aggiornamenti, quindi i blocchi riportano valori come 0x20000000 invece di un numero sequenziale.

Perché uno script coinbase inizia con un numero?

Perché il BIP34 richiede lì l'altezza del blocco. Garantisce che due transazioni coinbase non siano mai identiche byte per byte, cosa che aveva già causato due ID di transazione duplicati nel 2010.

Termini correlati

Altro in Mining e consenso

Leggi questa pagina in inglese