Illusion au niveau du consensus

Ethereum est une plate-forme décentralisée qui sert de base aux contrats intelligents - des applications qui fonctionnent exactement selon leur code de programme, sans la moindre probabilité d'indisponibilité, de censure, d'ingérence de fraudeurs ou d'agents tiers.
- Ethereum.org



Nous, les développeurs, aimons croire en un niveau de consensus qui s'engage à résoudre tous les problèmes complexes des systèmes distribués, ce qui nous permet d'écrire des applications. Les mineurs vivent à un niveau consensuel, faisant leurs affaires de mineur. Les développeurs sont assis au niveau de l'application et écrivent des contrats intelligents - des programmes qui fonctionnent à l'intérieur de la machine virtuelle Ethereum (EVM). Nos applications décentralisées interagissent avec l'ordinateur, en s'appuyant sur son intégrité et sa sécurité.

Nous savons qu'EVM fonctionne par consensus, et nous n'avons pas besoin de penser à ce mécanisme tant qu'il fonctionne. Nous ne pensons pas aux mineurs, car au final, il n'est pas nécessaire de comprendre le principe de fonctionnement des semi-conducteurs ou les caractéristiques de conception des micropuces des ordinateurs modernes. Mais, hélas, cette séparation commode et prévisible entre les niveaux n'est rien d'autre qu'une illusion. L'illusion de consensus qui nous fait oublier que les mineurs ne sont pas nos amis.

Dans la pratique, la transition des contrats au consensus est un phénomène beaucoup moins fluide et pas aussi simple qu'on le croit généralement. La création de blocs affecte l'état d'EVM, qui à son tour affecte les défis des contrats intelligents et, par conséquent, affecte le fonctionnement des applications décentralisées et de leurs utilisateurs. Plus les blocs sont lents, plus les applications décentralisées sont lentes. Plus les blocs sont rapides, plus les applications sont rapides. Les blocs vides provoquent l'arrêt des applications.

De temps en temps, un niveau de consensus interfère par inadvertance avec les applications décentralisées. Mais il peut y avoir des cas où des représentants de ce niveau peuvent intervenir intentionnellement. Les mineurs contrôlent le niveau de consensus. Ils travaillent pour de l'argent et ne maintiendront donc le niveau d'application que tant que cela leur apportera des bénéfices. S'ils peuvent gagner plus d'argent en interférant au niveau de l'application, ils finiront par le faire.

Tapis roulant pour mineurs


Les mineurs ne sont pas vos amis. Cependant, pas des ennemis. Ils ne veulent pas vous nuire, ils ne peuvent tout simplement pas l'éviter. Ce sont les exigences de la preuve de travail. Les mineurs doivent entrer en concurrence féroce pour avoir le droit de recevoir une très petite marge. Ils sont coincés sur le tapis roulant des mineurs, où le plus rapide des coureurs donne le rythme.



Chaque fois qu'ils parviennent à inventer une autre façon d'accélérer ou de réduire le coût des hachages informatiques, la complexité augmente. Avec sa croissance, chaque hachage individuel devient de plus en plus important pour moi. Votre taux de hachage peut rester inchangé, mais vous commencez progressivement à recevoir de moins en moins. À cet égard, la preuve de travail oblige les mineurs à réinvestir constamment leurs bénéfices. Ils ne réalisent un bénéfice que par des dépenses constantes, l'optimisation et le maintien de la compétitivité. Ceux d'entre eux qui sont incapables de concourir sortent de la course .



Si votre marge est de 1%, une baisse de 1% du revenu vous prive de profit. Si le hashrate du mineur devient au moins légèrement inférieur à la norme actuelle, il est à la traîne du reste de ses collègues. En revanche, une augmentation de 1% des revenus entraîne un doublement du bénéfice. Même une petite marge d'efficacité permet au mineur d'obtenir beaucoup plus d'argent pour réinvestir dans l'équipement. Et la séparation de ces participants augmente de plus en plus, ce qui fait que des concurrents moins performants ne peuvent plus s’y opposer. La preuve de travail incite les mineurs à rechercher de petits avantages, à améliorer tous les aspects du processus et à l'utiliser pour chasser les concurrents du tapis roulant.

