Bitstack raises 5 million euros! 🎉

Qu'est-ce qu'un bloc Bitcoin ?

Disponible en podcast
Partager l’article :

Un des nombreux mécanismes permettant le bon fonctionnement de Bitcoin est la blockchain. Comme vous avez pu découvrir dans les articles du blog de Bitstack, la blockchain permet d’éviter la double dépense d’une même pièce bitcoin (ce que l’on appelle un UTXO).

Comme son nom l’indique, cette blockchain est constituée de blocs. Dans cet article, nous explorons ce que sont véritablement les blocs Bitcoin et comment chacun d’entre eux est construit.

La blockchain, qu’est-ce que c’est ?

La blockchain est un registre recensant l’intégralité des transactions Bitcoin. On l’utilise dans le protocole pour que chaque utilisateur soit en connaissance des transactions passées. Grâce à cela, on peut prouver la non-existence d’une dépense antérieure de bitcoins, et donc éviter la double dépense.

Ce concept est très simplement expliqué dans le White Paper de Bitcoin par Satoshi Nakamoto avec la célèbre phrase : « Le seul moyen pour confirmer l’absence d’une transaction est d’être au courant de toutes les transactions. »

L’objectif de ce registre est ainsi d’horodater les transactions passées. Afin de pouvoir apposer une heure sur ces informations, on les regroupe dans des blocs. Chaque bloc inclut l’empreinte du bloc le précédant dans le but de les rendre immuables, ce qui crée une sorte de chaîne. C’est pour cela que l’on parle de chaîne de blocs, ou de « blockchain » en anglais.

➤ En savoir plus sur le rôle de la blockchain au sein de Bitcoin.

Quelle est la structure d’un bloc sur Bitcoin ?

Un bloc Bitcoin est principalement constitué de deux parties distinctes. La première est son entête (header), qui contient 80 octets de métadonnées. La seconde est la liste des transactions exécutées.

Depuis la mise à jour SegWit de 2017, la taille d’un bloc est déterminée par une unité virtuelle que l’on appelle le poids. On calcule le poids d’un bloc en additionnant sa taille réelle, à trois fois sa taille, mais sans les témoins (signatures). La limite maximale est de 4 millions d’unités de poids. En théorie, un bloc Bitcoin SegWit peut donc avoir une taille réelle maximale d’un peu moins de 4 Mo. Toutefois, la taille moyenne réelle des blocs oscille normalement de 1 à 2 Mo depuis 2017.

L’arrivée du protocole Ordinals sur Bitcoin au début de cette année 2023 a affecté cette moyenne à la hausse. Depuis le mois de février, les blocs Bitcoin ont une taille moyenne réelle proche des 3 Mo.

L’entête du bloc Bitcoin

La principale partie d’un bloc Bitcoin est son entête (header). Lorsque l’on parle de l’empreinte d’un bloc, ou de son hash, c’est bien son entête que l’on a passé deux fois dans la fonction de hachage SHA256.

Pour comprendre la composition de l’entête d’un bloc, le mieux est d’en étudier un vrai. Voici des informations sur le bloc n° 714 254, miné par F2Pool le 15 décembre 2021 :

Si vous souhaitez faire de même sur votre nœud Bitcoin, lancez la commande "getblockheader" suivie de l’empreinte du bloc désiré sur bitcoin-cli.

Grâce à cette commande, nous découvrons plusieurs éléments sur le bloc étudié. Ces informations ne sont pas toutes incluses dans l’entête. La véritable entête du bloc est composée uniquement de 6 éléments :

  • La version du bloc (“version”). Cela permet de suivre les mises à jour du protocole Bitcoin ;
  • L’empreinte du bloc précédent (“previousblockhash”). C’est le hachage cryptographique de l’entête du bloc précédent. En l’occurrence, c’est l’empreinte du bloc 714 253. Comme nous vous expliquions dans notre article sur le fonctionnement de Bitcoin, chaque bloc inclut l’empreinte du bloc précédent ;
  • La racine de Merkle (“merkleroot”). C’est l’empreinte cryptographique qui se trouve à la base de notre arbre de Merkle. Je vous explique ce que c’est dans la partie suivante ;
  • L’horodatage du bloc (“time”). C’est une mesure du temps auquel le bloc a été miné (selon le mineur). Cette mesure est établie sur l’heure Unix, c’est-à-dire le nombre de secondes écoulées depuis le 1ᵉʳ janvier 1970. Il existe une certaine souplesse sur cette mesure puisqu’il suffit que l’horodatage soit supérieur au temps médian des 11 blocs précédents pour qu’il soit valide ;
  • La cible (“bits”). C’est un encodage de la cible de difficulté du bloc utilisée dans le cadre de la Proof-of-Work. Nous en parlions dans notre article sur la preuve de travail, l’empreinte doit être inférieure ou égale à la valeur cible pour que le bloc soit valide ;
  • Le nonce (“nonce”). C’est la valeur qui peut être modifiée par le mineur durant la recherche d’un hachage valide pour la preuve de travail.

