Glossaire / Minage et consensus
Bloc orphelin
- Qu'est-ce qu'un bloc orphelin ?
- Un bloc orphelin est un bloc dont votre nœud n'a pas encore vu le parent, de sorte qu'il ne peut être ni validé ni rattaché, ce qui ne correspond pas à ce que la plupart des gens entendent par ce mot.
Le mot a deux vies. Dans le protocole, il décrit un bloc qui arrive dans le désordre, sans ancêtre connu auquel le rattacher ; dans l'usage courant, et sur la plupart des explorateurs de blocs, il désigne un bloc valide qui a simplement perdu une course, ce qu'on appelle proprement un bloc périmé. Bitcoin Core a cessé de conserver des blocs orphelins dans la version 0.10, publiée en février 2015.
Comment cela fonctionne
Un bloc orphelin n'existe que dans l'intervalle entre la réception d'un bloc et la connaissance de l'endroit où il se rattache.
La validation est séquentielle. Pour vérifier un bloc, il faut l'ensemble des sorties non dépensées tel qu'il se présentait immédiatement avant lui, et on le construit en appliquant dans l'ordre chaque bloc antérieur. Présentez à un nœud un bloc dont le parent manque et il peut vérifier la preuve de travail dans l'en-tête, mais rien d'autre : ni les frais, ni la subvention, ni si une entrée a déjà été dépensée. Le bloc est invérifiable plutôt qu'invalide.
Les anciennes versions de Bitcoin Core gardaient ces blocs en mémoire et attendaient que le parent manquant apparaisse. C'était nécessaire parce que les blocs étaient demandés sur annonce, de sorte qu'un pair pouvait facilement les livrer dans le désordre. La synchronisation des en-têtes d'abord a supprimé ce besoin. Un nœud télécharge et vérifie désormais la chaîne d'en-têtes de 80 octets avant de demander le corps d'un seul bloc, ce qui signifie qu'il sait toujours où un bloc qui arrive se rattache et qu'il peut demander des corps à plusieurs pairs à la fois sans confusion. Le pool de blocs orphelins a été supprimé dans la même version, et sur un nœud moderne, un véritable bloc orphelin est pratiquement impossible à produire.
Une chose a toutefois gardé le nom. Bitcoin Core maintient encore un pool de transactions orphelines pour les transactions dont il n'a pas vu les entrées, en conservant jusqu'à 100 d'entre elles par défaut, sur le pari raisonnable que la transaction parente manquante suit de quelques secondes. Ainsi, lorsque le mot apparaît dans les journaux ou la configuration de Core, il désigne des transactions, jamais des blocs.
Où le voir
Le mot orphelin survit principalement là où l'on décrit autre chose.
Les explorateurs de blocs sont la plus grande source de confusion : plusieurs publient une page des blocs orphelins qui liste des blocs valides écartés lorsqu'un bloc concurrent l'a emporté, et la couverture médiatique reprend l'étiquette. Les tableaux de bord des pools de minage font de même, en rapportant un taux d'orphelins qui est en réalité un taux de blocs périmés. La documentation des altcoins, souvent copiée du wiki des débuts du bitcoin, emploie le terme dans les deux sens indistinctement.
Bitcoin Core ne le fait pas. Demandez-lui les branches concurrentes qu'il connaît et il indique chaque sommet avec l'un des statuts active (actif), valid fork (fork valide), valid headers (en-têtes valides), headers only (en-têtes seulement) ou invalid (invalide). Il n'existe pas de statut orphelin, parce que la situation que le mot décrivait autrefois ne se présente plus.
Pour un lecteur, le test utile est de savoir si le bloc en question a été vérifié. Si quelqu'un peut vous indiquer sa hauteur, son nombre de transactions et le pool qui l'a miné, le bloc a été entièrement validé et a perdu une course, donc le mot à employer est périmé.
Bloc orphelin vs bloc périmé
Un bloc orphelin ne peut pas être vérifié parce que son parent est inconnu. Un bloc périmé a été vérifié, était parfaitement valide et a été abandonné uniquement parce qu'un autre bloc de même hauteur a été construit dessus en premier. Presque tous ceux qui disent orphelin veulent dire périmé, y compris plusieurs explorateurs, il vaut donc la peine de demander lequel une source entend avant d'en tirer des conclusions. Ni l'un ni l'autre ne vous coûte quoi que ce soit en tant qu'utilisateur : les paiements d'un bloc écarté retournent au mempool et sont normalement minés de nouveau en un ou deux blocs.