Glossaire / Nœuds et logiciels
Chaîne d'en-têtes
Aussi appelé Meilleure chaîne d'en-têtes.
- Qu'est-ce que la chaîne d'en-têtes ?
- La chaîne d'en-têtes est la séquence d'en-têtes de bloc de 80 octets qu'un nœud a vérifiés, laquelle peut compter des milliers de blocs d'avance sur les données de blocs qu'il a réellement téléchargées.
Un nœud suit deux choses à la fois : les en-têtes auxquels il croit et les corps de blocs qu'il a stockés. Les en-têtes pèsent 80 octets chacun, donc une année d'en-têtes, environ 52 560 blocs, représente à peu près 4,2 Mo. Cette différence de taille explique pourquoi un portefeuille peut connaître la hauteur actuelle de la chaîne et le travail cumulé total bien avant de pouvoir vous dire ce que contient un bloc donné.
Comment cela fonctionne
La chaîne d'en-têtes est ordonnée par preuve de travail cumulée, et non par le nombre de blocs qu'elle contient.
Chaque en-tête nomme son parent, si bien que l'ensemble des en-têtes dont un nœud a entendu parler forme un arbre plutôt qu'une ligne. La branche qui porte le travail total le plus élevé est la meilleure chaîne d'en-têtes, et le nœud garde aussi en mémoire les branches perdantes, au cas où l'une d'elles prendrait l'avantage plus tard. Bitcoin Core conserve cet arbre dans l'index de blocs, une petite base de données LevelDB située dans le répertoire blocks/index, entièrement séparée des fichiers de blocs bruts qui contiennent les transactions.
Parce que l'arbre est conservé, un nœud peut décrire sa propre incertitude. La commande getchaintips liste chaque sommet qu'il connaît avec un statut associé : active pour la branche qu'il suit, headers-only pour une branche dont les corps n'ont jamais été récupérés, valid-fork pour une branche entièrement validée qui a perdu la course, et invalid pour une branche qui a enfreint une règle. Une réorganisation n'est rien d'autre que le nœud qui se déplace d'un sommet à un autre dans cet arbre une fois qu'il dispose des blocs pour le faire.
Les en-têtes survivent à ce à quoi les données de blocs ne survivent pas. Un nœud élagué supprime les anciens fichiers de blocs pour économiser de l'espace, et même avec prune=550, le réglage le plus petit que Bitcoin Core accepte, il conserve chaque en-tête depuis le bloc de genèse. Sans eux, il ne pourrait pas vérifier qu'un nouveau bloc s'appuie sur la chaîne qu'il a déjà acceptée, donc les en-têtes sont la partie qu'il ne peut jamais jeter.
Où cela se voit
La chaîne d'en-têtes est le nombre que votre nœud cite lorsqu'il vous indique son retard.
Lancez getblockchaininfo et vous obtenez deux champs, blocks et headers. Headers est la hauteur de la meilleure chaîne d'en-têtes, blocks est la part de celle-ci qui a été téléchargée et entièrement validée, et la différence entre les deux correspond au travail encore en attente. Sur un nœud synchronisé, les deux concordent, et un nœud dont la valeur headers est figée est un nœud qui a perdu le contact avec ses pairs, et non un nœud simplement lent.
Les portefeuilles légers ne conservent rien d'autre. Un portefeuille SPV ou un client à filtres compacts ne stocke que les en-têtes et s'en sert pour confirmer qu'une transaction qui l'intéresse repose sur une preuve de travail réelle. La difficulté se calcule aussi à partir des en-têtes, puisque la cible est recalculée tous les 2 016 blocs en utilisant uniquement les horodatages et les valeurs nBits déjà présents dans la chaîne, ce qui signifie qu'un client peut vérifier que le travail qu'il compte est authentique sans jamais voir une transaction.
Chaîne d'en-têtes vs en-tête de bloc
Un en-tête de bloc est un enregistrement unique de 80 octets ; la chaîne d'en-têtes est l'ensemble de ces enregistrements reliés jusqu'au bloc de genèse du 3 janvier 2009. La distinction importe lorsque quelqu'un dit qu'un client léger vérifie la preuve de travail. Un seul en-tête prouve qu'un seul bloc a coûté cher à produire. Seule la chaîne qu'ils forment, chacun s'engageant sur son parent, prouve qu'un bloc précis se situe derrière une série ininterrompue de travail coûteux que personne n'a discrètement remplacée.