Première question concrète : dans ce sujet Indexeurs : que faire au retrait d'une certification ? au renouvellement? j’exprime le besoin d’avoir accès au bloc programmé pour l’expiration d’une certification. Mais je peux déduire cette information de la durée de validité d’une certification. On a donc deux choix :
inclure le résultat du calcul dans l’événement
laisser à l’utilisateur le soin de calculer le résultat
D’ailleurs, les autres champs ne me paraissent pas utiles.
C’est ce qui me paraît le plus judicieux car la date est dépendante d’un paramètre (durée de validité d’une certification) qui peut varier suite à un changement de Runtime. Les clients doivent avoir le moins possibles de règles de la blockchain en tête pour avoir le moins de sources possibles de bug (principe du SSoT).
Mais les clients doivent quand même savoir que cette projection (de la date d’expiration) est sujette à caution, notamment l’événement est exprimé dans une version du Runtime et peut être invalidé sur upgrade.
Je trouve ça déjà plus facile à comprendre que les noms folkloriques qu’on avait avant du genre MembershipAcquired / MembershipExpired / NewCert / RenewedCert, et ça montre qu’il manque la distinction MembershipAdded / MembershipRenewed.
Est-ce que ça vous convient Added / Renewed / Removed ou est-ce que vous préférez d’autres mots ? New / Deleted / Started / Finished… ? Extended / Prolonged…
Je compte quand même ajouter cette distinction parce que ça n’a pas les mêmes conséquences, ce sera pratique pour l’indexeur et les clients qui voudront uniquement écouter les MembershipAdded mais pas les MembershipRenewed
Juste pour montrer le genre de questions simples qu’on peut se poser et auxquelles tout le monde peut participer
Comme ces événements sont l’interface entre Duniter et le monde extérieur (indexeurs, clients…), ça vaut le coup de se mettre d’accord sur une nomenclature qui convient à tous plutôt que de laisser ceux qui ont le nez dans le code manquer de recul ^^
@1000i100 par exemple, je pense que tu as l’œil pour ce genre de choses. Il suffit de parcourir la documentation autogénérée (calls, events, errors).
Hier en relisant le travail de @poka sur Duniter-squid, j’ai repéré quelques petites changements à faire dans Duniter, notamment l’événement IdtyValidated. La MR associée est !230.
Avec ce fonctionnement quand l’identité devient membre la première fois, il y a deux événements : identity.IdtyValidated et membership.MembershipAdded. Alors que quand l’identité redevient membre après avoir perdu son statut (membership.MembershipRemoved), il n’y a plus que l’événement membership.MembershipAdded qui est émis.
C’est bizarre que Member et NotMember soient dans pallet_identity qui ne connaît pas le concept de membre. En remplaçant ces deux variantes par Validated(T::ValidatedIdtyStatus) où T::ValidatedIdtyStatus serait défini dans pallet_membership : MembershipStatus { #[default] Member, NotMember }.
Ainsi pallet_identity n’a pas à gérer (et ne peut pas introduire de bug dans) les états de membership. Je ne sais pas si ça simplifie vraiment l’automate mais ça réduit le nombre de transitions possibles.
Oui, je suis d’accord, c’est bizarre, mais ça vient de Résistance au changement, la nuit porte conseil.
Je n’avais pas encore franchi le pas de faire disparaître totalement la pallet membership, alors que vous raisonniez déjà sous l’hypothèse que ce serait fait
Maintenant que la pallet membership est quasi vide, ça me semble aussi plus logique de déplacer son contenu dans la pallet identity. Mais là j’ai surtout envie d’arrêter de tout chambouler côté Duniter et d’avancer sur le reste de l’écosystème
On ne chamboule pas par plaisir de chambouler : c’est surtout une conséquence de la volonté de maîtriser le workflow et d’éviter les bugs.
On peut garder cette palette membership, mais bon vu qu’il ne reste qu’une seule donnée dedans (l’expiration du statut de membre il me semble), est-ce que ça vaut le coup ? La palette identity pourrait tout à fait porter le concept de membre. En fait elle existe même précisément dans l’objectif que l’on puisse établir ce concept ! Donc c’est vraiment tout proche.
Oui, je suis d’accord, on peut fusionner maintenant, c’est encore plus facile à faire qu’avant. Et ce sera pas trop compliqué non plus à ajuster côté client, il suffira d’écouter les événements identity.membershipAdded au lieu de membership.membershipAdded, et il n’y a plus de call en plus depuis que c’est automatique après l’évaluation de la règle de distance.
AnyMore ? Non, la signification n’est pas bonne car l’identité peut redevenir membre.
D’ailleus j’ai voté pour NoMoreMember mais l’expression souffre du même symptôme.