Il existe deux façons d'améliorer la rentabilité de l'exploitation minière: augmenter la rentabilité ou réduire les coûts. Le profit se compose de récompenses pour les blocs approuvés et de commissions pour les transactions qui y sont incluses. Les coûts découlent de la nécessité de payer l'électricité, l'équipement, les salaires des employés, le loyer des bureaux, etc.



Les mineurs sont actuellement en concurrence en raison d'améliorations majeures très évidentes, telles que la réduction des tarifs d'électricité ou l'amélioration des équipements. Malheureusement, cette approche conduit à une baisse toujours plus importante des bénéfices à l'avenir. Il devient de plus en plus difficile pour les entreprises de trouver de l'électricité moins chère. L'exploitation à l'aide de cartes graphiques repose sur la limitation de la bande passante mémoire, et les ASIC, à leur tour, sont limités par la taille physique minimale des transistors utilisés dans leurs microcircuits. Maintenant, tous ces chemins de développement restent pertinents, mais à un moment donné, leur potentiel sera épuisé et les mineurs seront obligés de rechercher des options d'optimisation moins évidentes et plus sophistiquées .

Il existe des moyens très efficaces et non évidents. Malheureusement, ils sont nocifs pour les autres utilisateurs du système. Je voudrais me concentrer sur les façons dont les mineurs peuvent augmenter leurs profits et réduire leurs coûts en prenant de l'argent aux personnes et aux systèmes qui dépendent du travail des blockchains. Pendant que vous lisez ce document, essayez de ne pas oublier que les mineurs ne veulent pas prendre votre argent, ils doivent le faire. La preuve de travail les oblige à accroître leur compétitivité.

Comment les mineurs peuvent intervenir


Les mineurs ont de nombreuses façons d'interférer avec le fonctionnement d'EVM et les applications qui y sont exécutées. Étant donné que chaque mineur a la capacité de contrôler les blocs qu'il génère, il peut également contrôler les changements d'état dans ce bloc. Passons en revue certaines des méthodes les plus simples sans aller trop loin dans les détails. Pour chacun d'eux, nous essaierons de déterminer une stratégie d'intervention, qui en souffrira et comment les mineurs pourront gagner de l'argent dessus.

Réorganiser les transactions

Les transactions sont traitées en blocs. Chaque bloc a un ordre canonique de traitement des modifications de l'état des transactions. Les mineurs appliquent chaque transaction à l'état EVM dans l'ordre et déterminent le hachage racine de l'état final situé dans l'en-tête du bloc. Le mineur qui génère le bloc a le contrôle sur l'ordre des transactions dans les blocs. La possibilité de contrôler l'ordre des transactions dans un bloc vous permet en fait de contrôler l'ordre des changements d'état.



Supposons que je veuille envoyer des paiements à un ami. Je vais créer un contrat simple avec trois fonctions: deposit , unlock et retrieve . L'appel de deposit transfère des fonds au stockage. Chaque fois que je veux lui envoyer de l'argent, je unlock 5 éthers. Mon ami appelle la fonction de retrieve , qui lui envoie tous les fonds qui ne sont pas bloqués par deposit . Si le mineur voit unlock et retrieve transactions dans un bloc, il peut les échanger et retrieve sera appelé plus tôt. L'appel à retrieve vous permettra d'obtenir tous les fonds gratuits et non les fonds de stockage. Après cela, le unlock sera appelé. En conséquence, mon ami sera obligé d'envoyer à nouveau la transaction de retrieve , après avoir à nouveau payé la commission.



En modifiant l'ordre des contrats d'exportation, les mineurs peuvent influencer les résultats de l'exécution des contrats. Cela signifie qu'ils peuvent, dans certaines limites, surveiller l'état de l'EVM. La situation est particulièrement exacerbée par les grands marchés publics qui régissent les interactions entre un grand nombre d'utilisateurs. Plus le pool de transactions disponibles pour le mineur est large, plus il a de contrôle sur l'état final.

Les développeurs de contrats devraient prévoir de telles tentatives pour modifier arbitrairement l'ordre des transactions en blocs. Sinon, les mineurs peuvent provoquer le paiement de commissions supplémentaires ou causer d'autres dommages involontaires aux utilisateurs de l'application.

