Abandon de la PoW au profit de BABE/GRANDPA

Sujet là-aussi évoqué par @elois : Ğ1v2: proposition de passer au consensus hybride BABE/GRANDPA

Sujet qui se divise en fait en deux :

Génération de blocs avec BABE

Il est clair que la PoW (Proof-of-Work) est une solution à défaut de mieux, l’énergie et le temps passés à faire des calculs coûteux pourrait être mieux affectés, notamment au traitement normal des données de la blockchain.

BABE est un protocole de génération de blocs qui n’est pas basé sur la PoW, mais sur la VRF pour sélectionner le prochain auteur de blocs.

De plus, Duniter résout actuellement les forks à l’aide d’un algorithme simple (voire simpliste) fait maison. Il s’agirait de le remplacer par celui de BABE.

Finalisation avec GRANDPA

Un bloc finalisé est un bloc qui sort de la fenêtre de fork, autrement dit qui ne sera jamais annulé.

GRANDPA est un algorithme en-dehors de la blockchain qui permet aux nœuds de voter pour une chaîne qu’ils suivent, ce qui permet au réseau d’identifier le bloc le plus petit dénominateur commun.

Une fois le numéro de ce bloc dénominateur connu, chaque nœud peut finaliser de son côté et réduire la fenêtre de fork de BABE (le cas échéant, sinon d’un autre algorithme).

9 « J'aime »

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 :

  1. 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.
  2. 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 :slight_smile: 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.

4 « J'aime »

Pour commencer, je propose que l’on parte sur quelque chose de simple :

  1. seuls les membres peuvent devenir forgerons

    Permet d’éviter le spam de clés de forge

  2. devenir forgeron implique d’apporter une caution de X unités de monnaie

    Permet de baliser le comportement du forgeron en le récompensant pour ses actions bénéfiques au réseau (récupération des frais de transaction) et en le pénalisant pour ses actions nuisibles (création de blocs erronés, nœud trop instable, etc.).

    La caution doit être proportionnée au risque que fait peser le forgeron à la communauté s’il s’avérait nuisible. Ainsi, le montant pourrait être proportionnel au nombre de membres (plus il y a de membres, plus la nuisance est grande) mais inversement proportionnel au nombre de forgerons (plus il y a de forgerons, moins le forgeron a d’impact relatif sur une époque).

  3. pas de délégation du droit de forger par mandat à un tiers via mécanisme onchain

    Un forgeron peut transmettre sa clé de forge a un tiers, mais la blockchain en est agnostique. Ce qui signifie que la blockchain ne garantit aucunement la rétribution du forgeron mandant en cas de bénéfices réalisés par le mandaté.

  4. le nombre de forgerons pour une époque est limité à 1000

    C’est une limite exprimée par Bill Laboon dans cette vidéo à 3’38", même si je n’en connais pas encore la raison. La sélection des 1000 forgerons maximum se fera pour chaque époque en prenant le plus grand nombre de prétendants à cette tâche, triés par montant décroissant de la caution.

J’attends vos réactions, mais par défaut c’est ce que je vais inscrire dans le protocole.

4 « J'aime »

J’ai trois question :

  • les forgerons auront-ils la même chance de créer un bloc, quelle que soit leur caution ?

  • Quelles possibilités aurait un attaquant maîtrisant plusieurs identités membres pour réécrire une partie de l’historique ? A partir de quelle proportion des forgerons cela serait-il possible ? J’ai bien compris que GRANDPA permet de finaliser des blocs, donc « fixer » la BC, toutes les minutes en moyenne. Ceci laisse un temps court pour réécrire l’historique, mais peut être suffisant pour déclencher des actions automatiques (?)

Sur Polkadot, les forgerons ont un intérêt à mettre une forte somme en caution, car ils sont rémunérés en fonction de cette caution. Quel serait l’intérêt pour un membre Ğ1 de mettre une somme supérieure au minimum en caution ?

3 « J'aime »

Oui la même, BABE utilise la VRF qui donne un tirage aléatoire à répartition uniforme.

Je dirais qu’il faut une attaque aux 51% pour prendre le contrôle total, bien qu’il faille mitiger cette affirmation car à chaque bloc il n’y a pas 100% de chance d’exister un gagnant au tirage VRF.

Il me semble qu’on peut se contenter de dire que la nuisance est progressive et qu’à 51% le contrôle est considéré total, à quelques exceptions près.

Être sélectionné s’il y a plus de 1000 prétendants à forger.

J’ai d’ailleurs été outré (mais pas tellement surpris) d’apprendre que plus de 60% de la monnaie est verrouillée volontairement pour cette utilisation.

Et c’est assez symptomatique du fait que, aussi doués et incroyablement talentueux soient les développeurs de Polkadot, le sujet de la monnaie constitue toujours un point aveugle terrible dans le monde des blockchains.

4 « J'aime »

