Bitcoin et ses forks

Dans le monde de Bitcoin et des cryptomonnaies, nous entendons souvent parler de fork, de hard fork ou encore de soft fork pour désigner une multitude de choses. Aujourd’hui nous allons tenter de démystifier ces terminologies en examinant l’histoire bien fournie des forks de Bitcoin.

Qu’est-ce qu’un fork ?

Le mot fork est un mot anglais signifiant “embranchement”, “bifurcation” ou “fourche”. Il est notamment utilisé dans le développement logiciel pour désigner le programme dérivé du code source d’un programme existant : LibreOffice est un fork de OpenOffice par exemple. Dans le milieu des cryptomonnaies, le mot fork peut parfois également s’entendre dans ce sens-là : les codes sources de Litecoin et de Dash sont des forks du code source de Bitcoin. Malheureusement, ce terme recouvre également deux autres sens, et l’ensemble peut prêter à confusion.

Un fork est un embranchement de la chaîne…

Le premier sens du mot fork est l’embranchement de la chaîne de blocs. Ce type d’embranchement se produit régulièrement dans Bitcoin de manière tout à fait normale et bénigne, notamment lorsque deux mineurs trouvent simultanément un bloc différent de leur côté. Les deux blocs trouvés sont tout à fait valides, mais les nœuds du réseau – considérant par exemple que seul le premier bloc reçu est le bon – n’ont pas la même vision de la chaîne, ce qui crée un conflit sur le réseau et le sépare momentanément en deux. La situation est rapidement résolue lorsqu’un nouveau bloc est trouvé : c’est alors la chaîne la plus longue (la chaîne possédant le plus de travail accumulé) qui est sélectionnée par le réseau, et le bloc isolé est invalidé.

 

Conflit sur le réseau provoqué par un embranchement commun de la chaîne
Conflit sur le réseau provoqué par un embranchement commun de la chaîne.

Mais un embranchement de la chaîne peut aussi être causé par une incompatiblité des règles de consensus, c’est-à-dire des règles déterminant la validité des transactions et des blocs, utilisées par les nœuds. On parle alors de hard fork ou d’embranchement “dur” :  la séparation est alors permanente, es deux chaînes résultantes étant vouées à coexister et à chacune continuer à exister.

… ou bien une modification des règles de consensus !

Par métonymie, le terme fork en est venu à désigner toute modification des règles de consensus susceptible de provoquer un embranchement de la chaîne et une séparation permanente du réseau. Notez qu’il s’agit d’une possibilité et que ces mises à niveau ne donnent pas forcément lieu ensuite à un embranchement effectif.

En ce sens, le hard fork est alors une mise à niveau non rétrocompatible qui impose à tous les nœuds du réseau de se mettre à jour au moment du changement, au risque de ne pas reconnaître la nouvelle chaîne comme étant la bonne. Un hard fork peut être extensif, c’est-à-dire qu’il peut élargit les règles de consensus : la question de l’augmentation de la taille limite des blocs de Bitcoin en est ainsi un exemple. Mais il peut aussi être bilatéral en créant une incompatiblité des deux côtés, ce qui est l’option généralement choisie par les développeurs.

Le soft fork quant à lui est un changement qui est rétrocompatible pour les nœuds non miniers du réseau et qui est susceptible de créer un embranchement seulement s’il n’est pas soutenu par la majorité de la puissance de minage. Le soft fork est nécessairement restrictif : il s’agit d’une restriction des règles de consensus, comme peuvent l’être la diminution de la taille limite des blocs ou l’ajout d’une nouvelle règle.

Dans toute la suite de cet article, l’on parlera de fork pour désigner un changement du protocole afin de le différencier de l’embranchement effectif de la chaîne.

Les forks non contentieux

Les forks de consensus peuvent être répartis en trois catégories différentes : ils peuvent avoir lieu de manière accidentelle, ils peuvent constituer des mises à niveau recueillant le consentement quasi-unanime de la communauté, ou ils peuvent être contentieux en faisant l’objet d’un débat. L’histoire de Bitcoin est jalonée de ces trois types de forks. Nous parlerons d’abord des deux premières catégories avant de nous attarder sur la troisième, qui est celle qui fait naturellement couler le plus d’encre.

