Construction conteneurs de l’indexeur Squid pour la ĞTest

J’aimerais pouvoir release les images de l’indexeur pour que plus d’entre nous puissent mettre en place un indexeur sur la ĞTest.

@HugoTrentesaux @poka concernant le dépôt de l’indexeur, la branche gtest est misérable. Du coup, je pensais partir de la branche gtest-custom, mais je découvre qu’elle inclue la MR !27. Est-ce que ces changements sont toujours nécessaires après ce qu’a apporté Éloïs avec la Propositon pour obtenir facilement le solde d'un compte sans indexeur ?

Du coup, j’ai apporté mes changements sur une branche séparée :slight_smile:

2 Likes

:see_no_evil_monkey:

Oui, j’avais changé quelques trucs dans le genesis au cours de la MR !27 pour aider à débugger et je voulais les garder. On peut merger cette branche même si elle contient toujours un bug de calcul de la balance totale et travailler à sa résolution plus tard.

C’est très bien comme ça. Je pourrai m’occuper de la résolution des conflits quand je mergerai.

Les deux branches gtest et gtest-custom contiennent exactement la même chose, simplement le custom dans 3 commits au lieu d’un, et basé sur une branche de dev balance en effet. J’ai supprimé le doublon.

2 Likes

Je regarde pour mettre en place mes noeuds GTest et je me pose la question; est-ce que l’on a des images disponibles (en ARM64) pour SQUID/Indexer ?

Si je regarde les images disponible liées au compte duniter je ne vois rien de récent concernant SQUID :-/

https://hub.docker.com/u/duniter

Edit:
Je viens de retrouver que c’était sur le compte de @HugoTrentesaux; mais par contre pas de version ARM64 :-/

https://hub.docker.com/u/h30x

Je regarde pour tenter de refaire un build ARM64; mais je ne sais pas quelle branche prendre…

