Aller au contenu
buybitcoinsmart

Glossaire / Minage et consensus

Racine de Merkle

Qu'est-ce que la racine de Merkle ?
La racine de Merkle est le hachage unique de 32 octets inscrit dans l'en-tête d'un bloc qui engage toutes les transactions de ce bloc, dans l'ordre exact où le mineur les a disposées.

Modifiez un satoshi dans un paiement, inversez deux transactions ou ajoutez-en une de plus, et la racine change complètement. Les mineurs comptent là-dessus : le nonce de 32 bits n'offre qu'environ 4,3 milliards d'essais, aussi les logiciels de minage modifient la transaction coinbase pour produire une nouvelle racine et continuer à chercher. Pour quiconque détient des bitcoins, ce champ unique explique pourquoi un bloc ne peut pas gagner ou perdre discrètement un paiement après avoir été miné.

Comment cela fonctionne

La racine de Merkle est calculée et non choisie, et c'est ce qui lui donne sa valeur.

Elle occupe 32 des 80 octets de l'en-tête, et le mineur y écrit la valeur que produisent les transactions. Chaque nœud qui reçoit le bloc reconstruit l'arbre à partir de la liste de transactions qu'il a reçue et compare sa propre réponse avec l'en-tête. Une divergence signifie un rejet, immédiat et sans discussion. Il n'existe aucune version du protocole dans laquelle un en-tête dit une chose et le corps du bloc en dit une autre.

Cette vérification fait de la racine le pivot de la boucle de minage. Le nonce ne fait que quatre octets, soit 4 294 967 296 valeurs possibles ; une machine tournant à 200 billions de hachages par seconde les épuise toutes en environ vingt millionièmes de seconde. Les mineurs ont donc besoin d'un moyen de générer de nouveaux candidats, et le moins coûteux consiste à modifier la transaction coinbase. Les pools envoient à chaque machine la coinbase coupée en deux moitiés avec un espace entre elles, la machine écrit ses propres octets dans cet espace, l'identifiant de la transaction coinbase change, la racine de Merkle change, et 4,3 milliards de nouveaux nonces deviennent disponibles. Faire varier l'horodatage et les 16 bits de version réservés par le BIP320 offre une marge supplémentaire.

Segregated witness a ajouté une seconde racine sans toucher à l'en-tête, car y toucher aurait constitué un hard fork. Le BIP141 définit un arbre distinct sur les identifiants de transaction witness, dont la racine est écrite dans une sortie de la transaction coinbase, marquée par le préfixe de quatre octets 0xaa21a9ed. Comme la coinbase est elle-même une feuille de l'arbre ordinaire, cet engagement witness finit de toute façon par être intégré à la racine de Merkle de l'en-tête, un niveau plus loin.

Où le voir

La racine de Merkle est l'un des champs que tout explorateur de blocs vous montrera, et l'un des rares que vous pouvez vérifier à la main.

Bitcoin Core l'affiche sous le nom merkleroot dans la sortie de getblockheader et getblock. La valeur du bloc genesis, qui commence par 4a5e1e4b, est un bon point de départ, car ce bloc ne contient qu'une seule transaction : un arbre à une feuille est sa propre racine, donc la racine de Merkle et l'identifiant de transaction sont identiques. Tout bloc ne contenant qu'une transaction coinbase a la même propriété.

Vous la voyez aussi dans les protocoles de minage plutôt que dans les blocs. Une notification de tâche Stratum n'envoie pas du tout les transactions au mineur. Elle envoie les deux moitiés de la coinbase plus la courte liste de hachages nécessaires pour remonter de la coinbase jusqu'au sommet, afin que la machine puisse calculer elle-même la racine pour chaque extranonce qu'elle essaie. Stratum V2 change qui sélectionne les transactions au départ, mais la racine est toujours assemblée de la même manière.

Racine de Merkle vs hachage de l'en-tête du bloc précédent

La racine de Merkle et le hachage de l'en-tête du bloc précédent sont tous deux des hachages de 32 octets côte à côte dans le même en-tête de 80 octets, et ils pointent dans des directions différentes. La racine de Merkle pointe vers l'intérieur, vers le contenu de ce bloc : les transactions, leur ordre, et rien d'autre. Le hachage de l'en-tête du bloc précédent pointe vers l'arrière, vers tout l'historique qui le précède. Modifiez un paiement et seule la racine de Merkle casse. Modifiez un bloc de l'année dernière et le hachage de l'en-tête du bloc précédent de chaque bloc depuis lors est faux, ce qui fait la différence entre falsifier un bloc et falsifier une chaîne.

À ne pas confondre avec

Questions fréquentes

Que se passe-t-il si la racine de Merkle ne correspond pas aux transactions ?

Le bloc est rejeté par tous les nœuds. Reconstruire la racine à partir de la liste de transactions est l'une des vérifications les moins coûteuses qu'un nœud effectue, il est donc impossible de publier un bloc dont le contenu diffère de ce que son en-tête engage.

Pourquoi les mineurs modifient-ils la racine de Merkle pendant le minage ?

Parce que le nonce s'épuise. Quatre octets donnent environ 4,3 milliards d'essais, que le matériel moderne consume presque instantanément, aussi les mineurs modifient la transaction coinbase pour produire une nouvelle racine de Merkle et une nouvelle série de candidats.

À lire ensuite

Termes associés

Plus de termes : Minage et consensus

Lire cette page en anglais