Les embranchements accidentels

Au cours de sa vie, Bitcoin a connu deux forks imprévus ayant débouché sur un embranchement de la chaîne et une séparation du réseau.

Le premier embranchement accidentel date du 15 août 2010 et est connu sous le nom de “value overflow incident overflow”. Celui-ci s’est manifesté par un bogue de dépassement de mémoire qui a permis de créer plusieurs milliards de bitcoins par le biais d’une seule transaction ! Par la suite, le problème a été résolu par un soft fork, qui invalidait le bloc contenant la transaction incriminée et les blocs suivants. Environ 51 blocs auraient ainsi été invalidés par la chaîne la plus longue appliquant le correctif : cet embranchement aurait donc perduré pendant environ 8 heures 30.

Le second embranchement accidentel a eu lieu le 11 mars 2013 à la suite de la mise à jour procédant à la migration du système de base données qui devait passer de Berkeley DB à LevelDB. BerkeleyDB faisait intervenir une limite par défaut (“lock limit”) que LevelDB ne respectait pas : la migration constituait donc malencontreusement un hard fork. L’embranchement a eu lieu au bloc 225 430 et deux chaînes ont coexisté pendant environ 6 heures : l’une fonctionnant avec BerkeleyDB, l’autre avec LevelDB. Après concertation des acteurs du réseau, la décision a finalement été prise de repasser à la version antérieure et la chaîne de 24 blocs minée de l’autre côté a été abandonnée. Quelques mois plus tard, la migration a été effectuée plus proprement par une mise à niveau plus propre.

Les mises à niveau

De nombreux changements permettant d’améliorer le protocole ont été appliqués à Bitcoin lors de ses premières années d’existence. Ces mises à niveau ont quasiment toutes pris la forme de soft forks. Nous en évoquerons ici les principales.

Tout d’abord, l’une des premières mises à jour importantes de Bitcoin est la diminution de la taille limite des blocs, qui était à l’origine fixée implicitement à 32 Mio et qui été réduite à 1 Mo par Satoshi Nakamoto lui-même à partir du 12 septembre 2010.

Puis, venant un peu plus tard, une mise à niveau iconique fut celle qui intégra dans Bitcoin le type d’adresse P2SH (BIP16) : ce format facilite l’implémentation de smart contracts. Il s’agit du premier soft fork activé par les mineurs (“Miner Activated Soft Fork” ou MASF) dont l’application dépend du signalement des mineurs dans les blocs. La mise à niveau a été effectuée avec succès le 1er avril 2012.

Ensuite, pour illustrer le fait que les mises à niveau n’ont pas toujours lieu parfaitement, on peut citer le soft fork imposant le respect du standard d’encodage des signatures Distinguished Encoding Rules (BIP66) qui a été appliqué le 4 juillet 2015. Lors de ce changement de protocole, certains mineurs ne se sont pas mis à jour (en dépit du fait qu’ils avaient signalé leur accord) et ont miné 6 blocs violant la nouvelle règle. Ces blocs ont finalement été invalidés par le principe de la chaîne la plus longue.

Enfin, entre 2015 et 2017, ce sont 3 mises à niveau majeures qui ont eu lieu pour faciliter à terme l’implémentation du réseau Lightning. Le code opération OP_CHECKLOCKTIMEVERIFY (BIP65) a été implémenté en 2015 pour permettre d’utiliser des verrous temporels absolus dans le langage de programmation de Bitcoin. En 2016, ce fut au tour du code OP_CHECKSEQUENCEVERIFY et d’autres améliorations (BIP68, BIP112, BIP113) de voir le jour pour intégrer des verrous temporels relatifs. La mise à niveau SegWit (BIP141), qui corrigeait la malléabilité des transactions, a été finalement appliquée le 24 août 2017.

Les forks contentieux

