cgeek

6. Code - Tutoriel de développement

Introduction

Dans ce chapitre, nous allons visualiser et commenter les éléments importants du code de Duniter afin que vous puissiez mieux vous repérer dans le rôle de chaque élément.

Le but n'est pas de décrire chaque élément du code, mais juste ses grandes lignes. Les éléments non décrits sont jugés périphériques, et peuvent être étudiés ultérieurement par vos soins en lisant directement le code.

Ce chapitre est théorique. Toutefois, vous pouvez placer des points d'arrêt dans les fichiers de code pour explorer ce qui est décrit.

Table des matières

  1. Introduction
  2. Le fichier server.ts
    1. Propriété server.conf
    2. Propriété server.dal
    3. Propriétés de service
      1. server.BlockchainService
      2. server.IdentityService
      3. server.MembershipService
      4. server.TransactionService
  3. Le fichier fileDAL.ts
    1. Des méthodes pour l'accès aux données
    2. Des objets pour un accès libre
  4. Les services
    1. Le fichier BlockchainService.ts
    2. Les autres fichiers de service

Le fichier server.ts

C'est LE fichier central de Duniter, d'où sont accessibles toutes les données et toutes les logiques propres au protocole Duniter.

uml

L'objet server est transmis à tout module, aussi bien pour une exécution de commande que pour un fonctionnement en mode service.

Cet objet est donc disponible partout dans l'application, ainsi que les sous-objets portés par celui-ci (dal, conf, BlockchainService…).

Propriété server.conf

Cette propriété contient la configuration chargée au démarrage de Duniter, puis éventuellement modifiée au cours de l'exécution par n'importe quel module. Toute partie de l'application a en général accès à cette configuration.

Propriété server.dal

Une instance de fileDAL.ts. Permet l'accès à l'intégralité de la base de données de Duniter.

Il s'agit de la propriété la plus utilisée de l'application.

Propriétés de service

server.BlockchainService

Accès au service de gestion de la blockchain, afin d'ajouter ou retirer des blocs. C'est ce service qui s'assure du respect du protocole Duniter lors de l'ajout d'un bloc en contrôlant sa forme et son contenu.

server.IdentityService

Accès au service de gestion des identités et certifications en piscine.

server.MembershipService

Accès au service de gestion des adhésions en piscine.

server.TransactionService

Accès au service de gestion des transactions en piscine.

Le fichier fileDAL.ts

Contient la classe centralisant l'accès à toutes les données de l'application.

Des méthodes pour l'accès aux données

Cette classe contient des méthodes facilitatrices pour accéder à des données précises.

Par exemple la méthode getMembers() renvoie la liste des membres contenus dans la base de données. Mais obtenir cette information n'est pas si triviale étant donné qu'il faut explorer la blockchain et faire quelques jointures en base de données. Cette méthode masque toute cette complexité.

Des objets pour un accès libre

Mais afin de permettre à tout module (même encore inconnu) d'avoir accès à la base de données, la classe du fichier fileDAL.ts contient également des membres permettant d'exécuter directement des requêtes sur la base de données :

Les services

Le fichier BlockchainService.ts

C'est le fichier central d'accès à la blockchain. Ce fichier permet d'ajouter des blocs et d'en retirer (utile pour la résolution de forks).

Le service BlockchainService manipule lui-même un autre objet BlockchainContext, une sorte de cache pour l'objet fondamental manipulé : la DuniterBlockchain.

uml

L'objet DuniterBlockchain est celui qui implémente in-fine le protocole Duniter, en s'assurant du respect des règles lorsqu'il reçoit un nouveau bloc mais aussi en générant les données exploitables (les INDEX) lors de l'analyse, puis de l'ajout du bloc au sein de la blockchain complète.

Les autres fichiers de service

Les fichiers IdentityService.ts, MembershipService.ts, TransactionService.ts et PeeringService.ts servent pour leur part à vérifier et accepter en piscine les nouveaux documents respectivement d'identité et certification, d'adhésion, de transaction et de fiches de pair.

Aucun de ces services n'écrit dans la blockchain directement, mais en piscine : c'est une zone temporaire pour les données en attente d'être inscrites officiellement dans un bloc.

Passer à la suite du tutoriel : Chapitre 7 : Base de données.