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.