Vai al contenuto
buybitcoinsmart

Glossario / Transazioni e commissioni

Altezza del blocco nel campo Coinbase

Che cos'è l'altezza del blocco nel campo coinbase?
L'altezza del blocco nel campo coinbase è l'altezza del blocco stesso, scritta come i primi byte del campo coinbase, come impone il BIP34 a ogni blocco da marzo 2013.

Specificato nel BIP-34.

È la soluzione più economica di bitcoin a un bug reale. Prima della regola, due blocchi con transazioni coinbase identiche producevano id di transazione identici, cosa che accadde ai blocchi 91.842 e 91.880 nel 2010. Scrivere l'altezza rende unica ogni coinbase e permette a chiunque di leggere la posizione di un blocco dal blocco stesso.

Come funziona

L'altezza è memorizzata come push di uno script, quindi un parser legge un byte di lunghezza e poi tanti byte di numero quanti ne indica quel byte.

Il numero è scritto in little endian e con codifica minimale, come lo script di Bitcoin codifica qualsiasi intero. Alle altezze attuali occupa tre byte, quindi il push si legge 03 e poi l'altezza. Il blocco 840.000, il blocco dell'halving, apre perciò la sua coinbase con 03 40 d1 0c: un push di tre byte, poi 840.000 con il suo byte meno significativo per primo. Tre byte coprono ogni altezza fino a 8.388.607, che con blocchi da dieci minuti è a più di un secolo di distanza, e la codifica si allarga da sola a quattro byte quando quel giorno arriverà.

Il BIP34 è stato distribuito come soft fork attivato dai miner, legato al numero di versione del blocco. I blocchi che dichiaravano la versione 2 venivano contati in una finestra scorrevole di 1.000: a 750 degli ultimi 1.000, un blocco di versione 2 privo della sua altezza diventava non valido, e a 950 il vecchio formato di versione 1 veniva respinto del tutto. L'ultimo blocco di versione 1 mai accettato è stato 227.835, con marca temporale 24 marzo 2013, e Bitcoin Core ha ancora scritta nel codice l'altezza di attivazione, 227.931.

La regola ha anche sostituito un controllo costoso con uno gratuito. Il BIP30 aveva già vietato a una nuova transazione di riutilizzare l'id di una esistente non spesa, ma farlo rispettare richiedeva una ricerca nel database per ogni transazione di ogni blocco. Una volta che ogni coinbase è diversa per costruzione, gli id duplicati non possono verificarsi, quindi i nodi saltano quella ricerca per tutto ciò che è stato minato dopo il passaggio. Una regola di consenso che rende la validazione più veloce anziché più lenta è abbastanza rara da meritare attenzione.

Dove lo vedi

Qualsiasi block explorer stampa la coinbase decodificata, e l'altezza è la prima cosa che contiene.

Dove si fa sentire è nel mining. Un pool assembla la propria transazione coinbase dal template fornito dal suo nodo, e un pool che inserisce l'altezza sbagliata, di solito mentre gareggia con un blocco appena arrivato, produce un blocco che ogni nodo scarta con un errore bad-cb-height. L'elettricità è spesa, il proof of work è valido e la ricompensa è nulla.

Conta anche per chiunque dimostri qualcosa su un blocco senza avere l'intera catena. L'intestazione di un blocco non dichiara la propria altezza; la si ricava contando a ritroso fino al blocco genesi. Un blocco completo invece la dichiara, in un punto coperto dalla radice di Merkle e quindi dal proof of work, così un'affermazione sull'altezza sostenuta da una coinbase e da un ramo di Merkle sta in piedi da sola. Le sidechain, i servizi di marcatura temporale e i protocolli di client leggero si appoggiano tutti a questa proprietà.

Altezza del blocco nel campo Coinbase vs altezza del blocco

L'altezza del blocco è una posizione nella catena, un numero a cui chiunque può arrivare contando a ritroso fino al blocco che Satoshi ha minato il 3 gennaio 2009. L'altezza del blocco nel campo coinbase è quello stesso numero scritto nei dati del blocco stesso perché il consenso lo richiede. Una è un'osservazione su dove si trova un blocco, l'altra è un campo in cui un miner può sbagliarsi e perdere un blocco.

Da non confondere con

Domande frequenti

Perché un blocco deve dichiarare un'altezza che si potrebbe semplicemente ricavare contando?

Perché contare richiede l'intera catena, e perché un tempo transazioni coinbase identiche producevano id di transazione identici. Mettere l'altezza dentro il blocco rende unica ogni coinbase e rende l'altezza dimostrabile dal solo blocco.

Cosa succede se un miner scrive l'altezza sbagliata?

Ogni nodo respinge il blocco con un errore bad-cb-height e il miner non guadagna nulla. L'errore di solito nasce da un pool che costruisce un template per un'altezza mentre arriva un blocco concorrente che sposta la punta.

Leggi anche

Termini correlati

Altro in Transazioni e commissioni

Leggi questa pagina in inglese