Projet étudiant autour de duniter

Bonjour tout le monde,

Dans le cadre de la formation à l’IMT Atlantique, nous sommes en train de préparer un cours sur les systèmes distribués, et nous voudrions proposer un projet autour de Duniter pour montrer certaines problématiques sur cet aspect. Dans l’idéal, les futurs élèves pourraient contribuer au projet dans le cadre de cette formation. Néanmoins, ce sont d’abord les aspects pédagogiques qui guideront le module, avant l’aspect « contributions à un logiciel libre ». Un de nos objectifs serait d’allier les deux : se pencher sur les problématiques de distribution tout en apportant des contributions au projet.

Du coup, nous avons quelques questions :

  • Est-ce qu’il y a des chantiers en particulier pour ce créneau (on pense surtout aux implémentations des nœuds) ?

  • Est-ce qu’il y a un point de départ (documentation, tuto) pour expliquer les choix architecturaux, les technologies, les solutions à certains problèmes de distribution, etc. ?

On sait qu’il y a de la documentation ici [1]. Mais est-ce qu’il y aussi des articles sur le forum ou ailleurs qui décrivent ces choix, et que vous pourriez nous suggérer ?

Merci,

– Santiago

[1] https://git.duniter.org/documents/rfcs/

6 J'aimes

Il y a un livre blanc (white paper chez les Angles et les Saxons) en préparation.

Lequel WP est basé sur les articles cités dans le premier message, si vous voulez donner de la doc finie à vos étudiant.ê.s.

OK, super. Merci par vos réponses !

On peut s’appeller au téléphone pour en discuter si tu veux. Tu peux me joindre au 06 49 88 18 21 :slight_smile:

Ah super, merci ! Je t’appellerai dans les prochains jours.

1 J'aime

J’ai eu un long appel téléphonique avec @Santiago et Antoine à propos de ce projet étudiant sur Duniter qui aurait lieu d’octobre 2020 à février 2021 avec un pic d’activité en janvier 2021. Il s’agirait comme dit plus haut de découvrir les bases d’un système distribué par l’expérimentation en implémentant un nœud Duniter minimal.

Ce projet permettrait aux étudiants d’aborder les problématiques des systèmes distribuées sous un angle à la fois théorique et pratique (génie logiciel). Pour le projet Duniter, ce serait une occasion de mieux documenter et vulgariser son fonctionnement technique, et peut-être d’accueillir des contributions par la suite. Dans tous les cas, ça permettrait de soulever un peu de poussière pour redonner un coup de fraîcheur au projet !

Nous avons parlé entre autres :

  • du protocole duniter (DUP) constitué du protocole blockchain DUBP et du protocole réseau DUNP (BMA, WS2P)
  • de l’architecture générale d’un nœud Duniter (blockchain, réseau, pool)
  • de la monnaie de test ğ1-test
  • de l’histoire générale de Duniter, DuniterPy, Silkaj, Dunitrust

D’ici octobre, Santiago et Antoine auraient besoin de quelques indications pour mettre en place les ressources pédagogiques nécessaire au projet. La plupart de ces éléments existent déjà mais la discussion permettra de les réunir ici et d’aider à l’appropriation de certains concepts et à la prise en main de certains outils.

Nous allons garder trace de nos discussion sur ce forum, ce qui permettra de trouver les informations plus facilement par la suite. À tout moment un sujet public peut être rendu privé si nécessaire, le caractère public des discussions ne doit donc pas dissuader de l’utilisation du forum. Souvent, il suffit de peu pour débloquer une situation, et souvent, ce peu a déjà été abordé auparavant. Le forum permet de garde trace de ce peu et de le retrouver via la fonctionnalité de recherche !

@elois, je suis prêt à investir beaucoup de temps sur ce projet, et à ne te solliciter que lorsque cela est nécessaire, de plus Santiago et Antoine assureront avec sérieux l’encadrement du projet, ce qui nous permettra d’être efficace dans l’accompagnement. N’hésite pas à me communiquer toute crainte à ce sujet de manière à ce que je puisse anticiper au mieux les besoins de tous.

@cgeek, une des choses dont nous aurons probablement besoin est de savoir écrire un bloc genesis. En effet, l’environnement de travail sera probablement coupé du réseau extérieur et nécessitera une blockchain propre. Santiago a déjà essayé avec tes indications trouvées sur le forum, mais n’est pas parvenu. Plus détails @Santiago ?

Par ailleurs, @Santiago avait essayé sans succès de faire fonctionner Silkaj. Peux-tu signaler ton problème sur ce forum de manière à ce que @tuxmain et @Moul puissent t’aider.

5 J'aimes

Il y a quelques mois j’avais fait une blockchain minimaliste en Python : quelques centaines de lignes, codé en une semaine, inspiré de Duniter et de Bitcoin. (bonne gestion des forks même avec 1 bloc/seconde sur une dizaine de nœuds en réseau local, mais pas de TdC, création monétaire par PoW pure et non adaptative)

2 J'aimes

Merci encore @HugoTrentesaux pour l’échange et pour ta disposition !

