Glossario / Mining e consenso
Blocco orfano
- Che cos'è un blocco orfano?
- Un blocco orfano è un blocco il cui blocco padre il tuo nodo non ha ancora visto, quindi non può essere validato né collegato, e non è ciò che la maggior parte delle persone intende quando usa questa parola.
La parola ha due vite. Nel protocollo descrive un blocco che arriva fuori ordine, senza alcun antenato noto a cui collegarlo; nell'uso quotidiano, e sulla maggior parte dei block explorer, indica un blocco valido che ha semplicemente perso una corsa, e che propriamente si chiama blocco obsoleto. Bitcoin Core ha smesso del tutto di conservare blocchi orfani nella versione 0.10, pubblicata a febbraio 2015.
Come funziona
Un blocco orfano esiste solo nell'intervallo tra la ricezione di un blocco e il momento in cui se ne conosce la collocazione.
La validazione è sequenziale. Per verificare un blocco serve l'insieme degli output non spesi così com'era immediatamente prima di esso, e lo si costruisce applicando in ordine tutti i blocchi precedenti. Se a un nodo si consegna un blocco il cui padre manca, può verificare la proof of work nell'intestazione ma nulla di più: né le commissioni, né il sussidio, né se un input era già stato speso. Il blocco è non verificabile, non invalido.
Le versioni più vecchie di Bitcoin Core trattenevano questi blocchi in memoria e attendevano che comparisse il padre mancante. Era necessario perché i blocchi venivano richiesti in base all'annuncio, quindi un peer poteva facilmente consegnarli fuori sequenza. La sincronizzazione headers first ha eliminato questa necessità. Ora un nodo scarica e controlla la catena di intestazioni da 80 byte prima di chiedere il corpo di un solo blocco, il che significa che sa sempre dove collocare un blocco in arrivo e può richiedere i corpi a più peer contemporaneamente senza confusione. Il pool dei blocchi orfani è stato eliminato nella stessa versione, e su un nodo moderno un vero blocco orfano è praticamente impossibile da produrre.
Una cosa ha mantenuto il nome. Bitcoin Core mantiene ancora un pool di transazioni orfane per le transazioni i cui input non ha visto, con una capienza predefinita di 100, sulla ragionevole scommessa che la transazione padre mancante sia a pochi secondi di distanza. Quindi, quando la parola compare nei log o nella configurazione di Core stesso, parla di transazioni, mai di blocchi.
Dove lo vedi
La parola orfano sopravvive soprattutto in luoghi che stanno descrivendo qualcos'altro.
I block explorer sono la principale fonte di confusione: diversi pubblicano una pagina dei blocchi orfani che elenca blocchi validi scartati quando ha vinto un blocco concorrente, e la stampa copia l'etichetta. Le dashboard dei pool di mining fanno lo stesso, riportando un tasso di blocchi orfani che in realtà è un tasso di blocchi obsoleti. La documentazione delle altcoin, in gran parte copiata dalla wiki dei primi tempi di bitcoin, usa il termine per entrambi i significati indistintamente.
Bitcoin Core no. Chiedigli i rami concorrenti che conosce e riporta ogni punta con uno stato tra active, valid fork, valid headers, headers only o invalid. Non esiste uno stato di orfano, perché la situazione che la parola descriveva non si presenta più.
Per chi legge, la verifica utile è se il blocco in questione è mai stato controllato. Se qualcuno può dirti la sua altezza, il numero di transazioni e il pool che lo ha minato, il blocco è stato validato completamente e ha perso una corsa, quindi la parola che cerchi è obsoleto.
Blocco orfano vs blocco obsoleto
Un blocco orfano non può essere verificato perché il suo padre è sconosciuto. Un blocco obsoleto è stato verificato, era del tutto valido ed è stato abbandonato solo perché su un altro blocco della stessa altezza si è costruito prima. Quasi tutti coloro che dicono orfano intendono obsoleto, compresi diversi block explorer, quindi vale la pena chiedere a quale dei due si riferisce una fonte prima di trarne conclusioni. Nessuno dei due ti costa nulla come utente: i pagamenti in un blocco scartato tornano alla mempool e di norma vengono minati di nuovo entro uno o due blocchi.