• [^] # Re: on vit une époque formidable

    Posté par (site web personnel) . En réponse au journal Comment bloquer 280M de dollars en éther. Évalué à 10.

    Cette citation n'est pas vraiment très claire. Voilà ce que j'ai personnellement compris après un peu de recherche.

    Ethereum

    Ethereum est pour rappel un système de blockchain qui permet de stocker et exécuter du code (appelé contrat) dans la blockchain, en plus de porte-feuilles et transactions (comme Bitcoin).

    À chaque exécution du contrat, le nouvel état de sa mémoire est stocké dans la blockchain (ça a donc un coup, qu'il faut payé en gas (ce qui peut donner l'exception out-of-gas si on ne paye pas assez pour finir l'exécution du contrat, exception qui me fait personnellement très rire)). Un contrat n'a pas a proprement parler de propriétaire, mais une pratique consiste simplement à enregistrer dans une variable l'adresse du créateur, pour lui permettre d'exécuter des actions avec plus de privilèges.

    Trois points important à rajouter :

    • un contrat est aussi un porte-feuilles, et peut donc posséder de la monnaie ;
    • un contrat peut s'autodétruire, il y a un appel prévu pour dans la machine Virtuelle Ethereum (selfdestruct) ;
    • un contrat peut appeler du code d'un autre contrat mais l'exécuter avec son propre contexte d'appel (sans avoir besoin d'envoyer un message au contrat que l'on souhaite exécuter, ce qui changerait l'expéditeur) : c'est un mécanisme de bibliothèque.

    Parity

    Parity est un client Ethereum (en Rust). Une des fonctionnalité que propose ce client, c'est de créer des porte-feuilles multi-signés. Avec un tel porte-feuille, tous ses propriétaires doivent signer une transaction avant qu'elle puisse être effectuée.

    Or ce genre de porte-feuille n'est pas du tout prévu de base. Comment faire ? Avec un contrat. Ce porte-feuille multi-signé est en réalité un contrat, avec sa propre monnaie, qui a enregistré les propriétaires et implémente les mécanismes souhaités pour effectuer une transaction de monnaie vers un autre compte.

    Le problème

    Pour implémenter leur porte-feuille multi-signé, les gars de Parity ont développé un contrat qu'ils ont inséré dans la blockchain et que tous les porte-feuilles multi-signés utilisent. Une bibliothèque donc.

    Ce contrat a aussi une notion de propriétaire, ainsi qu'une méthode qui appelle selfdestruct, qui vérifie que c'est bien le propriétaire du contrat qui l'appelle. Là où ça devient drôle, c'est que ce fameux devops199 a réussi à se rendre propriétaire de ce contrat, et une fois fait il a appelé la méthode déclenchant l'autodestruction.

    Résultat, les porte-feuilles multi-signés qui utilisent ce contrat ne fonctionnent tout simplement plus. Comme le disent les mecs de Parity eux-même : « This means that currently no funds can be moved out of the multi-sig wallets ». Mais à part ça, « We very much regret that yesterday’s incident has caused a great deal of stress » (toujours de Parity) :')

    Cerise sur le gâteau, lorsque un contrat s'autodétruit, il peut envoyer le reste de sa monnaie à une adresse, ce qui pourrait donc être une solution pour récupérer son argent. Mais il semblerait que la méthode qui appelle l'autodestruction utilise elle aussi ce fameux contrat qui n'existe plus, et donc ne fonctionne pas non plus.

    Conclusion

    Faut tout compiler en statique :D

    Pour continuer à s'amuser :

    Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.