Pour l’instant, une réponse rapide, avant de pouvoir vous donner les moyens de reproduire le souci sur le bloc d’origine. J’ai suivi les étapes décrites par @cgeek ici : Comment créer le premier bloc ?
J’ai créé 6 identités pour avoir 5 signatures pour chacun (j’ai essayé avec moins, mais le code de duniter peut avoir de règles de la Ğ1 hard-codées e.g. https://git.duniter.org/nodes/typescript/duniter/-/blob/v1.8.1/app/modules/prover/index.ts#L190).
J’ai du modifier cesium pourqu’il accepte de signer même avec un identité qui n’est pas membre.
Mais quand je relance duniter avec gen-root, j’obtiens cette erreur :


2020-07-08T10:14:48+00:00 - info: Block resolution: 0 potential blocks for root block…
2020-07-08T10:14:48+00:00 - error: Unhandled rejection: [object Object]
2020-07-08T10:14:48+00:00 - error: httpCode=400, ucode=2018, message=Wrong new block: cannot make a root block without members

quand j’ai essaye avec gen-root-choose, il ne trouve pas de «newcomers» :

$ sudo -u duniter duniter gen-root-choose --submit-local 1
2020-07-08T11:56:28+00:00 - debug: Plugging file system…
2020-07-08T11:56:28+00:00 - debug: Loading conf…
2020-07-08T11:56:28+00:00 - debug: Configuration saved.
2020-07-08T11:56:28+00:00 - debug: Opening SQLite database « /var/lib/duniter/.config/duniter/duniter_default/duniter.db »…
2020-07-08T11:56:28+00:00 - debug: Now open indexers…
2020-07-08T11:56:28+00:00 - debug: Opening SQLite database « /var/lib/duniter/.config/duniter/duniter_default/txs.db »…
2020-07-08T11:56:28+00:00 - debug: Opening SQLite database « /var/lib/duniter/.config/duniter/duniter_default/peers.db »…
2020-07-08T11:56:29+00:00 - debug: Upgrade database…
2020-07-08T11:56:29+00:00 - info: Block resolution: 0 potential blocks for root block…
2020-07-08T11:56:29+00:00 - error: Unhandled rejection: No newcomer found
2020-07-08T11:56:29+00:00 - error: No newcomer found

Je vois bien les identité dans la base de données (dans la table idty) et les certifications dans certs et certifications_pending.

Est-ce que vous avez une idée ?

Sinon, pour silkaj, si vous dites qu’il marche, je vais d’abord réajuster mon environnement. Je vous donnerai plus d’info par la suite.

2 J'aimes

Super ! Je vais la regarder.

@Santiago, je ne suis pas à même de répondre à la question de la création d’un bloc genesis, mais j’ai eu une conversation téléphonique avec @elois à ce sujet, et apparemment, rien n’a été fait pour faciliter la création d’un tel bloc depuis longtemps, ce qui risque de grandement compliquer la tâche.

Les parties de Duniter prévues pour gérer ça sont au mieux poussiéreuses, et le remplacement de ces parties vétustes n’est pas prévu avant six mois, en tout cas pas avant que la ré-écriture en Rust n’ait avancé significativement.

Par rapport aux RFC, il y a effectivement un grand chantier de ré-écriture à prévoir, mais cela va demander beaucoup de temps. On pourra en reparler à la lumière de l’exemple minimaliste de tuxmain, pour savoir quelles seraient les parties intéressantes pour les étudiants.

1 J'aime

OK. C’est noté. Je continue à creuser là-dessus, afin de voir quelle serait la solution la plus approprié pour le projet étudiant.
Je trouve dommage qu’on ne puisse pas démarrer facilement une blockchain indépendante.

À voir, et merci encore!

trois. Je n’ai jamais créé de bloc zéro, mais j’aimerais m’y pencher.

1- avez-vous envoyé des documents Membership ? Vous n’en parlez pas.
2- le trousseau de votre noeud Duniter correspond-il à une des (futures) identités membres ?
3- le BlockUID des documents Cert, Id, Member correspond-il au hash d’une chaîne vide ?

5 J'aimes
  1. normalement, je l’ai fais avec cesium. je pourrais confirmer s’ils sont bien présents dans la base de données. c’est peut-être une bonne piste, vu l’erreur qui est affichée.
  2. si cela veut dire les clés publique et privée, oui. la clé du nœud correspond à celle d’un des futurs membres.
  3. je suppose que c’est duniter qui doit le calculer.

Merci pour les idées !

1 J'aime

Non, c’est au client de l’indiquer. Duniter n’a pas encore de bloc, donc aucun hash de bloc à fournir.
Mais comme c’est une fonctionnalité qui ne sert qu’au lancement de la monnaie, je pense qu’aucun des clients actuels ne prévoit le cas. Peut-être Sakia, en tout cas pas Silkaj. Je ne sais pas comment ça a été fait pour initier Ğ1.

2 J'aimes

D’un point de vue client, c’est Sakia qui avait permis le lancement de la Ğ1 à l’époque.

La création du premier bloc est un exercice assez complexe qui est très peu débroussaillé d’un point de vue de Duniter que des clients. Il faut surement entrer dans le code des logiciels, voir même générer des documents à la main.

3 J'aimes

C’est parce que l’objectif du projet Duniter était de créer une monnaie libre, d’envergure, pas une multiplicité car cela n’aurait aucun intérêt économique à court/moyen terme.

Mais comme déjà dit, Duniter supporte toujours cette fonctionnalité puisque les tests automatisés réalisent cette tâche en permanence. La piste évoquée par @matograine est assez probable, il suffit de regarder dans la base de données si le blockstamp a pour valeur le blockstamp spécial #0.

4 J'aimes