@tuxmain ce ticket est en réalité plus dur qu'il ny parait.
Car il faut également stocker l'historique des obtentions et retrait du droit au DU pour chaque identité.
Une possibilité est de stocker un Vec<BlockNumber>, ou chaque numéro de bloc correspond à un evenement d'optention ou de perte du droit au DU.
L'extrinsic claim_uds devrait alors consommer ce vecteur (le vider).
Ça implique également de stoker la liste des comptes qui ont eu droit au DU par le passé et qui n'ont pas encore claim tout leurs DUs.
Enfin il faut vérifier si un cas vicieux est possible ou non: obtenir et perdre le droit au DU (ou l'inverse), au soin d'un même bloc.
Bref, c'est beaucoup de complexité pour une optimisation qui ne me semble pas nécessaire à la migration, à mon humble avis il faut le déprioriser, je doit d'ailleurs ajouter des label pour la priorisation!
J'avais commencé en stockant pour chaque membre un Option<BlockNumber> du dernier DU réclamé. Ça me semble plus simple comme ça, lors du claim il faut juste compter et mettre à jour le BlockNumber. (et en ajoutant un historique des réévaluations du DU)
S'il y a un ticket plus prioritaire et à ma portée je veux bien changer, mais sinon ça me fait quand même un exercice assez complet.
Nouvelle idée de design, plus simple et qui ne demande aucune création auto du DU:
Ajouter 2 champs dans une nouvelle entité IdtyUdData à stocker dans une map dans la pallet UD (par IdtyIndex):
last_claimed_ud_or_in_at: BlockNumber: Contiens le numéro de bloc du dernier DU réclamé ou le numéro de bloc de la dernière entrée dans la WoT si aucun DU n'a été réclamé depuis.
out_at: Option<BlockNumber>: Contiens le numéro de bloc auquel l'identité à perdue son droit au DU, où None si l'identité à toujours droit au DU.
Le point clé: Lorsque qu'une identité veut acquérir le membership, il faut retourner une erreur si out_at.is_some. D'un point de vue métier, cela signifie qu'un menbre dont l'adhésion a expiré ne peut pas redemander l'adhésion avant d'avoir réclamé ses DU. Ça me semble être le meilleur des compromis, car on évite de devoir mémoriser plusieurs entrées/sorties du membre, et on évite également toute livraison automatique du DU.