Implémentation de Duniter en Rust?

Il plante en dehors des tests. J’ai suivi en pas à pas et il plante dans du code de Mocha après avoir fini

testSuite("FILE3", FILE_MODE);

@cgeek Tu pourrais me dire si tu as une segfault en lançant :

yarn
node ./build/index.js

Je n’ai pas d’affichage du segfault dans mon terminal (surement l’OS qui ne l’affiche pas contrairement à Linux)

Quelle version de NodeJS je dois utiliser pour être compatible avec duniter-ts ?

la version 6.11

Je n’ai aucune sortie.

Peut-être devrais-tu avoir une VM à Linux à côté, pour faire ce genre de comparaisons tranquillement.

On peut mettre directement “6” : Nouveau tutoriel de développement - #14 by cgeek

Moul avait mis 6.11 mais c’est trop restrictif.

Je vais essayer avec le sous-système Linux de Win10. Je pourrais aussi essayer avec la bonne version de Node, je n’arrive pas à avoir nvm sous Win.

Je te conseille vraiment l’utilisation d’une VM Ubuntu, ça coûte vraiment pas cher à ça te donne l’assurance d’un système isolé.

Personnellement, je ne veux pas t’aider à déboguer les problèmes Windows.

D’acc, je vais installer une VM. Tu me conseille quoi ? VirtualBox ?

Oui, VirtualBox est sous licence GPLv2 et fait très bien le boulot.

Je te conseille aussi une Ubuntu pour aller au plus simple possible.

1 Like

J’ai tout installé sous une VM, et j’ai le même résultat que toi : segfault pour les tests, et rien pour l’index. Du coup je ne vois pas trop, je pensais que ça venait d’un problème de destruction de mon objet Rust, mais on dirait que non vu que index.js n’en provoque pas. J’ai essayé avec .memCopy() qui me semblait suspect, mais rien non plus. Je ne vois pas trop comment faire pour avancer.

Problèmes toujours non résolus :

  • segfault à la fin des tests unitaires
  • un test de distance qui ne passe pas

Petite question : pourquoi wotb-rs n’a pas son dépot git dédié ? :slight_smile:

Car les différentes crates ne sont pas assez matures et sont amenées à beaucoup évoluer. Je me vois mal ouvrir des issues et des merges request synchro sur plusieurs dépots pour faire un changement non rétro-compatible par exemple. Tout ce qui touche le coeur de duniter-rs est donc pour l’instant dans un seul dépot, et des utilisations en dehors du coeur seront dans un autre.

Tu remarquera dans le Cargo.toml de protocol que l’on va chercher keys directement dans le dépot sans passer par crates.io, ce qui veut dire que l’on peut adapter les changements dans le reste du code sans publier de version.

2 Likes

Un binaire du module wotb c++.
Après on peut aussi l’extraire de la bdd sqlite mais c’est long a coder, ce n’est pas un simple parser !

Si tu veut intégrer des tests propres sur des données réelles il faut d’abord définir un format pour le stockage de la blockchain en Rust et parser depuis ce format.

En fait je voudrais que tu n’utilise pas le format serialisé que j’ai fais :confused: Il est spécifique à l’inplémentation actuelle et va m’empecher de comparer facilement la vitesse d’execution. J’ai fait une issue pour ça.

Je fais comment alors ? De toute façon je suis encore en phase de dev et donc pour le moment il me faut une façon facile et rapide de stocker l’état de la wot, je peut toujours en changer plus tard :wink:

En fait il faudrait une méthode chargement de la wot qui n’appelle que les fonctions du trait (ce qui devrait suffire logiquement). Comme ça on peut changer d’implémentation, ce qui m’interesse vu que je refais le calcul de la WoT en hautement parallélisable :wink:

1 Like

Ça veut quand même dire qu’en cas de changement d’implémentation il faut réindexer les events wot la blockchain depuis le bloc genesis donc ça casse bien la compatibilité, en soi ce n’est pas gênant ça force juste une resync complète après la maj, ce que je ferai car je n’ai pas envie de coder un code de transfert.

Pas si c’est un format indépendant de l’implémentation et qui peux être chargé/écrit sur une WebOfTrust générique. En gros on te passe une variable d’un type qui implemente le trait WebOfTrust, et tu la rempli avec le contenu lu dans le fichier.

Edit : ce format doit juste contenir le nombre de noeuds, qui est actif ou non, et la liste des liens. Après si ton code construit une LegacyWebOfTrust, il suffira de faire to_file(“chemin”, mawot) pour récupérer ce format indépendant.

1 Like