Duniteroxyde (oxydation de Duniter)

Ça fait plaisir de voir les énergies se rejoindre autour d’un cyborg TypeScript/Rust !
Ça me motive cette synergie :slight_smile:
Malheureusement, finaliser Dunitrust allait durer encore un bon moment.
Cette approche a l’avantage d’y aller par étapes progressives.

Élois, peux-tu apposer une licence libre au dépôt Duniteroxyde. Sinon, c’est insérer du code propriétaire dans Duniter.

J’ai review vite fait les commits dans Duniter et me suis mis à tester. Eh bien, je suis bleuffé !!!

Ça s’installe très simplement sous Fedora. Installation de nodejs v10 avec dnf module qui permet d’avoir la version majeure de Node.js de son choix. Puis, installation des paquets Rust en dernière version, puis yarn et c’est parti.

Concernant la signature des blocs, c’est vachement plus rapide ! Sur la Ğ1, mon nœud trouve quasiment immédiatement un bloc après être libéré de l’exclusion. J’ai pas encore bien compris le comportement vis-à-vis de la configuration CPU. Ça semble être inférieur à la valeur de configuration, puis ça augmente progressivement ? Mais je ne le vois pas étant donné que mon nœud trouve assez rapidement. Sur la Ğ1-test, ça explose, j’ai réduit par deux la puissance (un cœur, 5 %).

J’imagine qu’une fois ces changements en production sur tous les nœuds Ğ1, powMin va augmenter.

Concernant l’utilisation de module WoT en rust, ça fonctionnait immédiatement. J’ai quand même fais une nouvelle synchronisation, car j’avais quelques erreurs (je dirais mineures) dans les logs. Comment se fait-il que ça fonctionne de passer de wotb à wot-rs ? Ça lit le même fichier de bdd ? Y a-t-il une migration ?

1 Like

100 % d’accord ! Bravo @elois pour ce choix plein de bon sens.

Et que penses tu te travailler sur la BDD aussi ? Niveau perf (en tous cas via BMA : /wot/requirements /tx/sources) ce serait très agréable !
Je sais que GVA remplacera BMA, mais ca permettrait de tenir un peu, et éviterai aussi que les clients soient obligé de rusé (et perdre du temps en dev) pour se concentrer sur GVA eux aussi.
En plus, si la couche de persistance est efficiente, elle pourrait à la fois servir BMA et GVA sans avoir 2 BDD distinctes. Bon la je sais pas.

Autre piste: travailler sur GVA, justement ? Pourquoi pas après tout avoir un module GVA dans Duniter. Ca motiverai aussi les clients à basculer dessus plus vite. non ?

Bon, te connaissant @elois tu va vouloir etre sur le coeur… mais s’il vous plait de délaissé pas les API clients : c’est pas elle que les utilisateurs peuvent avoir une bonne/mauvaise première impression de la G1.

Bon courage à tous !

1 Like

3 messages ont été scindés en un nouveau sujet : Duniter: performances de la sync de la blockchain

Oups je pensais l’avoir fait, c’est un oubli merci @Moul :slight_smile:

Oui j’ai lu le code C++ de wotb pour connaître le format du fichier wot.bin et j’ai écrit un code de migration ici : Sign in · GitLab

La BDD c’est un gros morceaux, j’y est déjà pensé et probablement que je finirai par le faire oui car ça accélérerai plain de choses: la sync, les APIs, etc
Concernant les APIs justement, et notamment GVA, il me faudrait d’abord oxyder la BDD justement, donc ce ne sera pas pour tout de suite.

J’ai testé la synchro locale dans Duniter (donc sans activité réseau) et ça reste beaucoup trop lent a mon goût même sur SSD pci-express.

C’est peut-être un problème de configuration de LevelDB alors, un manque du tunning quoi. Notamment, il faudrait voir si LevelDB possède un mode NO_SYNC ou équivalent permettant de ne pas écrire les changements sur le disque avant la fin de la sync, cela consomme plus de RAM pendant la sync mais la rend infiniment plus rapide, c’est grâce a ce tunning dans LMDB que j’arrivais a sync en moins d’une minute dans Dunitrust.

