Appendix A: Historique de la fourche Ethereum
La plupart des hard forks ou fourches ou embranchements divergents sont planifiées dans le cadre d’une feuille de route de mise à niveau et consistent en des mises à jour généralement acceptées par la communauté (c’est-à-dire qu’il existe un consensus social). Cependant, certains embranchements divergents manquent de consensus, ce qui conduit à plusieurs chaînes de blocs distinctes. Les événements qui ont conduit à la scission Ethereum/Ethereum Classic en sont un exemple et sont abordés dans cette annexe.
Ethereum Classic (ETC)
Ethereum Classic est né après que des membres de la communauté Ethereum ont mis en place un embranchement divergent sensible au temps (nom de code «DAO»). Le 20 juillet 2016, à une hauteur de bloc de 1,92 million, Ethereum a introduit un changement d’état irrégulier via un embranchement divergent dans le but de restituer environ 3,6 millions d’ether qui avaient été prélevés sur un contrat intelligent connu sous le nom de DAO. Presque tout le monde a convenu que l’ether pris avait été volé et que tout laisser entre les mains du voleur nuirait considérablement au développement de l’écosystème Ethereum ainsi qu’à la plate-forme elle-même.
Rendre l’ether à ses propriétaires respectifs comme si le DAO n’avait même jamais existé était techniquement facile, bien que politiquement controversé. Un certain nombre de personnes dans l’écosystème n’étaient pas d’accord avec ce changement, estimant que l’immuabilité devrait être un principe fondamental de la chaîne de blocs Ethereum sans exception ; ils ont choisi de continuer la chaîne originale sous le nom d’Ethereum Classic. Alors que la scission elle-même était initialement idéologique, les deux chaînes ont depuis évolué en entités distinctes.
L’Organisation Autonome Décentralisée (La DAO)
La DAO a été créé par Slock.it, dans le but de fournir un financement et une gouvernance communautaires pour les projets. L’idée centrale était que les propositions seraient soumises, les conservateurs géreraient les propositions, des fonds seraient collectés auprès d’investisseurs au sein de la communauté Ethereum et, si les projets s’avéraient fructueux, les investisseurs recevraient une part des bénéfices.
Le DAO a également été l’une des premières expériences dans un jeton Ethereum. Plutôt que de financer des projets directement avec de l’ether, les participants échangeraient leur ether contre des jetons DAO, les utiliseraient pour voter sur le financement du projet et pourraient plus tard les échanger contre de l’ether à nouveau.
Les jetons DAO étaient disponibles à l’achat lors d’une vente publique qui s’est déroulée du 5 avril au 30 avril 2016, amassant près de 14% du total d’ether existant, qui valait environ 150 millions de dollars au temps.
Le bogue de réentrance
Le 9 juin 2016, les développeurs Peter Vessenes et Chriseth ont signalé que la plupart des contrats basés sur Ethereum qui géraient des fonds étaient potentiellement http:/ /bit.ly/2AAaDmA[vulnérable à un exploit] qui pourrait vider les fonds du contrat. Quelques jours plus tard, le 12 juin, Stephen Tual (cofondateur de Slock.it) rapportait que Le code du DAO n’était pas vulnérable au bogue décrit par Peter et Chriseth. Les contributeurs inquiets de DAO ont poussé un soupir de soulagement, jusqu’à cinq jours plus tard, lorsqu’un attaquant inconnu a lancé drainant le DAO en utilisant un exploit similaire à celui pour lequel l’avertissement avait été émis. En fin de compte, l’attaquant du DAO a siphonné environ 3,6 millions d’ether du DAO.
Simultanément, un assemblage de volontaires se faisant appeler le Robin Hood Group (RHG) a commencé à utiliser le même exploit pour retirer les fonds restants afin d’éviter qu’ils ne soient volés par l’attaquant du DAO. Le 21 juin, the RHG a annoncé qu’ils avaient obtenu environ 70 % des fonds du DAO (environ 7,2 millions d’ethers), avec l’intention de les restituer à la communauté (ce qu’ils ont fait avec succès le le réseau ETC, et n’avait pas besoin de le faire sur le réseau Ethereum après le fork). De nombreux remerciements et félicitations ont été adressés au GHR pour sa réflexion rapide et ses actions rapides qui ont aidé à sécuriser l’essentiel de l’ether de la communauté.
Détails techniques
Alors qu’une explication plus détaillée et approfondie du bogue est donnée par Phil Daian, la brève explication est qu’une fonction cruciale dans le DAO avait deux lignes de code dans le mauvais ordre, ce qui signifie que l’attaquant pourrait avoir des demandes de retrait d’ether traitées à plusieurs reprises, avant que la vérification de savoir si l’attaquant avait droit au retrait ne soit terminée. Ce type de vulnérabilité est décrit dans [reentrancy_security].
Flux d’attaque
Imaginez que vous aviez 100 $ sur votre compte bancaire et que vous pouviez apporter à votre caissier de banque n’importe quel nombre de bordereaux de retrait. Le caissier vous donnerait de l’argent pour chaque feuillet dans l’ordre, et ce n’est qu’après avoir traité tous les feuillets qu’il enregistrerait votre retrait. Et si vous leur apportiez trois bordereaux, chacun demandant un retrait de 100 $ ? Et si vous leur apportiez trois mille ?
L’attaque DAO a fonctionné comme ceci :
-
L’attaquant du DAO demande au contrat DAO de retirer les jetons DAO (DAO).
-
L’attaquant demande au contrat de retirer du DAO encore, avant que le contrat ne mette à jour ses enregistrements pour montrer que DAO a été retiré.
-
L’attaquant répète l’étape 2 autant de fois que possible.
-
Le contrat enregistre finalement un seul retrait DAO, perdant la trace des retraits qui se sont produits entre-temps.
L’embranchement divergent DAO
Heureusement, il y avait plusieurs garanties intégrées au DAO : notamment, toutes les demandes de retrait étaient soumises à un délai de 28 jours. Cela a donné à la communauté un peu de temps pour discuter de ce qu’il fallait faire à propos de l’exploit, car du 17 juin au 20 juillet environ, l’attaquant DAO ne serait pas en mesure de convertir ses jetons DAO en ether.
Plusieurs développeurs se sont concentrés sur la recherche d’une solution viable, et de multiples pistes ont été explorées dans ce court laps de temps. Parmi eux se trouvaient un embranchement convergent DAO, annoncé le 24 juin, pour retarder les retraits de DAO jusqu’à ce qu’un consensus soit atteint, et un embranchement divergent DAO, annoncé le 15 juillet, pour inverser les effets de l’attaque DAO avec un changement d’état exceptionnel.
Le 28 juin, les développeurs ont découvert un exploit DoS dans l’embranchement convergent DAO et ont conclu que l’embranchement divergent DAO serait la seule option viable pour résoudre complètement la situation. L’embranchement divergent DAO transférerait tout l’ether qui avait été investi dans le DAO dans un nouveau contrat intelligent de remboursement, permettant aux propriétaires d’origine de l’ether de réclamer un remboursement complet. Cela offrait une solution pour restituer les fonds piratés, mais signifiait également interférer avec les soldes d’adresses spécifiques sur le réseau, aussi isolées soient-elles. Il y aurait également des restes d’ether dans des parties de The DAO connues sous le nom de childDAOs. Un groupe d’administrateurs autoriserait manuellement l’ether restant, d’une valeur de ~$6–7 millions à l’époque.
Le temps presse, plusieurs équipes de développement Ethereum ont créé des clients qui permettaient à un utilisateur de décider s’il souhaitait activer cet embranchement. Cependant, les créateurs du client voulaient décider de faire ce choix opt-in (ne pas de fourche par défaut) ou opt-out (embranchement par défaut). Le 15 juillet, un vote a été ouvert sur carbonvote.com. Le lendemain, à hauteur de bloc 1,894,000, il était fermé. Sur les 5,5 % de l’offre totale d’ether qui ont voté, environ 80 % des voix (~ 4,5 % de l’offre totale d’ether) ont voté pour l’opt-out. Un quart des votes d’opt-out provenaient d’une seule adresse.
En fin de compte, la décision est devenue une option de non-participation, de sorte que ceux qui s’opposaient à l’embranchement divergent DAO devraient exprimer explicitement leur opposition en modifiant une option de configuration dans le logiciel qu’ils exécutaient.
Le 20 juillet, à hauteur de bloc 1,920,000, Ethereum a implémenté l’embranchement divergent DAO et ainsi deux réseaux Ethereum ont été créés : un incluant le changement d’état , et l’autre l’ignorant.
Lors de l’embranchement divergent DAO, Ethereum (Ethereum actuel) a gagné la majorité de la puissance minière, beaucoup ont supposé qu’un consensus était atteint et que la chaîne minoritaire s’estomperait loin, comme dans les fourches précédentes. Malgré cela, une partie importante de la communauté Ethereum (environ 10 % en valeur et en puissance minière) a commencé à soutenir la chaîne non bifurquée, connue sous le nom d’Ethereum Classic.
Quelques jours après l’embranchement, plusieurs bourses ont commencé à répertorier Ethereum ("ETH") et Ethereum Classic ("ETC"). En raison de la nature des embranchements divergents, tous les utilisateurs d’Ethereum détenant de l’ether au moment de la scission détenaient alors des fonds sur les deux chaînes, et une valeur marchande pour ETC a été rapidement établie avec Poloniex cotant ETC le 24 juillet.
Chronologie de l’embranchement divergent DAO
-
5 avril 2016 : Slock.it publie une revue de sécurité des contrats intelligents génériques du cadre DAO par Deja Vu Security.
-
30 avril 2016 : La vente publique DAO est lancée.
-
27 mai 2016 : Fin de la vente publique DAO.
-
9 juin 2016 : Un bogue d’appel récursif générique est découvert et semble affecter de nombreux contrats Solidity qui suivent les soldes des utilisateurs.
-
12 juin 2016 : Stephen Tual déclare que les fonds du DAO ne sont pas à risque.
-
17 juin 2016 : Le DAO est exploité et une variante du bogue découvert (appelé le « bogue de réentrance ») est utilisée pour commencer à drainer les fonds, finissant par attraper environ 30 % de l’ether.
-
21 juin 2016 : Le RHG annonce qu’il a sécurisé les autres ~70 % de l’ether stocké au sein du DAO.
-
24 juin 2016 : Un vote d’embranchement convergent est annoncé via une signalisation opt-in via les clients Geth et Parity, conçu pour retenir temporairement les fonds jusqu’à ce que la communauté puisse mieux décider quoi faire.
-
28 juin 2016 : Une vulnérabilité est découverte dans l’embranchement convergent et elle est abandonnée.
-
Du 28 juin 2016 au 15 juillet : les utilisateurs débattent de l’embranchement divergent ou non ; la plupart des débats publics vocaux se déroulent sur le subreddit /r/ethereum.
-
15 juillet 2016 : L’embranchement divergent DAO est proposé, pour restituer les fonds pris lors de l’attaque DAO.
-
15 juillet 2016 : Un vote a lieu sur CarbonVote pour décider si l’embranchement divergent DAO sera opt-in (ne pas fork par défaut) ou opt-out (fork by défaut).
-
16 juillet 2016 : 5,5 % des votes sur l’offre totale d’ether ; ~80 % des votes (~4,5 % de l’offre totale) sont en faveur d’un embranchement divergent opt-out, un quart des votes pro provenant d’une seule adresse.
-
20 juillet 2016 : L’embranchement divergent se produit au bloc 1 920 000.
-
20 juillet 2016 : Ceux qui s’opposent à l’embranchement divergent DAO continuent d’utiliser l’ancien logiciel client ; cela entraîne des problèmes, les transactions sont rejouées sur les deux chaînes.
-
24 juillet 2016 : Poloniex répertorie la chaîne Ethereum originale sous le symbole ETC ; c’est le premier échange à le faire.
-
10 août 2016 : Le RHG transfère 2,9 millions de l’ETC récupéré à Poloniex afin de le convertir en ETH sur les conseils de Bity SA ; 14% du total des avoirs RHG sont convertis d’ETC en ETH et autres crypto-monnaies, et Poloniex gèle les 86% restants des ETH déposés.
-
30 août 2016 : Les fonds gelés sont renvoyés par Poloniex au RHG, qui met alors en place un contrat de remboursement sur la chaîne ETC.
-
11 décembre 2016 : L’équipe de développement ETC d’IOHK se forme, dirigée par le membre fondateur d’Ethereum, Charles Hoskinson.
-
13 janvier 2017 : Le réseau ETC est mis à jour pour résoudre les problèmes de relecture des transactions ; les chaînes sont maintenant fonctionnellement séparées.
-
20 février 2017 : L’équipe ETCDEVTeam se forme, dirigée par le premier développeur ETC Igor Artamonov (splix).
Ethereum et Ethereum Classic
Alors que la scission initiale était centrée sur le DAO, les deux réseaux, Ethereum et Ethereum Classic, sont désormais des projets distincts, bien que la plupart des développements soient toujours effectués par la communauté Ethereum et simplement porté sur les bases de code Ethereum Classic. Néanmoins, l’ensemble des différences est en constante évolution et trop étendu pour être couvert dans cette annexe. Cependant, il convient de noter que les chaînes diffèrent considérablement dans leur développement de base et leur structure communautaire. Quelques-unes des différences techniques sont discutées ci-dessous.
L’EVM
Développement du réseau central
Étant des projets ouverts, les plateformes de chaîne de blocs comptent souvent de nombreux utilisateurs et contributeurs. Cependant, le développement du réseau central (c’est-à-dire du code qui gère le réseau) est souvent effectué par de petits groupes en raison de l’expertise et des connaissances requises pour développer ce type de logiciel. Sur Ethereum, ce travail est effectué par la Fondation Ethereum et des bénévoles. Sur Ethereum Classic, c’est fait par ETCDEV, IOHK et des volontaires.
Autres fourches Ethereum notables
Ellaism est un réseau basé sur Ethereum qui a l’intention d’utiliser PoW exclusivement pour sécuriser la chaîne de blocs. Il n’y a pas de pré-minage et pas de frais de développement obligatoires, avec tout le support et le développement donnés gratuitement par la communauté. Ses développeurs pensent que cela fait du leur «l’un des projets Ethereum purs les plus honnêtes», et celui qui est «particulièrement intéressant en tant que plate-forme pour les développeurs sérieux, les éducateurs et les passionnés. Ellaism est une pure plateforme de contrats intelligents. Son objectif est de créer une plate-forme de contrats intelligents à la fois équitable et digne de confiance. » Les principes de la plateforme sont les suivants :
Toutes les modifications et mises à niveau du protocole doivent s’efforcer de maintenir et de renforcer ces principes d’Ellaism.
Politique monétaire : 280 millions de pièces.
Pas de censure : personne ne devrait pouvoir empêcher la confirmation de txs valides.
À source ouverte : le code source d’Ellaism doit toujours être ouvert à quiconque pour le lire, le modifier, le copier, le partager.
Sans permission : Aucune décision arbitraire ne devrait jamais empêcher quiconque de faire partie du réseau (utilisateur, nœud, mineur, etc.).
Pseudonyme : Aucune pièce d’identité ne devrait être exigée pour posséder, utiliser Ellaism.
Fongible : toutes les pièces sont égales et doivent pouvoir être dépensées de la même manière.
Transactions irréversibles : les blocs confirmés doivent être gravés dans le marbre. L’historique de la chaîne de blocs doit être immuable.
Pas d’embranchements divergents contentieux : jamais d’embranchement divergent sans consensus de toute la communauté. Ne brisez le consensus existant que lorsque cela est nécessaire.
De nombreuses mises à niveau de fonctionnalités peuvent être effectuées sans embranchement divergent, telles que l’amélioration des performances de l’EVM.
Plusieurs autres embranchements se sont également produites sur Ethereum. Certains d’entre eux sont des embranchements divergents, en ce sens qu’ils se séparent directement du réseau Ethereum préexistant. D’autres sont des fourches logiciels : ils utilisent le logiciel client/nœud d’Ethereum mais exécutent des réseaux entièrement séparés sans aucun historique partagé avec Ethereum. Il y aura probablement plus de fourches au cours de la vie d’Ethereum.
Il existe également plusieurs autres projets qui prétendent être des fourches Ethereum mais qui sont en fait basés sur des jetons ERC20 et exécutés sur le réseau Ethereum. Deux exemples de ceux-ci sont EtherBTC (ETHB) et Ethereum Modification (EMOD). Ce ne sont pas des fourches au sens traditionnel du terme, et peuvent parfois être appelés « airdrops ».
Voici un bref aperçu de certaines des fourches les plus notables qui se sont produites :
-
Expanse a été le premier embranchement de la chaîne de blocs Ethereum à gagner du terrain. Il a été annoncé via le forum Bitcoin Talk le 7 septembre 2015. La véritable fourche s’est produit une semaine plus tard, le 14 septembre 2015, à une hauteur de bloc de 800 000. Il a été fondé à l’origine par Christopher Franko et James Clayton. Leur vision déclarée était de créer une chaîne avancée pour: "l’identité, la gouvernance, la charité, le commerce et l’équité".
-
EthereumFog (ETF) a été lancé le 14 décembre 2017 et a bifurqué à une hauteur de bloc de 4 730 660. L’objectif déclaré du projet est de développer "l’informatique géodistribuée décentralisée mondiale" en se concentrant sur l’informatique géodistribuée et le stockage décentralisé. Il y a encore peu d’informations sur ce que cela impliquera réellement.
-
EtherZero (ETZ) a été lancé le 19 janvier 2018, à une hauteur de bloc de 4 936 270. Ses innovations notables ont été l’introduction d’une architecture de masternode et la suppression des frais de transaction pour les contrats intelligents afin de permettre une plus grande diversité de DApps. Il y a eu quelques critiques de certains membres éminents de la communauté Ethereum, MyEtherWallet et MetaMask, en raison du manque de clarté entourant le développement et de certaines accusations de phishing possible.
-
EtherInc (ETI) a été lancé le 13 février 2018, à une hauteur de bloc de 5 078 585, avec un accent sur la construction d’organisations décentralisées. Les objectifs déclarés incluent la réduction des temps de blocage, l’augmentation des récompenses des mineurs, la suppression des récompenses de l’Uncle et la fixation d’un plafond sur les pièces exploitables. EtherInc utilise les mêmes clés privées qu’Ethereum et a mis en place une protection contre la relecture pour protéger l’ether sur la chaîne originale non embranchée.