Je ne suis pas très doué en compréhension audio de l’anglais, mais je n’ai pas l’impression que cette limte soit mentionnée à cet endroit de la vidéo. Si je comprends correctement (à confirmer…), il dit qu’il y a 350 forgerons actifs, 152 forgerons en attente et 1050 nominateurs (?) qui élisent les forgerons. Il dit bien qu’il y a une limite au nombre de forgerons actifs (ici 350) mais je n’entends pas de référence à la valeur 1000 dans sa phrase.

L’intérêt commun étant qu’un maximum de la masse monétaire circule, il faudrait un moyen d’éviter ce travers.

2 « J'aime »

Oui, à la base j’avais mis 350 dans mon message par rapport à cette vidéo. Mais ensuite j’ai vu ailleurs que la limite réelle était 1000. J’ai modifié mon message en conséquence.

Est-ce qu’on pourrait définir un seuil max pour la caution ? Et si plus de 1000 forgerons potentiels mobilisent cette somme, alors sélectionner par tirage au sort ? Ça permettrait d’éviter d’avoir trop de monnaie immobilisée pour la forge.

2 « J'aime »

Tant que ça empêche, par exemple, les malwares mineurs (comme un script qui mine en utilisant les ressources du navigateur web client à son insu). Il faut qu’un forgeron soit obligé de se mettre en danger (en diffusant sa clé privée) pour déléguer son minage, comme c’est le cas pour Duniter v1.

Ah oui bonne idée. Et aussi en cas de pénalités reçues dans l’époque passée, exclusion pour l’époque à venir.

Dans la mesure où il n’y aurait pas de PoW dans Duniter V2S, ça ne me semble pas être un problème.

En tout cas ce sera la seule façon de déléguer son minage. D’ailleurs les frais de transaction seront attribués à la clé de session transmise, et seront donc contrôlables par le mandaté.

2 « J'aime »

S’il est techniquement possible de tirer au sort 1000 forgerons de la prochaine ère parmi N>1000 candidats forgerons ayant déposé une caution, alors je ne vois pas l’intérêt d’avoir un seuil maximum ni de les choisir selon le montant déposé.

Il y aurait :

  • soit un seuil minimum de caution évolutif (on peut vouloir déposer plus pour rester forgeron si ce seuil augmente) avec une désignation aléatoire, pour chaque ère, des forgerons qui pourront écrire.
  • soit un seuil minimum de caution, toujours évolutif, avec une désignation des forgerons selon le montant déposé en caution.

Mélanger les deux, c’est de mon point de vue une usine à gaz.

A peser ensuite, les avantages et inconvénients de ces solutions, en termes de sécurité.

1 « J'aime »

L’intérêt principal du seuil maximum est d’éviter la mobilisation d’une trop grande partie de la masse monétaire pour la forge. Voir la remarque de @cgeek sur Polkadot : 60% de la monnaie immobilisée.

S’il n’y a pas d’intérêt individuel à mobiliser une forte somme pour forger, il n’y a pas de risque de bloquer une grande partie de la masse monétaire pour cet usage.

Si les forgerons sont tirés au sort, il n’y a pas d’intérêt individuel à mobiliser une forte somme pour forger.

Donc Si les forgerons sont tirés au sort, il n’y a pas de risque de bloquer une grande partie de la masse monétaire pour cet usage. Un « seuil maximum » est donc inutile.

L’idée de départ c’était :

  1. Les forgerons doivent mobiliser une caution
  2. Il y a un seuil minimum
  3. Les forgerons sont sélectionnés en fonction de leur caution (plus ils mobilisent plus ils ont de chance d’être sélectionnés)

Je ne connais pas les arguments pour ces trois points, mais ça semblait être le point de départ de la discussion. Le risque est toutefois de mobiliser trop de masse monétaire. D’où l’idée :

  1. Définir un seuil max (si on sait définir un seuil minimum, je ne vois franchement pas où est la complexité)
  2. S’il y a trop de prétendants au seuil max, tirer au sort.

Le statut de forgeron pourrait servir de caution, non ? La punition est l’exclusion. Ça évite la dérive ploutocratique.

La caution est utile en l’absence de toile de confiance. Mais si on en a une, pourquoi s’embêter ?

3 « J'aime »

Le permis à points n’empêche pas l’amende. Certains se fichent de l’amende, d’autres des points, ça dépend des situations.

1 « J'aime »

Sauf que là ce n’est pas juste le retrait du permis, mais de la voiture. Si tu fraudes, tu n’as plus le droit de forger pour une durée donnée, suffisante pour empêcher le spam.

Oui mais inversement, en étant trop sévère on risque d’aboutir à une situation où il ne resterait plus personne pour forger. Exemple : un bug dans le calcul de WoT présent chez 90% des forgerons fait que tous les nœuds tentent d’inclure une adhésion qui ne respecte pas la règle de distance.

Les 90% se font donc exclure, ce qui facilite une attaque par déni de service sur les 10% restants.

2 « J'aime »