Je viens de relever une différence entre Duniter 1.7.21 et la version oxydée sur la G1 (je fais tourner mon noeud dans cette version pour tester, une alerte m’a indiqué que le noeud était bloqué).

Pour reproduire :

duniter sync g1.duniter.org --nointeractive 317505

Résultat :

  • Duniter 1.7.21 : bloc 317505 accepté
  • Duniter oxydé : bloc 317505 refusé pour motif « Unhandled rejection: Error: ruleMembershipDistance »

Je ne sais pas encore quelle version a raison, ni l’origine précise de ce delta.

Tu arrive après la bataille, @Moul et moi avons repéré le problème ce matin, je viens de passer la journée dessus et j’ai trouvé, c’est un delta dans la façon de faire les arrondis, la faute a pas de chance, d’après ma sync cautious c’est le seul cas de toute l’histoire de la G1, détails ici : Duniter wotb : problème d'arrondi

4 Likes

Oui désolé je bosse encore malgré le Covid, donc je donne les infos quand je peux ! :slight_smile:

1 Like

L’architecture sur laquelle je suis parti est trop complexe et pas pratique du tout pour développer efficacement, il faut manipuler 3 dépôts en même temps, si même moi je galère ça va être encore plus difficile d’intégrer d’autres contributeurs.
Sachant que je projette d’intégrer d’autres contributeurs à l’oxydation de Duniter le moment venu, il faut que je simplifie l’architecture.

C’est pourquoi j’ai décidé de supprimer le dépôt Duniteroxyde et d’intégrer son contenu directement dans le dépôt de Duniter sous le dossier neon. Ce dépôt ne contenait que le code de binding permettant a Duniter d’utiliser du code Rust, ce binding étant spécifique pour Duniter (il reprend l’API des composants C++/NodeJS remplacés) cela fait sens d’intégrer ce code directement dans Duniter.

J’ai dans ma todo list de faire de la doc qui présente l’architecture de Duniter « oxydé » d’ici les rml15, mais j’attends que l’architecture se stabilise avant de rédiger ça.

Je pense même qu’il serait pertinent de faire carrément une conf pendant les rml15 pour présenter la nouvelle architecture de Duniter et comment fonctionne l’oxydation, je pourrais remplacer cette conf par celle de Dunitrust (ou les fusionner) car je me concentre désormais exclusivement sur Duniter et que le but est que le code existant dans Dunitrust rentre dans Duniter.

Patience donc, d’ici les rml15 vous y verrez plus clair (et moi aussi :sweat_smile:).

4 Likes

J’ai testé la branche feature/oxyde-pow et j’observe des lenteurs de réponse de la part de BMA. Je vois pas en quoi c’est lié aux changements sur la PoW. Tu reproduis ?

Duniteroxyde - étape 3: pow cluster (+ refacto module prover)

Cette 3ème étape m’a demandé environ 70h de travail (10 jours a temps plein) et n’est pas encore totalement stabilisée, il reste quelques bug mais j’ai suffisamment avancé pour ouvrir la phase de tests :slight_smile:

Attention: pour ceux qui compilent Duniter manuellement (cc @Moul), la procédure a changée :

La procédure pour compiler manuellement est désormais documentée ici : https://git.duniter.org/nodes/typescript/duniter/-/blob/dev/doc/use/manual_compilation.md

Le code Rust devant plus conséquent, son temps de compilation augmente, il est donc désormais compilé en mode « debug » par défaut, ce qui permet de gagner un temps considérable lors du développement.
Mais du coup, quand on veut compiler Duniter pour l’utiliser, il faut setter une variable d’environnement pour indiquer a Neon de compiler le code en mode « release ».

Tester

Pour ceux qui souhaitent tester l’oxydation de la pow, voici les paquets permettant de tester :

server x64: https://pub.librelois.fr/duniter-server-oxyde-pow-linux-x64.deb
server arm: https://pub.librelois.fr/duniter-server-oxyde-pow-linux-armv7l.deb
desktop x64: https://pub.librelois.fr/duniter-desktop-oxyde-pow-linux-x64.deb

Merci de tester uniquement sur la monnaie de test pour le moment !

