Plus de 100 certifications?

:warning: DataJune est encore assez jeune et ne dispose pas de tests unitaires, les données présentées ici doivent être prises avec précaution

:loudspeaker: En essayant de répondre à @tuxmain sur le sujet La règle sur la limite des 100 certifications émises à faire évoluer, je me suis rendu compte que certains membres avaient atteint plus de 100 certifications émises (101 et 102) au cours de l’histoire de la Ğ1. Ci-dessous notre échange que je rends public si certaines personnes veulent creuser de leur côté.

Bonne idée, je vais ajouter ça.

Ça m’a fait remarquer qu’en corrigeant un bug silencieux sur l’expiration des certifications, j’avais causé une régression qui conduisait à ignorer l’expiration des certifs… Faudrait vraiment que je prenne le temps de faire des tests unitaires, parce que c’est con de se retrouver là.

Enfin bon, en affichant le outdegree maximal au cours du temps, je me suis aperçu qu’il passait quelques fois au dessus de 100 :

Ici, par exemple, autour du jour 950, c’est PiNguyen qui a 101 certifications sortantes vers les personnes suivantes :

cgeek
elois
Galuel
yannlefranco
mathieuBize
CaroleFabre
BenoitLavenier
bou2fil
gerard94
paidge
Nadou
1000i100
Shinra
eliadem
Ajnael
Patrice_F
AmeAndine
PascaleRoncoroni
jardin
psyche
fdrubigny
AurelieDouay
MaxBrg
ZazieND
EtoileND
YannickS
MariekimDD
Arken31
pirate350
JeanMarcelPiriou
arianelotus
Profil
NicolasCanzian
FannyLequerrec
GillesLangellotti
Thuy
philippo
OlDog
TIFAINE
Simon
marieb
Regis
Alexia007
ElenaMoshkina
GUILHEM
tuan
ofontes
Fred
MinhT
Alcidejet
ManuMTL
Prugnieres
rosedelumiere
Attilax
lelefontes
Kakou
Romain350
scanlegentil
EvelyneDouay
Agave
JeremyPerson
Do26
aguy
AliceTran
Anne
Martino
RemiLartigue
Nours45
LaetitiaHOFF
Fleur_Douay
Spartacus
CharlesNguyen
LauraAubac
ZMLaVie
JulietteChamagne
EmmanuelScotto
Macelbert
Nini
DrK
Edmee
EtienneChouard
Ben
hocine
Jeffivala
Mitch
SevanArevian
Matis-AIME
davmatperma
Lila-Aime
Quentinr
MargueriteTeissier
lilyber
MattysBarrere
Danny
Narada
Armustblegde
Titi31
ManUtopiK
alexthoby
Titouan
Jizo

Soit c’est un bug de plus de DataJune, soit c’est un bug de Duniter. Saurais-tu me dire laquelle de ces 101 certifications est de trop ? De mon côté, je regarderai plus tard.

Il faut que j’implémente l’expiration des certifs dans gexplore, mais comme il faut que ce soit réversible c’est compliqué. (je me souviens que pour GVA il y avait plein de subtilités qui apparaissaient au moment de coder)

Ok, je vais passer ce message en public pour voir si d’autres personnes veulent investiguer en attendant que j’aie le temps de creuser pour voir s’il n’y a pas un bug dans DataJune.

Voici la liste des 119 certifications émises par Pi vers ces personnes et la date. Pour rappel, je m’intéresse au jour 950, c’est-à-dire le 2019-10-13.

