G1-test dans les choux ?

g1-test

#61

Je me pencherai sur le sujet cet après-midi, mais de toute façon la Ğ1 ne risque pas grand-chose vu que le bug a été introduit en 1.6.15 et qu’il existe sur la Ğ1 des nœuds même 1.5.x.

Ceci dit ça peut provoquer des ralentissements.


#62

Donc j’ai étudié le soucis plus posément, et le bug n’avait rien à voir avec ce que je disais hier.

J’ai créé la MR#1248 pour corriger les 2 problèmes identifiés.

Problème 1 : la répétition

Duniter créait des blocs invalides. Duniter peut toujours créer des blocs invalides d’ailleurs, car il peut se tromper. Mais le problème ici était que même s’il se trompait, le logiciel persistait dans son erreur même après avoir forgé un bloc incorrect.

Le correctif n°1 a simplement consisté à supprimer les transactions reçues dans un bloc émis par notre nœud de sa piscine. Ainsi, même si le bloc est invalide, le nœud ne répétera pas son erreur car il ne verra plus les transactions comme en attente d’inclusion. Plus de blocage.

Problème 2 : l’erreur d’inclusion de transactions

Duniter s’emmêlait les pinceaux dans la génération de bloc : lors de ses tests d’inclusion itérative des transactions (car c’est comme ça que Duniter opère : il essaye d’inclure une transaction, vérifie par rapport à celles déjà incluses), la vérification était incorrecte comme l’a détecté @elois.

Le problème venait effectivement du cas avec transactions chaînées, car la méthode de génération vérifiait pour chaque transaction que la consommation de la source précédente était possible en regardant non pas dans les transactions du bloc (principe des transactions chaînées), mais dans toutes les transactions de la piscine. Alors si une transaction chaînée B reposant sur A était détectée, le nœud incluait B dans le bloc du moment que A était dans sa piscine, au lieu de vérifier que A était dans le bloc.

Or comme les transactions chaînées sont pour le moment interdites dans un bloc, seule B était inscrite en bloc. Ce qui fait que la bloc est refusé, car la source contenue dans la transaction A, qui n’est pas incluse, n’existe donc pas. Le bloc est invalide.

Le correctif n°2 a consisté a s’assurer de piocher les transactions au bon endroit aux divers moment où une transaction est reçue :

  • réception en piscine : recherche en piscine
  • inclusion en bloc : recherche dans le bloc

Avec cette solution, seule A aurait été incluse dans un 1er bloc, puis B dans un 2ème bloc, etc.

Nouveaux livrables

Si vous voulez débloquer le réseau Ğ1-Test, installez simplement la version temporaire v20180217.1616.11.

Et puis @elois, peux-tu valider cette MR puis celle sur la fuite mémoire pour produire une v1.16.19 ? Si tout semble OK.


#63

Je me permets de vous spammer : @Inso, @nanocryk, @fbuland, @Alan_Schmitt, @vtexier, @jytou, @mmpio, @Mententon_03, …


#64

Merci @cgeek, je viens de relire tes commit pour essayer de comprendre ce que tu a fait, le problème était plus épineux que ce que je pensais, je me rend compte que j’ai toujours du mal avec node même si ça fait 1 ans et 3 mois que j’en fait :sweat_smile:

Je viens d’installer ta release de test sur mon neud membre mais il est exclu du calcul donc impossible pour moi de vérifier si ça fonctionne pour le moment :slight_smile:


#65

Je ne pense pas que ce soit ça, tu te débrouilles très bien avec WS2P. C’est plutôt ce code qui est pas assez lisible, on ne sait pas bien ce qu’il fait. Moi je le sais vu que je l’ai écrit…


#66

J’avoue que je suis nul lorsqu’il s’agit de débuger le code écris par quelqu’un d’autre, mais que je me débrouille généralement bien lorsqu’il s’agit de débuger mon propre code. Mais c’est peut etre un peu tout les dev ça ?


#67

Oui, d’où l’idée des revues de code :slight_smile:

D’ailleurs un développeur sachant que son code va être relu et refusé si illisible, va s’attarder à le rendre correct (normalement).


#68

@elois, ton nœud est sur un fork avec le bloc#137082. Si tu resynchronises, ça devrait débloquer vu que jytou a calculé le 137083.


#69

Nouveau build lancé. A part un message d’erreur dans les logs,

  • j’ai calculé et envoyé au réseau le bloc 137084 !
  • le logo tout gris du dock Ubuntu s’affiche mantenant correctement !
2018-02-17T18:55:03+01:00 - info: Block resolution: 2 potential blocks after current#137081...
2018-02-17T18:55:03+01:00 - error:  TypeError: Cannot read property 'match' of undefined
    at txSourceUnlock (/mnt/data/Logiciels/duniter-desktop-v20180217.1616.11-linux-x64/app/lib/indexer.js:1782:27)
    at Promise.all._.where.map (/mnt/data/Logiciels/duniter-desktop-v20180217.1616.11-linux-x64/app/lib/indexer.js:728:31)
    at <anonymous>
2018-02-17T18:55:03+01:00 - info: Block #137082 added to the blockchain in 75 ms

Bravo à vous deux en tout cas !

En regardant le code, je dirais qu’il manque de commentaires, relativement à ma manie de mettre un commentaire par ligne (presque)… :grin:

C’est vraiment formateur quand on découvre un nouveau langage, d’avoir plein de commentaires qui traduisent ce que fait le code.


#70

Allez c’est parti maintenant la difficulté vas tomber en chute libre et on vas débiter 500 blocs et en rien de temps a nous 3, ça va swinger :rofl:


#71

Je fais la release arm de ce pas… (en espérant que je la fasse du premier coup, pas comme d’hab quoi ! :smiley: )
J’ai pris la branche 1277_fix, c’est bien ça j’imagine ?


#72

oui :slight_smile:


#73

Je suis maudit.

error in ‘Version’ field string ‘1.6.18_cgeek1277fix’: invalid character in version number

:sob:
Bon, c’est reparti avec un tiret au lieu du blanc souligné… :pray:


#74

De toute façon il faudra la refaire pour la 1.6.19, tu auras à nouveau ta chance !


#75

J’aimerais quand même attendre lundi pout vérifier ce que çà donne niveau occupation mémoire :slight_smile:


#76

Voila, elle est disponible .


#77

Merci, je viens de l’installer et tout a l’air de marcher. Il ne me reste plus qu’à trouver des blocs.


#78

Installé sur mon raspberry, ça marche il a même calculé un block :slight_smile:


#79

Ok j’ai bombardé g1-test de transactions chainés et tout est bien absorbé comme il se doit maintenant :slight_smile:
le correctif de cgeek est donc bon, je merge


#80

Ça y ai la blockchain g1-test commence a accélérée pour rattraper ces 3 jours de retard ! La diff est tombée a 60 ! Il est possible que ça fork dans tout les sens dans la nuit :laughing: