Incidents associés

Le DAO Hack expliqué : Décollage malheureux des contrats intelligents
Osman Gazi Güçlütürk Bloqué Débloquer Suivre Suivre 31 juillet 2018
Logo du DAO
Les contrats intelligents ont amené des organisations autonomes distribuées, alias «DAO», dans notre vie. Un DAO est un autre code informatique par lequel un ensemble de contrats intelligents sont connectés et fonctionnent comme un mécanisme de gouvernance.
Dans cette histoire, j'explorerai le projet DAO le plus célèbre, le DAO, et ses effets sur l'environnement des contrats intelligents. En lisant les explications, il faut garder à l'esprit que toutes ces discussions ont eu lieu sur des plateformes en ligne telles que GitHub et Reddit. Par conséquent, il n'est pas possible de faire des déclarations définitives ou de donner des chiffres exacts sur tous les arguments utilisés dans ces discussions.
- La création du DAO
Le projet DAO le plus tristement célèbre était le DAO créé par le Slock.it [1] et mis en ligne le 30 avril 2016. Il s'agissait d'un fonds de capital-risque virtuel régi par les investisseurs du DAO. L'idée était la suivante : les fonds levés auprès des investisseurs, les détenteurs de jetons, sont mutualisés. Les détenteurs de jetons peuvent devenir des entrepreneurs en soumettant des propositions de financement de leur projet en utilisant les fonds DAO. Il y a eu un examen de conservateur, qui n'était qu'une vérification d'identité effectuée par l'un des conservateurs sélectionnés parmi les membres respectés de la communauté Ethereum. Une fois la proposition passée par le conservateur, elle serait votée par les investisseurs. Si une proposition est approuvée par un quorum de 20 % de tous les jetons,[2] le DAO transfère automatiquement Ether au contrat intelligent qui représente la proposition. Tout Ether généré à partir des propositions financées par le DAO serait restitué aux investisseurs participants sous forme de récompenses.
Lors de l'offre initiale[3] qui a eu lieu en mai 2016, la seule exigence pour être un investisseur était d'investir Ether dans le système. En échange, les participants ont reçu des jetons DAO, 100 jetons DAO pour 1 Ether, qui donnent des droits de vote à utiliser lors de la sélection des projets qui seraient financés. Le DAO a levé 12,7 millions d'Ether, ce qui équivalait à plus de 150 millions de dollars à l'époque et est devenu le plus grand projet de financement participatif jusqu'à son époque. Cependant, le 16 juin 2016, le DAO a été piraté.
- Infâme fonction 'Split' et l'enfant DAO
Le mécanisme de gouvernance adopté par le DAO était similaire à la gouvernance des sociétés par actions cotées en bourse. Sans surprise, il y avait une possibilité que la minorité soit supprimée par la majorité. Les créateurs de la DAO ont voulu introduire une protection pour la minorité : l'idée était de permettre à la minorité de récupérer ses fonds lorsqu'une proposition à laquelle elle ne veut pas faire partie est approuvée malgré son objection, qui était, en fait, un équivalent DAO du droit d'évaluation que nous voyons en vertu du droit des sociétés dans certaines juridictions.
Les créateurs ont implémenté cette solution comme une capacité d'un DAO à se scinder en deux. En soumettant une forme spéciale de proposition, la minorité, ainsi que d'autres détenteurs de jetons qui ont voté pour cette deuxième proposition spéciale, pourraient emmener leur Ether dans un nouveau DAO, qui s'appelle le DAO enfant mais a les mêmes capacités et est soumis aux mêmes restrictions de celle du DAO dont il est séparé.[4]
La procédure de scission peut être initiée par n'importe quel détenteur de jeton à tout moment concernant son propre Ether. Cependant, une fois lancée, il y a un calendrier à suivre codé en dur dans le code du DAO selon lequel une proposition scindée doit avoir au moins 1 semaine (7 jours) de temps de débat. Après cette 1 semaine, la fonction split peut être appelée, et l'Ether de l'initiateur peut être déplacé vers un nouveau DAO enfant mais il y a ensuite une période de création split de 27 jours pendant laquelle aucune proposition ne peut être avancée. Et même après cela, si vous essayez d'envoyer les fonds du DAO enfant sur un compte sous votre propre contrôle, vous devez soumettre une proposition et attendre 2 semaines (14 jours), ce qui correspond à la période normale de débat sur la proposition. Pour résumer, une fois que vous décidez de diviser un DAO, vous avez besoin d'au moins 48 jours avant de l'obtenir dans un compte que vous contrôlez.[5]
Un codeur a trouvé une faille dans cette procédure. Une fois qu'une fonction de fractionnement est appelée, le code a été écrit de manière à récupérer d'abord l'Ether et à mettre à jour le solde plus tard. De plus, il ne vérifiait pas s'il y avait un appel récursif, qui est une expression utilisée pour indiquer une fonction qui s'appelle elle-même. Le ou les attaquants ont réussi à appeler de manière récursive la fonction de fractionnement et ont récupéré leurs fonds plusieurs fois avant d'arriver à l'étape où le code vérifierait le solde. Le 16 juin 2016, l'attaquant a réussi à récupérer environ 3,6 millions d'Ether du fonds DAO en abusant de cette faille, connue sous le nom d'"exploit d'appel récursif".
- Discussions et Hard Fork
La communauté Ethereum a remarqué ce transfert anormal du fonds DAO.[6] De plus, le lendemain, quelqu'un qui prétendait être l'agresseur a publié une lettre ouverte adressée à la communauté Ethereum.[7] Ces développements ont été suivis d'un débat intensif sur ce qui doit être fait pour résoudre ce « problème ».