Un entête de bloc Bitcoin contient uniquement ces 6 éléments. La commande getblockheader nous renvoie toutefois d’autres informations qui peuvent être intéressantes à analyser, mais qui ne font pas réellement partie de l’entête en elle-même :

  • L’empreinte du bloc (“hash”). C’est le résultat du hachage cryptographique de l’entête. Si le bloc est valide, cette empreinte doit être inférieure ou égale à la cible de difficulté pour la preuve de travail (le minage) ;
  • Le nombre de confirmations du bloc (“confirmations”). Cela indique le nombre de blocs valides minés au-dessus de celui-ci au moment de l’exécution de la commande ;
  • La hauteur du bloc (“height”). C’est la place du bloc parmi la blockchain. Ici, nous avons le 714 254ᵉ bloc de Bitcoin ;
  • Le temps médian des 11 derniers blocs (“mediantime”). C’est l’information qui est utilisée pour vérifier que l’horodatage du bloc est bien conforme au protocole ;
  • Le travail accumulé (“chainwork”). C’est la somme du travail de tous les blocs de cette chaîne. Rappelez-vous, la chaîne valide sur Bitcoin est celle disposant de la plus grande quantité de travail accumulé ;
  • L’empreinte du bloc suivant (“nextblockhash”). C’est le hachage cryptographique de l’entête du bloc suivant. En l’occurrence, c’est l’empreinte du bloc 714 255.

Maintenant que nous avons étudié la première partie du bloc, c’est-à-dire son entête, voyons ensemble la seconde partie du bloc Bitcoin.

Les arbres de Merkle d’un bloc Bitcoin

Les transactions dans un bloc Bitcoin ne sont pas simplement listées les unes après les autres. Au lieu de cela, on les organise au sein d’un accumulateur cryptographique appelé « arbre de Merkle ». Cela permet de produire une racine de Merkle, qui est un tout petit résumé de toutes les transactions du bloc.

Son principe est assez simple à comprendre. Chaque transaction est tout d’abord passée dans une fonction de hachage. Les hachages en résultants sont concaténés deux par deux (c’est-à-dire mis bout à bout). Puis, ils sont de nouveau passés dans une fonction de hachage. On continue ce processus ainsi de suite, jusqu’à ce que l’on débouche sur un unique hachage que l’on appelle « racine de Merkle ».

Comme vu précédemment, cette racine de Merkle est ensuite incluse dans l’entête du bloc. Cela permet de représenter toutes les transactions de manière condensée dans l’entête. Ainsi, la moindre modification d’une transaction passée vient modifier l’arbre de Merkle, donc cela modifie également la racine de Merkle, et donc, cela modifie l’entête du bloc et son empreinte. Puisque cette empreinte est utilisée dans le bloc suivant, la moindre modification d’une transaction passée vient finalement casser la chaîne de blocs de Bitcoin.

Depuis 2017 et l’introduction de SegWit, les blocs Bitcoin contiennent en réalité 2 arbres de Merkle. Le premier contient les transactions sans leur témoin, et le second contient le témoin de chaque transaction. La racine du second arbre de Merkle est incluse dans la transaction coinbase de telle sorte que les modifications puissent être détectées.

📌 La transaction coinbase est la première transaction du bloc Bitcoin. Elle permet au mineur gagnant de récolter les bitcoins qui lui sont dus en récompense de son travail de minage. Elle est composée de la récompense coinbase, qui émet de nouveaux bitcoins, et des frais des transactions incluses dans le bloc.

C’est de là que vient le nom de « SegWit », qui est l’acronyme de « Segregated Witness », ce qui veut dire en français « témoin séparé ».

Sur le schéma ci-dessus, on peut observer que les témoins, notés « WTX », disposent de leur propre arbre de Merkle. La racine de cet arbre est mise dans la transaction coinbase. Les transactions sans leurs témoins disposent, elles aussi, de leur propre arbre de Merkle. La racine du second arbre est mise dans l’entête du bloc. Ainsi, toutes les parties de toutes les transactions du bloc sont condensées dans l’entête.

Conclusion

La blockchain est utilisée sur Bitcoin pour éviter la double dépense. Elle agit comme un serveur d’horodatage. Un bloc est ainsi simplement un groupement de transactions Bitcoin avec quelques métadonnées. Sa structure se divise principalement en deux espaces : l’entête et les arbres de Merkle.

L’entête d’un bloc est composé de 6 éléments : la version, l’empreinte du bloc précédent, la racine de Merkle, l’horodatage, la cible de difficulté et le nonce.

Les transactions, quant à elles, sont regroupées au sein d’un arbre de Merkle. Cet accumulateur cryptographique produit une racine que l’on incrémente dans l’entête du bloc afin de lier le tout.

You may also like these articles

Bitstack SAS, a company registered in the Aix-en-Provence Trade and Companies Register under number 899 125 090, operating under the trade name Bitstack, is registered with the Autorité des Marchés Financiers (AMF) for the purchase/sale of digital assets for legal tender and for the custody of digital assets on behalf of third parties under number E2021-027, whose registered office is located at 100 impasse des Houillères 13590 Meyreuil, France.

Investing in digital assets carries a risk of partial or total loss of the invested capital.
Past performance is not indicative of future results.
DOWNLOAD BITSTACK