Si les écarts sont trop élevés entre membres calculant, ça posera quand même des problèmes malgré la difficulté personnalisée (On parle ici d’une échelle de 1/10^12 de puissance entre différents membres…)
Rien que parce que la difficulté personnalisée ne s’applique pas instantanément, il faut essayer d’empêcher les membres d’avoir potentiellement une telle différence de puissance.
Ainsi sur le double SHA utilisé par bitcoin, on a (je cite aeris) :
- 2-10MH/s CPU
- 300-700MH/s GPU
- 6-14TH/s ASIC
Avec scrypt, la différence est beaucoup plus atténuée :
- 25-50kH/s sur CPU
- 300-700kH/s sur GPU
- 1-2GH/s sur ASIC
Donc ça limite aussi les différences gigantesques qu’on peut avoir entre 2 membres.
Outre le changement d’algorithme de hash, on peut aussi envisager de changer le la règle de PoW (voir le chapitre “Proof of work” ci-dessous) :
Dans ce document, ils proposent d’utiliser un scheme de PoW qui :
- A un cout élevé en CPU et en RAM pour ceux qui forgent les preuves
- A un cout faible en CPU et en RAM pour ceux qui vérifient les preuves
Ce qui me parait intéressant pour permettre aux raspberry de continuer à calculer des blocs tout en vérifiant les blocs reçus, évitant ainsi les attaques de type DDOS sur les verifiers.
A voir dans le fond du papier l’intéret, il semble qu’il existe quelques vecteurs d’attaque, il faut voir quelles contre-mesures ils proposent.
Le scheme MTP est décrit sur le site de zCoin : Home | Firo - Privacy-preserving cryptocurrency
Et les vecteurs d’attaque ont été étudiés ici : Attacks on Merkle Tree Proof
Un article qui en parle : The Evolution of the Cryptographic Hash Function in Blockchains — Steemit
MTP a l’air encore très expérimental. Je ne recommanderai donc pas d’aller dans cette direction pour la V11 du protocole. Mais ça reste intéressant…
A court terme, une simple migration vers scrypt avec une cible d’usage de RAM de 16 mo devrait suffire pour calmer les mineurs ASIC.
EDIT : Un peit complément vis à vis de l’usage RAM qu’il faut cibler pour les paramètres NRP :
Côté Litecoin, ils utilisent ça :
With the scrypt parameters used in litecoin’s implementation (N = 1024; p = 1; r = 1), each thread needs about 64-128 KB depending on the lookup_gap and thread_concurrency settings when mining with a GPU
Ces paramètres ont été choisie pour que ça puisse être rapide sur CPU (cohérent avec le cache CPU), tout en empéchant une accélération trop élevée sur GPU/ASIC.
Je propose de viser une valeur similaire. Le cache CPU des raspberry pi est de : L1 32KB, L2 512KB. On peut donc viser quelque chose de proche. Il faudrait expérimenter les différentes valeurs et comparer…