Nous poursuivons aujourd’hui notre série d’articles introductifs sur la technologie Blockchain. Si vous ne l’avez pas déjà fait, nous vous encourageons à lire le premier article de la série concernant les bases :

Comprendre la Blockchain – 1ere partie – les bases

Intéressons-nous maintenant à la manière dont les blocs sont construits au niveau des nœuds puis validés par le réseau avant d’intégrer la chaine.

 

Création du block, sélection des transactions et impacts des commissions

Comme décrit précédemment, des blocs contenant de nouvelles transactions sont ajouté à la chaine en continue. Les blocs de données sont généralement d’une taille fixe (1 MB dans le cas de Bitcoin) et validés puis ajoutés à la chaine lorsque suffisamment de transactions ont été reçues.  Comme il s’agit d’un réseau point à point (peer to peer), les nouvelles transactions sont propagées par le nœud à l’origine de la transaction à l’ensemble des autres. En fonction de la topologie du réseau, tous les nœuds ne recevront pas une transaction donnée en même temps, en fonction de leur éloignement au nœud initial. Ainsi, chaque nœud construit un nouveau bloc en ajoutant les transactions qu’il reçoit au cours du temps. D’un nœud à l’autre, le bloc peut être très différent au niveau des transactions incluses et il est tout à fait possible qu’une transaction récente soit validée plus rapidement qu’une transaction plus ancienne. Pour éviter ce problème, Bitcoin possède un mécanisme de priorisation via le concept des commissions (fees).

Les commissions sont collectées sur chaque transaction par les nœuds du réseau qui sont en charge de la bonne marche de celui-ci (de la même manière que des frais sont prélevées sur les transactions par cartes bancaires). Dans le cas de Bitcoin (et d’autres chaines similaires telles que Ethereum), le concept est poussé plus loin avec l’introduction de commissions variables. Par ce biais, il devient possible de payer une commission plus élevée pour augmenter les chances qu’une transaction donnée soit incluse dans le prochain bloc et donc validée plus rapidement. Chaque nœud recevant plusieurs transactions préférera inclure celle payant la commission la plus élevée.

L’impact des frais de transaction est actuellement un sujet de discussion particulièrement sensible alors que le succès des crypto-monnaie est source de congestion au niveau des réseaux sous-jacents. Par exemple et une fois encore dans le cas de Bitcoin, les commissions ont atteint un plus haut historique de $30 – $50 début Janvier, un montant particulièrement élevé.

 

Bitcoin cout moyen de transaction - Source: Bitcoinfees.info
Bitcoin cout moyen de transaction – Source: Bitcoinfees.info

 

Cout moyen de transaction - Source: Bitcoinfees.info
Cout moyen de transaction – Source: Bitcoinfees.info

Les frais varient de facon significative d’une technologie à l’autre:

  • BTC : $1.50
  • ETH : $0.40
  • DASH : $0.40
  • BCH : $0.05 – $0.10

En termes de pourcentages, les frais s’élèvent actuellement à 1.50% pour Bitcoin, 1.08% pour Ethereum et 0.07% pour Bitcoin Cash. Ces montants ne sont pas particulièrement faibles et du même niveau que les frais collectés par les organismes de paiement traditionnels. Réduire la congestion du réseau (qui à un impact sur les frais de transaction) est un enjeu majeur pour la communauté des développeurs et plusieurs approches sont actuellement explorées. Alors que les développeurs de Bitcoin travaillent à l’amélioration de la preuve de travail (introduction de Lightning Network), d’autres ont une approche plus radicale, via l’utilisation de technologies différentes pour la validation des blocs (Monero, Cardano, Ripple, NEM…). Ces approches différentes feront l’objet d’un article séparé.

 

Validation des blocs et consensus

Les frais de transactions n’interviennent qu’au niveau des nœuds pour la création des blocs. Le second problème rencontré par les systèmes distribués concerne l’adoption d’un bloc donné par l’ensemble des nœuds du réseau (ou à minima une majorité). Dans un système dans lequel les nœuds peuvent potentiellement tous proposer un bloc différent, il est indispensable d’avoir un algorithme permettant d’atteindre un consensus sur la version à utiliser. L’innovation majeure du papier initial de Bitcoin a été l’introduction du concept de preuve de travail (Proof of Work ou PoW) qui a fourni une solution à ce problème.

Article original de Bitcoin

Dans un réseau fonctionnant selon le concept de la preuve de travail, les nœuds sont en compétition pour résoudre un problème mathématique complexe ayant pour paramètre leur propre version du prochain bloc. Le premier nœud trouvant la solution à son propre problème est considéré vainqueur et son bloc est officiellement accepté par le reste du réseau comme étant validé, puis ajouté à la chaine. Le vainqueur collecte l’ensemble des commissions liées aux transaction du bloc et est également rétribué par un montant fixé de nouveaux coins émis à l’occasion.  Voyons dans le détail comment cela fonctionne en commençant par nous intéresser à la structure d’un bloc:

 