Cependant, les changements de règles de consensus n’ont pas toujours lieu de manière harmonieuse : ils peuvent être sources de conflits et diviser la communauté. Ainsi des branches contentieuses de Bitcoin ont été créées dans ces contextes de gouvernance agitée, c’est-à-dire à cause des difficultés rencontrées par les différents acteurs pour se mettre d’accord.

Ces scissions sont notamment issues du débat sur la scalabilité de Bitcoin. Entre 2013 et 2017, la question se posait de savoir comment le passage à l’échelle devait avoir lieu : devait-il se faire principalement sur la chaîne (comme cela fut discuté dès l’origine), ou devait-il se dérouler principalement hors de la chaîne par le biais de solutions de surcouche comme le réseau Ligthning ?

Les changements du protocole avortés

L’histoire montre que la deuxième alternative a été choisie par une très grande majorité économique et que, à ce jour, il est prévu que Bitcoin passe à l’échelle en dehors de la chaîne. Mais il n’en a pas toujours été ainsi et le débat sur la scalabilité a été source de nombreuses tensions au sein de la communauté avant d’arriver à la situation plus stable d’aujourd’hui.

En 2015, alors que la taille des blocs commençait à grandir, il devenait de plus en plus pressant d’augmenter le plafond pour éviter que la capacité maximale du réseau ne soit trop atteinte trop fréquemment. Cependant, les développeurs de Bitcoin Core, l’implémentation principale de Bitcoin, refusaient d’augmenter cette limite, soucieux de préserver le plus possible la décentralisation du réseau. C’est ainsi qu’une implémentation dissidente, appelée Bitcoin XT, a vu le jour en appliquant le BIP101 et en prévoyant de faire passer la limite de 1 Mo à 8 Mo. Cette augmentation devait se produire au-delà d’un pourcentage de signalement des mineurs (“Miner Activated Hard Fork”) : il s’agissait donc d’un hard fork qui aurait pu se solder par un embranchement de la chaîne.

Toutefois, malgré la relative popularité immédiate de Bitcoin XT, ce seuil de déclenchement n’a jamais été atteint et cette tentative fut donc un échec. D’autres implémentations ont par la suite tenté de reprendre le flambeau en reprenant le principe : Bitcoin Classic en 2016 (qui proposait une taille limite de 2 Mo) et Bitcoin Unlimited en 2017. Tout comme Bitcoin XT, ces deux implémentations n’ont jamais provoqué d’embranchement de la chaîne.

De l’autre côté du débat sur la scalabilité, les partisants des “petits blocs” souhaitaient activer SegWit. Or, cette mise à niveau ne faisait pas l’unanimité, et les mineurs refusaient de signaler leur soutien pour elle. C’est pourquoi une partie de la communauté a milité pour activer SegWit malgré tout, par un “User Activated Soft Fork” (UASF), qui menaçait d’être appliquée le 1er août 2017 (BIP148) et provoquer un séparation de la chaîne en deux chaînes distinctes. Le déploiement effectif de SegWit a finalement été acté le 21 juillet de la même année, pour une activation prévue en août.

Une dernière tentative d’augmenter la taille limite des blocs fut la proposition de mise à jour SegWit2X : elle prenait la forme d’un simili-compromis, en prévoyant d’activer SegWit en août 2017, puis de doubler dans un second temps la taille limite des blocs en novembre de la même année. Cette mise à niveau était soutenue et orchestrée par les entreprises de l’écosystème et devait se faire par le biais de l’implémentation btc1 développée par Jeff Garzik. La première partie du compromis s’est bien déroulée et la mise à niveau SegWit a été activée le 24 août. Cependant, la seconde partie a fait l’objet d’une controverse, beaucoup de personnes considérant que l’influence des entreprises sur le protocole ne devrait pas être aussi grande. N’ayant pas de soutien assez grand, le doublement de la taille des blocs (“2X”) a été finalement abandonné le 8 novembre.

Les scissions effectives

