Un block (bloc en français) est un structure qui contient des données, c'est là qu'on va stocker les informations des différentes transactions qui ont été émises et validées dans la blockchain.
Voici certaines de ses caractéristiques :
- Version
- Hash du block précédent
- Racine de Merkle
- Bits (difficulté)
- Timestamp (horodatage)
- Nonce (nombre que les mineurs font varier pour valider un bloc)
La blockchain (ou chaîne de bloc) est donc une suite de blocs ordonnés les uns à la suite des autres en suivant certaines règles.
Tout le monde peut lire le contenu d'un block car la blockchain est ouverte au grand public : les données sont accessibles à quiconque ayant une connexion internet.
Il suffit de télécharger un programme permettant de faire tourner un noeud et de télécharger la blockchain sur son ordinateur.
Vous pouvez également utiliser des services externes qui se chargent de le faire à votre place, rendant l'information accessible directement depuis un site web comme l'explorateur de blockchain du site blockchain.com ou encore celui de blockchair.com.
Si vous voulez avoir plus de détails sur ce qu'on peut trouver dans un block, vous pouvez regarder le block 200 000 sur blockchain.com par exemple.
Validité d'un block (consensus PoW)
Un bloc doit respecter certains critères avant d'être ajouté dans la blockchain.
Comment savoir si un block est valide ?
Dans le consensus* Proof Of Work (POW), celui utilisé par Bitcoin, pour qu'un block soit valide, il doit avoir un hash qui commence par suffisamment de zéros (leading zeros) !
Il faut également s'assurer qu'il n'y ait pas de mauvaises transactions (signatures invalides) mais nous aborderons ce concept dans un autre chapitre.
Le nombre de zéros attendu dépend de la période à laquelle nous sommes, pour le Bitcoin, en juin 2022 il faut 19 zéros !
Ce nombre augmente au fil des années, nous verrons plus tard pourquoi.
*Nous aborderons le concept des consensus dans un autre cours, retenez juste que c'est l'ensemble des règles au sein d'une blockchain qui détermine la validité de cette dernière
Hash d'un block
Dans le chapitre précédent, nous avons étudié le concept des fonctions de hachage : une micro variation de la donnée d'entrée entraine un hash différent.
Cette notion est importante à comprendre.
Dans la blockchain Bitcoin, le hash du block est calculé à partir des données suivantes :
- Version
- Hash du block précédent
- Merkle root
- Timestamp (horodatage)
- Bits (difficulté)
- Nonce
Obtenir un block valide en le minant !
Pour que le block soit valide, son hash doit commencer par suffisamment de zéros (nombre défini à un instant T).
Il est (quasiment) impossible qu'un block soit valide du premier coup : son hash initial a peu de chance de commencer par assez de 0...
Nous savons qu'une variation de la donnée d'entrée entraine un hash différent, nous allons donc faire varier le nonce pour obtenir un block valide !
C'est l'action de miner !
À vous d'essayer
Hash du block de démo
Le hash du block dans la démo a été simplifié et est calculé à partir des champs suivants :
- block height
- nonce
- données
- hash du block précédent
Instructions
- Observez le bloc de la démo : son hash ne commence pas par suffisamment de zéros ! Pour cette démo, le nombre de zéros attendu minimum est de 4.
- Essayez d'augmenter le nonce à la main, changez 0 par 1, puis par 2, puis par 3...
- Vous constatez que le hash change ! (c'est normal).
- Maintenant cliquez sur "Miner" l'ordinateur va le faire à votre place et ira beaucoup plus vite.
Récompense de minage
Vous avez sans doute remarqué que le temps de minage était très court !
Ce calcul est beaucoup plus long à effectuer dans la vie réelle car il faut plus de zéros requis et d'autres paramètres d'entrée sont à prendre en compte.
Lorsque vous validez un block, vous pouvez l'ajouter à la blockchain en le signalant à tous les autres noeuds.
Si le block est accepté, vous gagnerez une récompense (des Bitcoins pour la blockchain Bitcoin naturellement...) car cela vous aura couté du temps et de l'énergie (électricité) c'est la preuve de travail (Proof Of Work).
La récompense est fixée en inscrivant la première transaction dans le block, elle est destinée à récompenser le mineur : c'est la coinbase transaction.
Le montant de la coinbase transaction était de 50 BTC au lancement de la blockchain bitcoin, ce montant est divisé par deux (halved) en moyenne tous les 210 000 blocs : on dit que c'est la période de Halving.
À cela s'ajoute les frais de transactions que les utilisateurs souhaitant envoyer des Bitcoins vont payer ajoutant ainsi une rémunération supplémentaire au mineur !
Le montant des frais de transactions est calculé en fonction de plusieurs critères comme le poids de la transaction (au sens mémoire informatique et pas du montant), de l'état du réseau : est-il congestionné (surchargé) ? du type de script de transaction : P2PKH ? P2SH ? P2TR ? etc.
1 block trouvé toutes les 10 minutes (pour Bitcoin)
Dans la blockchain Bitcoin, tout est fait pour qu'en moyenne un block soit trouvé toutes les 10 minutes (parmi tous les mineurs en compétitions) !
C'est le temps que Satoshi Nakamoto a évoqué dans le whitepaper du Bitcoin.
Vous comprenez pourquoi le nombre de zéros requis augmente dans le temps : il y a de plus en plus de mineurs qui arrivent au fil du temps = la puissance de calcul globale est augmentée, donc la probabilité de trouver un block rapidement (< 10 minutes) augmente.
Pour contrer ça, le fait d'augmenter le nombre de zéros ajoute de la difficulté.
A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory.