Bon, c’est le dernier grand sujet qu’il me reste parmi les évolutions.
Terminologie
Tout d’abord, mettons-nous d’accord sur les termes.
- validateur et forgeron : sont des synonymes, validateur étant le terme côté Substrate.
- trousseau de session : ensemble de clés déléguées au consensus, détenues par un compte
- BABE : protocole de génération de blocs et de leur réception
Répond aux questions :
- est-ce que mon nœud est un validateur et doit produire des blocs ?
- est-ce que le bloc reçu provient bien d’un validateur ? etc.
- GRANDPA : protocole de finalisation, c’est-à-dire le fait de sortir les blocs de la fenêtre de fork.
Permet :
- de canonicaliser un ensemble de blocs : c’est-à-dire les rendre irréversibles
- d’élaguer les forks dont la canonicalisation est devenue impossible
- NPoS : Nominated Proof of Stake, système d’élection des validateurs.
Quelle méthode pour définir les validateurs ?
Les protocoles BABE et GRANDPA sont exécutés par le nœud, et prennent en entrée une liste de validateurs. Ces protocoles sont agnostiques de la définition de ces validateurs, ils vont simplement chercher ces listes dans le storage à un emplacement prédéfini.
Tout l’enjeu du présent sujet est de définir la stratégie de sélection des validateurs.
Le fonctionnement en mode NPoS
C’est le mode présenté par les équipes de Substrate pour leurs blockchains principales (Kusama et Polkadot). Vous pouvez regarder cette démonstration en vidéo. Voici ce que j’en ai compris brièvement :
La NPoS est un système qui définit les validateurs sur la base :
- d’enjeux monétaires : les participants à exécuter BABE/GRANDPA (= les validateurs) définissent un trousseau de session et mettent en jeu une part de monnaie qui servira de garantie et de mesure du poids du participant. C’est la partie Proof of Stake classique.
- de nomination/délégation : d’autres participants peuvent intervenir sans avoir à installer de nœud, ils peuvent nominer (= déléguer à) un validateur leur participation en transmettant leur mise au validateur. Cet enjeu supplémentaire augmente la part d’enjeu du validateur et donc son poids.
Le poids impacte directement la proportion de blocs que le validateur pourra produire, et donc la quantité de frais de transactions dont il va bénéficier. Le nominateur reçoit une part des bénéfices à proportion de son enjeu (moins une commission pour le validateur je suppose).
Le fonctionnement pour Duniter
Là, tout est à définir on peut hériter du mode NPoS, mais il me semble que ce n’est pas notre philosophie car il s’agit d’un mode où le contrôle est donné aux plus riches en monnaie, critère pour le moins questionnable.
Comme nous avons la WoT, nous pourrions évidemment nous reposer au moins en partie dessus. Par exemple les validateurs pourraient n’être que des membres (bien que la clé de session puisse être transmise à un tiers, ce critère permet de dire 1 membre = 1 voix éventuellement mise en concert).
Selon moi il ne faudrait pas totalement écarter l’enjeu monétaire, pas forcément en termes de poids mais comme mécanique anti-abus pour contrer :
- le stalling : fait de ne pas produire de blocs (alors qu’on dispose du droit) par choix ou par manquement (installation d’un nœud avec très mauvaise connexion Internet, mal configuré, nœud sous-dimensionné, mal protégé électriquement, etc.)
- le spamming : fait de produire des blocs de façon préjudiciable au réseau (ex. : produire plusieurs fois le même bloc avec des données différentes)
En cas de préjudice, l’enjeu doit être impacté en proportion des faits reprochés.
Bref, je vous laisse proposer vos idées également. Mais il faut faire mieux que Duniter v1 car la sécurité n’est pas au niveau pour une monnaie qui prétend grossir au-delà des 10k voir 100k membres.