Bêta-test Duniter 1.6 WS2P

Non je ne l’ai pas prévu dans la RegExp, tu peux tester dans ta console JS :

"WS2P fb17fcd4 g1.duniter.fr/ws2p 443".match(/^WS2P ([a-f0-9]{8}) ([a-z_][a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+) ([0-9]+)( (.+))?$/)
=> null

Par contre il est encore possible de modifier la RegExp en autorisant un path de façon optionnelle :

"WS2P fb17fcd4 g1.duniter.fr 443 /ws2p".match(/^WS2P ([a-f0-9]{8}) ([a-z_][a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+) ([0-9]+)( (.+))?$/)
=> (6) ["WS2P fb17fcd4 g1.duniter.fr 443 /ws2p", "fb17fcd4", "g1.duniter.fr", "443", " /ws2p", "/ws2p", index: 0, input: "WS2P fb17fcd4 g1.duniter.fr 443 /ws2p"]

Je fais bien de ne pas précipiter la release :slight_smile:

1 Like

je vais reprendre la RegExp pour la vue réseau de Cesium

Peut-etre faut il aussi ajouter un attribute remotePath dans la config ?

"ws2p": {
  "uuid": "fb17fcd4",
  "privateAccess": true,
  "publicAccess": true,
  "upnp": false,
  "host": "192.168.0.5",
  "port": 10091,
  "remoteport": 443,
  "remotehost": "g1.duniter.fr",
  "remotePath": "/ws2p"  <-- à ajouter ?
 }

Oui, sinon ça ne peut pas fonctionner vu que le port est adjoint à l’hôte, ça aurait donné “g1.duniter.fr/ws2p:443”.

voila :wink:

Autre question : peut-on considérer que les pubkey qui sont retournés par ws2p/heads ET qui n’ont aucune fiche de pair sont des noeuds privés ?

EDIT: je me pose la question de les ajouter dans la vue réseau de Cesium. Affichés comme les autres endpoints, mais sans les [host+port]

Tu pourrais … en supposant que toute fiche de pair publiée arrive bien jusqu’à toi. Ce qui expérimentalement est vrai, aujourd’hui. Mais il n’y a pas de garantie.

Et il y a aussi le cas de nœuds avec BMA (donc fiche de pair non vide), WS2P privé mais pas WS2P public.

C’est une approximation acceptable je dirais.

1 Like

Pour le moment, j’ai déjà ajouté les endpoints WS2P publiques, comme des lignes indépendantes de la vue réseau. J’exploite /network/ws2p/heads pour déterminer le numero bloc.
Reste inconnue la version de Duniter.
EDIT: Release de la version v0.17.4 de Cesium

Le meilleur endroit me semble être le message WS2P HEAD. En même temps que de propager son HEAD, qui est une méta-information, le nœud propagerait également son identifiant WS2P sur 8 caractères ainsi que le nom du logiciel et sa version.

Ce qui me permettrait aussi d’avoir une meilleur vue ici :

J’aurais alors 2 champs supplémentaires : WS2Pid et Software (nom + version).

Le seul problème c’est que le réseau Ğ1 a déjà commencé a se déployer avec la version 1.6.6 qui va refuser ces nouveaux messages. Ceci dit ce n’est pas très grave, il s’agit seulement d’un message informatif.

2 Likes

Et une version peut-être, du coup ? genre WS2P:HEAD:<version>:...

EDIT: version du format du message

Oui tu as raison, pour la compatibilité ascendante.

Je vais même gérer l’ancienne version pour assurer la rétro-compatibilité. Mais les nœuds en 1.6.7 propageront leur message dans le nouveau format.

1 Like

@cgeek d’ailleurs dans WS2P, est-ce que tu gère la version de duniter, dans la négociation d’ouverture de la WebSocket ?
EDIT: plutot la version de WS2P

Non, ceci dit on peut gérer une négociation différente en démarrant avec un message différent de CONNECT pour indiquer le protocole, car c’est le message initial.

1 Like

C’est grave, docteur ?

2017-09-30T08:29:14+02:00 - info: Block resolution: 0 potential blocks after current#56730…
2017-09-30T08:38:03+02:00 - info: SIDE Block #56733-000007E2 added to the blockchain in 99 ms
2017-09-30T08:38:03+02:00 - info: Block resolution: 0 potential blocks after current#56730…
2017-09-30T08:38:03+02:00 - info: Fork resolution: 1 potential block(s) found…
2017-09-30T08:38:04+02:00 - info: Fork resolution: 1 potential suite(s) found…
2017-09-30T08:38:04+02:00 - info: Fork resolution: HEAD = block#56730
2017-09-30T08:38:04+02:00 - info: Fork resolution: suite 1/1 (-> #56733-000007) revert to fork point block#56729
2017-09-30T08:38:06+02:00 - info: Block #56730 added to the blockchain in 465 ms
2017-09-30T08:38:06+02:00 - info: Fork resolution: suite 1/1 added block#56730-000000B1C37C6C75CC681D8784BE6C29D87BFF744DDBBBE0231EE850F700793B
2017-09-30T08:38:06+02:00 - info: Block #56731 added to the blockchain in 236 ms
2017-09-30T08:38:06+02:00 - info: Fork resolution: suite 1/1 added block#56731-0000013EB5C2380EE403BB8D66E91987BFAD77183F7591DEF6F2F4F4FC18E448
2017-09-30T08:38:07+02:00 - info: Block #56732 added to the blockchain in 230 ms
2017-09-30T08:38:07+02:00 - info: Fork resolution: suite 1/1 added block#56732-00000638578AB1F24F698B49CD4B2793DD21777F591608A173C36CE18B4904E6
2017-09-30T08:38:07+02:00 - info: Block #56733 added to the blockchain in 278 ms
2017-09-30T08:38:07+02:00 - info: Fork resolution: suite 1/1 added block#56733-000007E239A33304A6BCBC19F0E566A99FF98F92AD05EBE8673C0D210B1AB153
2017-09-30T08:38:07+02:00 - info: Fork resolution: suite 1/1 reached HEAD + 3. Now rolling back.
2017-09-30T08:38:09+02:00 - info: Block #56730 added to the blockchain in 112 ms
2017-09-30T08:38:09+02:00 - info: Block #56730 added to the blockchain in 119 ms
2017-09-30T08:38:09+02:00 - info: Block #56731 added to the blockchain in 146 ms
2017-09-30T08:38:10+02:00 - info: Block #56732 added to the blockchain in 156 ms
2017-09-30T08:38:10+02:00 - info: Block #56733 added to the blockchain in 249 ms
2017-09-30T08:38:10+02:00 - error: Unhandled rejection: TypeError: res.clone is not a function
2017-09-30T08:38:10+02:00 - error: TypeError: res.clone is not a function
at Server. (/opt/duniter/server.js:293:66)
at next (native)
at /opt/duniter/server.js:7:71
at __awaiter (/opt/duniter/server.js:3:12)
at Server.emitDocument (/opt/duniter/server.js:292:16)
at BlockchainService.pipe.es.mapSync (/opt/duniter/server.js:169:26)
at Stream.write (/opt/duniter/node_modules/event-stream/index.js:204:20)
at Stream.stream.write (/opt/duniter/node_modules/through/index.js:26:11)
at BlockchainService.ondata (_stream_readable.js:555:20)
at emitOne (events.js:96:13)
at BlockchainService.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at BlockchainService.Readable.push (_stream_readable.js:134:10)
at BlockchainService. (/opt/duniter/app/service/BlockchainService.js:218:22)
at next (native)
at fulfilled (/opt/duniter/app/service/BlockchainService.js:4:58)
at process._tickCallback (internal/process/next_tick.js:109:7)

(Et est-ce que c’est le bon endroit pour indiquer des erreurs ? Ou tu préfères un ticket ?)

Oui un ticket stp :slight_smile:

Non ce n’est pas grave je pense, si ton nœud reste bien synchronisé. Mais mieux vaut consigner l’erreur et y jeter un œil :slight_smile:

Nouvelle version 1.6.8

Fonctionnalités

  • Ceux qui possèdent plusieurs nœuds calculateurs de blocs peuvent désormais s’assurer qu’ils calculeront chacun leur propre preuve à l’aide d’un préfixe de preuve. Utilisation : duniter config --prefix <valeur>. Le champ valeur doit être un entier compris entre 1 et 899.
    Vous pouvez donc avoir jusqu’à 899 nœuds efficaces pour la preuve de travail.
    Fonction développée par @elois .

Correctifs

  • Sécurité :
    • Il était possible de spammer indéfiniment un nœud via le document fiche de pair
    • WS2P : en cas d’envoi répété d’un même document refusé de la part d’une connexion, bannir celle-ci pendant 2 minutes

Lien de téléchargement : Release v1.6.8 · duniter/duniter · GitHub

Cette version n’est pas une Release Candidate, d’autres corrections/nouveautés sont prévues (voir Jalon 1.6).

5 Likes

Je viens d’essayer d’installer la version 1.6.8 sur raspberry (raspbian, c’est une jessie), mais j’obtiens l’erreur suivante, quoi que je fasse, lorsque je lance duniter:

  return process.dlopen(module, path._makeLong(filename));
                 ^

Error: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /opt/duniter/node_modules/sqlite3/lib/binding/node-v48-linux-arm/node_sqlite3.node)
    at Error (native)
    at Object.Module._extensions..node (module.js:597:18)

Visiblement l’environnement dans lequel il a été buildé est différent car ça fonctionnait très bien avant. Des idées?

J’ai eu le même probleme avec l’installation du package car celui-ci n’est pas compatible avec Jessie. Les solutions qui fonctionnent sont l’installation à partir des sources ou de passer le Rapsberry Pi en Stretch.

Oui, ma carte SD ayant rendu l’âme j’ai dû réinstaller un Raspbian que se trouve être en dernière version, sur lequel je fais les build : Livrables ARM en attente : Raspberry PI 3 HS

Je vais downgrader pour la v1.6.9. En attendant, soit tu réinstalles ton Raspi en toute dernière Raspbian, soit tu attends la nouvelle version. Je te conseille cette dernière option, tu feras un parfait cobaye. :slight_smile:

Ok, super! :slight_smile: Faut dire que j’ai eu carrément du mal à suivre ces derniers temps…