Bêta-test Duniter 1.6 WS2P

La version 1.6 de Duniter est pratiquement terminée, et comme elle introduit une nouvelle fonctionnalité structurante (WS2P : nouvelle couche réseau) je vous propose de la tester avant sa sortie officielle.

Vous pouvez télécharger cette version ici : https://github.com/duniter/duniter/releases/tag/v1.6.2

Merci d’être indulgent dans ce test, et de répondre ici pour me faire vos retours. S’il vous trouvez des bugs, je ferai en sorte de les corriger pour la version officielle.

N.B. : je n’ai pas de version ARM à vous proposer avant 2 ou 3 jours, mon Raspberry PI 3 ayant rendu l’âme. Pour les plus courageux, vous pouvez assez simplement réaliser le livrable en suivant les étapes 1. et 3. de ce tutoriel et en mettant comme version « 1.6.2 ». Le livrable ARM se trouvera alors dans le répertoire release/arch/arm.

Installation

Téléchargez le livrable adapté à votre distribution, puis installez-le. Cette nouvelle version est rétro-compatible et ne retire rien à votre installation actuelle.

Monnaie

Le nœud fonctionne aussi bien sur Ğ1 que Ğ1-Test. Je vous conseille quand même de débuter par Ğ1-Test pour faire vos essais.

Nœuds compatibles

Vous devriez déjà pouvoir observer au moins 2 nœuds compatibles dans chaque monnaie, ceux de duniter.org et de cgeek.fr.

Configuration de WS2P

Aucune configuration particulière n’est requise pour un fonctionnement basique, où votre nœud se connectera de lui-même au réseau et se rendra joignable par les connexions qu’il initiera.

Il n’y a pas de configuration non plus pour un fonctionnement avancé si votre nœud se trouve sur un réseau privé derrière une box car la configuration sera alors automatique.

Fonctionnement avancé sur un serveur dédié

Si vous souhaitez installer cette version sur un serveur dédié qui ne serait pas derrière une box internet, alors 2 choix s’offrent à vous :

  • se limiter au fonctionnement en mode basique, limite la connectivité à votre nœud aux connexions initiées par vous.

  • activer le fonctionnement avancé, permettant à des nœuds de se connecter à vous sans avoir besoin que vous les sollicitiez. Dans ce cas il vous faudra configurer votre nœud en exposant un port pour WS2P et en le routant jusqu’à votre nœud avec les commandes suivantes :

    --ws2p-noupnp                 Do not use UPnP to open remote port.
    --ws2p-port <port>            Host to listen to
    --ws2p-host <host>            Port to listen to
    --ws2p-remote-host <address>  Availabily host
    --ws2p-remote-port <port>     Availabily port
    

Si par exemple vous avez ouvert le port 33333 à l’adresse mon-noeud.fr, et que vous souhaitez faire écouter l’interface WS2P sur 78.89.87.55:7777, vous lancerez la commande :

duniter config --ws2p-noupnp --ws2p-port 7777 --ws2p-host 78.89.87.55 --ws2p-remote-port 33333 --ws2p-remote-host mon-noeud.fr

Cela permettra à Duniter de faire écouter WS2P sur 78.89.87.55:7777, et de déclarer publiquement cette interface disponible à l’adresse mon-noeud.fr:33333.

À noter qu’il faut forcément des nœuds en mode avancé, sinon le réseau WS2P ne fonctionne pas. Plus il y a de nœuds en mode avancé, plus le réseau est décentralisé.

Les tests à effectuer

Vous pouvez vérifier le bon fonctionnement de WS2P à plusieurs endroits :

UI : la page d’accueil

La page d’accueil affiche le nombre de nœuds connectés à votre nœud :

UI : l’onglet « network » de la page d’accueil

La page d’accueil comporte désormais un 3ème onglet nommé « Network » et qui vous affiche une vue plus complète de la connectivité WS2P ainsi qu’une vue réseau :

BMA : l’URL /network/ws2p/info

Également, si vous avez activé BMA, vous pouvez consulter le nombre de nœuds connectés en consultant l’URL /network/ws2p/info de votre nœud :

{
  "peers": {
    "level1": 0,
    "level2": 2
  }
}

BMA : l’URL /network/ws2p/heads

Toujours si vous avez activé BMA, vous pouvez consulter la vue réseau telle que retransmise par la couche WS2P :


