# Subsquid (ancienne Hydra): indexer de blockchain substrate exposant des API GraphQL

**URL:** https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074
**Category:** Indexers
**Created:** [29 January 2022 21:08 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074 "2022-01-29T21:08:01Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [29 January 2022 21:08 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/1 "2022-01-29T21:08:01Z")

</div>

[**Squid**](https://github.com/subsquid/squid) remplace Hydra qui n’est plus maintenu.

J’ai réussi à faire fonctionner l’indexer de Squid avec Duniter-v2s en m’inspirant des dockers compose qu’ils donnent dans ce dépôt : [GitHub - subsquid/squid-archive-setup: Squid Archive setups for various chains](https://github.com/subsquid/squid-archive-setup)

**J’ai commité dans le dépôt de Duniter-v2s un docker compose qui permet lancer un nœud duniter-v2s avec un indexer Squid fonctionnel :**

> **[doc: add a docker compose example to setup an hydra indexer (b7b58b4a) ·...](https://git.duniter.org/nodes/rust/duniter-v2s/-/commit/b7b58b4aa5122ae53ca7e6af1bc85defa821cc59)**
>
> Duniter v2 based on Substrate framework

L’API GraphQL de l’indexer est alors accessible à l’adresse `localhost:4010/console`.

C’est une API brute , commune à toute blockchain substrate, et difficile à utiliser.

- L’étape suivante est de générer des définitions typescript: [https://docs.subsquid.io/recipes/generate-typescript-definitions](https://docs.subsquid.io/recipes/generate-typescript-definitions)
- Puis définir les schémas GraphQL métier que l’on veut: [Define a Squid Schema - subsquid](https://docs.subsquid.io/recipes/define-a-squid-schema)
- Puis mettre tout ça dans un nouveau dépot git basé sur ce template: [GitHub - subsquid/squid-template: Squid project template](https://github.com/subsquid/squid-template)
- Enfin créer une (ou plusieurs) image·s dockers de ce processor pour que ceux qui souhaitent fournir l’API métier puisse intégrer ce qu’il faut à leur docker compose.

@ManUtopiK, @kimamila et @1000i100 j’aimerais bien que vous puissiez travailler là-dessus, tout autre développeur typescript est bienvenue 🙂

Je peux vous aider pour le setup et fournir les explications nécessaires, on peut se faire des visio pour ça, tant que c’est le week-end ça me va 🙂

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [29 January 2022 23:00 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/2 "2022-01-29T23:00:16Z")

</div>

Je viens de bidouiller avec le template de Squid, j’ai réussi à faire fonctionner leur processor de base qui indexe l’historique des soldes, mais il ne se base que sur l’event “Balances.transfer”, donc ça ne capte pas les DU.

J’ai rajouté la gestion de l’event “Balances.Deposit” (event lié à la création du DU, et ça maaaaarche !!!  
J’ai l’historique complet et correct du solde de chaque compte 🥳

 ![Screenshot from 2022-01-29 23-54-45](https://forum.duniter.org/uploads/default/original/2X/2/263df03e3a7dda8ca0bfcc3c37f265ac6ec5d922.png)

J’ai créé un nouveau dépôt avec mon fork du Squid template, je savais pas trop où le mettre alors le l’ai placé dans `tools`, hésitez pas à me suggérer un emplacement plus pertinent 🙂

> **[tools / duniter-squid · GitLab](https://git.duniter.org/tools/duniter-squid)**
>
> Duniter-v2s Squid processor

Il n’y a plus grand-chose à modifier pour fournir directement l’historique des transactions et des créations de DU, j’aimerais bien que des dev Js/Ts prennent la suite 😁

@ManUtopiK on se fait une visio ?

---

<div class="post-metadata">

### Author: ![1000i100](https://forum.duniter.org/user_avatar/forum.duniter.org/1000i100/32/825_2.png) [@1000i100](https://forum.duniter.org/u/1000i100)
#### Post date: [30 January 2022 10:30 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/3 "2022-01-30T10:30:13Z")

</div>

Par rapport à faire un proxy BMA vers Gecko, ça te semble jouable et pertinent de faire un indexer squid qui requête BMA histoire que coté client/wallet, ceux qui migrent sur graphql basé sur squid puisse le faire sous peu en sachant que BMA allimente ça et qu’il n’y ait qu’à débrancher BMA et rebrancher substrate pour que le proxy face son office sans besoin de changement coté client/wallet ?

Question subsidiaire :  
tu avais listé un certain nombre de critères pour te baser sur un framework et substrate cochait toutes les cases (maintenu par pas mal de monde, utilisé largement, depuis un certain temps…).  
Le fait que Hydra ne soit plus maintenu et que tu bascules sur squid qui m’a l’air très jeune m’interroge et m’inquiète : ne risque-t-on pas de se retrouver avec la charge d’un existant que l’on maitrise mal et qui serait abandonné par sa communauté d’origine en quelques mois ou au plus d’ici 1 an ou 2 ?

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [30 January 2022 11:18 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/4 "2022-01-30T11:18:22Z")

</div>

Carrément partant pour t’aider sur cette partie-là ! Et oui, ce serait bien de se faire une visio 📹

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [30 January 2022 14:19 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/5 "2022-01-30T14:19:29Z")

</div>

> [@1000i100](#):
>
> ça te semble jouable et pertinent de faire un indexer squid qui requête BMA

Non squid est conçue pour indexer une blockchain substrate, on ne peut pas indexer autre chose avec.

> [@1000i100](#):
>
> Le fait que Hydra ne soit plus maintenu et que tu bascules sur squid qui m’a l’air très jeune m’interroge et m’inquiète : ne risque-t-on pas de se retrouver avec la charge d’un existant que l’on maitrise mal et qui serait abandonné par sa communauté d’origine en quelques mois ou au plus d’ici 1 an ou 2 ?

J’ai rencontré l’un des dev de subsquid dans le cadre de mon boulot, ils ont récupéré les droits sur Hydra, et fournissent des services d’indexation pour beaucoup de grosses crypto, dont Moonbeam pour pou qui je travaille, et Polkadot/Kusama bien sur. Tous les projets qui se basaient sur Hydra se base sur Squid maintenant, c’est les mêmes technos et le même principe, c’est juste un changement de nom.  
Il faut également savoir que Squid est en partie financé par la web3 fondation qui finance Substrate, ils ont beaucoup de fond et tout va bien pour eux.

---

<div class="post-metadata">

### Author: ![1000i100](https://forum.duniter.org/user_avatar/forum.duniter.org/1000i100/32/825_2.png) [@1000i100](https://forum.duniter.org/u/1000i100)
#### Post date: [30 January 2022 15:26 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/6 "2022-01-30T15:26:34Z")

</div>

ça répond pour l’avenir de subsquid. En revanche, ça me semble étrange qu’il soit aussi inconcevable de nourrir l’indexer de subsquid avec autre chose que du substrate… Ou alors ça m’inquiète un peu quand à l’architecture de subsquid.

Pourquoi ne pourrais-je pas, via l’indexeur ou en me brancheant à un autre niveau, allimenter la bdd d’une instance subsquid à partir de données BMA histoire qu’en aval le requetage puisse se faire à l’identique ?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [30 January 2022 15:38 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/7 "2022-01-30T15:38:58Z")

</div>

> [@1000i100](#):
>
> Pourquoi ne pourrais-je pas, via l’indexeur ou en me brancheant à un autre niveau, allimenter la bdd d’une instance subsquid à partir de données BMA histoire qu’en aval le requetage puisse se faire à l’identique ?

Je pense que tu peux, subsquid est conçu en micro-services, tu peux recoder entièrement a ta sauce le micro-service processor qui s’occupe de remplir la bdd PostgresQL, et réutiliser tel quel le micro service qui expose l’API GraphQL donnant accès à la DB PostgresQL.

Mais le schema de la DB va dépendre de ce qu’on veut exposer, et le temps qu’on définisse ça avce les dev des wallet…

Le mieux ce’st qu’on se programme une visio dédiée à ce sujet juste toi, moi et @ManUtopiK s’il est dispo car je sais qu’il connaît bien ure partie des technos utilisées par subsquid (apollo).

---

<div class="post-metadata">

### Author: ![1000i100](https://forum.duniter.org/user_avatar/forum.duniter.org/1000i100/32/825_2.png) [@1000i100](https://forum.duniter.org/u/1000i100)
#### Post date: [30 January 2022 16:18 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/8 "2022-01-30T16:18:39Z")

</div>

@elois @ManUtopiK Dimanche 6/02 à 18h ?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [30 January 2022 16:24 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/9 "2022-01-30T16:24:31Z")

</div>

> [@1000i100](#):
>
> Dimanche 6/02 à 18h ?

ok pour moi

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [30 January 2022 17:25 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/10 "2022-01-30T17:25:13Z")

</div>

> [@1000i100](#):
>
> Dimanche 6/02 à 18h

La semaine prochaine, je ne peux vraiment rien faire. Je serais bcp en déplacement et pas bcp sur l’ordi…  
Il faudrait que je teste tout ça voir dans quelle mesure je peux m’impliquer avec mes connaissances.  
Je suis dispo toute la semaine d’après quand vous voulez. Ça peu être Dimanche 13/02 à 18h. Ou avant, je m’adapte…

---

<div class="post-metadata">

### Author: ![1000i100](https://forum.duniter.org/user_avatar/forum.duniter.org/1000i100/32/825_2.png) [@1000i100](https://forum.duniter.org/u/1000i100)
#### Post date: [30 January 2022 17:30 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/11 "2022-01-30T17:30:37Z")

</div>

Si j’ai bien suivi, @elois préfère réserver les visios aux WE.  
En WE, je peux le 6/02 à partir de 18h, le 12 et 13 (à partir de 14h), et le 20.  
Je me demande s’il ne serait pas pertinent d’inclure @poka aussi.

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [30 January 2022 20:36 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/12 "2022-01-30T20:36:54Z")

</div>

> [@ManUtopiK](#):
>
> Ça peu être Dimanche 13/02 à 18h.

> [@1000i100](#):
>
> je peux le 6/02 à partir de 18h, le 12 et 13 (à partir de 14h), et le 20.  
> Je me demande s’il ne serait pas pertinent d’inclure @poka aussi.

Va pour une visio spéciale subsquid le Dimanche 13 février à 18h !

On peut inviter en 1ère partie les dev des wallet, qui seront donc potentiels utilisateurs de cette API, cc @kimamila @poka @vit et @Moul

Mais j’ai besoin qu’on puisse ensuite (en 2ème partie) se concentrer entre ceux qui veulent travailler sur subsquid 🙂

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [12 February 2022 18:54 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/13 "2022-02-12T18:54:22Z")

</div>

Salut. Je ne pourrais pas être là à 18h. Je vais faire mon max pour être là le plus tôt possible…

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [13 February 2022 16:13 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/14 "2022-02-13T16:13:36Z")

</div>

@ManUtopiK ok on peut reporter, si c’est bon pour @1000i100 , que dites-vous de 19h ?

---

<div class="post-metadata">

### Author: ![1000i100](https://forum.duniter.org/user_avatar/forum.duniter.org/1000i100/32/825_2.png) [@1000i100](https://forum.duniter.org/u/1000i100)
#### Post date: [13 February 2022 16:48 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/15 "2022-02-13T16:48:47Z")

</div>

Va pour 19h, un lien pour la visio ?

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [13 February 2022 16:50 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/16 "2022-02-13T16:50:41Z")

</div>

@ManUtopiK @1000i100 et les contributeurs techniques intéressés par squid, RDV à 19h ici:

> **[Jitsi Meet](https://jitsi.hadoly.fr/duniter-squid)**
>
> Join a WebRTC video conference powered by the Jitsi Videobridge

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [13 February 2022 17:20 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/17 "2022-02-13T17:20:25Z")

</div>

Je suis là ! Merci de m’avoir attendu 🙂

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [13 February 2022 20:41 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/18 "2022-02-13T20:41:13Z")

</div>

Je viens de commiter l’indexation des DU que j’avais ajouté en live, j’en au profité au préalable pour mettre à jour subsquid afin de pouvoir bénéficier de la nouvelle directive `@index` qui permet d’indexer selon le champ de son choix.

Du coup on peut enfin avoir les DU entre 2 blocs 🥳

 ![Screenshot from 2022-02-13 21-38-02](https://forum.duniter.org/uploads/default/original/2X/2/2120e593ee68fbe4a0a0f3fadb5ae91a5941e69c.png)

---

<div class="post-metadata">

### Author: ![ManUtopiK](https://forum.duniter.org/user_avatar/forum.duniter.org/manutopik/32/29_2.png) [@ManUtopiK](https://forum.duniter.org/u/ManUtopiK)
#### Post date: [13 February 2022 21:04 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/19 "2022-02-13T21:04:54Z")

</div>

Pas besoin de 2 explorateurs graphiQL en fait !  
Avec les “remote schemas”, on peut avoir le schema de squid dans le schema de l’indexer :

 ![image](https://forum.duniter.org/uploads/default/original/2X/1/155a61d829c3211c6732df611f489ac8df5e4359.png)

[https://5d08-86-250-213-140.ngrok.io/graphql](https://5d08-86-250-213-140.ngrok.io/graphql) est le endpoint de mon squid, mis dans un pipe ngrok : `ngrok http 4350`.  
L’indexer et squid ne sont pas dans le même container. Il y a peut-être moyen de passer par le network du docker-compose… Je suis passé par ngrok pour faire vite.

Résultat : le endpoint de l’indexer présente les 2 apis :

 ![image](https://forum.duniter.org/uploads/default/original/2X/5/5671b6569cd272d3578c35b57ad2c24cb36398f3.png)

C’est mal de faire ça ?  
Je n’ai pas bien saisi l’intérêt de l’indexer je pense. Juste dispatcher sur des squids en microservices ?  
Si l’indexer doit rester privée, pourquoi ce n’est pas squids qui contient Hasura ?  
Ce serait plus logique d’utiliser Hasura en front (pour profiter des actions, remote schemas, events, cache…) plutôt que l’api de squid construite avec typeorm. De plus, la console d’Hasura est pas trop mal (pas complètement nocode, mais ils y travaillent je crois) pour créer des tables, ajuster les permissions et créer des relationships entre les tables.

Si je veux un nœud pour créer ma propre logique applicative, je vais certainement devoir créer des tables. Hasura permet de créer des relations graphql avec des remotes schemas.  
Par ex, je créé une table `products` dans Hasura :

```auto
id: uuid! # primary key de ma table products
createdAt: timestamp!
...
ownerId: ID! # id substrate d'un account

```

En ajoutant la relation `accountById.id = products.ownerId`, on injecte le type `account` de squid dans le type `owner` de notre table. Et on peut faire une requête graphql :

```auto
query products {
    id
    createdAt
    ...
    owner {
       id
       balance
       historicalBalances
    }
}

```

Ainsi en une requête, je liste mes produits avec les données de la ğ1 de chaque propriétaire de mes produits. C’est carrément plus simple !

Bon, il faut que je prenne le temps de comprendre tout ça un peu mieux. Mais l’intégration d’Hasura dans la stack est bizarre je trouve…

---

<div class="post-metadata">

### Author: ![elois](https://forum.duniter.org/user_avatar/forum.duniter.org/elois/32/1541_2.png) [@elois](https://forum.duniter.org/u/elois)
#### Post date: [13 February 2022 21:16 UTC](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074/20 "2022-02-13T21:16:09Z")

</div>

> [@ManUtopiK](#):
>
> C’est mal de faire ça ?

A priori non, mais je ne pense par que ce soit utile 🙂

> [@ManUtopiK](#):
>
> Je n’ai pas bien saisi l’intérêt de l’indexer je pense. Juste dispatcher sur des squids en microservices ?

L’indexer indexe en brut les blocs substrate dans un format commun quel que soit le processeur. Ça permet de scalabiliser car c’est la partie la plus gourmande en traitements.  
Ça permet que chaque processor puisse accéder à des données “pré-traitées”.

> [@ManUtopiK](#):
>
> Si l’indexer doit rester privée

L’indexer peu être public, et c’est bien qu’il y ai des indexers public, ça permet de pouvoir coder un processor sans avoir besoin de setup un indexer en local.

> [@ManUtopiK](#):
>
> pourquoi ce n’est pas squids qui contient Hasura ?

Désolé pas compris la question, après le mieux c’est peut-être que tu leur poses tes questions ici: [Issues · subsquid/squid-sdk · GitHub](https://github.com/subsquid/squid/issues)

> [@ManUtopiK](#):
>
> Ce serait plus logique d’utiliser Hasura en front (pour profiter des actions, remote schemas, events, cache…) plutôt que l’api de squid construite avec typeorm. De plus, la console d’Hasura est pas trop mal (pas complètement nocode, mais ils y travaillent je crois) pour créer des tables, ajuster les permissions et créer des relationships entre les tables.

Il me semble qu’en faisant ça on perdrait de nombreux avantages de subsquid, il est même possible que le processor ne fonctionne plus. Le mieux serait d’en discuter avec les dev de subsquid pour voir s’il est possible de concevoir un moyen d’exposer les fonctionnalités de Hasura 😅

Après ce n’est parce que Hasura permet bien plus qu’on ait obligé d’y utiliser, subsquid semble déjà répondre à la majorité de nos besoins en l’état (si ce n’est la totalité) 🙂

[Next page](https://forum.duniter.org/t/subsquid-ancienne-hydra-indexer-de-blockchain-substrate-exposant-des-api-graphql/9074.md?page=2)