Bitcoin block structure – Source: Original Bictoin whitepaper

 

  1. L’en tête d’un bloc contient un hash du bloc précédent, c’est-à-dire une signature mathématiques de ce bloc après application d’une fonction de hashing donnée. Les fonctions de hashing ont plusieurs particularités : leur résultat est d’un format donné (en termes de taille notamment, généralement une puissance de deux) et elles sont construites tel qu’il est extrêmement difficile (voir impossible) de trouver leur fonction inverse. Enfin, leur sortie est très sensible à la valeur passée en argument d’une telle façon qu’une modification ne serait-ce que d’un seul bit de l’entrée génèrera une sortie très différente. Il existe de nombreuses fonctions de hashing et Bitcoin utilise l’une des plus connues : SHA-256.
  2. En seconde position se trouvent les transactions sous un format unifié.
  3. Enfin, le bloc contient un nombre aléatoire appelé ‘Nonce’ dont la valeur est définie ci-dessous.

Jusqu’ici nous avons expliqué la manière dont un bloc non validé est structuré. Pour qu’un nœud valide son bloc, la structure de données de celui-ci doit vérifier une condition particulière : sa signature (après application de la fonction de hashing) doit être égale à une valeur prédéfinie (un nombre contenant une certaine quantité de zéros en tête dans le cas de Bitcoin). Comme le ‘Nonce’ est l’unique élément non prédéfini dans le bloc, changer sa valeur est la seule façon d’obtenir un hash différent pour l’’ensemble du bloc. Par le caractère non inversible de la fonction de hashing, trouver la bonne valeur du Nonce satisfaisant l’équation impose d’essayer toutes les possibilités jusqu’à trouver la bonne (brute force). Lorsque la bonne valeur a été trouvée, le nœud dispose d’un bloc candidat valide et le soumet au réseau pour vérification. Les autres nœuds vérifient la bonne valeur du nonce ainsi que le hash du bloc précédent et acceptent le bloc candidat. Tout le travail effectué jusqu’à ce point-là sur leur propre bloc est perdu et les nœuds commencent à travailler sur le bloc suivant, en répétant le processus. Le nœud vainqueur se voit attribué de nouveau Bitcoins fraichement créés d’où le terme de ‘mining’. Pour le bon fonctionnement du réseau, un algorithme contrôle en permanence la difficulté du problème à résoudre en fonction du nombre de transactions et de la puissance de calcul totale afin de conserver une fréquence de création de blocs constante (10 mins dans le cas de Bitcoin).

Algorithme de validation des blocs

Avantages et désavantages du mining

En plus de sa fonction première de validation des blocs, la preuve de travail est un élément central de sécurité de la chaine. Supposons qu’un nœud corrompu souhaite propager une fausse version (avec par exemple des balances falsifiées pour certains comptes). Pour que cette version soit acceptée par les autres nœuds l’ensemble des blocs la composant doivent être valides, c’est-à-dire qu’ils doivent tous avoir un nonce correct vis à vis des données correspondantes. La puissance de calcul nécessaire pour recréer une chaine valide étant extrêmement élevée, il est très improbable qu’un nœud puisse y arriver d’autant plus que la chaine ‘officielle’ continue de croitre par ailleurs. Une telle possibilité n’est tout de même pas impossible si une majorité des nœuds du réseau s’accordent pour y arriver, on parle alors d’une attaque de type 51%. La probabilité de réussite d’une telle attaque diminue toutefois à mesure que le réseau s’agrandit mais reste une source d’inquiétude à l’heure ou l’immense majorité de la puissance de calcul est entre les mains de quelques groupes (cas de Bitcoin).

La preuve de travail n’est pas exempte de défauts :

  • Problème de dimensionnement : Les blocs ayants une taille et une fréquence de création prédéfinies, il est difficile pour les réseaux utilisant la preuve de travail de s’adapter à une augmentation massive du trafic ou à traiter un grand nombre de transactions concomitantes. Plusieurs options sont ou ont été sur la table pour remédier à ce problème, notamment augmenter la taille des blocs (Bitcoin Cash), déplacer certaines informations à l’extérieur de la chaine (SegWit) voir n’enregistrer que certaines transactions (Lightning Network).
  • Problèmes environnementaux: La preuve de travail est critiquée pour son utilisation abusive d’électricité, dont l’immense majorité est utilisée en pure perte. Les niveaux de consommation actuels ne sont pas tenables sur le long terme et font l’objet de débats. La course à la puissance de calcul a également un impact non négligeable sur le prix des composants informatiques telles que les cartes graphiques, lesquelles sont particulièrement adaptées à certains types de fonctions de hashing et ont vu leur prix s’envoler récemment.
  • Problème de la concentration des réseaux : Le rendement de l’activité de mining est particulièrement aléatoire par construction. Cela a mené à la constitution de groupes mettant en commun leur ressources (pool) et partageant les profits. On pourrait citer également la création de matériel spécialisé dans le mining de certaines fonctions de hashing (‘ASICS’) qui rendent quasiment impossible l’activité de mining pour les particuliers disposant de machines classiques. Il s’en suit une concentration croissante de la puissance de calcul entre les mains de quelques groupes ce qui va à l’encontre de la vision initiale du système et rend une prise de contrôle potentielle (attaque 51%) plus probable.

 

Plusieurs solutions ont été proposés pour tenter de remédier à ces problèmes et feront l’objet d’un prochain article.

Laisser un commentaire