Votre noeud devrait alors trouver des blocs beaucoup plus rapidement, pensez donc a réduire votre % cpu avant de faire la mise à jours.
Cependant, dès que votre difficulté personnalisée augmentera, votre noeud n’utilisera plus qu’un seul cœur pour calculer la pow, c’est le fameux mode ECO, cela devrais donc éviter un emballement de la difficulté du réseau :slight_smile:

1ère étape de migration du code Typescript

Cette étape est la 1ère vrai étape de migration du code Typescript de Duniter. En effet, les deux premières étapes se limitaient au remplacement de addons C/ C++, ici c’est pour la première fois du code Typescrypt qui a été migré.

Migrer la pow était pour moi l’étape parfaite pour monter en compétence, car elle concerne un module (le module prover) relativement « cloisonné » du reste de l’application et que la « logique métier » corresponde est simple, avec assez peu d’entrées/sorties.

Cette étape m’a également demandé d’aller beaucoup plus loin dans les fonctionnalités de Neon (le « framework » qui gère le binding NodeJs<->Rust). En effet, on est plus dans un simple appel de fonction Rust, là il faut que le code Rust vive sa vie indépendamment puis « notifie » le code NodeJs lorsqu’il a trouvé un hash conforme à la pow.

Pour ce faire, je me suis inspiré de cet exemple fourni par Neon afin de créer un EventEmitter wrappant un channel rust.

Le fait qu’il soit possible d’émettre des événements coté Rust et qu’il soient reçus coté NodeJs ouvre des perspective très intéressantes, et me rassure beaucoup quand a la possibilité technique d’une oxydation beaucoup plus poussée.

Tout cela a demandé plus de temps que prévu car je me suis également lancé dans une refonte quasi complète du module prover (en Typescript toujours), donc j’ai aussi bouffé beaucoup de Typescript.

Pourquoi je me suis lancé dans cette refonte :

Au début, le code Rust fonctionnais parfaitement (avec ses tests) mais une fois bindé au module prover rien ne marchais, ça pétais dans tout les sens. J’ai donc du me plongé dans le code du module prover, et il m’a semblé bien trop complexe, avec trop de couches intermédiaires et plein de truc bizarres, je ne m’y retrouvais pas, j’ai failli jeter l’éponge a ce moment là.
Comme la logique métier que doit implémenter le module prover est relativement simple, je me suis dit qu’il serait plus simple pour moi de réécrire quasi entièrement le module prover (toujours en Typescript) plutôt que d’essayer de démêler l’existant, en me basant sur les nombreux tests automatisés écris par @cgeek pour sécuriser mon refactoring.

Et globalement je suis plutôt content du résultat, le module prover semble bien fonctionner, tout les tests passent, j’en ai même ajoutés :slight_smile:

Bon comme dit plus haut il reste encore au moins un bug a corriger, un ralentissement du module BMA que @Moul rencontre également. Et je suis sûr qu’avec vos tests on va en débusquer d’autres, mais c’est normal d’avoir quelques régressions quand on fait de si gros changement, les tests automatisés ne peuvent hélas pas tout couvrir.
Maintenant nous allons rentrer dans une phase de tests intenses et de stabilisation, et dès que l’oxydation de la PoW sera stabilisé je livrerai Duniter 1.8.0-beta et je lancerais la campagne de tests associée (avec son cahier des tests).

Pour le moment, je compte sur @Moul @vit @matograine @scanlegentil @Attilax et @cgeek pour tester l’oxydation de la pow, et quand cette feature sera stabilisé et mergée on fera une campagne de tests plus large (incluant plus d’utilisateurs) pour Duniter 1.8 dans sa globalité :slight_smile:

Je ne sais pas combien de temps prendra cette stabilisation, et je vais avoir des obligations personnelles entre le 7 et le 17 mai, donc il est probable que la version « stable » de Duniter 1.8 ne sorte que vers le 20/25 mai.

5 Likes

Super boulot @elois, bravo :slight_smile:

1 Like

J’en observais aussi, j’ai poussé un correctif qui semble avoir amélioré les choses de mon côté, peut tu te mettre à jours pour voir ? :slight_smile:

