smith-members
-
Review changes -
-
Download -
Patches
-
Plain diff
Closes #168 (closed).
Présentation
Nouvelle palette visant à remplacer l'implémentation actuelle de la WoT Smith.
Avancement :
-
events -
replace duniter-wot<Instance2> by smith-members -
integration tests -
benchmarks (écriture + lancement local) -
benchmarks (sur machine de référence) -
remove duniter-wot + certifications + membership instance parameters -
clean // TODO
s
Impacts si adoptée :
- la palette
duniter-wot
n'est plus instanciée (nimembership
nicertification
) : réalisé dans cette MR - la palette
membership
, exploitée seulement pour la WoT principale, pourrait disparaître (voir explication ici) : non réalisé dans cette MR
Architecture
La palette s'intercale entre la palette membership
et authority-members
.
Son rôle est de définir qui est Smith, c'est-à-dire qui fait partie du groupe de personnes capables d'interagir avec la palette authority-members
et plus spécifiquement la méthode go_online()
.
La palette :
- en aval :
- implémente IsMember de
authority-members
pour avoir un contrôle surgo_online()
- fournit un trait
OnSmithDelete
qui notifieauthority-members
qu'un Smith a perdu son statut et donc qu'une autorité, éventuellement online, doit être exclue (via OutgoingAuthorities)
- implémente IsMember de
- en amont :
- définit un trait
IsWoTMember
implémenté par la palettemembership
qui fournit qui est membre de la WoT (car seuls les membres peuvent devenir Smith) - implémente
OnIdtyChange
de la paletteidentity
afin de retirer le statut Smith à qui perd le statut membre de la WoT
- définit un trait
Fonctionnement
Je suis parti de l'idée que nous souhaitions conserver une toile Smith à peu près sur les mêmes règles que l'actuelle, à savoir :
- il faut être Membre (de la WoT) pour devenir Smith
- devenir Smith se fait par certification
J'ai toutefois changé quelques éléments :
- les certifications n'expirent plus, mais sont perdues par leur bénéficiaire s'il perd le statut de Smith
- les certifications (et invitations) ne sont possibles que pour les Smith online (c-à-d au statut d'Autorité au sens de la palette
authority-members
) - il n'y a plus de concept d'adhésion, remplacé par l'acception d'une invitation et le maintien du statut grâce à
go_online()
Processus d'inscription
Pour devenir Smith un membre de la WoT doit :
- Être invité par un Smith existant
- Accepter l'invitation
- Recevoir suffisamment de certifications
Et c'est tout. A partir du moment où l'étape 3 est atteinte, le Smith peut :
- devenir autorité : il lui faut simplement faire un
go_online()
- inviter et certifier d'autres smiths
Limites
Un Smith ne peut pas rester éternellement Smith et offline. Le but d'être Smith est de mettre en place un nœud validateur.
De ce fait, un Smith expire au bout de SmithInactivityMaxDuration
sessions. Dans ce cas, le Smith arbore un statut Excluded
et perd toutes ses certifications.
Toutefois, les certifications valides (c-à-d celles dont le bénéficiaire est Smith) restent comptabilisées au cas où le smith exclu redevenait Smith par la suite : il ne faudrait pas qu'il puisse artificiellement gonfler son stock par entrée/sortie du cercle des smiths.
Redevenir Smith
Un Smith exclu peut redevenir Smith. Mais il doit recommencer tout le processus et recevoir des certifications en repartant de zéro.
Stock de certifications
Chaque Smith dispose d'un stock de MaxByIssuer
certifications valides qu'il peut émettre.
Les certifications n'ont plus de date d'expiration : celles-ci sont données "à vie de Smith non exclu". L'idée est de récompenser le comportement de Smith actif, c'est-à-dire qui est online de façon stable (ou devient offline pendant de courtes durées).
Un Smith exclu peut redevenir Smith. Ce processus d'entrée/sortie n'influe pas sur le stock d'émission MaxByIssuer
qui reste le même peu importe le nombre d'entrée/sortie de la toile Smith effectuées. Ce qui augmente ou diminue son stock de certification est uniquement lié à l'émission des certifications réalisées, ou à la perte de statut Smith des autres membres forgerons.
Merge request reports
- version 22f9165e62
- version 218e49a4bb
- version 2033711618
- version 199714bd24
- version 185d8d7ea6
- version 17238d7d38
- version 16e5cc734c
- version 1509321e1f
- version 144451e048
- version 1341fbc789
- version 1265551d11
- version 1146950d85
- version 1059840290
- version 9bbd4f053
- version 8f403dc0d
- version 7f3650ccf
- version 693111e98
- version 53283b0fa
- version 40bd63b91
- version 31a522b33
- version 2a12438b7
- version 12f79db4c
- master (base)
- latest versionfca40ec847 commits,
- version 22f9165e6247 commits,
- version 218e49a4bb46 commits,
- version 203371161846 commits,
- version 199714bd2444 commits,
- version 185d8d7ea642 commits,
- version 17238d7d3840 commits,
- version 16e5cc734c39 commits,
- version 1509321e1f38 commits,
- version 144451e04836 commits,
- version 1341fbc78935 commits,
- version 1265551d1134 commits,
- version 1146950d8533 commits,
- version 105984029033 commits,
- version 9bbd4f05329 commits,
- version 8f403dc0d26 commits,
- version 7f3650ccf20 commits,
- version 693111e9819 commits,
- version 53283b0fa17 commits,
- version 40bd63b9115 commits,
- version 31a522b3314 commits,
- version 2a12438b713 commits,
- version 12f79db4c12 commits,
- Side-by-side
- Inline