Insertion de transaction


Lors de la formation de l'ordre des transactions dans un bloc, les mineurs ne se limitent pas à la seule capacité de manipuler les transactions des autres. Ils peuvent créer leurs propres transactions. Ils ont un ETH. Et comme nous tous, ils peuvent jouer avec lui dans le casino blockchain et l'acheter ou le vendre sur les marchés de la blockchain. Cependant, la possibilité de déterminer l'ordre de traitement des transactions dans certains cas peut leur permettre de devenir le premier dans la file d'attente de traitement.

Imaginons un autre contrat intelligent simple. Cette fois, Alice veut jouer à un jeu de devinettes. Elle met 5 éthers dans un contrat. Ce montant est envoyé à la personne qui nomme le numéro le plus proche du numéro deviné. Alice appelle commit avec un hachage du nombre, garantissant ainsi son immuabilité. Tout le monde peut appeler guess et participer aux devinettes. Après 2 blocs, Alice appelle reveal pour que tout le monde sache quel numéro a été composé.



Alice ne peut pas tricher, car cela est prévu par le contrat. Mais le mineur a une telle opportunité. Il peut attendre et appeler son numéro après avoir vu l'appel de révélation. Il connaîtra le résultat avant même la formation du bloc! Même si David appelle également le 4, le mineur peut changer l'ordre, le battant ainsi.

Lorsqu'un utilisateur régulier crée une transaction, il l'envoie aux mineurs pour inclusion dans le bloc. L'utilisateur doit donner son consentement irréversible à la transaction avant de voir le résultat de son exécution. Les mineurs, au contraire, peuvent attendre dans le processus de création d'un bloc et ensuite seulement décider s'ils doivent inclure une transaction particulière. Cela signifie qu'ils ont accès à plus d'informations que les utilisateurs ordinaires, ainsi que le pouvoir de modifier l'ordre des transactions. Cela leur donne un sérieux avantage dans tout système basé sur la blockchain.

Chaque fois que les utilisateurs et les mineurs interagissent sur la blockchain via un contrat intelligent, il existe un risque que les mineurs insèrent des transactions et modifient leur commande à leur propre avantage. En règle générale, cela signifie qu'ils recevront de l'argent, qui autrement aurait dû aller dans la poche d'un utilisateur ordinaire. Les développeurs de contrats intelligents devraient concevoir leurs systèmes pour remédier à cette inégalité.

Erreurs forcées

Les mineurs peuvent profiter des réorganisations et des insertions pour intervenir dans les défis des contrats intelligents. Parfois, ils peuvent même complètement perturber le défi. Nous appelons de tels cas des erreurs forcées. Ils se produisent lorsque les mineurs changent l'état en une sorte d'appel inattendu, à la suite duquel il échoue. Ils peuvent le faire en insérant une transaction qui affectera l'état.

Créons un contrat intelligent simple pour le marché. J'exporte pour vendre des jetons à vendre à un prix donné. Tout le monde peut appeler buy pour acheter certains de mes jetons.



Dans cette situation, le mineur peut vérifier l'appel entrant de Bob pour buy et envisager l'option de son achat de jeton. Il peut acheter exactement autant que nécessaire pour que Bob termine la transaction avec une erreur. Si Bob veut acheter 2,5 GNT, le mineur peut combler cette pénurie. La transaction de Bob se terminera par erreur, mais le mineur recevra une commission pour cela. Ainsi, contrairement à sa volonté, Bob paiera l'achat de jetons GNT par le mineur, sans rien recevoir en retour.

Cette attaque est particulièrement dangereuse dans les anciennes versions de Solidity. Les anciennes versions des mots-clés assert et throw transfèreront tout le gaz attaché au mineur, ce qui lui fera recevoir des commissions très élevées pour le manque de travail. Les mots clés plus récents require et revert restreindre l'utilisation du gaz en fonction du travail réellement effectué.

