ĞDev5 smiths

Hello, je viens de publier 2 nœuds : 1 rpc et 1 validateur, visibles en Télémetrie et en cours de synchro. Néanmoins je suis un peu dubitatif sur leur rôle respectif.

En termes de conf, la grosse différence c’est que mon nœud validateur possède, outre une node.key différente, des options de lancement en plus :

--rpc-methods=Unsafe
--validator

L’option --validator coule de source.
Mais pour --rpc-methods=Unsafe, là j’ai du mal.

Ne serait-ce pas plutôt au nœud mirroir (le RPC) justement d’exposer l’API RPC (et ne PAS le faire pour le validateur), et de surcroît concernant les méthodes Unsafe ?

Je n’ai pas encore eu le temps de creuser ces notions, peut-être que tout ceci s’explique.

1 Like

C’est bien normal : les méthodes “unsafe” sont celles à ne pas exposer publiquement (par exemple tu t’y connectes avec un pont ssh ou un vpn). Ce sont les méthodes RPC qui permettent de générer des session keys par exemple, donc uniquement pour un forgeron. De plus, le nœud forgeron doit idéalement être sur une machine qui lui garantit d’avoir toujours les ressources nécessaire pour au moins égaliser la machine de référence.

Pour le nœud RPC, c’est le seul qui doit exposer publiquement une API RPC (donc sans les méthodes unsafe qu’il ne faut pas exposer publiquement), et tu peux en plus le configurer pour être un nœud archive, c’est-à-dire stocker tous les états depuis le début (et pas uniquement les blocs = transitions d’état). Les deux communiquent via la lib p2p, et c’est la seule interface avec le monde extérieur pour un nœud validateur.

2 Likes

D’ailleurs, cette consigne vaut pour le nœud miroir, mais pour le nœud validateur, il faut n’écouter que sur localhost, sauf pour le port p2p. (d’après ce que j’ai compris)

1 Like

C’est ce point qui n’est pas clair, d’ailleurs @Pini a tiqué aussi (et précisément tu cites ce message juste ensuite).

Je viens de retirer l’exposition RPC, mais comment exposer le port 30333 ? (ou 30334 dans le post initial)

Je ne constate aucun transfert de port via UPnP pour de l’IPv4 derrière ma box, donc je ne vois pas bien comment mon nœud validateur peut être contacté publiquement.

Alors certes il tourne, il va certainement contacter les nœuds validateurs accessibles publiquement. Mais le mien, à mon avis, est inaccessible.

1 Like

Ça, je ne sais pas comment fonctionne libp2p, je crois que c’est @Pini qui a le plus creusé la question en bossant sur l’entrypoint docker (cf DUNITER_PUBLIC_ADDR and DUNITER_LISTEN_ADDR in Duniter | Configure your node (Docker)).

Mais peut-être que si tu es en mesure d’initier la connexion sans être capable de recevoir une connexion entrante ça suffit (et ce serait logique finalement, question sécurité et surface d’attaque). Si c’est bien ça, le nœud validateur ne doit rien exposer du tout, mais juste avoir des bootnodes vers des noeuds RPC pour la découverte du réseau. Il faut se renseigner.

C’est tout le problème en effet. Et ça se constate sur la télémétrie où tout le monde devrait afficher autant de peers que le nombre de noeud - 1.

Pour résoudre ce pb il faut impérativement :

  • que le port P2P soit accessible depuis l’externe
  • configurer DUNITER_PUBLIC_ADDR avec le bon port.

Pour ma part j’utilise un reverse proxy sur le port 443. Ce qui donne :

DUNITER_PUBLIC_ADDR=/dns/<dns-name>/tcp/443/wss

Attention, dans le cas d’un noeud validator il faut également forcer l’adresse d’écoute en websocket (sinon il écoute par défaut en direct TCP) :

DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333/ws
1 Like

Justement, c’est ça que je ne comprends pas dans ce que tu dis : pourquoi empêcher le noeud validateur d’écouter directement sur TCP ? Quel intérêt à wrapper ça dans un ws ? Dans mon idée, on devrait écouter en natif TCP sur un port au choix (et bien préciser DUNITER_PUBLIC_ADDR). Mais je n’ai pas fouillé, je n’ai pas lu d’indications de bonnes pratiques et de sécurité.

Ça c’est un choix perso : j’ai une 15aine de services qui tournent sur ce serveur et je ne veux pas me prendre la tête a gérer un port pour chacun. Donc reverse proxy. Mais techniquement rien n’empêche de mapper le port P2P en direct sur l’hôte. La conf du endpoint (DUNITER_PUBLIC_ADDR) reste toutefois nécessaire la plupart du temps. Par ex si le port P2P est mappé sur le port 30334 de l’hôte :