------------------------- 101 certifications vers ces personnes
2017-06-24 AmeAndine
2017-11-09 fdrubigny
2017-11-23 AurelieDouay
2017-11-28 MaxBrg
2017-12-03 ZazieND
2017-12-08 EtoileND
2017-12-13 YannickS
2017-12-18 MariekimDD
2017-12-23 Arken31
2018-01-04 pirate350
2018-01-09 JeanMarcelPiriou
2018-01-14 arianelotus
2018-01-19 NicolasCanzian
2018-01-24 FannyLequerrec
2018-01-29 GillesLangellotti
2018-02-05 philippo
2018-02-10 Thuy
2018-02-15 TIFAINE
2018-02-20 Simon
2018-02-25 marieb
2018-03-12 Alexia007
2018-03-17 GUILHEM
2018-03-23 tuan
2018-03-28 MinhT
2018-04-02 ManuMTL
2018-04-07 rosedelumiere
2018-04-17 Romain350
2018-04-22 EvelyneDouay
2018-04-27 scanlegentil
2018-05-02 eliadem
2018-05-07 mathieuBize
2018-05-12 1000i100
2018-05-17 jardin
2018-05-22 JeremyPerson
2018-05-27 Do26
2018-06-01 CaroleFabre
2018-06-06 Galuel
2018-06-11 yannlefranco
2018-06-16 paidge
2018-06-21 gerard94
2018-06-26 elois
2018-07-01 AliceTran
2018-07-06 Regis
2018-07-11 Kakou
2018-07-16 Prugnieres
2018-07-21 aguy
2018-07-26 Shinra
2018-07-31 lelefontes
2018-08-07 Anne
2018-08-20 Martino
2018-08-25 RemiLartigue
2018-09-02 Nours45
2018-09-07 PascaleRoncoroni
2018-09-12 LaetitiaHOFF
2018-09-17 Fleur_Douay
2018-09-22 Spartacus
2018-09-27 Nadou
2018-10-02 Alcidejet
2018-10-07 CharlesNguyen
2018-10-12 LauraAubac
2018-10-17 OlDog
2018-10-22 ZMLaVie
2018-10-27 JulietteChamagne
2018-11-01 EmmanuelScotto
2018-11-06 Macelbert
2018-11-11 Nini
2018-11-16 Edmee
2018-11-23 Attilax
2018-11-28 EtienneChouard
2018-12-03 Jeffivala
2018-12-08 DrK
2018-12-13 hocine
2018-12-18 Mitch
2018-12-23 Ben
2018-12-28 Matis-AIME
2019-01-02 Patrice_F
2019-01-07 Profil
2019-01-12 davmatperma
2019-01-17 SevanArevian
2019-01-22 Lila-Aime
2019-02-07 Quentinr
2019-02-15 MargueriteTeissier
2019-02-20 lilyber
2019-02-25 MattysBarrere
2019-03-02 bou2fil
2019-03-07 Danny
2019-03-12 Ajnael
2019-03-18 Narada
2019-03-23 ofontes
2019-03-28 psyche
2019-04-02 Armustblegde
2019-04-07 Agave
2019-04-12 Titi31
2019-04-17 cgeek
2019-05-18 Fred
2019-05-23 BenoitLavenier
2019-05-28 ManUtopiK
2019-06-02 alexthoby
2019-06-07 Titouan
2019-06-17 ElenaMoshkina
2019-09-16 Jizo
------------------------- jour de l'étude (les 18 certifications ultérieures sont des renouvellements)
2019-12-23 AurelieDouay
2019-12-28 EtoileND
2020-01-12 ZazieND
2020-12-26 Attilax
2021-01-27 PascaleRoncoroni
2021-02-06 Shinra
2021-02-26 Thuy
2021-03-13 Macelbert
2021-03-18 MinhT
2021-04-02 Spartacus
2021-04-07 ofontes
2021-04-12 1000i100
2021-04-17 lelefontes
2021-05-07 Agave
2021-05-17 elois
2021-07-01 ManUtopiK
2021-09-19 YannickS
2021-11-05 arianelotus

Parmi ces identités, deux ont été révoquées :

2018-02-26 pirate350
2018-09-13 ManuMTL

Si les certifications vers des identités révoquées disparaissent, alors il faut que je le prenne en compte dans DataJune. Mais est-ce le cas ? J’ai toujours du mal à comprendre les ENTRY.stock, GLOBAL_CINDEX, [expired_on=0] et compagnie du protocole. Heureusement avec la v2 on aura des tests cucumbers lisibles par des humains :laughing:

4 messages ont été scindés en un nouveau sujet : Comment écrire un protocole de manière précise et compréhensible par un humain?