Ça semble plus rapide avec l’option pour builder le Rust en mode optimisé pour une release :

# Ajouté dans la conf de mon shell
NEON_BUILD_RELEASE=true

Au démarrage du nœud, BMA a une vitesse normale, puis ça devient lent plus le temps passe. Avec ce dernier changement ça ne semble pas changer.


Concernant la PoW, il me semble que les matchs ne sont plus affichés :

Matched 3 zeros 000ABADD4C8064377AB9226B64FF1B7E0F3111316AEA866355839ED0E0672513 with Nonce = 10000000070869 for block#558648 by 5B8iMA

Ah, tu as passé app/modules/prover/lib/constants.ts:MINIMAL_ZEROS_TO_SHOW_IN_LOGS de 3 à 4. J’ai également fait de même, voire mis 5 sur mon nœud Ğ1 sinon ça remplis les logs pour « rien » pour un nœud puissant. Faut trouvé un équilibre entre ça et l’afficher pour savoir si le nœud recherche bien actuellement. J’ai passé ce paramètre à 2, mais je ne vois toujours pas ces Matched.


Plusieurs blocs de numéros successifs trouvés en même temps. Je suis pas sûr de comprendre, mais ça ressemble comme ci que la première recherche ne s’est pas arrêté. Ça s’est reproduit trois fois d’affilée. Ça semble se produire uniquement au démarrage du nœud
│2020-05-06T17:47:44+02:00 - info: Generating proof-of-work with 7 leading zeros followed by [0-5]... (CPU usage set to 3%, use 1 cores) for block#559141 5B8iMA                                                                                             ┤
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              │
│2020-05-06T17:47:47+02:00 - info: ✔ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ✘ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ✘ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:15+02:00 - info: SIDE Block #559141-0001E67E added to the blockchain in 1 ms                                                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Block resolution: 1 potential blocks after current#559140...                                                                                                                                                              ┤
│2020-05-06T17:48:15+02:00 - info: Block #559141 added to the blockchain in 12 ms                                                                                                                                                                            ┤
│2020-05-06T17:48:15+02:00 - warn: prover: blockchain HEAD change, cancel pow.                                                                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Block resolution: 0 potential blocks after current#559141...                                                                                                                                                              ┤
│2020-05-06T17:48:15+02:00 - debug: Key GmLQ1KQGQb8p5hy3Vp66zm7XdjwtYGABMvwrW2Tfz1n7 does not have enough links (0/5)                                                                                                                                        ┤
│2020-05-06T17:48:15+02:00 - info: Transaction EA99630F655802F6708061C233406D0DD7FFBD394AE4FB90C6B59F28EF1D2F93 added to block                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Generating proof-of-work with 3 leading zeros followed by [0-2]... (CPU usage set to 3%, use 1 cores) for block#559142 5B8iMA                                                                                             ┤
│2020-05-06T17:48:44+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ✔ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:45+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:45+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - debug: prover: rust pow cluster emit valid proof                                                                                                                                                                                ┤
│2020-05-06T17:48:50+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - info: Done: #559141, 000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7 in 66.60s (~9184 tests, ~137.89 tests/s, using 1 cores, CPU 3%)                                                                           ┤
│2020-05-06T17:48:50+02:00 - info: FOUND proof-of-work with 7 leading zeros followed by [0-5]!                                                                                                                                                               │
│2020-05-06T17:48:50+02:00 - info: Done: #559142, 000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7 in 35.37s (~9184 tests, ~259.68 tests/s, using 1 cores, CPU 3%)
│2020-05-06T17:47:44+02:00 - info: Generating proof-of-work with 7 leading zeros followed by [0-5]... (CPU usage set to 3%, use 1 cores) for block#559141 5B8iMA                                                                                             ┤
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ✔ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ✘ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          │
│2020-05-06T17:47:47+02:00 - info: ⬇ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - info: ✘ TX 500:4 from CE5Q7JquMhoRYZYgsabK6TLFGtoTDuqt1iMiS8R3j2Zf                                                                                                                                                              ┤
│2020-05-06T17:47:47+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:15+02:00 - info: SIDE Block #559141-0001E67E added to the blockchain in 1 ms                                                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Block resolution: 1 potential blocks after current#559140...                                                                                                                                                              ┤
│2020-05-06T17:48:15+02:00 - info: Block #559141 added to the blockchain in 12 ms                                                                                                                                                                            ┤
│2020-05-06T17:48:15+02:00 - warn: prover: blockchain HEAD change, cancel pow.                                                                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Block resolution: 0 potential blocks after current#559141...                                                                                                                                                              ┤
│2020-05-06T17:48:15+02:00 - debug: Key GmLQ1KQGQb8p5hy3Vp66zm7XdjwtYGABMvwrW2Tfz1n7 does not have enough links (0/5)                                                                                                                                        ┤
│2020-05-06T17:48:15+02:00 - info: Transaction EA99630F655802F6708061C233406D0DD7FFBD394AE4FB90C6B59F28EF1D2F93 added to block                                                                                                                               ┤
│2020-05-06T17:48:15+02:00 - info: Generating proof-of-work with 3 leading zeros followed by [0-2]... (CPU usage set to 3%, use 1 cores) for block#559142 5B8iMA                                                                                             ┤
│2020-05-06T17:48:44+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ✔ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:44+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:45+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:45+02:00 - info: ⬇ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - info: ✘ TX 400:4 from BXBQMVZ4qQWyTcxqUzKAmmiy9Q4tYgchonLZggxrQTty                                                                                                                                                              ┤
│2020-05-06T17:48:45+02:00 - warn:  httpCode=400, ucode=2030, message=Transaction already processed                                                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - debug: prover: rust pow cluster emit valid proof                                                                                                                                                                                ┤
│2020-05-06T17:48:50+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7                                                                                                                          ┤
│2020-05-06T17:48:50+02:00 - info: Done: #559141, 000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7 in 66.60s (~9184 tests, ~137.89 tests/s, using 1 cores, CPU 3%)                                                                           ┤
│2020-05-06T17:48:50+02:00 - info: FOUND proof-of-work with 7 leading zeros followed by [0-5]!                                                                                                                                                               ┤
│2020-05-06T17:48:50+02:00 - info: Done: #559142, 000209C60CE493FFAACCB338EB5545C831051B564C26FEAA9744E2BAE57118F7 in 35.37s (~9184 tests, ~259.68 tests/s, using 1 cores, CPU 3%)                                                                           ┤
│2020-05-06T17:48:50+02:00 - info: FOUND proof-of-work with 3 leading zeros followed by [0-2]!                                                                                                                                                               ┤
│2020-05-06T17:48:50+02:00 - info: SIDE Block #559142-000209C6 added to the blockchain in 2 ms                                                                                                                                                               ┤
│2020-05-06T17:48:50+02:00 - info: Block resolution: 1 potential blocks after current#559141...                                                                                                                                                              │
│2020-05-06T17:48:50+02:00 - info: Block #559142 added to the blockchain in 52 ms                                                                                                                                                                            ┤
│2020-05-06T17:48:50+02:00 - info: Block resolution: 0 potential blocks after current#559142...            
│2020-05-06T18:34:42+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771                                                                                                                          ┤
│2020-05-06T18:34:42+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771                                                                                                                          ┤
│2020-05-06T18:34:42+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771                                                                                                                          ┤
│2020-05-06T18:34:42+02:00 - info: Done: #559176, 0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771 in 358.04s (~45472 tests, ~127.00 tests/s, using 1 cores, CPU 3%)                                                                         ┤
│2020-05-06T18:34:42+02:00 - info: FOUND proof-of-work with 4 leading zeros followed by [0-9A-B]!                                                                                                                                                            ┤
│2020-05-06T18:34:42+02:00 - info: Done: #559177, 0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771 in 270.33s (~45472 tests, ~168.21 tests/s, using 1 cores, CPU 3%)                                                                         ┤
│2020-05-06T18:34:42+02:00 - info: FOUND proof-of-work with 4 leading zeros followed by [0-9A]!                                                                                                                                                              ┤
│2020-05-06T18:34:42+02:00 - info: Done: #559178, 0000639C3A2706BF116DAAE4C8CB47E8364F9687138CFF598770C7BE53F57771 in 113.12s (~45472 tests, ~401.98 tests/s, using 1 cores, CPU 3%)                                                                         ┤
│2020-05-06T18:34:42+02:00 - info: FOUND proof-of-work with 4 leading zeros followed by [0-9A]!                                                                                                                                                              ┤
│2020-05-06T18:34:42+02:00 - info: SIDE Block #559178-0000639C added to the blockchain in 0 ms                                                                                                                                                               ┤
│2020-05-06T18:34:42+02:00 - info: Block resolution: 1 potential blocks after current#559177...                                                                                                                                                              ┤
│2020-05-06T18:34:42+02:00 - info: Block #559178 added to the blockchain in 6 ms                                                                                                                                                                             ┤
│2020-05-06T18:34:42+02:00 - info: Block resolution: 0 potential blocks after current#559178...                                                                                                                                                              ┤
│2020-05-06T18:34:42+02:00 - debug: Trial = 199, powMin = 65, pubkey = 5B8iMA                                                                                                                                                                                ┤
│2020-05-06T18:34:42+02:00 - warn: Too high difficulty: waiting for other members to write next block                                                                                                                                                        ┤
│2020-05-06T18:35:12+02:00 - debug: Trial = 199, powMin = 65, pubkey = 5B8iMA                                                                                                                                                                                ┤
│2020-05-06T18:35:12+02:00 - warn: Too high difficulty: waiting for other members to write next block                                                                                                                                                        ┤
│2020-05-06T18:35:22+02:00 - info: SIDE Block #559179-000099AF added to the blockchain in 3 ms                                                                                                                                                               ┤
│2020-05-06T18:35:22+02:00 - info: Block resolution: 1 potential blocks after current#559178...                                                                                                                                                              ┤
│2020-05-06T18:35:22+02:00 - info: Block #559179 added to the blockchain in 9 ms                                                                                                                                                                             ┤
│2020-05-06T18:35:22+02:00 - info: Block resolution: 0 potential blocks after current#559179...                                                                                                                                                              ┤
│2020-05-06T18:35:42+02:00 - debug: Key GmLQ1KQGQb8p5hy3Vp66zm7XdjwtYGABMvwrW2Tfz1n7 does not have enough links (0/5)                                                                                                                                        ┤
│2020-05-06T18:35:42+02:00 - info: Generating proof-of-work with 4 leading zeros followed by [0-9A-C]... (CPU usage set to 3%, use 1 cores) for block#559180 5B8iMA                                                                                          ┤
│2020-05-06T18:35:58+02:00 - info: SIDE Block #559180-00000206 added to the blockchain in 2 ms                                                                                                                                                               ┤
│2020-05-06T18:35:58+02:00 - info: Block resolution: 1 potential blocks after current#559179...                                                                                                                                                              ┤
│2020-05-06T18:35:58+02:00 - info: Block #559180 added to the blockchain in 60 ms                                                                                                                                                                            ┤
│2020-05-06T18:35:58+02:00 - warn: prover: blockchain HEAD change, cancel pow.                                                                                                                                                                               ┤
│2020-05-06T18:35:58+02:00 - info: Block resolution: 0 potential blocks after current#559180...                                                                                                                                                              ┤
│2020-05-06T18:35:58+02:00 - debug: Key GmLQ1KQGQb8p5hy3Vp66zm7XdjwtYGABMvwrW2Tfz1n7 does not have enough links (0/5)                                                                                                                                        ┤
│2020-05-06T18:35:58+02:00 - info: Generating proof-of-work with 4 leading zeros followed by [0-9A-C]... (CPU usage set to 3%, use 1 cores) for block#559181 5B8iMA                                                                                          ┤
│2020-05-06T18:37:54+02:00 - debug: prover: rust pow cluster emit valid proof                                                                                                                                                                                ┤
│2020-05-06T18:37:54+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #00008B8A85B051765D41934F1DA116CFC2D27864A26B317024765B527C86D0E8                                                                                                                          ┤
│2020-05-06T18:37:54+02:00 - info: ENGINE c#0#0 HAS FOUND A PROOF #00008B8A85B051765D41934F1DA116CFC2D27864A26B317024765B527C86D0E8                                                                                                                          ┤
│2020-05-06T18:37:54+02:00 - info: Done: #559180, 00008B8A85B051765D41934F1DA116CFC2D27864A26B317024765B527C86D0E8 in 131.66s (~50032 tests, ~380.02 tests/s, using 1 cores, CPU 3%)                                                                         ┤
│2020-05-06T18:37:54+02:00 - info: FOUND proof-of-work with 4 leading zeros followed by [0-9A-C]!                                                                                                                                                            ┤
│2020-05-06T18:37:54+02:00 - info: Done: #559181, 00008B8A85B051765D41934F1DA116CFC2D27864A26B317024765B527C86D0E8 in 115.85s (~50032 tests, ~431.87 tests/s, using 1 cores, CPU 3%)                                                                         ┤
│2020-05-06T18:37:54+02:00 - info: FOUND proof-of-work with 4 leading zeros followed by [0-9A-C]!                                                                                                                                                            ┤
│2020-05-06T18:37:54+02:00 - info: SIDE Block #559181-00008B8A added to the blockchain in 1 ms                                                                                                                                                               ┤
│2020-05-06T18:37:54+02:00 - info: Block resolution: 1 potential blocks after current#559180...                                                                                                                                                              ┤
│2020-05-06T18:37:54+02:00 - info: Block #559181 added to the blockchain in 58 ms                                                                                                                                                                            ┤
│2020-05-06T18:37:54+02:00 - info: Block resolution: 0 potential blocks after current#559181...

