Nouveau service DNS

Bonjour,

J’ai noté que lors de la première utilisation du logiciel duniter, il fallait « synchroniser » son noeud avec un des noeuds dejà existant. Or, cette opération sollicite pas mal la cible choisie lors de cette opération. J’ai déjà eu l’occasion d’aborder brièvement le sujet et je me propose donc d’implémenter un petit service DNS externe pour répartir la charge que constitue ce besoin d’aspiration initial de la blockchain entre les noeuds du réseau p2p déjà existants. La finalité serait de proposer lors du premier lancement la synchronisation à partir d’une adresse générique (pool.duniter.fr par ex.) qui soit une adresse « virtuelle » de répartition entre les noeuds.
Voilà le schéma, la partie en bleu représente ce qui je me propose de développer :

La partie en noir, djbdns+sync2 est un montage simple de DNS réparti que j’utilise déjà. Ce sont deux logiciels libres éprouvés et fiables. Bon certes, ce système ne sera qu’un round-robin entre les noeuds, mais c’est déjà un début.
En effet, sachant que plus la blockchain va grossir (et le nombre de monnaies se multiplier), ça risque de devenir un gros souci…
Je vais commencer par monter un POC sur un de mes domaines, mais je souhaite d’ores et déjà débattre un minimum sur la façon de tenir à jour la liste des adresses IP retournées par ce serveur DNS.
Ce nouveau service (dns_updater) peut se baser sur la blockchain et renvoyer tous les noeuds qui sont actifs, mais je me demande comment y ajouter un système d’option d’adhésion (opt-in). En effet, certains membres ne souhaitent peut-être pas être sollicités sur les sync id’initialisation. D’autres au contraire, sont peut-être là pour ça…
Donc merci pour vos avis, conseils… etc

Je pense qu’il est impossible de faire pousser des plantes sans une première graine.
Comme il est impossible de télécharger sur un réseau pair à pair, tel le BitTorrent, un fichier sans avoir le torrent ou le magnet.

Donc, le premier accès à un réseau pair à pair est centralisé, puis devient décentralisé par découverte des autres nœuds.

Donc, je pense qu’ajouter ce service DNS est la première graine. Mais si cette première graine n’est pas germable (pas accessible), le réseau n’est plus accessible. Comme pour rejoindre la monnaie via un nœud et qu’il n’est pas accessible.

Après, je me trompe peut-être, ça peut en effet être plus pratique.
Mais, je pense que c’est viser trop loin, trop top. Autrement dit, mettre la charette devant les bœufs.
Le mieux serait de contribuer au cœur ou aux clients de Duniter.
Je ne pense pas les autres crypto-monnaie aient implémentées cet outil. Si c’est le cas, ça serai bien de le leur piquer.

On peut dire qu’un réseau Duniter a son système DNS interne équivalent étant donné qu’il a des fiches de pairs indiquant si les nœùds sont up ou down.

Par exemple, avec le bitcoin, le nœud est automatiquement connecté et synchronisé à la monnaie.
Plusieurs adresses de nœuds doivent être écrites en durs au cas où l’une d’elle venait à être inaccessible.

Cette dernière solution me parraît être un bon compromis très simple :

  • Synchronisation automatique, test si les nœuds dans la liste en dur sont accessible. Synchro.
  • Synchonisation manuelle : choix du nœud de synchronisation.

Le réseau Duniter, constitué de ses machines membres comme non-membres, n’est pas connu en blockchain. Tu dois donc les connaître à l’avance, ce pourrait être une liste d’adresses IP, tout comme l’information peut provenir d’un noeud local qui lui-même est connecté au réseau et maintient une liste des noeuds connus, filtre sur les noeuds membres, etc.

AUssi comme je disais dans ce ticket GitHub, il est tout à fait possible de proposer en plus un champ de saisie manuel lors de la synchronisation, de façon à ne pas brider la liberté de l’utilisateur d’utiliser une adresse de son choix.

Personnellement donc, j’aime bien l’idée. Tu as plein de possibilités pour trouver des adresses à donner, le plus simple étant certainement d’avoir des adresses fixes au départ.

Il y a une difficulté supplémentaire, c’est la disparité des ports entre les noeuds, le dns ne peut proposer que des listes d’adresses IP :disappointed: c’est pas trop la bonne solution du coup.

Je vous aiderai bien sur le core, mais node, js et moi ça fait trois… Donc, j’essaye de trouver des “services” qui pourraient vous mettre un peu d’huile dans votre moteur. Avant de commencer à toucher au code de sakia, il faut que je me forme un peu plus sur le protocole. Donc comme je suis plutôt lent, je souhaitais commencer par écrire un client python qui puisse parcourir l’ensemble des noeuds en vue de proposer des “services” autour de duniter (dns, annuaire, vente en ligne…). Pourquoi pas un plugin de paiement duniter pour PrestaShop, ou des trucs comme ça… Sinon, tester et vous casser les pieds avec mes idées à la noix, c’est à peu près tout ce que je sais faire…

Pour en revenir au sujet, pour ajouter juste un menu déroulant avec quelques volontaires, le plus simple serait finalement d’utiliser un fichier texte tout bête. Il fera partie des “sources” sous git et les volontaires qui souhaitent s’ajouter à (ou se retirer de) la liste, pourront le faire par une demande de push sur GitHub. Il suffit de créer une page qui explique comment faire aux éventuels volontaires…
Bien entendu, je suis volontaire pour faire partie de la liste, qu’en pensez vous ?

1 Like

Ah oui pourquoi pas, ce sera à mettre dans le code source de duniter-ui, et l’avantage c’est que tout le monde peut faire une PR pour ajouter le sien.

Quant à “trouver quoi faire pour aider”, si c’est bien ce que tu veux, alors il est déjà possible :

  • de réaliser des scripts, peu importe le langage, qui extraient des informations de la blockchain (on a encore rien analysé de la toile testnet, ni même des transferts opérés, de l’évolution de M/N, etc. C’est en plus un excellent moyen de débuter avec l’API et le protocole, et même d’y trouver des problèmes !
  • de faire des documentations utilisateurs pour duniter CLI et Desktop : ce sont 2 tickets GitHub en attente
  • d’organiser une FAQ (il en existe une un peu obsolète sur fr.duniter.org, puis d’autres éparpillés)
  • de faire des billets de blog sur le site principal
  • de tester Sakia/Cesium/Duniter
  • de développer des clients (comme tu le proposes)
  • de développer des outils d’analyse du réseau (supervision, agrégation d’informations sur l’état du réseau)

Ce ne sont que quelques possibilités, tu peux bien imaginer ce que tu veux ! Mais c’est vrai qu’un petit outil de surveillance et d’analyse du réseau via une application web serait vraiment appréciable, car aujourd’hui je n’ai pas bien idée de son efficacité, ni de retour immédiat sur les noeuds qui s’éteignent, balancent de l’information, etc.

Après plus tu t’appropries le protocole, et plus les idées de développement fleurissent. Je pense vraiment que réaliser 2-3 scripts qui extraient des données de la blockchain permettent de tirer une certaine satisfaction tout en apprenant à utiliser l’API, le protocole, et en plus ça prépare de belles informations pour un billet de blog !

Je pense qu’il y a de quoi faire, déjà. :slight_smile:

2 Likes