# Preuve de travail côté client pour la suppression des frais

**URL:** https://forum.duniter.org/t/preuve-de-travail-cote-client-pour-la-suppression-des-frais/11919
**Category:** R&D
**Created:** [31 January 2024 19:24 UTC](https://forum.duniter.org/t/preuve-de-travail-cote-client-pour-la-suppression-des-frais/11919 "2024-01-31T19:24:17Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [31 January 2024 19:24 UTC](https://forum.duniter.org/t/preuve-de-travail-cote-client-pour-la-suppression-des-frais/11919/1 "2024-01-31T19:24:17Z")

</div>

Disclaimer : il est peu probable qu’on implémente ça avant la migration, mais c’est toujours une idée pour après.

> [@Comment partager équitablement cette ressource commune qu'est la blockchain Ğ1?](https://forum.duniter.org/t/comment-partager-equitablement-cette-ressource-commune-quest-la-blockchain-g1/9050/48):
>
> PoW côté wallet
> 
> - 👍 facile à coder, léger à vérifier en blockchain, immédiat
> - 👎 revient à payer en € l’électricité plutôt que des G1, coûteux en énergie d’une manière invisibilisée, peut être délégué à un service de PoW commercial

Avec les quotas (cf [Implémentation des quotas](https://forum.duniter.org/t/implementation-des-quotas/11543)), on a fourni une manière de rembourser les frais de transaction si l’utilisateur lie son compte à une identité qui dispose d’un certain quotas de transactions gratuites en blockchain. Mais cela ne fonctionne pas dans le cas où l’on souhaite faire des transactions anonymes (oneshot account par exemple) ou non reliées à une identité (par exemple compte d’une association ou d’un collectif). La solution de la pow côté client qui n’était pas entièrement satisfaisante si on la considérait comme seule solution devient très intéressante si on la rend optionnelle !

---

<div class="post-metadata">

### Author: ![Maaltir](https://forum.duniter.org/user_avatar/forum.duniter.org/maaltir/32/5039_2.png) [@Maaltir](https://forum.duniter.org/u/Maaltir)
#### Post date: [31 January 2024 20:24 UTC](https://forum.duniter.org/t/preuve-de-travail-cote-client-pour-la-suppression-des-frais/11919/2 "2024-01-31T20:24:04Z")

</div>

Le problème que je vois à la POW coté client, c’est que c’est quand même au serveur de fournir le problème à résoudre, il me semble.  
Dans ce cas, le serveur peut être inondé de demande de problème à résoudre. Je ne sais pas si c’est gérable…

---

<div class="post-metadata">

### Author: ![tuxmain](https://forum.duniter.org/user_avatar/forum.duniter.org/tuxmain/32/6423_2.png) [@tuxmain](https://forum.duniter.org/u/tuxmain)
#### Post date: [31 January 2024 20:51 UTC](https://forum.duniter.org/t/preuve-de-travail-cote-client-pour-la-suppression-des-frais/11919/3 "2024-01-31T20:51:06Z")

</div>

Pour empêcher la délégation à un tiers non fiable, le travail devrait nécessiter la connaissance de la clé privée (signature).

Pour empêcher la thésaurisation de preuves de travail, la preuve devrait avoir une courte durée de vie (référence à un état récent de la blockchain).

Si on veut qu’une machine faible de puissance P\_F valide une transaction de poids X (en proportion du bloc) en temps X\_F, et qu’une grosse machine de puissance P\_G puisse remplir un bloc en temps B\_G, alors B\_G=\frac{P\_FX\_F}{XP\_G}.

Avec mon ordi (16 threads BOGOMips=6800) et mon RPi Zero (4 threads BOGOMips=38.4), X\_F=5s, X=\frac{0.17}{1400}\approx 0.00012 [(source de X)](https://forum.duniter.org/t/les-frais-ca-devient-concret/11877), on obtient B\_G\approx 58.8s. Avec un ordi de la fac à 48 cœurs BOGOMips=4600, ça tombe à 29s. En utilisant toute une salle (20 tels ordis), 1.5s. C’est assez pour remplir tous les blocs, et accessible à un attaquant prêt à dépenser quelques € (ou gratuitement à des étudiants). Sans compter la possibilité d’utiliser le GPU.

Pour empêcher d’utiliser le GPU et de trop paralléliser, on peut utiliser un algo comme Argon2. (scrypt amélioré) Cependant il serait trop long à vérifier côté Duniter. Je vais chercher s’il existe des algos de signature présentant les mêmes avantages que Argon2 mais en restant rapides à vérifier.

Pour rendre plus coûteux de remplir un bloc, on peut limiter le poids de transactions PoW par adresse par bloc. Par exemple on pourrait faire maximum 10 transferts PoW depuis une même adresse dans un même bloc.

> [@Maaltir](#):
>
> Dans ce cas, le serveur peut être inondé de demande de problème à résoudre. Je ne sais pas si c’est gérable…

Le problème peut être généré gratuitement si le validateur le construit au moment de vérifier la solution. Par exemple on peut demander de faire un calcul à partir d’une donnée présente dans un des 100 derniers blocs.