Ça cherche malgré tout avec une difficulté plus élevée qu’avant. As-tu changé ce paramètre ? J’ai déjà joué avec ce paramètre, Mais, je pense qu’il est parti en fumée avec le checkout.
app/modules/prover/lib/constants.ts:POW_MAXIMUM_ACCEPTABLE_HANDICAP: 64
Ça ne devrait pas calculer : 64 + 64 > 198 = false :

Generating proof-of-work with 7 leading zeros followed by [0-5]... (CPU usage set to 3%, use 1 cores) for block#559141 5B8iMA

Sinon, j’ai cru rencontrer des problèmes pour rester synchronisé. Surement que mon nœud n’est en général pas bien connecté au réseau WS2P et ou qu’il a trouvé plein de blocs d’affilée et s’est isolé dans un fork. À tester plus pour pouvoir confirmer.


Note pour les lecteurs : À ce que j’ai compris, Il n’y a plus de processus enfants séparés du processus parent comme en pure Node.js/C/C++ nommé : powCluster.js. En Duniter Node.js/Rust, la PoW est dans le processus principal en tant que thread duniter_default.

Oui forcément, si tu as buildé en mode “debug” c’est forcément beaucoup plus lent et plus lourd (binaire plus gros et conso mémoire plus élevée). Il ne faut compiler en mode “debug” que pour jouer les tests ou pour utiliser un débogueur.

