Ce sujet est connexe à : Les transactions - #10 by kimamila à propos des frais de transactions.
Un point de Substrate qui diffère de Duniter v1 : un bloc peut contenir des extrinsics invalides, c-à-d qui ne sont pas légitimes du point de vue du protocole. Par exemple, une transaction qui tente d’envoyer de la monnaie sans avoir les fonds suffisants.
Dans Duniter v1, un tel bloc était purement et simplement rejeté.
attention, ce sujet ne traite pas des extrinsics qui planteraient à cause d’un bug. Dans un tel cas, le bloc entier est rejeté dans Substrate.
Pourquoi Substrate autorise-t-il des extrinsics invalides ?
Substrate implémente ce comportement mais avec des frais en tant que mécanisme anti-DoS.
En effet, que les transactions soient légitimes ou non, les nœuds vont devoir dépenser du temps pour tenter de les intégrer. Mais si les transactions sont toujours illégitimes parce qu’émises par un attaquant et que celles-ci n’ont qu’un coût marginal à être produites, alors il s’agit d’une faille permettant une attaque de type DoS.
Le fait de toujours inclure un extrinsic tout en encaissant systématiquement des frais avant d’exécuter la transaction donne un coût à l’attaque, qui devient circonscrite à la taille du portefeuille de l’attaquant. Ce portefeuille sert de caution.
Et si l’émetteur n’a pas les fonds ?
Il n’y aura pas de tentative d’exécution de la transaction, ce qui économise déjà les ressources que celle-ci aurait consommé sur le nœud qui reçoit la transaction.
De plus, la transaction n’est pas répliquée sur le réseau par les nœuds (honnêtes), sauf si celle-ci va jusqu’à être incluse dans un bloc par un forgeron attaquant. Là, oui, tout le réseau utilise des ressources pour rien. Mais dans ce cas, il est possible d’avoir des règles punitives pour le forgeron lui-même pour avoir inclus une transaction illégitime et sans caution. Il se peut qu’il faille intégrer dans le protocole que tout forgeron doit mettre en jeu une caution pour pouvoir participer à forger des blocs.
Quid des documents de WoT ?
Plus généralement, cette mécanique anti-DOS s’applique à tout extrinsic par défaut. Mais nous pouvons tout à fait autoriser les certifications et autres adhésions à ne pas avoir de frais.
Néanmoins, rappelons-nous que ces documents sont tout aussi susceptibles d’aboutir à une attaque. Le plus dangereux est le document d’adhésion qui génère de gros calculs de distance, très coûteux en CPU et RAM.
Alors que faire ? Une possibilité serait d’avoir des frais, oui, mais retournés en cas de succès de l’opération. C’est l’une des solutions préconisées par Substrate.
Mais attention là encore car cela induira des conséquences pour les utilisateurs :
- qui certifient sans faire attention (ou sans être prévenu par leur application !) et publient une certification qui n’aboutira pas : cela leur coûtera des Ğ1
- qui renouvellent trop tôt
- etc.
Et notamment en cas de bug du client, c’est le portefeuille qui va souffrir ! Ce qui est déjà vrai d’un client qui manipule des comptes de toute façon.
Bref, il reste à bien définir tout cela.