La blockchain pour les nuls 1 : blockchains et mécanismes de consensus

La blockchain pour les nuls 1 : blockchains et mécanismes de consensus

Vous appréciez notre travail......nous recrutons !

Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.

Les crypto-monnaies sont en plein essor en 2021, avec une capitalisation boursière passant de 750 à plus de 3 000 milliards de dollars. Soyons honnêtes, cela est principalement dû à la spéculation. Beaucoup de personnes impliquées n’ont pas la moindre idée de ce qui se cache derrière les jetons dans lesquels elles investissent.

Mais si nous mettons cela de côté et que nous nous penchons sur les fondamentaux techniques, il faut reconnaître que les années 2020-2021 ont vu arriver une série de nouvelles blockchains dotées de mécanismes de consensus meilleurs et plus rapides (viables ?), comme le Proof of Stake, et de nouvelles applications largement utilisés, comme la finance décentralisée(DeFi) et les jeton non fongibles (NFT).

Avant de parler de ces derniers, nous devons prendre un peu de recul : Qu’est-ce qu’une blockchain ? Une crypto-monnaie ? Un Proof of Work ? Un bloc ? Un portefeuille ? Un smart contract ? L’Ethereum Virtual Machine (EVM) ? Un jeton ERC-20 ? Un NFT ? La finance décentralisée (DeFi) ? Les Oracles ?

Cet article est le premier d’une série de 3 qui se concentre sur les fondamentaux techniques des crypto-monnaies :

Avis de non-responsabilité : ceci n’est pas un conseil financier.

Qu’est-ce qu’une blockchain ?

Une blockchain est une base de données peer-to-peer décentralisée et trustless qui stocke un type de données spécial : des blocs. Les blocs sont immuables et ordonnés en une chaîne, un bloc n’ayant qu’un seul bloc précédent et un seul bloc suivant. D’où le terme “blockchain”.

Un bloc est composé de :

  • Un timestamp ;
  • Un ensemble de records ;
  • Un pointeur vers le bloc précédent (son hash).

Dans les blockchains les plus populaires (par exemple Bitcoin, Ethereum), également appelées distributed ledgers, les enregistrements stockés par les blocs sont des transactions. Exemples de transactions : transferts de coins ou appels de fonctions (nous y reviendrons plus tard).

Blocks

Les mécanismes de consensus

La plupart des blockchains sont sans permission : tout le monde est libre d’ajouter des serveurs au réseau et d’interagir avec la blockchain, y compris des acteurs malveillants. Les blockchains ont dû mettre au point des mécanismes de consensus qui garantissent que chaque bloc écrit dans la base de données est valide.

Ces mécanismes de consensus reposent sur la cryptographie et la théorie des jeux : il doit être plus rentable d’écrire des transactions légitimes dans les blocs que d’essayer d’écrire de fausses transactions (par exemple, créer des coins de nulle part).

Proof of Work

Proof of Work (PoW) a été le premier mécanisme de consensus à être conçu et mis en œuvre. Bitcoin et Ethereum, les blockchains les plus populaires, sont toutes les deux basées sur PoW et se sont avérées inviolables : elles n’ont jamais été piratées.

Étudions l’implémentation de PoW par Bitcoin. Cela nous aidera à comprendre comment la cryptographie et la théorie des jeux sont utilisées ensemble dans les blockchains. Je pars du principe que vous savez ce qu’est un hash dans la section suivante.

Le minage

Vous avez probablement déjà entendu le terme “minage”, qui signifie participer à l’ajout de blocs à la blockchain.

Pour être ajouté à la blockchain, un bloc est associé à son hash (qui sera référencé par le bloc suivant). Le hash du bloc est calculé à partir :

  • Du timestamp du bloc ;
  • Des transactions du bloc (le nombre de transactions contenues dans le bloc est limité par la taille maximale du bloc : 1 Mo pour Bitcoin) ;
  • Du hash du bloc précédent ;
  • D’un nonce (un nombre qui est choisi pour correspondre à des conditions spécifiques).

Le hash doit satisfaire la condition suivante pour être accepté par le réseau : être plus petit que le target hash. Le target hash est une valeur numérique en hexadécimal qui est utilisé pour définir la difficulté du processus de minage. Il peut être ajusté pour l’augmenter ou la diminuer, et donc adapter la fréquence de minage de blocs. (Par exemple, pour Bitcoin, le target hash est ajusté par le réseau de sorte qu’un bloc soit miné toutes les 10 minutes).

Un target hash typique ressemble à ceci : 0000000000000000000633b91a8cd72235104935c9d3af0b0edae9ad6f89f4ef. Le nombre de zéros au début du hash rendent le hash difficile à trouver car cela diminue sa taille.

