A la demande d’@elois j’ai commencé à brancher Hydra sur le nœud rust. Je crée ce sujet pour le suivi et les questions que cela fait émerger. Je mettrai à jour cette description pour que ça reste une synthèse à jour de ce sous-projet.
Hydra est un framework pour extraire des données d’un nœud substrate et les mettre à disposition via une API GraphQL. Cela permet de récupérer des données qui ne sont pas accessible dans l’état actuel de la blockchain donc qui nécessite de reparcourir les blocs pour extraire ces données. Ex : liste des DU reçus par un utilisateur.
Hydra est composée de plusieurs éléments, regroupées en 2 grandes parties :
- « l’indexer » : l’indexation des données de la blockchain au fil de l’eau que l’on peut ensuite interroger avec une interface GraphQL
- « le processor » : la création de vues (views) à partir de ces données bas niveau et de fonctions de mapping pour les convertir en données métier, qui sont elles aussi accessible via une (autre) interface GraphQL.
Ces 2 parties sont autonomes. Le processor a besoin d’un indexer mais il n’a pas besoin forcément d’en avoir un dédié. On doit fournir à l’indexer la définition des events qu’il va rencontrer sur la chaîne (sinon il plante) et qu’il va ainsi pouvoir référencer. Donc l’indexer est spécifique à une blockchain. Dans notre cas de figure, je pense qu’un processor aura son propre indexer, pour ne pas dépendre d’un composant distant pour pouvoir extraire des données.
Dans un premier temps, je vais essayer de permettre la récupération des infos suivantes (défini par @elois ici) :
- L’historique des transactions d’un compte (émises et reçues)
- L’historique des DU créé par un compte
- La liste des certifications émises et reçues par une identité, avec les méta-données qui vont bien (notamment date d’expiration de la certif).