Ces derniers temps j’ai travaillé à re-factorer, simplifier et tester mon implémentation des règles de la toile de confiance Ğ1 dans substrate, et je me suis rendu compte qu’il me reste certaines couches de complexité qui me semble coûter trop cher vis-à-vis de ce que ça apporte à l’utilisateur.
Je pense que l’on peut apporter à l’utilisateur des bénéfices équivalent d’une autre façon de manière à ce que l’implémentation technique dans substrate soit bien plus simple.
De plus, la fonctionnalité en question, dans sa forme actuelle, n’apporte pas que des bénéfices à l’utilisateur, mais lui est parfois néfaste.
Je parle du fait que lorsqu’une identitée est «désactivée» (par expiration de l’adhésion ou expirations de certifications sous 5 certifications), elle n’est pas révoquée, et peut être “réactivée” par l’utilisateur via le renouvellement de son adhésion.
Cette “fonctionnalité” est horrible à gérer, elle complexifie grandement le nombre de scénarios possibles pour une identité (sortir et re-rentrer dans la toile via plusieurs allers-retours), et est déroutante voir parfois néfaste pour l’utilisateur.
En effet, si un membre perd ses identifiants et n’a pas son document de révocation, il doit attendre la révocation implicite de son identité un an après l’expiration de son adhésion, ce qui est long et souvent mal compris.
Par incompréhension, certains utilisateurs re-certifie la personne sur une nouvelle identité dès que son adhésion a expirée, ce qui permettrait à une personne mal intentionnée de faire croire qu’elle à perdu ses identifiants puis de “réactiver” son ancienne identité.
Le seul “gain” de cette fonctionnalité complexe et mal comprise, c’est de pouvoir re-rentrer dans la toile après expiration sans avoir a re-obtenir toutes ces certifications, et que les certificateurs n’aient pas 2 certifications consommées dans leur stock pour un même être humain certifié.
Je propose de supprimer cet état “désactivé”, ce qui signifie que l’identité sera automatiquement révoquée lors de son expiration.
La majeure partie des expirations sont dues à un simple oubli, on pourrait bien sur mettre en place les outils qu’il faut pour prévenir les utilisateurs en amont, mais j’ai une idée plus simple :
Supprimer purement et simplement le renouvellement de l’adhésion, ainsi l’utilisateur n’aura plus besoin d’y penser.
Je propose à la place de définir une durée maximale d’inactivité (par exemple un an), qui est reconduite à chaque action en blockchain de la clé publique liée à l’identité concernée.
Chaque fois que vous ferez une action avec votre compte membre, même un simple transfert de monnaie, même une simple création du DU (puisque la création du DU va devenir manuelle) votre adhésion sera reconduite automatiquement pour un an.
Ainsi, l’expiration d’identité ne concernera que les humains n’ayant réellement et effectivement effectués aucune action avec leur compte membre depuis un an.
Si vous n’avez effectué aucune action sur votre compte membre depuis un an, pas même créer vos DU, c’est que vous avez quitté la monnaie, la révocation automatique me semble dont tout à fait acceptable dans ce contexte.
Et techniquement ce serait infiniment plus simple à gérer, en tout cas dans duniter-v2s.
Concrètement j’ai un champ last_action
par identité. Et je rajoute dans un pre_dispatch (fonction paramétrable qui est appelée avant chaque extrinsic), deux lignes de code :
Une qui récupère l’identité associée à la clé publique signataire de l’extrinsic.
Une deuxième qui set le champ last_action
de cette identité (si elle existe) à current_block_number
.
Ça augmenterait légèrement le “poids” de chaque extrinsic (une lecture + une écriture éventuelle), mais comme montré dans ce sujet, en dessous de 10 millions d’utilisateurs on est très large, et si on arrive jusque-là on aura développé des layers 2 entre-temps.
En résumé:
- L’identité est révoquée automatiquement dès que le compte membre est totalement inactif en blockchain depuis plus d’1 an.
- L’utilisateur n’a plus à renouveler d’adhésion, en fait la notion d’adhésion n’existe même plus pour lui.
Avantages:
- Si un utilisateur perd ses identifiants et n’a pas son document de révocation, il doit attendre maximum un an pour être re-certifé sur un nouveau compte au lieu de deux actuellement.
- Plus besoin de rappeler aux gens qu’ils doivent renouveler leur adhésion.
- Plus de notion d’adhésion, c’est plus simple à expliquer pour nous et plus simple à comprendre pour les utilisateurs.
- Bien plus simple à implémenter techniquement, donc un code plus lisible, plus maintenable, et avec moins de bug.
Inconvénients :
- Si un utilisateur n’effectue aucune action en blockchain avec son compte membre pendant un an, son identité est révoquée.
- Si ces certificateurs veulent le re-certifier et sur sa nouvelle identité et que les certifications en question n’ont pas expiré au bout d’un an, pendant une certaine durée les certificateurs auront deux certifications en moins dans leur stock de cent certifications pour le même être humain.
Notez que : les certifications émises et reçues par l’identité révoquée continuerait d’exister et d’être prises en compte dans la règle de distance (comme c’est déjà le cas actuellement).