Trancher sur la perte du statut de membre

Cela fait un moment que la question des identités ayant perdu le statut de membre pose problème (cf Proposition de supprimer la notion d'identité désactivée mais non révoquée et la notion d'adhésion). Le problème est récemment remonté suite à un bug du genesis identifié dans grâce à : ĞDev -- j'ai perdu mon identité.

Je propose cette discussion en français pour trancher sur ce que nous devons implémenter sur la Ğ1v2 à son lancement, on pourra toujours changer plus tard au moment opportun. Ma proposition n’est pas entièrement spécifiée, j’attends que les spécifications ressortent des échanges. Fixer l’implémentation faciliterait le lancement d’une ğtest : Rewrite genesis parsing for ĞTest.

Le retrait de l’identité du storage entraîne les conséquences suivantes :

  • perte définitive de l’identité et de ce qui y est rattaché (certifications en cours, identité forgeron…)
  • impossibilité de reprendre le même pseudo (il est réservé)

Scénario actuel

Actuellement tel qu’implémenté dans Duniter v2s, voici les cas possibles de retrait d’une identité du storage :

  • identité créée mais non confirmée après le délai de confirmation (24h)
  • identité confirmée mais non validée après le délai de validation (2 mois)
  • révocation manuelle d’une identité
  • expiration de l’adhésion (passage sous le seuil des 5 certifs, réévaluation de la règle de distance) (cf code, @tuxmain tu avais oublié ceci)

Avantages / Inconvénients :

  • :heavy_plus_sign: dans le cas de la perte des identifiants, l’utilisateur peut recréer une identité dès la suppression de l’ancienne identité car impossible qu’elle redevienne membre
  • :heavy_minus_sign: si utilisateur inactif ou inattentif, nécessité de reprendre de zéro le processus de création d’identité, et de changer de pseudo (mais les anciens identifiants pourront être utilisés)

Scénario proposé

Je propose de modifier ce comportement pour coller plus près au fonctionnement actuel et être moins punitif.

  • à l’expiration de l’adhésion, l’identité reste dans le storage et n’est pas modifiée, il n’y a juste plus d’adhésion associée. On peut parler d’identité “désactivée” ou “inactive”, mais c’est juste qu’elle n’est pas comptée comme membre de la toile de confiance, elle ne génère plus de DU, ne peut plus certifier…
  • à l’expiration de l’adhésion, la suppression de l’identité est programmée pour un délai donné (par exemple 2 mois), cela laisse assez de temps pour réagir (recevoir les certifications manquantes ou respecter à nouveau la règle de distance

Avantages / Inconvénients :

  • :heavy_plus_sign: cela laisse un délai à l’utilisateur inattentif pour récupérer son identité en gardant les certifications qu’il lui reste et le pseudo
  • :heavy_minus_sign: cela impose un délai supplémentaire à quelqu’un ayant oublié ses identifiants pour être en droit de créer une autre identité (en pratique rien ne l’en empêche)

Observation

Ce choix revient à attribuer une origine à l’inactivité d’un membre parmi (1.) la perte d’identifiants ou (2.) la perte d’activité sociale (décès ou désintérêt par exemple). La perte d’identifiant est une raison technique qui pourra être mitigée par le sharding par exemple. La perte d’activité est une raison humaine non liée à la blockchain.

4 Likes

Une complication qui me vient à l’esprit pour les identités désactivées :

  • ça va complexifier le calcul du DU. Ça doit être tout de même faisable en versant les DU non réclamés lors de la désactivation (comme lors de la suppression).
1 Like

Oui, le versement manuel des DU c’est juste pour éviter de le faire à chaque DU, mais on peut très bien le faire à chaque changement lié à l’identité, ça me paraît très bien comme ça. (pour les autres, cf UdsAutoPaidAtRemoval).

Je vois qu’il n’y a plus le besoin de renouveler annuellement l’adhésion pour prouver que nous sommes vivant. C’est une charge mentale de moins pour l’utilisateur (et la principale cause de perte temporaire de DU me semble-t-il).

Je cherche des cas où cela entraînerait la production illicite de DU au profit d’une personne autre que la personne certifiée.

Si ce sont les certifications seules qui font survivre un compte, alors il peut y avoir un cas où la personne est décédée mais son compte reste actif par ces certificateurs qui renouvelleraient par habitude.

C’est un cas marginal, mais peut-être une fenêtre de fraude exploitable. Je pose ça là.

(Je pose beaucoup de choses là en ce moment… Désolé… :wink: )

1 Like

delais retardé aussi pour recréer un compte membre perdu s’il n’y a pas de renouvellement des un an

Selon ma compréhension de ce scénario, il n’est pas prévu que les certifications venant de l’extérieur prolongent l’adhésion. Ça ne ferait pas sens.

2 Likes

Effectivement, comme dit @vit, ni le scénario actuel, ni le scénario proposé n’incluent un arrêt de production du DU en cas de décès. Ce que rappelle @Moul est une proposition de @elois qui n’a pas été implémentée.

Mon post se concentre sur les conséquences de la perte d’adhésion, mais pas sur ses causes. Voici donc la liste des causes possibles :

  • causes de l’expiration de l’adhésion
    • passage sous le seuil des 5 certifs
    • réévaluation négative de la règle de distance

Et cela, dans les deux scénarios (à la fois l’implémentation actuelle et dans le scénario proposé).

Il faudrait donc ajouter une cause de la perte d’adhésion : inactivité sur le compte. On a plusieurs possibilités pour compter l’activité :

  • intégrer la modification de ce compteur à chaque action sur le compte (ça me semble un peu crade)
  • ajouter un extrinsic pour repousser la date d’expiration (renouvellement d’adhésion), cet extrinsic pouvant éventuellement être appelé automatiquement par les clients dans un batch call, sous les conditions souhaitées (approche de l’expiration, à chaque transaction…)

et plusieurs possibilités pour déclencher l’expiration :

  • expiration automatique gérée par la blockchain avec une liste d’identités à expirer par bloc donné
  • expiration manuelle avec un extrinsic qui échoue si la date d’expiration n’est pas passée (possibilité de laisser active une identité expirée si personne / aucun bot ne décide de la faire expirer)

J’ai une préférence pour la première solution qui est plus homogène avec les autres implémentations d’expirations (certification…)

2 Likes

D’ailleurs pour l’instant j’ai l’impression que le renouvellement d’identité n’est jamais fait : on ne bouge jamais une identité dans IdentitiesRemovableOn. (les identités post-genesis vont donc forcément expirer)

Je suis pour la solution de l’extrinsic de renouvellement. Ça réduit les coûts en blockchain (sinon tout extrinsic causerait une lecture db des identités).

2 Likes

Qu’appelles-tu le renouvellement d’identité ? Ce que je voulais dire par ce qui suit est que cette fonctionnalité n’a jamais été implémentée :

Donc les identités sont juste mises dans IdentitiesRemovableOn et retirées au bloc ciblé si elles n’ont pas changé d’état.

Je voulais dire qu’on n’augmente jamais le bloc d’expiration d’une identité, donc c’est pas juste une proposition pas implémentée mais une fonctionnalité manquante.

1 Like

On n’augmente pas le bloc, mais on teste si l’identité peut vraiment être retirée, si elle n’a pas changé de statut on ne la retire pas. Donc oui, pas de retrait d’identité. C’est à faire.