J’ai déplacé la conversation qui dérivait vers la manière de décrire un protocole, et je repose ma question initiale :

Pourquoi y a-t-il des identités ayant plus de 100 certifications émises ? Il y a probablement un problème dans DataJune mais je n’ai pas compris où. Est-ce que les certifications vers des identités révoquées comptent dans le stock ?

On peut partir de la définition du stock :

BR_G39 - ENTRY.stock

ENTRY.stock = COUNT(REDUCE_BY(GLOBAL_CINDEX[issuer=ENTRY.issuer], 'receiver', 'created_on')[expired_on=0])

Ici, il faut comprendre :

  • GLOBAL_CINDEX[issuer=ENTRY.issuer] : ce sont les entrées d’index liées à des certifications émises par ENTRY.issuer. Le plus souvent ce sont des certifications, parfois des mises à jour de données des certifications (par exemple, faire expirer une certification est une entrée d’index UPDATE qui met le champ expired_on à une valeur positive.
  • REDUCE_BY(GLOBAL_CINDEX[issuer=ENTRY.issuer], 'receiver', 'created_on') : on réduit les entrées en les réduisant par receiver et created_on (le blockstamp). Cette opération revient à avoir une liste de certifications avec leur état à l’instant t. Cette notion de réduction est capitale et omniprésente dans Duniter v1. Il faut bien comprendre que les index sont une liste de changements d’états, et que pour obtenir une entité (genre une certification au sein du CINDEX) il faut réduire par une clé faisant sens. Ici, une certification est représentée de façon unique par la clé « issuer + receiver + created_on ». D’où cette réduction.

    N.B. : je note que dans le code de Duniter v1 « created_on » n’est pas utilisé, d’ailleurs je n’en voyais pas non plus l’intérêt en te l’expliquant car issuer + receiver est déjà suffisamment unique pour lister les certifications de façon unique, rejeux inclus.

  • [expired_on=0] : exprime que l’on veut filtrer, dans cette réduction (donc, la liste des certifications) pour ne conserver que celles ayant un champ expired_on à zéro, c-à-d n’ayant pas expiré. En effet, une certification expirée ne devrait pas être comptée dans le stock.
  • COUNT : compte le nombre de certifications résultantes.

Et donc quelques pistes pour DataJune :

  • peut-être comptes-tu les certifications expirées, ou que tu les comptes à un moment différente de Duniter v1 ;
  • peut-être comptes-tu les rejeux de certifications comme 2 certifs
1 « J'aime »

@HugoTrentesaux Je viens de regarder le code, et pense avoir trouvé :partying_face: : tu fais expirer les certifications cert_validity après le temps du bloc où la certification est appliquée, pas après le temps du bloc où elles ont été signées (le numéro de ce bloc est dans le contenu de la certif). Du coup, elles ont une durée de vie un peu trop longue…

./src/BlockchainBrowser.jl#L141

3 « J'aime »

Je me suis dit que j’allais corriger ce bug facilement en remplaçant les temps par des numéros de bloc avec une durée de certification égale à 2 ans / 5 min, (durée d’une certification / temps cible entre deux blocs).

Mais je me suis rappelé qu’on s’écartait pas mal de ce temps cible de 5 minutes :

(on est en moyenne à 311.57 s entre chaque bloc, soit 5 min et 11 sec)

Je devrais donc garder le medianTime de chaque bloc pour pouvoir faire la conversion ou utiliser une approximation…

[edit] avec l’approximation

BLOCK_INTERVAL_MEASURED = 311.5717656903766
CERTVALIDITY_BLOCK = Int(floor(CERTVALIDITY / BLOCK_INTERVAL_MEASURED))

Il n’y a plus qu’un seul petit dépassement.

image

Ça veut dire qu’il faut que j’implémente une solution propre quand même :cry:

[edit 2] non, en fait je me rends compte que la durée d’une année était de 365.25 jours et pas 365. Voilà un deuxième facteur d’erreur. Et c’est évidemment pire avec une durée de certification plus longue

image

[edit 3] enfin des données propres :smiley:

3 « J'aime »

Une explication possible aux stock de 101 certifications.

1 « J'aime »