Blog

Points de vue sur le Bitcoin

Qu’est-ce qu’un fork dans le domaine du Bitcoin?

À la lumière de tout ce qui se dit actuellement dans les médias, il est impératif de bien expliquer ce phénomène pour d’éviter la désinformation.

Dans le domaine informatique, un « fork » est un croisement qui mène à la création d’un nouveau programme issue du code source. Par exemple, les développeurs procèdent souvent à des forks pour apporter des modifications au code source d’un logiciel libre.

Quand on parle du fork dans le domaine du Bitcoin, il est question de la création de 2 chaînes de blocks de transactions simultanées. Ce processus, qui peut paraître inquiétant à première vue, survient pourtant 1,5 fois/jour en moyenne!

Processus de validation des transactions (proof-of-work)

Pour qu’une transaction de bitcoins puisse être valide, elle doit être vérifiée par des ordinateurs qui sont connectés au réseau 24h/24h, appelés des mineurs. Ils sont en compétition les uns contre les autres pour être le premier à découvrir la signature unique (l’empreinte cryptographique) d’un bloc de transactions. Dès qu’un mineur arrive à la solution (en résolvant une équation mathématique complexe), il doit propager l’information le plus rapidement possible aux « nœuds » qui sont connectés au réseau pour qu’il soit validé. Ce processus se répète environ à chaque 10 minute.

Cependant, il arrive parfois que 2 mineurs arrivent à la même solution en même temps, d’où la création d’un fork!

Cette course effrénée se termine lorsqu’un 3ème mineur découvre un nouveau bloc en partant de la signature de l’un des 2 blocs qui a été créé précédemment. C’est cette nouvelle chaîne de blocs qui est admise dans le Blockchain contenant l’historique des transactions depuis la création du Bitcoin en 2009.

Qu’arrive-t-il au bloc sur lequel aucune chaîne de transaction n’a été créée?

Le bloc issu du fork devient alors un  « block orphelin » puisqu’il n’est pas rentable pour les mineurs de construire dessus. En effet, pour chaque bloc dont la signature est découverte, il y a une récompense de 25 BTC. C’est comme ça que les bitcoins sont émis dans le marché…

Le mineur gagne sa récompense si le bloc respecte toute une série de règles qui ont été acceptés par consensus (la majorité). En voici quelques-unes:

  • Chaque transaction a été correctement signée avec l’algorithme SHA-256;
  • Le bloc contient la signature du bloc précédent et de celui qui le suit;
  • Aucune transaction n’a été effectuée en double;
  • Le nombre d’imput est équivalent au nombre d’output;
  • Les mineurs ont les dernières mises à jour dans leur software;

Le but du mineur est donc de découvrir un bloc qui est du « bon côté de l’histoire ». Comme vous pouvez le voir ici-haut, si un mineur essaye de résoudre l’équation mathématique complexe à partir d’un block orphelin, il ne va pas être récompensé car celui-ci ne respectera pas entre autres la règle no 2.

Selon les autres règles qui régissent le blockchain, un bloc va être considéré comme faisant partie intégrante du Blockchain après 100 confirmations, c’est-à-dire après la création du 100ième bloc qui le suit. C’est pour cette raison qu’il n’est pas conseillé aux mineurs qui découvrent les block de dépenser leur récompense de 25 BTC avant ce temps (environ 17 heures).

Quand un fork survient, des alertes sont émises pour aviser les utilisateurs d’attendre plusieurs confirmations avant de re-transférer les fonds de leurs portefeuilles. En effet, il faut qu’il y aille assez de blocks qui soient construits sur le bloc contenant la transaction…C’est une période de perturbation où le consensus décide la laquelle des 2 chaînes de block va faire partie intégrante du Blockchain.

Conclusion

Dans le domaine du Bitcoin, il ne faut pas toujours voir un fork comme un événement dangereux car le système fini toujours par se régulariser lui-même. Outre le processus de validation des blocs par les mineurs, d’autres événements peuvent mener à un fork du Blockchain tels que l’incorporation d’une nouvelle version dans le software et les bugs dans la base de données d’un serveur !