Mon noeud g1.librelois.fr tourne depuis plus de 18h non stop avec ce correctif et je n’observe plus de ralentissement de BMA, même après 18h, est tu certain que tu t’es bien mis à jours ? Le hash de ton dernier commit commence t’il bien par 0517f4 ?

Oui j’ai décidé de supprimer cette partie qui est nuisible aux perfs car cela nécessite des traitements supplémentaires dans la fonction de check donc a chaque itération, or c’est LA partie la plus sensible et la plus impactante sur les perfs après la crypto, ces logs ne sont pas utiles a par savoir que le noeud est en train de calculer, ce qu’on peut déjà voir avec l’activité processeur.
Et si on veut savoir le passé, les logs indiquent déjà quand la pow commence et quand elle se termine.

Non je n’ai pas changé ce paramètre, mais je constate aussi ce comportement dans mes logs, je ne comprends pas pourquoi cela se produit. J’investiguerai dès que je pourrais (ce sera peut-être pas avant quelques jours).

Ça c’est parce que ton endpoint WS2P public n’est pas correctement configuré, wss://tg/.moul.re ne répond pas, il faudrait que tu règles ça :slight_smile:

Un thread est un processus, c’est pareil. Selon certains un thread est un processus qui partage sa mémoire avec d’autres mais tout le monde n’est pas d’accord sur ce distinguo.
Et si, les processus de la PoW sont toujours des processus enfants du processus principal, simplement je ne leur donne pas de nom, donc ils reprennent le même nom que leur parent (duniter-default), c’est vrai que je pourrais leur donner un nom je n’y avais pas pensé :slight_smile:

