Ce sujet précise comment fonctionne la création d’identité dans Duniter-v2s.
Comme déjà expliqué ici et là, dans duniter-v2s toute action utilisateur entrera directement en blockchain (si la transaction est valide et qu’il y a de la place dans le bloc).
Ce qui signifie qu’une identité créée se trouvera en blockchain dès sa création, même si elle n’est pas encore « validée ».
Une identité a trois états possibles :
- Created
- ConfirmedByOwner
- Validated
Seul le 3ᵉ état donne droit à créer ses DU et émettre des certifications.
1. Le 1ᵉʳ certificateur crée l’identité
Pour créer son identité, il faut d’abord trouver son 1ᵉʳ certificateur, et lui fournir une clé publique.
Le 1ᵉʳ certificateur va alors soumettre l’extrinsic identity.create_identity(owner_key)
.
Le paramètre owner_key
est de type AccountId
et doit correspondre à la clé publique du propriétaire de l’identité.
Cet extrinsic va créer une nouvelle identité et la certifier, l’émetteur de la certification étant le signataire de cet extrinsic.
2. Le propriétaire confirme
Ensuite, le propriétaire de l’identité doit confirmer son identité en soumettant l’extrinsic identity.confirm_identity(name)
, où name
est une chaine de caractère qui représentera le nom de l’identité (ce que l’on nommait UserID
dans duniter v1).
L’identité passe alors à l’état ConfirmedByOwner
.
La signature de cet extrinsic par le propriétaire de l’identité vaut acte d’engagement à respecter la licence Ğ1 et est considéré comme une demande d’adhésion à la toile de confiance Ğ1.
3. L’identité reçoit ses autres certifications
C’est seulement une fois que l’identité est confirmée par son propriétaire qu’elle peut recevoir d’autres certifications, via l’extrinsic cert.add_cert(receiver)
. Dès que l’identité a reçu au moins cinq certifications elle est envoyée dans la queue des identités dont il faut évaluer la distance.
4. La règle de distance est évaluée
Lors du prochain “round” d’évaluation de la distance, deux possibilités :
- L’identité respecte la règle de distance, elle passe à l’état
Validated
- L’identité ne respecte pas la règle de distance, elle sera réévaluée au prochain round.
Je n’ai pas encore implémenté la distance, donc je ne peux pas encore vous dire quelle sera la durée entre deux rounds, certaines contraintes techniques peuvent nécessiter une durée assez longue, de l’ordre de 6h à 12h je pense).
5. L’identité est validée
Une fois que l’identité est à l’état Validated
, elle obtient le droit de co-créer le DU et de certifier où créer d’autres identités. Elle obtient également le droit de demander l’adhésion à la sous-toile forgeron.
Aparté : Ce qui fait quatre droits obtenus en même temps, ça fait beaucoup, je proposerai dans un autre sujet que certains de ces droits requièrent plus de certifications, mais comme ce n’est pas structurant pour le code, on peut voir ça bien plus tard.
6. Nouveaux paramètres
Ce nouveau mécanisme implique l’ajout de deux nouveaux paramètres à la wot :
ConfirmPeriod
La durée pendant laquelle le propriétaire peut confirmer son identité après sa création. Passé cette durée, si l’identité n’est toujours pas confirmée elle est supprimée et la 1er certification est supprimée également (le certificateur récupère alors cette certification dans son stock).
Cette durée doit être courte, de l’ordre de la semaine.
IdtyCreationPeriod
La durée minimale entre deux créations d’identité par un même “créateur”. Ce paramètre est essentiel pour se protéger du spam, sa durée doit être supérieure où égale à ConfirmPeriod
afin qu’il ne soit pas possible de créer une nouvelle identité alors que la précédente n’a pas encore été confirmée. Cette durée doit être courte, de l’ordre de la semaine.
7. Expiration de l’identité dans l’état ConfirmedByOwner
Pour ce cas on réutilise le paramètre msWindow
, qui est PendingMembershipPeriod
dans le code pour plus de clarté : c’est la durée maximale ou une demande d’adhésion peut rester en attente.
La demande d’adhésion correspond à la confirmation de l’identité par son propriétaire, ce paramètre PendingMembershipPeriod
fixe donc la durée maximale ou une identité peut rester à l’état ConfirmedByOwner
.
Si passé cette durée, l’identité est toujours dans l’état ConfirmedByOwner
, alors l’identité est supprimée et toutes les certifications qu’elle avait reçues sont supprimées également. Les certificateurs récupèrent ces certifications dans leurs stocks.
Il n’y a alors plus aucune trace de l’identité ni de ces certifications dans le storage onchain, c’est comme si elle n’avait jamais existé.
La valeur de ce paramètre est maintenue à deux mois comme dans Duniter v1.
8. Maintien du paramètre sigPeriod
Ce paramètre est actuellement nommé CertPeriod
dans le code, mais ce nom ne me satisfait pas pleinement, si quelqu’un à une idée d’un nom qui désigne mieux son rôle je suis preneur
Pour rappel, ce paramètre fixe la durée minimale entre deux certifications.
Étant donné que la création d’une identité implique sa certification par le créateur, le paramètre certPeriod
s’applique, donc si le créateur à déjà émis une certification il y a moins de cinq jours, la création de l’identité échouera.
9. Certifications et règle de distance
Les certifications reçues par une identité non validée (et ayant reçu moins de cinq certifications) ne sont pas prises en comptes dans l’évaluation de la règle de distance des autres identités, ce qui n’a d’impact que dans le fait d’être considéré comme membre référent où non, puisque l’identité non-validée ne peut pas apporter de chemin à d’autres identités du fait qu’elle n’a pas pu émettre de certifications.
Actuellement, la notion de membre référent n’existe que relativement à l’évaluation de la règle de distance d’une identité, ce qui signifie que selon l’identité dont on évalue la distance, un même membre sera considéré comme référent où non.
Exemple :
Disons qu’il faut six certifications émises et reçues pour être membre référent, et que Kevin en a reçue dix et émise cinq (dont une envers Vincent).
Si Kevin créer une nouvelle identité pour Olivia, il la certifie en même temps, il a alors émis six certifications.
Cependant, lors de l’évaluation de la règle de distance de Vincent, si la règle de distance d’Olivia n’est pas évaluée lors du même round (car elle n’a pas encore obtenue cinq certifications), alors Kevin ne sera pas considéré comme référent, car sa certification envers Olivia ne se trouve pas dans les données de la wot transmises au code qui calcule la distance.
En revanche, lors de l’évaluation de la règle de distance pour Olivia (quand elle aura obtenu quatre autres certifications), Kevin sera considéré comme référent, et donc compté dans les 80 % de référents à atteindre.
Notez que j’ai précisé “si la règle de distance d’Olivia n’est pas évaluée lors du même round”. Cela est dû au fait que la règle de distance sera désormais évaluée par groupes, alors qu’elle est évaluée individuellement dans Duniter v1.
L’évaluation par groupe va permettre de fortement optimiser le calcul, car tous les chemins communs ne seront parcourus qu’une seule fois, contre N fois dans Duniter v1 pour l’évaluation de N identités.
Dans certains cas, le nombre de membre référents sera plus élevé que si l’évaluation avait été individuelle, donc ça devrait compliquer le respect de la règle de distance, on pourrait compenser cet effet en diminuant légèrement xpercent
. Si quelqu’un veut faire des simulations pour évaluer cet effet ce serait ure super contribution, d’autant que je ne le ferai pas moi-même, j’ai déjà tellement à faire !
Résumé
- Les documents Identity et Membership n’existent plus ils sont remplacés par deux extrinsics de la pallet
identity
:create_identity(owner_key)
etconfirm_identity(name)
.- Le délai de deux mois est conservé, si l’identité n’est pas pleinement validée dans les deux mois (confirmation par le propriétaire, obtention de cinq certifications, et validation de la distance), elle est supprimée et toutes ses certifications reçues aussi.
- Deux nouveaux délais sont introduits : le délai laissé au propriétaire de l’identité pour confirmer sa demande, et le délai entre deux créations d’identité.
- Les certifications reçues par une identité non-validée ne comptent dans la règle de distance que lorsque l’identité a obtenu cinq certifications.