Le seul élément modifiable d’un bloc est le nonce. Pour trouver le bon hash, les mineurs (nœuds de la blockchain) doivent donc itérer sur tous les nonces possibles jusqu’à ce qu’ils trouvent le bon.

# Algorithmic approximation of mining a block
block_nonce = 0
while block_hash > TARGET_HASH:
  block_hash = hash(
    1635971597,                    # Block timestamp
    '00000000...0edae9ad6f89f4ef', # Previous block hash
    'f5ef4359...efe2bf58b7c02557', # Transactions hash
    block_nonce                    # Nonce
  )
  block_nonce += 1

add_to_chain(...)

Regardez à quoi ressemble un bloc de bitcoin sur un explorateur : par exemple sur Blockchain.com Bitcoin Explorer !

Les récompenses de bloc

Le premier mineur à trouver un nonce valide est récompensé par quelques Bitcoins, mais seulement si le bloc est validé par d’autres pairs.

Cette règle met tous les mineurs en concurrence les uns avec les autres et conduit les serveurs de mineurs à être de plus en plus puissants pour obtenir des Bitcoins. Les serveurs de minage sont donc coûteux à acheter et à alimenter.

La théorie des jeux entre en jeu à ce stade : pour avoir une chance de gagner la course au minage d’un bloc, il faut dépenser beaucoup d’argent en matériel et en énergie ; et pour gagner de l’argent (= Bitcoins), les transactions contenues dans le bloc doivent être validées par le réseau (pairs). Si un mineur essaie de pousser de fausses transactions, le bloc ne sera pas validé et donc le mineur non récompensé. Par conséquent, il perdra l’argent investi dans le processus de minage !

L’immuabilité assurée par la cryptographie et la théorie des jeu

S’appuyer sur des hashes garantit que la blockchain est immuable : modifier une seule transaction dans un bloc modifierait totalement le hash du bloc. Mais parce que le bloc suivant contient le hash de ce dernier, son hash changerait également !

Les développeurs d’applications utilisant Git connaissent ce concept : toute modification d’un commit précédent génère un hash divergent pour tous les commits ultérieurs et la branche divergera du remote.

Disons que quelqu’un veut modifier une transaction qui a eu lieu il y a 4 blocs, il devra :

  1. Trouver le nounce du bloc altéré (en utilisant uniquement la puissance de quelques mineurs complices) ;
  2. Trouver le nounce pour chacun des 4 blocs suivants, car leurs hashes seraient tous modifiés ;
  3. Faire valider les blocs par le réseau.

On peut imaginer que ce procédé demandera énormément d’énergie avec peu de chances de succès : ce n’est pas la peine d’essayer !

Les limitations de Proof of Work

Le mécanisme de consensus PoW est excellent pour sécuriser la blockchain Bitcoin, mais il est :

  • Lent : 1 bloc toutes les 10 minutes ;
  • Coûteux et mauvais pour l’environnement : beaucoup de matériel et d’énergie sont nécessaires ;
  • Ne passe pas bien à l’échelle : une grande partie du travail est effectuée pour rien car les mineurs sont en concurrence ;
  • Sensible à l’attaque des 51 % : si une organisation possède plus de 51 % des mineurs, elle peut choisir quelles transactions sont autorisées à être écrites sur la blockchain en invalidant des blocs.

Toutes ces limitations ont conduit à la conception de nouveaux mécanismes de consensus.

Proof of Stake

Proof of Stake (PoS) est l’alternative la plus largement adoptée à PoW. Dans le système PoS, les nœuds ne sont pas appelés mineurs mais validateurs et doivent staker (= verrouiller) un grand nombre de coins pour participer à la validation des blocs.

Pour chaque bloc, un groupe de validateurs est choisi pour la validation (qui fonctionne souvent via quorum). Le nombre de blocs pour lesquelles un validateur est impliqué est proportionnel à la taille de son stake : s’il possède 1% des coins de la blockchain, il sera choisi pour 1% des validations de bloc.

Comme dans le PoW, les nœuds sont récompensés lorsqu’ils valident des blocs et la cryptographie est utilisée pour assurer l’immuabilité.

Il existe un grand nombre d’implémentations différentes de PoS, dont voici quelques exemples :

Autres mécanismes ?

D’autre mécanismes de consensus que PoW et PoS existent mais aucun d’entre eux n’a encore été adopté massivement.

Conclusion

Dans cet article, nous avons survolé le fonctionnement des blockchains et des mécanismes de consensus. Dans le prochain article, nous parlerons davantage de la manière d’interagir avec les distributed ledgers et la blockchain.

Si vous voulez en savoir plus, il existe une grande quantité de documentation détaillée. Quelques exemples :

Partagez cet article

Canada - Maroc - France

Nous sommes une équipe passionnée par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Science le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.

Support Ukrain