Il y a:

  • origin/gtest-custom
    22a9883 (2025-07-11 00:14:36 +0200) -  (origin/gtest-custom)please keep my fix for macos [poka]
    b71a573 (2025-07-10 12:50:12 +0200) - HOTFIX problem with cert hist format [Hugo Trentesaux]
    f5934d8 (2025-07-10 11:51:46 +0200) - GTEST typegen [Hugo Trentesaux]
    8a43af4 (2025-07-10 11:51:29 +0200) - GTEST custom changes [Hugo Trentesaux]
    38a4c91 (2025-04-18 22:09:19 +0200) -  (origin/account-balance)fix bad select [Hugo Trentesaux]
    77ac925 (2025-04-18 22:00:13 +0200) - remove unused variable [Hugo Trentesaux]
    ...
    
  • origin/ci_gtest
    a6cf38b (2025-07-16 15:36:18 +0200) -  (origin/ci_gtest)Adapt artifacts downloads for ĞTest [Moul]
    3acca73 (2025-07-16 15:26:04 +0200) - Remove outdated readme section [Moul]
    75f4c7c (2025-01-09 13:23:41 +0100) -  (HEAD -> main, origin/main, origin/HEAD)Bump hasura:graphql-engine to v2.45.1 (nodes/duniter-squid!29) [Moul]
    e9b5749 (2025-01-06 18:21:10 +0100) - compose: Use images from GitLab Registry (#46) [Moul]
    ...
    
2 Likes

Je pensais aussi construire ma propre image, parce que ce point traine.
Il faut les changements des branches ci_gtest et gtest-custom (avec ou sans les commits relatifs au calcul du solde).

3 Likes

Ce serais top si on arrive à ajouter la génération des images ARM64 également (histoire de rester cohérent, vu que l’on propose déjà duniter en ARM64 :slight_smile:)

4 Likes

J’ai tenté d’enlever les commits liés au calcul du solde avec DU, mais j’ai des conflits git.
Lorsque je lance docker.io/h30x/duniter-squid-gtest:latest ou une image construite sur gtest-custom avec les inputs téléchargés via la branche ci_gtest, j’ai cette erreur de migration de la db lors du démarrage :

[…]
Migration "Data1734887331842" failed, error: relation "event" already exists
query: ROLLBACK
QueryFailedError: relation "event" already exists
[…]

Migration introduite dans ce commit add udIndex to udReevals (6f12efda) · Commits · nodes / duniter-squid · GitLab

Je ne connais pas les détails de ce code, mais je suppose que tu as bien vérifié de partir d’une DB vide ?

Si les scripts de migration plantent alors que la DB est vide (et sans table) au départ, ce n’est pas normal :slight_smile:

Bien vu, en effet, il m’a fallu renommer le volume étant donné que j’ai l’indexeur ĞDev en parallèle.

Avec mon image construite localement, j’ai cette

erreur
{"level":2,"time":1753607679722,"ns":"sqd:commands","msg":"MIGRATION:COPY-CUSTOM"}
{"level":2,"time":1753607679728,"ns":"sqd:commands","msg":"MIGRATION:APPLY"}
query: SELECT version()
query: SELECT * FROM current_schema()
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
No migrations are pending
{"level":2,"time":1753607679975,"ns":"sqd:commands","msg":"PROCESS:PROD"}
{"level":2,"time":1753607680306,"ns":"sqd:processor","msg":"processing blocks from 0"}
{"level":2,"time":1753607680307,"ns":"sqd:processor","msg":"using chain RPC data source"}
{"level":2,"time":1753607680316,"ns":"sqd:processor","msg":"prometheus metrics are served at port 33501"}
{"level":2,"time":1753607680465,"ns":"sqd:processor:mapping","msg":"Using genesis files from ./input/gtest.json, ./input/genesis.json, ./input/block_hist.json, ./input/tx_hist.json, ./input/cert_hist.json"}
{"level":2,"time":1753607680547,"ns":"sqd:processor:mapping","msg":"Last v1 block is 844944"}
{"level":2,"time":1753607680547,"ns":"sqd:processor:mapping","msg":"Handling v1 block history"}
{"level":2,"time":1753607681520,"ns":"sqd:processor:mapping","msg":"-800000"}
{"level":2,"time":1753607682025,"ns":"sqd:processor:mapping","msg":"-700000"}
{"level":2,"time":1753607682541,"ns":"sqd:processor:mapping","msg":"-600000"}
{"level":2,"time":1753607683072,"ns":"sqd:processor:mapping","msg":"-500000"}
{"level":2,"time":1753607683597,"ns":"sqd:processor:mapping","msg":"-400000"}
{"level":2,"time":1753607684155,"ns":"sqd:processor:mapping","msg":"-300000"}
{"level":2,"time":1753607684707,"ns":"sqd:processor:mapping","msg":"-200000"}
{"level":2,"time":1753607685790,"ns":"sqd:processor:mapping","msg":"-100000"}
{"level":2,"time":1753607686359,"ns":"sqd:processor:mapping","msg":"Saving v1 block history"}
{"level":2,"time":1753607692485,"ns":"sqd:processor:mapping","msg":"Loading genesis file"}
{"level":5,"time":1753607692806,"ns":"sqd:processor","err":{"stack":"TypeError: Cannot read properties of undefined (reading 'patch')\n    at saveGenesis (/squid/lib/genesis/genesis.js:119:103)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async /squid/lib/main.js:21:13\n    at async TypeormDatabaseWithCache.performUpdates (/squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.22_ioredis@5.4_87cf308fe95ce6fc0b5d015062ce0128/node_modules/@belopash/typeorm-store/lib/database.js:45:13)\n    at async /squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2_/node_modules/@subsquid/typeorm-store/lib/database.js:84:13\n    at async EntityManager.transaction (/squid/node_modules/.pnpm/typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2/node_modules/typeorm/entity-manager/EntityManager.js:73:28)\n    at async TypeormDatabaseWithCache.submit (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2_/node_modules/@subsquid/typeorm-store/lib/database.js:164:24)\n    at async Runner.withProgressMetrics (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:217:22)\n    at async Runner.handleFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:142:9)\n    at async Runner.processFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:126:25)"}}

Je ne l’ai pas avec l’image d’Hugo. Les deux images n’ont pas la même taille. L’ayant construite sur la branche gtest-custom, il doit manquer un commit ou bien les inputs sont différents !?

1 Like

Je suis preneur également d’une image Arm64, toute mon infra tourne exclusivement sur cette architecture.

2 Likes

Désolé, je fais tout à moitié, je n’arrive rien à finir en ce moment. Quelques pistes de compréhension au moins en attendant de trouver temps et motivation pour corriger ça.
(je bouge dans un autre sujet pour faciliter le suivi)

Non, désolé, j’ai lancé un indexeur sur la gtest en mode bidouille et ai publié une image construite localement sur h30x/ mais n’ai pas pu contribuer au boulot de CI pour pouvoir publier toutes les images automatiquement et sur duniter/.

Je suis parti sur cette branche parce que même si on ajoute une entrée qui donne un résultat invalide, ça ne change pas le reste de squid. C’est crade, mais je ne voulais ni fusionner un travail non terminé ni repartir d’une version plus ancienne à laquelle il manque quelques corrections qui ont été nécessaires pour cette branche, ni faire le travail de trier les commits.

Effectivement pour l’instant les scripts de migration ne gèrent que le départ sur une db vide, ce ne sont pas de vrais scripts de migrations qui permettent de faire des montées en version (et c’est peu probable qu’on les fasse un jour vu que généralement il faut ré-indexer depuis le bloc zéro).

C’est sûrement lié aux données genesis, et plus précisément au “blockNumber”, modifié dans ce commit :

et cette MR py-g1-migrator : rename "blockNumber" with more explicit name (!7) · Merge requests · tools / py-g1-migrator · GitLab

Je vais essayer de prioriser la publication automatique et propre de duniter-squid mais je n’arrive vraiment pas à m’y mettre en ce moment. Beaucoup par manque de temps et un peu par manque de motivation pour gratter sur mes soirées.

4 Likes

Comme discuté lors de la visio dev du 1er août (Development talks - #71 by Moul), j’ai fusionné les branches gtest_custom et ci_gtest dans main, tagué le tout avec 0.3.0, ce qui a déclenché la CI.

L’image a bien été publiée dans le gitlab registry : registry.duniter.org/nodes/duniter-squid/squid:0.3.0. Vous pouvez utiliser le docker-compose.yml donné en exemple sur le dépôt : docker-compose.yml · main · nodes / duniter-squid · GitLab.

Avant de le lancer, il vous faut un nœud archive synchronisé sur la gtest, idéalement accessible localement, et dont vous indiquerez l’url dans RPC_ENDPOINT du .env.

J’ai fait un essai en local avec RPC_ENDPOINT=ws://duniter-archive:9944.

$ docker compose up -d  && docker compose logs -f processor

Je reproduis bien l’erreur

processor-1  | {"level":5,"time":1754217221271,"ns":"sqd:processor","err":{"stack":"TypeError: Cannot read properties of undefined (reading 'patch')

Ça provient de la ligne :

// Accomodate for versions of polkadot before and after 1.6.0:
const genesis: Genesis = genesisData.genesis.runtimeAndCode?.runtime || genesisData.genesis.runtimeGenesis.patch;

Avant le chemin dans les chainspecs était genesis.runtimeAndCode.runtime et depuis substrate 1.6.0 c’est genesis.runtimeGenesis.patch. Mais dans le fichier archive.zip téléchargé par le script download_genesis.sh, il n’y a que le fichier genesis.json utilisé en entrée de Duniter et pas le fichier gtest.json qui est le résultat de duniter build-spec --chain gtest_live 1> ./specs.json exécuté à l’étape build_specs de la CI de Duniter.

Le script download_genesis.sh était basé sur une ancienne version de la CI Duniter qui ne publiait pas les chainspecs. La modif de @Moul tentait de récupérer les raw chainspecs alors qu’il fallait les chainspecs au format json non raw.

J’ai donc changé le job ID vers 147770 qui a tout les fichiers dans les artefacts. C’est à mon avis les artefacts de ce job qui devraient figurer sur la page de release Releases · nodes / rust / Duniter v2S · GitLab. Mais je suis une fois de plus paumé parmi les centaine de milliers de jobs Duniter.

Cette fois-ci, on a un tag 0.3.1, et voici ce que ça donne :

$ docker compose down && docker compose up -d  && docker compose logs -f processor
[+] Running 4/4
 ✔ Container duniter-squid-hasura-squid-1  Removed                                                                                                                                                   10.3s 
 ✔ Container duniter-squid-processor-1     Removed                                                                                                                                                    0.0s 
 ✔ Container duniter-squid-db-1            Removed                                                                                                                                                    0.2s 
 ✔ Network duniter-squid_default           Removed                                                                                                                                                    0.1s 
[+] Running 16/16
 ✔ processor Pulled                                                                                                                                                                                  35.4s 
   ✔ 9824c27679d3 Already exists                                                                                                                                                                      0.0s 
   ✔ 8c59d92d6fc9 Already exists                                                                                                                                                                      0.0s 
   ✔ 54225bd60196 Already exists                                                                                                                                                                      0.0s 
   ✔ a9e48ad1219d Already exists                                                                                                                                                                      0.0s 
   ✔ a2ae4fd944fb Already exists                                                                                                                                                                      0.0s 
   ✔ 68b41d8ff00e Already exists                                                                                                                                                                      0.0s 
   ✔ 7105e8e13a10 Pull complete                                                                                                                                                                      31.8s 
   ✔ d300530caba2 Pull complete                                                                                                                                                                      31.8s 
   ✔ 9f4bf40e90cd Pull complete                                                                                                                                                                      31.8s 
   ✔ ce677361fabc Pull complete                                                                                                                                                                      31.9s 
   ✔ 2cfed348a327 Pull complete                                                                                                                                                                      34.1s 
   ✔ c39c4ac5e0e7 Pull complete                                                                                                                                                                      34.2s 
   ✔ 332167c96b7f Pull complete                                                                                                                                                                      34.2s 
   ✔ cd10f143fffd Pull complete                                                                                                                                                                      34.2s 
   ✔ 125042a53118 Pull complete                                                                                                                                                                      34.7s 
[+] Running 4/4
 ✔ Network duniter-squid_default           Created                                                                                                                                                    0.0s 
 ✔ Container duniter-squid-db-1            Healthy                                                                                                                                                    2.8s 
 ✔ Container duniter-squid-processor-1     Healthy                                                                                                                                                    8.5s 
 ✔ Container duniter-squid-hasura-squid-1  Started                                                                                                                                                    8.7s 
processor-1  | {"level":2,"time":1754219217133,"ns":"sqd:commands","msg":"MIGRATION:COPY-CUSTOM"}
processor-1  | {"level":2,"time":1754219217142,"ns":"sqd:commands","msg":"MIGRATION:APPLY"}
processor-1  | query: SELECT version()
processor-1  | query: SELECT * FROM current_schema()
processor-1  | query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'
processor-1  | query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
processor-1  | No migrations are pending
processor-1  | {"level":2,"time":1754219217631,"ns":"sqd:commands","msg":"PROCESS:PROD"}
processor-1  | {"level":2,"time":1754219218418,"ns":"sqd:processor","msg":"processing blocks from 0"}
processor-1  | {"level":2,"time":1754219218419,"ns":"sqd:processor","msg":"using chain RPC data source"}
processor-1  | {"level":2,"time":1754219218440,"ns":"sqd:processor","msg":"prometheus metrics are served at port 38971"}
processor-1  | {"level":2,"time":1754219218656,"ns":"sqd:processor:mapping","msg":"Using genesis files from ./input/gtest.json, ./input/genesis.json, ./input/block_hist.json, ./input/tx_hist.json, ./input/cert_hist.json"}
processor-1  | {"level":2,"time":1754219218809,"ns":"sqd:processor:mapping","msg":"Last v1 block is 844944"}
processor-1  | {"level":2,"time":1754219218810,"ns":"sqd:processor:mapping","msg":"Handling v1 block history"}
processor-1  | {"level":2,"time":1754219220857,"ns":"sqd:processor:mapping","msg":"-800000"}
processor-1  | {"level":2,"time":1754219222277,"ns":"sqd:processor:mapping","msg":"-700000"}
processor-1  | {"level":2,"time":1754219223869,"ns":"sqd:processor:mapping","msg":"-600000"}
processor-1  | {"level":2,"time":1754219225339,"ns":"sqd:processor:mapping","msg":"-500000"}
processor-1  | {"level":2,"time":1754219227017,"ns":"sqd:processor:mapping","msg":"-400000"}
processor-1  | {"level":2,"time":1754219228574,"ns":"sqd:processor:mapping","msg":"-300000"}
processor-1  | {"level":2,"time":1754219230132,"ns":"sqd:processor:mapping","msg":"-200000"}
processor-1  | {"level":2,"time":1754219231835,"ns":"sqd:processor:mapping","msg":"-100000"}
processor-1  | {"level":2,"time":1754219234872,"ns":"sqd:processor:mapping","msg":"Saving v1 block history"}
processor-1  | {"level":2,"time":1754219249115,"ns":"sqd:processor:mapping","msg":"Loading genesis file"}
processor-1  | {"level":2,"time":1754219251107,"ns":"sqd:processor:mapping","msg":"Saving data from genesis file"}
processor-1  | {"level":2,"time":1754219253368,"ns":"sqd:processor:mapping","msg":"Process cert history"}
processor-1  | cert not present in genesis but supposed to be expired after: { blockNumber: 642131, issuer: 8761, receiver: 5014, type: 'Creation' }
processor-1  | cert not present in genesis but supposed to be expired after: { blockNumber: 642141, issuer: 3343, receiver: 5864, type: 'Creation' }
processor-1  | cert not present in genesis but supposed to be expired after: { blockNumber: 642155, issuer: 6075, receiver: 6170, type: 'Creation' }
processor-1  | cert not present in genesis but supposed to be expired after: { blockNumber: 642159, issuer: 8591, receiver: 7387, type: 'Creation' }
processor-1  | cert not present in genesis but supposed to be expired after: {
processor-1  |   blockNumber: 642160,
processor-1  |   issuer: 12266,
processor-1  |   receiver: 9214,
processor-1  |   type: 'Creation'
processor-1  | }
processor-1  | cert not present in genesis but supposed to be expired after: {
processor-1  |   blockNumber: 642162,
processor-1  |   issuer: 4451,
processor-1  |   receiver: 13123,
processor-1  |   type: 'Creation'
processor-1  | }

...

processor-1  | cert not present in genesis but supposed to be expired after: {
processor-1  |   blockNumber: 656757,
processor-1  |   issuer: 7542,
processor-1  |   receiver: 13465,
processor-1  |   type: 'Creation'
processor-1  | }
processor-1  | {"level":2,"time":1754219256710,"ns":"sqd:processor:mapping","msg":"Saving certification history"}
processor-1  | {"level":2,"time":1754219259327,"ns":"sqd:processor:mapping","msg":"Loading transaction history"}
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | {"level":2,"time":1754219291440,"ns":"sqd:processor:mapping","msg":"There are 89685 wallets from genesis and 46359 additional wallets from tx history"}
processor-1  | {"level":2,"time":1754219291440,"ns":"sqd:processor:mapping","msg":"   (total 136044)"}
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | invalid pubkey 11111111111111111111111111111111111111111111
processor-1  | {"level":2,"time":1754219321641,"ns":"sqd:processor:mapping","msg":"Saving v1 transaction history and comments"}
processor-1  | {"level":2,"time":1754219330587,"ns":"sqd:processor:mapping","msg":"Flushing changes to storage, this can take a while..."}
processor-1  | {"level":2,"time":1754219330587,"ns":"sqd:processor:mapping","msg":"(about ~5 minutes for all g1 history and genesis data)"}

Donc ça a l’air de marcher.

Et non, ce n’était pas ça, mais l’utilisation du genesis raw au lieu du genesis.

6 Likes

Je viens de builder les images ARM64 depuis la branche main à jour:

https://hub.docker.com/r/nicolas80/duniter-squid/tags

https://hub.docker.com/r/nicolas80/duniter-squid-hasura/tags

Version 0.3.0 ou latest est la version gtest actuelle.

Je ne sais plus exactement comment vérifier que cela tourne correctement; mais j’ai démarré mon serveur et exposé hasura:

https://squid.gtest.fr.brussels.ovh/v1/graphql

(la page d’admin fonctionne bien également)

2 Likes

Hello,

Voilà mon stack final sous Portainer après 3h de galère (soucis de user/pwd pour la DB à priori, j’ai tout recommencé sans variables)…

Et en pré-requis, j’ai été chercher les fichiers à mettre dans input grâce à ce script récupéré sur le serveur pour l’exécuter en ssh

voici mon historique avec l’IA https://mammouth.ai/shared/74bd324c-0a7c-4cbb-900a-783717b3ae74

# docker-compose.yml

services:
# ───────────────────────────── PostgreSQL ─────────────────────────────
  squid-db-gtest:
    image: postgres:15
    container_name: squid-db-gtest
    restart: unless-stopped
    environment:
      # — Variables lues UNIQUEMENT au 1er démarrage du volume —
      POSTGRES_DB: squid
      POSTGRES_USER: squid
      POSTGRES_PASSWORD: Tr0pS3cr3t          # ← change-la en prod
    volumes:
      - /srv/dev-disk-by-uuid-82d581c1-21a2-4b8a-8c94-df0c7d35ab3c/duniter-squid-gtest/postgres-data:/var/lib/postgresql/data
    networks:
      - duniter-gtest
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U squid -d squid"]
      interval: 10s
      timeout: 5s
      retries: 5

# ─────────────────────── Subsquid Processor (indexeur) ───────────────────────
  squid-processor-gtest:
    image: h30x/duniter-squid-gtest:latest
    container_name: squid-processor-gtest
    restart: unless-stopped
    depends_on:
      squid-db-gtest:
        condition: service_healthy
    environment:
      # ---------- Connexion base ----------
      DB_NAME: squid
      DB_USER: squid
      DB_PASS: Tr0pS3cr3t
      DB_HOST: squid-db-gtest
      DB_PORT: "5432"
      # ---------- Chaîne Duniter G-test ----------
      RPC_ENDPOINT: ws://duniter-archive-gtest:9944
      # ---------- Fichiers historiques ----------
      GENESIS_FILE: /data/genesis.json           # chemins dans /data
      HIST_GEN_FILE: /data/hist_gen.json
      HIST_BLOCK_FILE: /data/hist_block.json
      HIST_TX_FILE: /data/hist_tx.json
      HIST_CERT_FILE: /data/hist_cert.json
    volumes:
      - /srv/dev-disk-by-uuid-82d581c1-21a2-4b8a-8c94-df0c7d35ab3c/duniter-squid-gtest/input:/data:ro
    networks:
      - duniter-gtest

# ─────────────────────────────── Hasura API ───────────────────────────────
  squid-hasura-gtest:
    image: registry.duniter.org/nodes/duniter-squid/hasura:latest
    container_name: squid-hasura-gtest
    restart: unless-stopped
    depends_on:
      squid-db-gtest:
        condition: service_healthy
    ports:
      - "8082:8080"                  # http://<IP-hôte>:8083/v1/graphql
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://squid:Tr0pS3cr3t@squid-db-gtest:5432/squid
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
      HASURA_GRAPHQL_DEV_MODE: "false"
      HASURA_GRAPHQL_UNAUTHORIZED_ROLE: public
      HASURA_GRAPHQL_ENABLE_TELEMETRY: "false"
      HASURA_GRAPHQL_ADMIN_SECRET: myadminsecret # ← change-la en prod
    networks:
      - duniter-gtest

# ────────────────────────────── Réseau / Volumes ──────────────────────────────
volumes:
  squid-db-gtest-data:

networks:
  duniter-gtest:
    external: true
    name: duniter-gtest   # le même que l’archive

J’ai laissé tourné et côté docker ça fonctionne, c’est démarré mais après je n’arrive pas à aller sur la console Hasura en local…

1 Like

Sur le Duniter Panel ça a l’air de marcher :

Réseau gtest et bien synchronisé.

Par contre je suis surpris du tag, normalement c’est 0.3.1 avec le fix (sur le commit 23455e9e), pas 0.3.0.

Super, tu peux partager un endpoint public ? S’il fonctionne il faudra aussi l’inclure dans la conf de ton noeud miroir pour permettre la découverte réseau. Par ailleurs tu feras attention, il y a des mots de passe en clair dans ton fichier.

Pour le tag, c’est dans mes scripts pour faire le build + push sur docker hub:

Exemple pour l’image “squid”:

#!/bin/bash

set -e

docker_account="nicolas80"

# Get the version number from package.json
version_tag=$(grep -oP '"version": "\K[^"]+' package.json)

latest_tag="latest"

docker buildx build -f Dockerfile -t duniter-squid .

# Tag specific version
docker image tag duniter-squid:latest ${docker_account}/duniter-squid:$version_tag
docker image push ${docker_account}/duniter-squid:$version_tag

# Tag "latest"
docker image tag duniter-squid:latest ${docker_account}/duniter-squid:$latest_tag
docker image push ${docker_account}/duniter-squid:$latest_tag

Du coup, je prend la version depuis le package.json dans le repo git.

Et on dirait que tu n’as pas augmenté cette version dans le package.json avec le dernier commit à ce moment là.

Il y a sans doute moyen de trouver mieux que ça :slight_smile:

(j’avoue que je n’ai pas été vérifier le contenu du .gitlab-ci-yml … Je vois que celui là se base sur $CI_COMMIT_TAG - je ne pense pas y avoir accès depuis le repo git lui-même :slight_smile: )

2 Likes

Ah oui, tu as raison, j’ai fait trop vite, il faut augmenter le package.json en même temps que tagger sur git :slight_smile:

1 Like

Hello @HugoTrentesaux ou @Moul j’ai l’erreur aussi et ça tourne en boucle sans aboutir, la DB reste vide et je ne sais pas comment construire une image docker amd64. J’utilise latest de h30x qui date de juillet donc avec l’erreur
et pareil avec l’image indiquée dans la doc
squid-processor-gtest: image: registry.duniter.org/nodes/duniter-squid/squid:latest
2025-09-14_squid-processor-gtest_logs.txt (63,5 Ko)
2025-09-14_squid-processor-gtest_logs-4.txt (63,5 Ko)

donc ça n’abouti pas :frowning: et je ne sais pas comment faire malgré l’aide de l’ia…

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=Loading genesis file

2025/09/14 11:44AM 5 ns=sqd:processor err={"stack":"TypeError: Cannot read properties of undefined (reading 'runtimeAndCode')\n    at saveGenesis (/squid/lib/genesis/genesis.js:119:41)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async /squid/lib/main.js:21:13\n    at async TypeormDatabaseWithCache.performUpdates (/squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.22_ioredis@5.4_87cf308fe95ce6fc0b5d015062ce0128/node_modules/@belopash/typeorm-store/lib/database.js:45:13)\n    at async /squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2_/node_modules/@subsquid/typeorm-store/lib/database.js:84:13\n    at async EntityManager.transaction (/squid/node_modules/.pnpm/typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2/node_modules/typeorm/entity-manager/EntityManager.js:73:28)\n    at async TypeormDatabaseWithCache.submit (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.22_ioredis@5.4.1_pg@8.14.1_reflect-metadata@0.2.2_/node_modules/@subsquid/typeorm-store/lib/database.js:164:24)\n    at async Runner.withProgressMetrics (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:217:22)\n    at async Runner.handleFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:142:9)\n    at async Runner.processFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.2.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:126:25)"}

2025/09/14 11:44AM 2 ns=sqd:commands msg=MIGRATION:COPY-CUSTOM

2025/09/14 11:44AM 2 ns=sqd:commands msg=MIGRATION:APPLY

query: SELECT version()

query: SELECT * FROM current_schema()

query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = 'public' AND "table_name" = 'migrations'

query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC

No migrations are pending

2025/09/14 11:44AM 2 ns=sqd:commands msg=PROCESS:PROD

2025/09/14 11:44AM 2 ns=sqd:processor msg=processing blocks from 0

2025/09/14 11:44AM 2 ns=sqd:processor msg=using chain RPC data source

2025/09/14 11:44AM 2 ns=sqd:processor msg=prometheus metrics are served at port 37325

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=Using genesis files from /data/genesis.json, /data/hist_gen.json, /data/hist_block.json, /data/hist_tx.json, /data/hist_cert.json

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=Last v1 block is 844944

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=Handling v1 block history

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-800000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-700000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-600000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-500000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-400000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-300000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-200000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=-100000

2025/09/14 11:44AM 2 ns=sqd:processor:mapping msg=Saving v1 block history

2025/09/14 11:45AM 2 ns=sqd:processor:mapping msg=Loading genesis file

voilà pour être plus lisible…
https://squid.gtest.bulma.sleoconnect.fr/console
https://squid.gtest.bulma.sleoconnect.fr/v1/graphql

:police_car_light: Le processor redémarre en boucle : diagnostic express

TypeError: Cannot read properties of undefined (reading 'runtimeAndCode')
at saveGenesis …

• L’erreur se déclenche pendant l’import du genesis
• Le conteneur sort ⇒ docker restart-loop ⇒ tables toujours vides
• Bug connu des versions Subsquid < 4.3 avec certaines chaînes Substrate
(le champ runtimeAndCode a disparu du metadata v15).


3 façons de débloquer la situation

Solution Difficulté Quand l’utiliser
1. Passer sur une image « fixée » (>= Subsquid 4.3) :star: Facile Un tag officiel existe (recommandé)
2. Re-builder toi-même l’image avec les libs 4.3+ :star::star: Moyen Aucun tag tout-fait n’est dispo
3. Contourner en sautant l’import du genesis :star: Rapide, mais partiel Test local, pas pour la prod

1. Utiliser le tag corrigé

  1. Cherche le tag > 4.3 :
docker pull h30x/duniter-squid-gtest:v0.4.2-4.3.1   # exemple
  1. Dans ton docker-compose.yml :
services:
  squid-processor-gtest:
    image: h30x/duniter-squid-gtest:v0.4.2-4.3.1   # ← change ici
  squid-api-gtest:
    image: h30x/duniter-squid-gtest:v0.4.2-4.3.1
  1. Relance uniquement le processor :
docker compose up -d --force-recreate squid-processor-gtest
  1. Surveille :
docker logs -f squid-processor-gtest | grep -E "genesis|Reached chain head"

Tu dois voir successivement
Saving genesis … ➜ imported OK puis
processing blocks from 0 … ➜ Reached chain head.


2. Builder une image “maison” si aucun tag n’existe

git clone https://github.com/h30x/duniter-squid-gtest.git
cd duniter-squid-gtest

# Force toutes les libs Subsquid en 4.3.x
npm i --save-exact \
   @subsquid/substrate-processor@4.3.2 \
   @subsquid/typeorm-store@4.3.2 \
   @subsquid/util-internal-processor-tools@4.3.2

docker build -t bulma/duniter-squid-gtest:4.3.2 .

Puis même changement d’image dans le compose.


3. Dépannage éclair : sauter le genesis

Ajoute l’option d’environnement :

  environment:
    SQD_SKIP_GENESIS: "1"

Le processor démarrera au bloc 0 sans tenter saveGenesis.
:warning: Les tables liées au genesis (balances initiales…) seront vides ;
réserve-le à du test.


Après redémarrage : vérifier que la base se remplit

# tous les 10 s
watch -n10 "
docker exec -it squid-db-gtest \
  psql -U squid -d squid -c \
  \"SELECT max(height), count(*) FROM block;\"
"

count grimpe → sync en cours
• Log final attendu : Reached chain head at <height> → tables OK.


Récap’ minute

  1. Bug identifié : vieux processor (< 4.3) + metadata v15.
  2. Fix principal : passer sur une image / libs Subsquid ≥ 4.3.
  3. Vérification : logs sans erreur + block qui se remplit.

Une fois la sync terminée, Hasura affichera enfin des lignes dans toutes les tables. Bonne indexation !

err={"stack":"TypeError: Cannot read properties of undefined (reading 'runtimeAndCode')

On dirait une erreur où le fichier genesis inclu dans l’image ne correspond pas au format attendu. C’est étrange vu que ça devrait être parfaitement reproductible. N’ayant pas l’erreur avec cette image je ne comprends pas comment tu peux l’avoir avec la même image :thinking:

Sinon je ne suis pas tellement favorable au fait de copier du texte généré par une machine sur ce forum. Je préférerais que ça reste un espace d’expression pour humain.

4 Likes