L’abandon de SegWit2X : l’évènement qui a mis fin à la guerre civile de Bitcoin
Le débat sur la scalabilité de Bitcoin a fait rage à partir de 2013 et a pris l’allure d’une véritable guerre civile à partir de 2015. Ce n’est qu’en 2017 que cette guerre civile a cessé avec l’abandon du projet SegWit2X, dont le but était d’activer SegWit puis de doubler la capacité du réseau. Revenons sur cet épisode de l’histoire de Bitcoin, qui a notamment mis en évidence le pouvoir des utilisateurs sur les règles de consensus.
SegWit2X : un projet mal pensé
SegWit2X est un projet de modification du protocole Bitcoin visant à activer SegWit et à doubler la taille limite des blocs. Il naît le 23 mai 2017 grâce à l’accord de New York, une déclaration d’intention signée par 56 entreprises de l’écosystème durant une réunion confidentielle (organisée par Barry Silvert du Digital Currency Group) en marge de la conférence Consensus 2017. Parmi les signataires de l’accord, on retrouve :
- Les principales coopératives de minage (BTC.com, BTC.TOP, F2Pool, ViaBTC), représentant alors 83,28 % de la puissance de calcul du réseau ;
- Des plateformes d’échange (Coinbase, ShapeShift, bitFlyer, BTCC), des processeurs de paiement (BitPay) et des services de garde (Grayscale, Xapo, Vaultoro) qui génèrent au total 5,1 milliards de dollars de volume mensuel sur la chaîne ;
- De gros fournisseurs de portefeuilles, tels que Bitcoin.com, Ledger ou Jaxx, gérant un ensemble de 20,5 millions de portefeuilles ;
- Gavin Andresen, l’ancien mainteneur en chef de l’implémentation logicielle de référence, devenue Bitcoin Core.
L’accord s’inspire de l’accord de Hong Kong signé en février 2016 par les acteurs de majeurs de l’écosystème, et prévoit d’implémenter la proposition SegWit2Mb de Sergio Lerner, à savoir :
- L’activation de SegWit avec un seuil de signalement de 80 % de la puissance de calcul ;
- L’activation dans les 6 mois d’un hard fork faisant passer la taille limite de base des blocs de 1 à 2 Mo.
Cet accord est la manifestation du rapport de force entre les partisans des gros blocs, qui souhaitent accroître la capacité transactionnelle de la chaîne, et les partisans des petits blocs, qui veulent privilégier la mise en place de solutions de seconde couche comme le réseau Lightning. Il s’agit ainsi théoriquement d’un compromis, même si en pratique on en est loin, cet accord ayant été signé en privé, en l’absence d’un bon nombre d’acteurs majeurs, dont les développeurs de Bitcoin Core qui n’ont pas été conviés.
Pour mettre en place la mise à niveau, une nouvelle implémentation logicielle, appelée btc1, est créée dès le lendemain. Il s’agit d’un fork logiciel de Bitcoin Core qui est dirigé par Jeff Garzik, un développeur ayant été impliqué dans Bitcoin depuis 2010.
Un groupe de travail est lancé le 29 mai. Il est géré par Mike Belshe, le PDG de BitGo. L’existence de ce groupe de travail était censée demeurer confidentielle, mais elle est révélée au grand public le lendemain, le courriel de bienvenue ayant fuité. Pour corriger le tir, une liste de diffusion de courrier électronique ouverte à tous est lancée le 31 mai.
Cette façon de faire, d’organiser les choses en coulisses, déplaît fortement à une partie de la communauté, qui estime que Bitcoin est un système ouvert dont les modifications devraient être discutées publiquement.
De plus, au-delà de son aspect fermé, le projet de SegWit2X est mal ficelé, probablement en raison de la précipitation dans laquelle a été signé l’accord.
D’une part, l’intégration d’un soft fork complexe comme SegWit avant un hard fork n’a pas de sens d’un point de vue technique. Quitte à réaliser un hard fork rendant les règles incompatibles pour les anciens nœuds, il aurait été préférable d’implémenter SegWit au sein de ce hard fork de manière plus élégante.
D’autre part, le délai entre les deux mises à niveau programmées pose un sérieux risque de non-respect de l’accord. À ce moment-là, la campagne en faveur de l’UASF bat son plein, ce qui présage une activation de SegWit à court terme et ce qui veut dire que le doublement de la taille limite des blocs se fera après cette activation. Il y a donc une chance que la deuxième partie de l’accord n’ait pas lieu.
Ce délai est confirmé par la sortie de la version alpha de btc1 le 16 juin, qui programme le doublement de la capacité du réseau 90 jours (12 960 blocs) après l’activation de SegWit, devant se faire par le biais du BIP-91.
Outre l’accord en lui-même, l’implémentation btc1 laisse quelque peu à désirer : la version alpha est, comme son nom l’indique, une version de développement qui contient de nombreux bogues. Le logiciel n’est donc pas prêt d’être utilisé en production, alors même que l’activation de SegWit se fait plus pressante, et les mineurs préfèrent signaler le BIP-91 manuellement.
La version alpha ne contient également pas de protection contre la destruction par recoordination, fonctionnalité qui est ajoutée le 20 juin. Cette protection rend le hard fork bilatéral en imposant au premier bloc de la mise à niveau d’être plus gros que 1 Mo. Cela permet d’éviter que la chaîne de SegWit2X soit supprimée dans le cas où elle finit par être minoritaire.
Le 10 juillet, une scission se produit sur le réseau de test de Bitcoin : un apport conséquent de puissance de calcul accélère considérablement la production de blocs, ce qui déclenche en avance le hard fork et bloque les nœuds utilisant btc1, qui requiert un bloc de taille supérieure à 1 Mo pour continuer. Cette scission accidentelle participe à détériorer un peu plus la réputation de la btc1.
Le 16 août, la date du hard fork est annoncée officiellement par l’équipe de SegWit2X : la mise à niveau aura lieu au bloc 494 784, soit durant la deuxième partie du mois de novembre.
NO2X, l’opposition au doublement de la taille des blocs
Le 9 août 2017, SegWit est verrouillé, notamment grâce à l’application du BIP-91 depuis juillet qui imposait son signalement. C’est à ce moment-là que débute la campagne d’opposition au doublement de la taille des blocs, baptisée « NO2X ».
Il s’agit d’une campagne de relations publiques au même titre que celle qui avait pour but de faire activer SegWit par l’UASF. Cette campagne de communication fait intervenir la publication de messages forts sur les réseaux sociaux à l’encontre des entreprises soutenant le hard fork, la création et le partage de mèmes ridiculisant les arguments des pro-2X, l’écriture d’articles, la mise en place des sites web et même la conception de casquettes. Elle a pour objectif de persuader les utilisateurs et les services de l’écosystème de renoncer au hard fork par tous les moyens.
Derrière l’opposition au doublement de la taille des blocs, on retrouve les points d’argumentation suivants :
- Il s’agit d’un hard fork, qui risque par conséquent de créer une scission ;
- La mise à niveau n’inclut pas de protection contre la rediffusion (replay protection) ;
- La nouvelle implémentation btc1 est moins bien maintenue que Bitcoin Core ;
- La décision a été prise par un groupe fermé d’acteurs en l’absence des développeurs de Bitcoin Core ;
- Le lancement de Bitcoin Cash financé par des signataires majeurs de l’accord de New York (Bitmain, ViaBTC) constitue une violation implicite de cet accord ;
- La hard fork ne dispose pas de l’approbation quasi-unanime de la communauté (il n’y a pas de « consensus »).
La protection contre la rediffusion des transactions est particulièrement mise en avant. En effet, en l’absence de cette protection lors d’une scission, les transactions réalisées sur une chaîne peuvent être répliquées sur l’autre par un tiers, et cela permet à ceux qui reçoivent des fonds sur une chaîne de recevoir les fonds sur l’autre chaîne en rediffusant les transactions (« attaques par rediffusion »). C’est ce qui s’était par exemple passé en juillet 2016 après la séparation d’Ethereum et d’Ethereum Classic.
Le 4 juin, le développeur Alex Bosworth, partisan du réseau Lightning, demande sur la liste de diffusion de SegWit2X si le hard fork inclura une « protection bidirectionnelle forte contre la rediffusion ». Mike Belshe lui répond immédiatement en disant que cela n’est pas prévu, car une protection de ce type obligerait à mettre à jour chaque programme construisant des transactions :
« Comme vous le savez, l’un des principaux avantages de l’approche de la simple augmentation de 2 mo est que les processeurs de transaction existants sur la chaîne n’ont pas besoin d’être modifiés. Le défi avec la protection contre la rediffusion au niveau des transactions est que pour la plupart des implémentations, vous devez réécrire tous les processeurs de transaction pour les modifier (définir un bit supplémentaire ou autre). Si cela n’est pas fait correctement, cela pourrait rendre le déploiement de l’augmentation de 2 mo très difficile, quelle que soit l’échéance, car il faudrait modifier chaque portefeuille, chaque plateforme d’échange, chaque processeur de paiement, etc. »
Puisqu’elle a été implémentée par Bitcoin Cash, pourquoi ne pas le faire pour le hard fork qui arrive ? Le problème c’est que les deux parties opposées ont des visions de SegWit2X radicalement différentes. D’un côté, les partisans de SegWit2X perçoivent leur projet comme une mise à niveau du protocole, qui s’inscrit dans la continuité de la chaîne existante, et n’ont ainsi aucune raison d’implémenter une protection contre le rediffusion, lourde à mettre en place. De l’autre côté, les opposants voient SegWit2X comme un projet à part, une « cryptomonnaie alternative » qui n’a rien à voir avec Bitcoin, et exigent de ce fait une protection. Il y a ainsi une incompatibilité de visions entre les deux camps.
Le 23 août, dans l’optique d’arriver à un compromis, Jeff Garzik propose d’implémenter une protection optionnelle contre la rediffusion, évitant aux transactions contenant un marqueur spécifique d’être relayées par les nœuds utilisant btc1. Cependant, cela n’est pas suffisant pour les opposants à SegWit2X, qui continueront d’utiliser l’absence de protection systématique et bidirectionnelle comme une raison suffisante pour ne pas procéder au hard fork.
Les premières défections
L’opposition à SegWit2X est tout d’abord portée par certains acteurs de l’écosystème extérieurs à l’accord. Mais elle va se traduire rapidement par les défections de plusieurs signataires.
Au sein de cette opposition, l’équipe de développement de Bitcoin Core est inflexible, n’ayant même pas été invitée à signer l’accord de New York. Dès le 7 août, elle intègre un cloisonnement du réseau dans le logiciel : les nœuds utilisant la version 0.15 rejetteront le 6ème bit, qui est le bit signalé spécifiquement par btc1, et ne pourront par conséquent plus communiquer avec les nœuds implémentant SegWit2X. Le 18 août, un communiqué ayant pour but de « corriger la désinformation à propos de SegWit2X et de btc1 » est publié sur le site de Bitcoin Core, dans lequel l’équipe déclare que SegWit2X n’est pas une « mise à jour nécessaire du logiciel existant » mais une « déviation controversée des règles existantes du réseau ».
Ce positionnement de Bitcoin Core sert de base aux premières défections de signataires de l’accord de New York, qui ont lieu à la fin du mois d’août. Le 22 août, le service d’investissement en crypto-actifs Bitwala renonce ainsi à son engagement pour SegWit2X :
« Nous ne nous éloignerons pas activement de ce que nous considérons comme ‘bitcoin’, qui est la chaîne soutenue par l’équipe de développement actuelle de Core. »
Pour se justifier, la société évoque la création de Bitcoin Cash par « un certain nombre mineurs » et l’absence des développeurs de Core dans l’accord.
Puis, le 25 août, la plateforme de blogging Yours.org annonce se tourner entièrement vers Bitcoin Cash et renonce de facto à s’impliquer dans le doublement de la capacité du réseau. Enfin, le 31 août, c’est au tour de la coopérative minière F2Pool, qui représente alors 10 % du taux de hachage du réseau, de retirer son soutien à SegWit2X.
Les 9 et 10 septembre, la première édition de la conférence Breaking Bitcoin est organisée à Paris. La conférence est focalisée sur la sécurité de Bitcoin et sur ses vulnérabilités techniques, économiques et sociales (d’où le nom « Casser Bitcoin »). Au sein de l’évènement, les participants sont généralement opposés à SegWit2X. Des autocollants « NO2X » sont même distribués par l’entreprise italienne Chainside.
L’opposition à SegWit2X durant la conférence illustre l’antipathie qu’un certain nombre d’utilisateurs éprouvent à l’égard du projet de hard fork, antipathie qui va se développer de plus en plus à partir de là. La décision de modifier le protocole a été prise en privé, par un consortium d’entreprises, sans consultation du public : l’antithèse de l’ouverture qu’est censé représenter Bitcoin.
Durant le mois de septembre, cette hostilité croissante de la communauté convainc d’autres signataires de l’accord de New York de violer leur engagement. C’est le cas de Wayniloans le 19 septembre et de Vaultoro le 26, qui justifient notamment leur décision par l’absence de protection contre la rediffusion.
Le 27 septembre, le PDG de Blockstream, Adam Back, publie un article sur Reddit dans lequel il prend position contre le projet de doublement de la taille des blocs :
« Le bitcoin est une monnaie d’utilisateurs, et les propriétés qui nous ont tous amenés, en tant qu’utilisateurs et entrepreneurs, à Bitcoin et qui lui donnent de la valeur reposent intrinsèquement sur l’accord des utilisateurs et de l’écosystème et sur le processus décentralisé de Bitcoin. »
Au début du mois d’octobre, on sent donc que le vent est en train de tourner et que l’opposition commence à atteindre les utilisateurs qui jusque là ignoraient la chose ou soutenaient timidement SegWit2X. Néanmoins, cela ne semble pas pousser les partisans du hard fork à se remettre en question.
Le 8 octobre, Alex Bosworth réitère sa demande de protection contre la rediffusion, argumentant qu’il y aura à coup sûr une scission. Mike Belshe refuse une nouvelle fois, ce qui constitue pour lui une décision naturelle. Il ajoute :
« Aujourd’hui, nous sommes en bonne voie pour déployer segwit2x avec une grande majorité de mineurs qui le signalent encore. En plus de cela, 99,94% des nœuds et des clients SPV suivront automatiquement la chaîne la plus longue (segwit2x).
Je sais que certains ne veulent pas que Bitcoin fonctionne de cette façon, mais c’est la manière dont les mises à niveau de Bitcoin sont implémentées. »
Le signalement des mineurs donne ainsi aux partisans de SegWit2X une confiance aveugle dans leur projet, et ce malgré les désistements des entreprises signataires de l’accord et une opposition croissante dans la communauté. Ils croient que les mineurs vont privilégier la chaîne de B2X et entraîner une spirale fatale du minage sur l’autre chaîne, voire l’attaquer en la censurant. C’est cette conception erronée qui va les conduire à l’échec.
L’échec de SegWit2X
Durant le mois d’octobre, la campagne d’opposition à SegWit2X passe à la vitesse supérieure. Le hard fork doit se produire à la mi-novembre et il est urgent pour ses opposants de rassembler une majorité derrière eux.
Le 6 octobre, la plateforme d’échange Bitfinex annonce mettre disposition des contrats à terme (« futures ») liés à la scission. Le protocole initial (SegWit1X) est désigné par BTC, celui de SegWit2X est appelé B2X, mais la plateforme se réserve le droit de changer si les circonstances évoluent. Le prix du contrat à terme B2X se stabilise rapidement autour des 1000 $, soit entre 10 et 25 % du prix du BTC d’alors.
Le 7 octobre, le site web Bitcoin.org, site de référence dont l’URL se trouve sur le livre blanc de Bitcoin, annonce mettre en place une bannière contre les services qui considéreront la chaîne intégrant SegWit2X comme « BTC » ou « Bitcoin ». Cette bannière est mise en place le 11, et contient un lien redirigeant vers un message d’avertissement annonçant que certains services feront fonctionner une version incompatible de Bitcoin.
Dans le même temps, deux autres signataires de l’accord de New York se rétractent. Le 6, le service financier Crypto Facilities annonce qu’il ne supportera pas SegWit2X sans protection contre la rediffusion. Le 10, la plateforme d’échange SurBTC déclare ne plus pouvoir suivre cet accord, en l’absence du soutien des développeurs de Bitcoin Core. Cela porte le nombre de défections à 7 sur 56.
Le 13 octobre, la plateforme de trading de produits dérivés BitMEX, qui avait refusé de distribuer le bitcoin cash de ses clients, va plus loin en considérant SegWit2X comme une « cryptomonnaie alternative » et en refusant tout support.
Le mois d’octobre est également marqué par la mobilisation des différentes communautés locales contre SegWit2X. Le 8, la communauté Bitcoin de Séoul publie un communiqué dans lequel elle déclare s’opposer au hard fork. Des initiatives similaires suivent à Munich (12 octobre), dans le monde francophone (15 octobre), en Amérique du Sud (18 octobre), à Israël (24 octobre), à Hong Kong (25 octobre) et en Italie (31 octobre).
Le 23 octobre, la plateforme d’échange Coinbase (pourtant fervente partisane de SegWit2X) annonce lister la cryptomonnaie doublant la taille des blocs sous un autre nom (« Bitcoin2x ») et un autre sigle financier (B2X), ce qui crée des réactions passionnées des deux côtés. Le lendemain, pour apaiser la situation, l’entreprise clarifie les choses en disant qu’elle appellera Bitcoin « la chaîne ayant le plus de difficulté accumulée ». Mais le mal est fait.
Il paraît alors évident que SegWit2X a peu de chance de réussir à « devenir Bitcoin » après le fork. Cette situation est illustrée à la perfection le même jour, lorsque Jeff Garzik, développeur principal de btc1, annonce lancer son propre projet de cryptomonnaie baptisé « Metronome » !
Finalement, le 8 novembre, soit une semaine avant son activation programmée, SegWit2X est finalement abandonné. Mike Belshe, Wences Casares, Jihan Wu, Jeff Garzik, Peter Smith et Erik Voorhees déclarent conjointement :
« Notre objectif a toujours été d’améliorer Bitcoin en douceur. Bien que nous croyons fermement en la nécessité d’augmenter la taille des blocs, il y a une chose que nous croyons encore plus importante : garder la communauté unie. Malheureusement, il est clair que nous n’avons pas recueilli un consensus suffisant à l’heure actuelle pour une modification propre de la taille des blocs. Continuer sur la voie actuelle pourrait diviser la communauté et constituer un revers pour la croissance de Bitcoin. Cela n’a jamais été jamais été l’objectif de Segwit2x. »
Cette annulation clôt les quatre années de débat sur la scalabilité et les deux années de guerre civile qui ont affecté la communauté de Bitcoin. Cela provoque une joie chez les partisans des petits blocs. Dès lors, Bitcoin-BTC sera clairement dominé par cette philosophie et aucune augmentation de la taille des blocs ne sera envisagée.
De l’autre côté, l’abandon de SegWit2X provoque un exode de ses promoteurs vers Bitcoin Cash, qui devient de facto la version de Bitcoin dédiée au passage à l’échelle par augmentation de la taille limite des blocs. De nombreuses personnalités apportent publiquement leur soutien à Bitcoin Cash dont Roger Ver, Gavin Andresen, Emin Gün Sirer ou Vitalik Buterin.
Le prix du BCH explose en conséquence et, le 12 novembre au petit matin, il passe succinctement au-dessus des 2000 $ tandis que celui du BTC chute lourdement, faisant passer le ratio BCH/BTC au-dessus de 0,55. Ce jour-là, Bitcoin Cash représente la deuxième capitalisation boursière devant Ethereum. Cela crée une petite frayeur chez les partisans de BTC mais la situation revient rapidement à la normale et le prix du BTC repartira à la hausse.
Le 17 novembre, le hard fork de SegWit2X s’applique pour les nœuds continuant d’utiliser btc1. Néanmoins, on découvre alors que le code contenait une erreur : il activait le hard fork un bloc trop tôt., démontrant encore une fois l’amateurisme et la précipitation de ce projet mal pensé.
Dans l’histoire, chacun des deux camps se retrouve donc avec sa chaîne propre : le camp des partisans des petits blocs, victorieux, hérite de BTC ; celui les partisans des gros blocs, défait, se regroupe autour de BCH. Après des débuts prometteurs, Bitcoin Cash subira une nouvelle scission un an plus tard, où l’on verra le camp des partisans du passage à l’échelle sur la chaîne se diviser en deux, et qui donnera notamment naissance à Bitcoin SV. Bitcoin-BTC continuera sa route et ne subira pas d’autre perturbation majeure, preuve d’une plus grande stabilité du développement.
Outre la résolution du débat sur la scalabilité, l’abandon de SegWit2X a montré une chose déjà esquissée lors de l’UASF : ce sont les utilisateurs qui donnent à Bitcoin sa force, par l’acceptation du bitcoin dans l’échange et par l’influence économique qu’ils exercent en tant que clients et, de ce fait, les règles de consensus ne peuvent être modifiées par une majorité de mineurs ou un consortium d’entreprises de l’écosystème. Et en cela, cette affaire a constitué une expérience fondamentale dans la découverte des principes qui régissent Bitcoin et qui le rendent résilient aux attaques.
Pour écrire cet article, je me suis partiellement basé sur l’ouvrage The Blocksize War de Jonathan Bier.