1 Like

Oui. Pour l’instant BMA réponds normalement. Je vais voir sur plus long terme.

Ce choix me convient.

Port ouvert et configuration WS2P mise en place :

    "WS2P 2bbc5904 gt.moul.re 10903"

J’ai pas testé avec un client WS, mais je sens que mon nœud est plus connecté au réseau en regardant à l’intérieur du câble.

C’est une bonne idée pour les distinguer dans un htop.

1 Like

Ne répond pas non plus mais sur ta fiche de peer c’est : WS2P 2bbc5904 gt.moul.re 443

Je n’ai pas du tout creusé ce sujet, mais tu sais peut-être : peut-on déboguer à la fois le TypeScript et le Rust en même temps ? Je veux dire, au sein de la même exécution.

Déboguer le TypeScript je le fais déjà, mais dès qu’on bind sur du C/C++ il y a une cloison que je n’ai jamais franchi. Est-ce possible pour le Rust ?

Autrement dit : peux-tu déboguer du code oxydé ?

Tu ne dois surtout pas hésiter, à aucun moment. Les tests sont là pour ça.

Et de toute façon ce code a vocation à être réécrit en Rust. Donc autant que tu le maîtrises.

1 Like

Hélas non, en cas de besoin, voici comment je procède :

Avec le déboguer Typescript, je note les données envoyées a la partie Rust en entrée.