Venons-en maintenant aux scissions effectives. L’exemple le plus connu est probablement Bitcoin Cash, qui s’est séparé de la chaîne majoritaire le 1er août 2017, par refus de la mise à niveau SegWit (considérée trop complexe) et par volonté d’augmenter la capacité transactionnelle de la chaîne de façon significative. Baptisé “User Activated Hard Fork” (UAHF), ce hard fork bilatéral a permis d’augmenter la taille limite à 8 Mo et de changer la méthode de signatures. Le protocole Bitcoin Cash était suivi par deux implémentations majeures : Bitcoin ABC à l’origine du fork, et Bitcoin Unlimited qui s’est adapté à ce nouvel ensemble de règles.

À la suite du hard fork de Bitcoin Cash, les détenteurs de bitcoins se sont retrouvés propriétaires de bitcoins cash dans la même proportion : c’est pour cela que si vous possédiez des BTC avant le 1er août 2017, vous possédiez le même montant de BTC et de BCH après le fork. Bitcoin Cash a connu un certain succès en 2017, notamment grâce à l’annulation de SegWit2X qui a ramené vers lui beaucoup de personnes désireuses d’augmenter la capacité de la chaîne comme Roger Ver.

Mais cette scission ne s’est pas arrêtée là : un an plus tard, le 15 novembre 2018, la chaîne de Bitcoin Cash a subi de nouveau une séparation. Bitcoin Cash continuait à exister, mais voyait naître Bitcoin SV (“Bitcoin Satoshi Vision”) de l’autre. Encore un fois, cette scission a été provoquée par un problème de gouvernance du protocole : une partie de la communauté s’opposait en effet à la mise à niveau soutenue par Bitcoin ABC et Bitcoin Unlimited qui devait se dérouler ce jour-là, et qui incluait un nouveau code opération (OP_CHECKDATASIG) et un ordre canonique des transactions.

C’est ainsi que Bitcoin SV est né. Cette branche de Bitcoin, représentée par la personne haute en couleur de Craig Wright, a pour objectif de restaurer la supposée “vision de Satoshi Nakamoto” en rétablissant le protocole de base conçu en 2009. Ses partisans, convaincu que le protocole est parfaitement scalable depuis le début, s’opposent ainsi aux partisans de Bitcoin Cash, plus mesurés, qui considèrent que le protocole doit être considérablement modifié pour qu’il ait une chance de passer à l’échelle.

Notez que ces diverses séparations sont bien loin d’égaler Bitcoin en termes économiques : le prix du BCH représente aujourd’hui 3 % de celui du BTC, et celui du BSV en représente 1,5 %.

Les forks opportunistes

En voyant le succès de Bitcoin Cash en 2017, de nombreux forks “opportunistes” de Bitcoin ont eu lieu en 2017 et en 2018. Le premier d’entre eux est Bitcoin Gold qui a été créé le 24 octobre 2017. Contrairement à Bitcoin Cash et Bitcoin SV, Bitcoin Gold n’est pas issu d’un réel embranchement : il s’agit d’un système ayant repris le code de base et le registre de propriété de Bitcoin au bloc 491 407. Bitcoin Gold se présentait comme une branche de Bitcoin résistance aux ASIC, son minage se faisant par GPU. Cependant, la raison de sa création était toute autre puisque ses créateurs n’ont rendu le réseau public que le 12 novembre, soit trois semaines après. Ainsi, ils ont pu profiter de l’intervalle pour s’octroyer plus de 100 000 BTG, ce qui représentait à l’époque entre 2 et 3 millions de dollars.

Après Bitcoin Gold, on a vu apparaître une myriade d’autres forks mineurs comme Bitcoin Diamond (novembre 2017), Super Bitcoin (décembre 2017) ou Bitcoin Private (mars 2018).

Récapitulatif

Ainsi, l’histoire de Bitcoin regorge d’événements communément appelés forks, qu’ils soient communs, accidentels, consentis ou contentieux. Pour conclure, et parce que l’on dit souvent qu’une image vaut mille mots, voici un schéma récapitulatif retraçant les forks majeurs de Bitcoin.

Principaux forks de Bitcoin

Ludovic Lars

Je suis fasciné par les cryptomonnaies et par l'impact qu'elles pourraient avoir sur nos vies. De formation scientifique, je m'attache à décrire leur fonctionnement technique de la façon la plus fidèle possible.