Aller au contenu
buybitcoinsmart

Glossaire / Transactions et frais

Hauteur de bloc Coinbase

Qu'est-ce que la hauteur de bloc coinbase ?
La hauteur de bloc coinbase est la hauteur du bloc lui-même, inscrite dans les premiers octets du champ coinbase, ce que le BIP34 exige de chaque bloc depuis mars 2013.

Spécifié dans BIP-34.

C'est la correction la moins coûteuse apportée par bitcoin à un vrai bug. Avant cette règle, deux blocs dont les transactions coinbase étaient identiques produisaient des identifiants de transaction identiques, ce qui s'est produit aux blocs 91 842 et 91 880 en 2010. Inscrire la hauteur rend chaque coinbase unique et permet à quiconque de lire la position d'un bloc directement dans le bloc.

Comment cela fonctionne

La hauteur est stockée sous forme de push de script, si bien qu'un analyseur lit un octet de longueur puis autant d'octets de nombre.

Le nombre est écrit en little endian et encodé de façon minimale, comme le script bitcoin encode n'importe quel entier. Aux hauteurs actuelles, il occupe trois octets, donc le push lit 03 puis la hauteur. Le bloc 840 000, le bloc du halving, ouvre ainsi son coinbase par 03 40 d1 0c : un push de trois octets, puis 840 000 avec son octet le moins significatif en premier. Trois octets couvrent toutes les hauteurs jusqu'à 8 388 607, ce qui, à des blocs de dix minutes, se situe à plus d'un siècle, et l'encodage s'élargit de lui-même à quatre octets le jour venu.

Le BIP34 a été déployé comme soft fork activé par les mineurs, indexé sur le numéro de version du bloc. Les blocs déclarant la version 2 étaient comptés dans une fenêtre glissante de 1 000 : à 750 des 1 000 derniers, un bloc de version 2 dépourvu de sa hauteur devenait invalide, et à 950 l'ancien format de version 1 était rejeté d'emblée. Le dernier bloc de version 1 jamais accepté a été 227 835, horodaté du 24 mars 2013, et Bitcoin Core code encore en dur la hauteur d'activation à 227 931.

La règle a aussi remplacé une vérification coûteuse par une vérification gratuite. Le BIP30 interdisait déjà à une nouvelle transaction de réutiliser l'identifiant d'une transaction existante non dépensée, mais l'appliquer imposait une consultation de base de données pour chaque transaction de chaque bloc. Une fois chaque coinbase différente par construction, les identifiants en double ne peuvent plus se produire, si bien que les nœuds sautent cette consultation pour tout ce qui a été miné après le basculement. Une règle de consensus qui accélère la validation au lieu de la ralentir est assez rare pour être signalée.

Où le voir

Tout explorateur de blocs affiche le coinbase décodé, et la hauteur en est le premier élément.

C'est dans le minage que cela compte. Un pool assemble sa propre transaction coinbase à partir du modèle fourni par son nœud, et un pool qui insère la mauvaise hauteur, généralement en course avec un bloc qui vient d'arriver, produit un bloc que chaque nœud rejette avec une erreur bad-cb-height. L'électricité est dépensée, la preuve de travail est valide, et la récompense est nulle.

Cela compte aussi pour quiconque veut prouver quelque chose sur un bloc sans détenir toute la chaîne. Un en-tête de bloc n'indique pas sa propre hauteur ; on l'obtient en remontant jusqu'au bloc de genèse. Un bloc complet l'indique, à un endroit couvert par la racine de merkle et donc par la preuve de travail, si bien qu'une affirmation de hauteur étayée par un coinbase et une branche de merkle tient toute seule. Les chaînes latérales, les services d'horodatage et les protocoles de clients légers s'appuient tous sur cette propriété.

Hauteur de bloc Coinbase vs hauteur de bloc

La hauteur de bloc est une position dans la chaîne, un nombre que quiconque peut obtenir en remontant jusqu'au bloc miné par Satoshi le 3 janvier 2009. La hauteur de bloc coinbase est ce même nombre inscrit dans les données du bloc lui-même parce que le consensus l'exige. L'une est une observation sur la place d'un bloc, l'autre est un champ qu'un mineur peut renseigner de travers et perdre un bloc pour cela.

À ne pas confondre avec

Questions fréquentes

Pourquoi un bloc doit-il indiquer une hauteur qu'on pourrait simplement compter ?

Parce que compter exige toute la chaîne, et parce que des transactions coinbase identiques produisaient autrefois des identifiants de transaction identiques. Placer la hauteur dans le bloc rend chaque coinbase unique et rend la hauteur prouvable à partir du seul bloc.

Que se passe-t-il si un mineur inscrit la mauvaise hauteur ?

Chaque nœud rejette le bloc avec une erreur bad-cb-height et le mineur ne gagne rien. L'erreur vient généralement d'un pool qui construit un modèle pour une hauteur pendant qu'un bloc concurrent arrive et déplace la pointe.

À lire ensuite

Termes associés

Plus de termes : Transactions et frais

Lire cette page en anglais