{
  "heads": [
    {
      "message": "WS2P:HEAD:3dnbnYY9i2bHMQUGyFp5GVvJ2wBkVpus31cDJA5cfRpj:54813-00000A24802B33B71A91B6E990038C145A4815A45C71E57B2F2EF393183C7E2C",
      "sig": "a1vAAM666kPsMCFTbkgkcCsqHf8nmXR+Lh3D3u+BaXzmArj7kwlItbdGUs4fc9QUG5Lp4TwPS7nhOM5t1Kt6CA=="
    },
    {
      "message": "WS2P:HEAD:2aqxBdbiDeghGJFthExgNnVicU5YVj5jV8kb6CWHJ5kU:54813-00000A24802B33B71A91B6E990038C145A4815A45C71E57B2F2EF393183C7E2C",
      "sig": "6JE7+FnONSGSVwZVGMLgSScGny/i4N/ivGjqU4+Hjm42+C00hlY5HrtfePtvcoEJAulgmBTVZyKVMMaZUXkHAQ=="
    },
    {
      "message": "WS2P:HEAD:HVbVWiHyjCr9KNQfPXT2qXzck4xoShEggckGGtNN7JFq:54813-00000A24802B33B71A91B6E990038C145A4815A45C71E57B2F2EF393183C7E2C",
      "sig": "JN0mcnIG27jdA0UNekebFt0ukbh1U33IcCxi6HeGj0dAdGtIU7G6+ANiDpdhbWE9DUKRQbX8Gkks/xADgo0RBg=="
    }
  ]
}

Surveiller la consommation mémoire

Il va falloir vérifier qu’il n’existe pas de fuite mémoire avec l’introduction de cette nouvelle API. Je vais moi-même faire mes mesures, mais si vous savez surveiller la consommation merci de faire cette vérification sur votre machine.

Désactiver BMA

Avec l’arrivée de Duniter 1.6, vous pouvez désactiver BMA avec la commande suivante :

duniter config --nobma

Vous pouvez aussi effectuer cette opération dans Duniter UI > Network :

Puis de redémarrer votre nœud.

Je vous conseille de réaliser cette opération pour les tests, surtout si vous possédez une machine ARM qui supportait mal Duniter 1.5.

Vous mettre derrière une routeur 3G/4G

C’est un test important à réaliser si vous en avez la possibilité. Bien sûr je l’ai déjà fait moi-même, Duniter peut fonctionner derrière un téléphone 4G en P2P. Mais je vous invite à faire le test vous aussi.

Bons tests !

2 J'aimes

3 messages ont été déplacés vers un nouveau sujet : Livrables ARM en attente : Raspberry PI 3 HS

Test lancé de mon côté :

  • /network/ws2p/info fonctionne bien :
 curl desktop.moul.re:10901/network/ws2p/info
{
  "peers": {
    "level1": 0,
    "level2": 0
  }
}⏎
  • par contre, network/ws2p/heads ne fonctionne pas :
curl desktop.moul.re:10901/network/ws2p/heads
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /network/ws2p/heads</pre>
</body>
</html>

Je remarque qu’il faut l’upnp-ws2p d’activé pour que les requêtes sur BMA fonctionnent.

L’UPnP est désactivé sur ma box. Ça doit être un bug du côté de Duniter.

C’est très curieux, mais ça s’expliquerait si le code source n’est pas au dernier commit 1316c5b5.

Je ne pense pas, pourrais-tu partager ton fichier de conf ? Et vérifier que tu es bien au dernier commit, ça expliquerait des choses.

Mon code est bien au dernier commit.

git log -2
commit 1316c5b58bf906a28ccc40cf980570c6ee0303a

J’ai tenté un rm -rf node_modules/; yarn car des fois les yarn upgrade ne passe pas bien, et j’ai toujours le problème.

Voici la fin de mon fichier de conf :

 "ws2p": {
  "uuid": "478ca78d",
  "upnp": true
 },
 "nobma": false

Essayes quand même un yarn run tsc pour t’assurer de bien avoir le dernier code JavaScript dérivé du TypeScript. Aussi, fais d’abord un :

duniter stop

Puis tentes un :

duniter direct_start

J’ai l’impression parfois que le restart ne va pas toujours relire les fichiers du disque.

Ok, avec ces commandes ça fonctionne.

1 J'aime

Je confirme, toi et @vincentux êtes connectés à mon nœud !

2 J'aimes

Nœud de test lancé en mode avancé (WS2P public), servez-vous :
http://g1-test.elois.org:10900/network/peering

N’étant plus membre, je viens aussi de renouveler ma demande d’adhésion et… ho je suis déjà redevenu membre c’est rapide !

EDIT : wow ça fonctionne nickel pour l’instant, je suis déjà connecter a 5 nœuds en WS2P : @cgeek, @mmpio et deux noeux mirroirs. Par contre le 5ème c’est moi-même, c’est normal ?

// http://g1-test.elois.org:10900/network/ws2p/heads