Je lance la partie Rust avec ces données manuellement (dans un TU Rust) pour tenter de reproduire l’anomalie.

Mais dans la pratique c’est vraiment très très très rare que j’ai besoin de déboguer du Rust, ça ne m’arrivait presque jamais dans Dunitrust, et je n’ai encore jamais ressenti le besoin de le faire dans l’oxydation de Duniter jusqu’à présent.
Grâce au typage fort, a l’explicitation des effets de bords et aux très nombreux contrôles a la compilation, Rust est un langage que l’on a beaucoup moins besoin de déboguer que les autres, on pourrait même s’en passer. Ce qui est clairement impensable en NodeJS, j’ai abusé du débogueur pour mon refactoring, et sans lui j’y serais encore, donc je comprends que quand on vient du NodeJS on considère le débogueur comme indispensable :slight_smile:

Oui le typage fort présente cet avantage, j’ai remarqué aussi que je déboguais beaucoup moins souvent avec TypeScript que JavaScript.

Le débogueur n’est jamais indispensable. C’est juste que, d’expérience, j’ai remarqué que c’était la méthode la plus efficace quand un problème non trivial se présentait.

Concernant Duniter oxydé, plus l’oxydation sera poussée et plus tu ressentiras le besoin de l’avoir à disposition à mon avis. Et ce mon venu – s’il advient – le fait que TypeScript soit le point d’entrée deviendra gênant. Ce qui pourrait être intéressant alors ce serait de pouvoir faire l’inverse : avoir des modules Rust en TypeScript (le temps de leur oxydation). Je ne sais pas si c’est possible !

@Moul après vérification plus poussée je pense que tu t’es trompé, ça ne cherche pas avec une difficulté plus élevée qu’avant, le comportement est toujours le même et est conforme à l’attendu :

Un pattern de 7 zéros suivi par [0-5] correspond à une difficulté de 122, or 64 + 64 >= 122 donc il est normal que ton nœud essaye de calculer le bloc. La formule n’a pas changé elle est ici, le nœud s’exclura du calcul si et seulement si :

selfDifficulty > current.powMin + this.conf.powMaxHandicap

J’ai vérifié en debug et en rajoutant des logs, et je suis formel, il est totalement normal que ton nœud G1-test tente de calculer avec une difficulté de 122 :wink:

1 Like