Les erreurs forcées permettent aux mineurs de recevoir des commissions pour avoir refusé d'effectuer un travail. Si la transaction se termine avec des erreurs, l'état revient à son état d'origine. Si le mineur trouve un moyen fiable de provoquer des appels erronés, il n'aura même pas besoin de traiter les changements d'état. Le bloc idéal selon la version du mineur est celui qui est bloqué par un échec avec des transactions et des paiements erronés avec un transfert de la commission pour leur traitement, sans aucun autre changement d'état.

Les développeurs de contrats intelligents peuvent empêcher partiellement ce comportement en examinant attentivement leur revert et require expressions. Si les mineurs parviennent à trouver la bonne façon de conduire le contrat à l'erreur, ils pourront collecter des commissions supplémentaires auprès de vos utilisateurs. Règle numéro un dans de tels cas: si un appel repose sur un état qui peut être modifié par un autre utilisateur, il est vulnérable aux erreurs forcées.

Censure

Lorsqu'ils décident de l'ordre des transactions dans un bloc, les mineurs peuvent également ignorer sélectivement certaines transactions. Ils peuvent le faire pour des raisons politiques ou financières. Les utilisateurs n'ont généralement aucune garantie que les mineurs incluront jamais une transaction particulière dans un bloc.

Disons qu'Alice veut se faire une tirelire. Elle peut lancer un contrat simple, lui permettant de retirer de l'argent au plus tôt en 10 000 blocs. Alice est une bonne personne et elle veut donc s'assurer qu'en cas de mort subite, l'argent sera envoyé à au moins quelqu'un d'autre. Par conséquent, elle s'assure que le contrat permet aux mineurs de retirer de l'argent après 50 000 blocs.



Chaque mineur a une forte motivation à ne pas inclure sa transaction de retrait dans ses blocs. Ils n'ont rien à perdre: si elle ne peut jamais prendre l'argent, ils peuvent tenter leur chance et l'obtenir à l'avenir. De plus, elle ne pourra retirer de l'argent que si les mineurs le lui permettent. Même s'ils ne conspirent pas et ignorent ses transactions, ou ne mènent aucune attaque à 51%, ils peuvent toujours refuser collectivement d'accepter sa transaction pour traitement.

Cela signifie qu'il n'y a tout simplement aucun contrat pour garantir la livraison à 100% en temps opportun d'une transaction! Vous devrez concevoir des applications compte tenu de la possible censure imprévisible des mineurs. Et comme le contrat ne peut prévoir leur volonté d'intervenir, il devrait prévoir d'éventuels retards arbitraires.

Escalade des problèmes


Plus il y a d'argent dans le système, plus il est probable que les mineurs voudront interférer d'une manière ou d'une autre avec son travail. À mesure que les échanges se développent, les casinos deviennent plus complexes et la valeur de la blockchain augmente, tout comme la motivation des mineurs à intervenir.

Le consensus n'est pas seulement le niveau auquel nos applications décentralisées sont conservées. En fait, ils sont étroitement liés à la couche d'application. Lorsque nous écrivons des programmes, nous ne pensons pas aux propriétés physiques du silicium, car nous savons qu'il n'essaiera pas activement de prendre notre argent. Malheureusement, entre EVM et le silicium, il y a une couche sous forme de mineurs, et s'ils ne peuvent pas faire confiance, EVM ne peut pas faire confiance.

Les développeurs Solidity doivent programmer un ordinateur qui fonctionne contre eux. L'EVM en tant que tel est un «système byzantin». Toute partie de celui-ci qui est sujette à un résultat infructueux viendra au pire moment. Aujourd'hui, nous sommes encore à un stade très précoce dans la compréhension des cryptomonnaies, de l'exploitation minière et des contrats intelligents. Désormais, les mineurs ne manifestent pas une volonté active d'optimiser leurs activités au détriment des utilisateurs, mais ce n'est que pour l'instant. Ethereum va croître et un jour, nous nous souviendrons encore de cette époque comme l'âge d'or des applications décentralisées.

Les mineurs ne sont ni amis ni ennemis. Il s'agit d'une sorte de catastrophe naturelle incontrôlable opérant dans nos systèmes de consensus. Ceux qui n'apprennent pas à gérer cet élément deviendront finalement des mineurs avancés.

image

Source: https://habr.com/ru/post/fr409735/


All Articles