{
  "heads": [
    {
      "message": "WS2P:HEAD:D7CYHJXjaH4j7zRdWngUbsURPnSnjsCYtvo6f8dvW3C:55021-00005A12674BFDEC185C6526410D2EA49C6CD1CC355F6BBCEAAF7E945AC581F6",
      "sig": "j7lBhBkobTwnfvJCgtzBKSg/ldNivSpYVUaVkPIXZZXY98KYzP9xHMaksST8HpX55EDcdiVIovqRnkc7tTYjDQ=="
    },
    {
      "message": "WS2P:HEAD:FoW1mRs6P7vHHLoetiq55rYtVkCboCM9af7B5t51NMFN:55021-00005A12674BFDEC185C6526410D2EA49C6CD1CC355F6BBCEAAF7E945AC581F6",
      "sig": "lE6+KreNO9M0JBsr8+IFL2w3CXc3OX/ZvxHVMvhMHQudBLufMR1aOkhANNSdbTpOG1JcI/wxJFMPTw3TId7zBQ=="
    },
    {
      "message": "WS2P:HEAD:3dnbnYY9i2bHMQUGyFp5GVvJ2wBkVpus31cDJA5cfRpj:55021-00005A12674BFDEC185C6526410D2EA49C6CD1CC355F6BBCEAAF7E945AC581F6",
      "sig": "8QdlDD+bK5KpHRFAPUvsxvrPrDoTrzgEhr57MtUQ4xEhP5KYMqcIcwpMizrK+hVQNizxeCmi42Ut7FWOAy3mAg=="
    },
    {
      "message": "WS2P:HEAD:HVbVWiHyjCr9KNQfPXT2qXzck4xoShEggckGGtNN7JFq:55016-000096DA44DB7EAA06E9A284EBEE13E30E0A6A8EE3B29E85D695A31422152C63",
      "sig": "GyPou8T3ctn6x6LELBfExTAos5zdROP2ggEkAGfmptCGYv5J6lErzJs3YatGtYX3SiP7wKt+gUPKMahchHy8Cw=="
    },
    {
      "message": "WS2P:HEAD:mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg:55021-00005A12674BFDEC185C6526410D2EA49C6CD1CC355F6BBCEAAF7E945AC581F6",
      "sig": "f5f6czQ8YdYPeTFIbjsosubiKsivdAa4WESnKxw7FRH8/LTzFE1oj7vN4tsHV1TKyjw0QAEGzefr8ZceTiRQDw=="
    }
  ]
}
1 J'aime

Alors je ne l’ai pas fait exprès … mais effectivement ton nœud peut se connecter à lui-même.

Je l’autorise car ça permet une vérification du bon fonctionnement du Niveau 2 (accès symétrique à ton nœud), mais je vais quand même ajouter un correctif pour rendre ce lien « non-prioritaire » par rapport aux autres nœuds connectés, afin qu’une nouvelle connexion plus légitime élague celle-ci et en prenne la place.

J’aime bien cette dénomination, WS2P Privé/Public. Je vais te l’emprunter si tu veux bien :slight_smile:

1 J'aime

J’ai remarqué un bug avec l’option --ws2p-remote-host : Duniter transforme la valeur donnée en nombre, et donc si vous donnez une IP il ne va prendre que la 1ère valeur pointée (ex. : 57.89.51.22 => 57).

Si vous utilisez cette option, veillez à bien mettre la bonne valeur dans le fichier de configuration ~/.config/duniter/duniter_default/conf.json (ou autre répertoire pour Ğ1-Test), section “ws2p”.

Tu m’as fait découvrir un autre bug : si seul WS2P Public est activé, c’est comme si le nœud était totalement privé. Parce que dans ce cas, le document de pair ne contient que des entrées WS2P (une, en fait), or Duniter refuse les documents de pair qui ne déclarent pas une interface BMA.

Ceci sera corrigé pour la 1.6 officielle bien sûr. Une fiche de pair doit contenir au moins une interface, mais peu importe sa nature.

Ça me fait penser a la synchronisation, aujourd’hui il faut ce synchroniser en bma, est il envisageable de faire la synchro en ouvrant une connexion WS2P ? (sur un public ou sur un nœud privé par lequel on est invité).

Oui c’est possible, par contre je n’ai pas développé cette fonction car d’une part je n’ai plus de temps, et aussi WS2P nécessite de s’authentifier et il y a des listes de priorité, on est jamais certain de pouvoir se connecter au nœud ciblé.

En fait ça demande pas mal de conditions pour fonctionner. Mais c’est possible.

Noeud mis à jour, et configuré avec les paramètres suivants :

./bin/duniter config --ws2p-noupnp --ws2p-port 7777 --ws2p-host 37.187.192.109 --ws2p-remote-port 7777 --ws2p-remote-host 37.187.192.109

J’ai un message bizarre quand j’accède aux URL WS2P :
http://37.187.192.109:7777/network/ws2p/heads

Upgrade Required

Par contre, BMA fonctionne bien : http://gtest.duniter.inso.ovh/blockchain/current

J’ai le même message :confused:

Oui, certainement parce qu’il faut utiliser le nom de domaine :

http://gtest.duniter.inso.ovh/network/ws2p/heads

J’ai mis comme nom de domaine l’ip… ca veut dire que sans NDD, W2SP ne fonctionne pas ?

Non c’est BMA. Tu es sous YunoHost ?

Par contre je ne sais pas si ton nœud a bien WS2P de fonctionnel (même en simple mode Privé, sans s’exposer via un endpoint). Je pourrais vérifier demain.