DUNITER_PUBLIC_ADDR=/ip4/<mon_ip>/tcp/30334
1 Like

Ok, merci pour cette info que c’est un choix perso. Je vais avoir un autre choix perso ><
J’ai un peu cherché, voici le guide de bonnes pratiques pour Polkadot :

Par contre, je vois pas grand chose sur l’aspect réseau :confused:

1 Like

Here is my ansible config for a Duniter node based on its role (mirror / archive / validator):

# Duniter {{role}} node only

version: "3.5"

services:
  duniter-{{role}}:
    image: {{image}}
    restart: unless-stopped
    ports:
      # prometheus endpoint
      - 127.0.0.1:9615:9615
      # rpc via http
      - 127.0.0.1:9933:9933
      # rpc via websocket
      - 127.0.0.1:9944:9944
      # public p2p endpoint
      - 30333:30333
    volumes:
      - duniter-data:/var/lib/duniter/
    environment:
      - DUNITER_CHAIN_NAME=gdev
      - DUNITER_NODE_NAME={{duniter_node_name}}-{{role}}
      {% if role=="validator" -%}
      - DUNITER_VALIDATOR=true
      {% endif -%}
      - DUNITER_PRUNING_PROFILE={% if role=="mirror" %}default{% elif role=="archive" %}archive{% elif role=="validator" %}light{% endif +%}
      - DUNITER_PUBLIC_ADDR=/dns/{{domain}}/tcp/30333
      - DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333

volumes:
  duniter-data:

This way, I can update the docker image quite easily on multiple dockerfiles :smiley:

2 Likes

Effectivement, c’est bon pour moi :slight_smile:

2 Likes

J’ai l’impression que mon nœud est bloqué dans sa synchro, ça fait 2j que mes essais mènent à ce blocage plus ou moins rapidement (ici je suis au bloc 1,194,752).

Cela vous est-il déjà arrivé ? Que faites-vous pour contourner ?

Édit : bon j’ai redémarré ça semble être débloqué.

Je n’ai eu de que très rares blocages. En fait un seul il me semble. Et c’est arrivé quand j’ai poussé mon serveur un peu trop loin en charge avec d’autres tests de services en parallèle. Sinon ça tourne tout seul avec uptime de plusieurs semaines sans souci.

@davidbp845 you might be interested in having a Duniter v2 node on the ĞDev5 network. The documentation is available here: Duniter | [alpha] Duniter v2. Tell me what you think about it!

Thanks a lot Hugo. I’ll read it and hope I can do it.
I’m experiencing trouble with my v1 node now, and first I would like to see if I can fix this. Then I will try to have a v2 one!

1 Like

Summary for @guenoel of the smith:

smith declared in genesis

pseudo identity index address
poka 6951 5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn
elois 6317 5CtmAELWQ6FGDrAfsfVbGe4CXW4YrpNRTVU27eWzSE6J8ocU
HugoTrentesaux 2453 et 2457 5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz
tuxmain 7139 5D2DnScFpxoEUXDwZbJH18tRsQMygBSh1F6YCcWvTYzKY2W7
1000i100 1 5CCrBS67BrpBx3ihGHc72HZp3eHHbETxWFuNfwbbdoGSJFN8
ManUtopiK 3594 et 3595 5DUjwHRqPayt3tAZk1fqEgU99xZB9jzBHKy2sMSTNcc7m9D1

(pour les identités en double, cf Sanity tests - #6 by HugoTrentesaux)

smith membership requests

bloc pseudo identity index address
632386 pini 7228 5GBVhdJUdsGhxozu6R8X6x2pTZvuuW46s7JSU4tiW7Zd3WmY
917080 hugo 2457 5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz
917151 poka 6951 5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn
1491634 AAAAA 7237 5E58CLNXPFpBWrygp3ry8HyS2hiuQpRuXbZFUaTq7q9gG3Vv
1606142 vit 7174 5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai
2 Likes

We only have three smith on the ĞDev network (@daigongen, @tuxmain, @Pini) and the blockchain is experiencing latencies because @poka is offline. @vit and @HugoTrentesaux should become smith again, and we should train other smith.

Each time I restart the Validator node it stays stuck at an old block.
Dont know how to unlock this situation.

Is there an option to tell him which node to sync to or force re-sync like V1 ?

This is weird. I didn’t experience this at all with my nodes.

Try to remove its data and sync again. It will sync with the bootnodes in the genesis file.