# Ancien membre de retour avec seulement 4 certifications

**URL:** https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712
**Category:** Duniter-v1
**Tags:** duniter, bug, exclusion
**Created:** [30 December 2019 20:51 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712 "2019-12-30T20:51:08Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [30 December 2019 20:51 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/1 "2019-12-30T20:51:08Z")

</div>

GerardSiegle (5tp5GZRGfDPm3uBaadWLpJ7x6C1ZP5PkyiZoW3oe7ukH) vient de revenir dans la toile au bloc 284605. Le problème, c’est qu’il n’a que quatre certifications valides (et une en attente, de RoselyneBinesse). Bug ?

J’ai vérifié sur plusieurs nœuds, la situation est chaque fois la même.

Le nœud de cgeek, qui a calculé le bloc, est injoignable par Cesium.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [31 December 2019 12:59 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/2 "2019-12-31T12:59:26Z")

</div>

![Capture d’écran de 2019-12-31 13-58-24](https://forum.duniter.org/uploads/default/original/2X/f/fff44d3ff6e42b8731317f5807c807b40f35dcb0.png)

---

<div class="post-metadata">

### Author: ![Frederic\_Renault](https://forum.duniter.org/user_avatar/forum.duniter.org/frederic_renault/32/3778_2.png) [@Frederic\_Renault](https://forum.duniter.org/u/Frederic_Renault)
#### Post date: [31 December 2019 15:21 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/3 "2019-12-31T15:21:25Z")

</div>

Oups! @cgeek @kimamila @elois une idée ?

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [31 December 2019 15:44 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/4 "2019-12-31T15:44:15Z")

</div>

il a pu redevenir membre juste avant qu’une certification soit devenue obsolète ?

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [31 December 2019 16:23 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/5 "2019-12-31T16:23:49Z")

</div>

> [@kimamila](#):
>
> il a pu redevenir membre juste avant qu’une certification soit devenue obsolète ?

Ce n’est pas le cas. Mais, de toutes façons, avec quatre certifications, il ne peut pas le rester.

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [2 January 2020 15:50 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/6 "2020-01-02T15:50:15Z")

</div>

Cas d’étude intéressant. Merci de remonter le potentiel problème.  
Il faudrait des preuves tangibles montrant que l’identité a peu entrer de nouveau dans la toile avec quatre certifications. Qu’il n’y en avait pas cinq lors du renouvellement de l’adhésion. A-t-on cette information (les anciennes certifications expirés) dans les bases de données des nœuds (peu importe l’implémentation) ?

Autrement, oui, il y a un bug, il devrait être exclu immédiatement, étant donné qu’il ne respecte pas la règle du nombre de certifications. Il me semble qu’à chaque bloc est vérifié que chaque membre respecte les conditions pour maintenir le statut de membre. Autrement, c’est exclusion.  
Bug à explorer… et à corriger.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [2 January 2020 19:27 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/7 "2020-01-02T19:27:02Z")

</div>

> [@Moul](#):
>
> Il faudrait des preuves tangibles montrant que l’identité a peu entrer de nouveau dans la toile avec quatre certifications.

La capture d’écran de Cesium ci-dessus en est déjà une. Les mêmes informations sont affichées (aujourd’hui encore) par WotWizard (qui m’a permis de détecter le problème). Sans doute que Silkaj doit pouvoir afficher des informations semblables. Sinon, on peut décortiquer la blockchain à la main.

Le problème devrait être régularisé ce soir à partir de 20h35 (BCT) puisque c’est l’heure où la certification supplémentaire de RoselyneBinesse devrait passer, en cinquième position. Si on y arrive, car, pour l’instant, on a un joli fork sur G1.

---

<div class="post-metadata">

### Author: ![kimamila](https://forum.duniter.org/user_avatar/forum.duniter.org/kimamila/32/185_2.png) [@kimamila](https://forum.duniter.org/u/kimamila)
#### Post date: [2 January 2020 19:49 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/8 "2020-01-02T19:49:27Z")

</div>

> [@gerard94](#):
>
> Sinon, on peut décortiquer la blockchain à la main.

Voici le lien pour voir les événements le concernant : [https://g1.duniter.fr/#/app/blockchain/search?q=5tp5GZRGfDPm3uBaadWLpJ7x6C1ZP5PkyiZoW3oe7ukH](https://g1.duniter.fr/#/app/blockchain/search?q=5tp5GZRGfDPm3uBaadWLpJ7x6C1ZP5PkyiZoW3oe7ukH)

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [2 January 2020 21:08 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/9 "2020-01-02T21:08:30Z")

</div>

Merci @kimamila.

À partir des données de Cesium fournies ci-dessus, et de celles de WotWizard concernant les entrées/sorties de la toile, j’ai pu reconstituer les mouvements suivants concernant l’adhésion de GerardSiegle :

```
↑ Entrée ↓ Sortie C Certification

↑ 74673	03/12/2017 15:59:47
C auroremengual
C NadineBlanchard
C Aude49
C AlainLebrun
C AnneAmbles
C RoselyneBinesse

96857 21/02/2018
C CharlesAbecassis

106456 27/03/18
C loanblanchard

↓ 168097 05/11/2018 01:53:16

↑ 177452 08/12/2018 14:33:33

↓ 270491 10/11/2019 03:10:06

↑ 284605 30/12/2019 19:16:00
C AlainLebrun
C AnneAmbles
C CharlesAbecassis

```

Le 30/12/2019, GerardSiegle disposait encore d’une ancienne certification de loanblanchard et des trois nouvelles certifications d’AlainLebrun, AnneAmbles et CharlesAbecassis. Par contre les certifications d’auroremengual, de NadineBlanchard, d’Aude49 et de RoselyneBinesse, qui n’avaient pas été renouvelées étaient invalides. Mais il est bien revenu dans la toile avec quatre certifications valides au total.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [3 January 2020 01:01 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/10 "2020-01-03T01:01:00Z")

</div>

Je ne sais pas si cela a un rapport, mais depuis plusieurs heures la blockchain G1 est complètement bloquée !

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [4 January 2020 11:51 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/11 "2020-01-04T11:51:39Z")

</div>

Intuitivement je dirais que c’est la certification de CharlesAbecassis qui a été comptée en double amenant le total à cinq au bloc 284605. En effet, c’est la seule certification qui était encore valide avec celle de loanblanchard.

Pour vérifier j’aurai besoin de meilleures conditions de concentration, donc je verrai ça au mieux dimanche après-midi, sinon plus tard dans la semaine.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [6 January 2020 19:21 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/12 "2020-01-06T19:21:05Z")

</div>

Mon intuition s’est vue confirmée par l’analyse suivante :

> ℹ N.B.: Opérations à réaliser depuis l’environnement de développement, c’est-à-dire après
> 
> ```auto
> git clone https://git.duniter.org/nodes/typescript/duniter.git -b dev
> yarn
> 
> ```

1. Lancer une synchro jusqu’au bloc précédent l’anomalie :

2. Puis mettre un point d’arrêt sur [la ligne suivante #888](https://git.duniter.org/nodes/typescript/duniter/blob/d3aff4f3a5d6d1868837de36213d1430093a892d/app/lib/indexer.ts#L888-888) :  
 ![image](https://forum.duniter.org/uploads/default/original/2X/8/8ba563c89281717f91863f09e05335250e2a0bac.png)  
Ce code est la partie que je soupçonnais de mal compter le nombre de certifications lors de l’entrée / le renouvellement de l’adhésion du membre. [Ce code reflète le protocole](https://git.duniter.org/nodes/common/doc/blob/master/rfc/0009_Duniter_Blockchain_Protocol_V11.md) (regarder la règle BR\_G27).

3. Et enfin exécuter la commande qui “pull” (tire vers le nœud local) le bloc suivant #285605 :

4. Que voit-on ? Le protocole compte 2 certifications existantes :  
 ![image](https://forum.duniter.org/uploads/default/original/2X/3/3c6afd8db8d401100f211126b89ce0ef25c312e5.png)  
Et 3 certifications entrantes :  
 ![image](https://forum.duniter.org/uploads/default/original/2X/d/d5560cd8a822be37d763e820305079975d52d2b8.png)  
Et bien entendu si j’évalue l’expression :  
 ![image](https://forum.duniter.org/uploads/default/original/2X/2/26ebb1abba93e5ba767804c319f35d10b4ae55df.png)  
Bingo ! GerardSiegle rentre parce que le protocole compte 2 fois la même certification (celle entrante existe déjà dans la blockchain). On obtient `2 + 3 >= 5 => true`.

Bref, tout cela est parfaitement conforme au protocole. **De ce point de vue il n’y a pas de bug.**

Oui mais, relativement à la licence, il y a bien un soucis. Manifestement GerardSiegle est rentré avec 4 certifications.

Du coup, des avis pour patcher le protocole ? 🙂

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [6 January 2020 19:39 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/13 "2020-01-06T19:39:02Z")

</div>

Ne pas compter soit l’actuelle soit le rejeu d’une certification de A vers B.  
Ce bug du protocole a été introduit lors de l’ajout du rejeu des certifications.  
Ce code l’a fait entré, et d’autre part, une autre partie du code essayait de l’exclure.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [6 January 2020 19:42 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/14 "2020-01-06T19:42:28Z")

</div>

> [@gerard94](#):
>
> Je ne sais pas si cela a un rapport, mais depuis plusieurs heures la blockchain G1 est complètement bloquée !

En effet, [il y a bien un rapport](https://forum.duniter.org/t/bloquage-de-la-g1-du-02-01-2020-du-du-fait-de-la-non-exclusion-d-une-identite/6719/50).

> [@Moul](#):
>
> Ne pas compter soit l’ancienne soit le rejeu d’une certification de A vers B.  
> Ce bug du protocole a été introduit lors de l’ajout du rejeu des certifications.

Oui bien sûr, mais la difficulté c’est de traduire ces idées en langage du protocole.

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [6 January 2020 20:04 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/15 "2020-01-06T20:04:22Z")

</div>

Est-ce que compter les certifications au global peu importe leurs statuts (existing, pending) simplifierait la règle du protocole ? Ça permettrait de déduire les mêmes certifications (A −\> B) entre l’actuelle et le rejeu.

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [6 January 2020 21:03 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/16 "2020-01-06T21:03:21Z")

</div>

> [@Moul](#):
>
> Ne pas compter soit l’actuelle soit le rejeu d’une certification de A vers B.

On compare l’émetteur des certifications existantes et en attente, il n’y en a pas beaucoup. Si un émetteur est le même, on ne compte pas la certification existente (ou en-attente, au choix). On peut aussi vérifier que la date de péremption de la première ne se confond pas avec celle d’arrivée de la deuxième (je dirais à 5 minutes près, date moyenne entre deux blocs successifs ; c’est l’approximation que j’utilise dans WotWizard; la probabilité de se planter est alors très faible).

---

<div class="post-metadata">

### Author: ![gerard94](https://forum.duniter.org/user_avatar/forum.duniter.org/gerard94/32/58_2.png) [@gerard94](https://forum.duniter.org/u/gerard94)
#### Post date: [6 January 2020 21:11 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/17 "2020-01-06T21:11:13Z")

</div>

Ou alors, annuler d’abord l’existante et attendre le bloc suivant pour inscrire la nouvelle. Ça paraît simple, mais finalement il y a plein de conséquences possibles.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [7 January 2020 09:41 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/18 "2020-01-07T09:41:04Z")

</div>

> [@cgeek](#):
>
> Du coup, des avis pour patcher le protocole ?

> [@cgeek](#):
>
> Oui bien sûr, mais la difficulté c’est de traduire ces idées en langage du protocole.

Voici ma proposition 🙂

`ENTRY.enoughCerts = COUNT(REDUCE_BY(CONCAT(GLOBAL_CINDEX[receiver=ENTRY.pub,expired_on=null], LOCAL_CINDEX[receiver=ENTRY.pub,expired_on=null]), 'issuer', 'receiver')) >= sigQty `

1. On concatène les certifications inscrites et pending.
2. On réduit par (‘issuer’, ‘receiver’)
3. On compte

REDUCE\_BY est déjà utilisé avec 3 paramètres dans la BR\_G39 :

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

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [7 January 2020 09:49 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/19 "2020-01-07T09:49:49Z")

</div>

Le langage protocolaire utilisé dans DUP est définie quelque part ou c’est utilisé que pour et dans DUP ?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [7 January 2020 09:51 UTC](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712/20 "2020-01-07T09:51:19Z")

</div>

> [@Moul](#):
>
> Le langage protocolaire utilisé dans DUP est définie quelque part ?

C’est défini au début de la RFC ici :[rfc/0009\_Duniter\_Blockchain\_Protocol\_V11.md · master · nodes / common / doc · GitLab](https://git.duniter.org/nodes/common/doc/blob/master/rfc/0009_Duniter_Blockchain_Protocol_V11.md#definitions)

Extrait :

Function references:

- _COUNT_ returns the number of values in a list of values
- _AVG_ computes the average value in a list of values, floor rounded.
- _MEDIAN_ computes the median value in a list of values
- _MAX_ computes the maximum value in a list of values

> If values count is even, the median is computed over the 2 centered values by an arithmetical median on them, _NOT_ rounded.

- _UNIQ_ returns a list of the unique values in a list of values
- _PICK_ returns a list of the values by picking a particular property on each record
- _INTEGER\_PART_ return the integer part of a number
- _FIRST_ return the first element in a list of values matching the given condition
- _REDUCE_ merges a set of elements into a single one, by extending the non-null properties from each record into the resulting record.
- _REDUCE\_BY_ merges a set of elements into a new set, where each new element is the reduction of the first set sharing a given key.
- _CONCAT_ concatenates two sets of elements into a new one

> If there is no elements, all its properties are `null` .

- _NUMBER_ get the number part of blockstamp
- _HASH_ get the hash part of blockstamp

[Next page](https://forum.duniter.org/t/ancien-membre-de-retour-avec-seulement-4-certifications/6712.md?page=2)
