Panneau pour visualiser les forgerons

Pour exposer ton API RPC, il faut mettre le 9944 sur un proxy https (avec websocket). Le 30333 c’est pour le p2p donc il faut juste qu’il soit joignable depuis l’extérieur.

Il faut choisir si un nœud va être miroir ou forgeron, ce n’est pas la même config et un nœud ne doit pas faire les deux (ce n’est pas le même métier).

Pour ajouter ton nœud au panel, tu peux simplement écrire son adresse dans la page de paramètres. Pour qu’il apparaisse pour tout le monde, il faut que tu annonces son adresse en config du noeud (Liste des endpoints) et que j’implémente la découverte réseau (pas trop long à faire, mais trop de sujets et trop peu de temps).

Je fais irruption sur le forum juste pour ça, j’ai pas le temps de lire le reste pour l’instant :

@cgeek ton identité n’est plus membre demain
@Damery toi c’est le 17 octobre

Par contre pour renouveler, il faut demander l’évaluation de la règle de distance et qu’un forgeron produise une évaluation, or pour que je redevienne membre au bloc 1229942, j’ai dû m’y prendre à plusieurs reprises, et seul l’oracle de @vjrj a produit une évaluation donc a priori aucun autre oracle n’est correctement configuré.

Merci je viens de pousser une requête de distance.

Pour le délai, bizarre j’ai demandé une évaluation ici Jooam toujours en attente malgré 5 certifications OK - #15 by cgeek et la réponse a été très rapide.

edit : ah oui, ça fait trois fois que je demande et qu’il ne se passe rien. Je vais regarder mon oracle.

1 Like

Je ne sais pas s’il fallait modifier quelque chose pour l’Oracle en gtest; mais on dirait que mon oracle ne fait strictement rien; toutes les 200 secondes…

duniter-gtest-distance-oracle  | INFO  [distance_oracle] Nothing to do: Pool does not exist
duniter-gtest-distance-oracle  | Waiting 200 seconds before next execution...
duniter-gtest-distance-oracle  | INFO  [distance_oracle] Nothing to do: Pool does not exist
duniter-gtest-distance-oracle  | Waiting 200 seconds before next execution...

On était en visio tout à l’heure avec Hugo quand il à fait sa demande de ré-évaluation; et je n’ai rien vu dans les logs de l’Oracle pour cela…

Du coup ma question est comment bien configurer l’oracle et comment peut-on vérifier si l’oracle fonctionne bien :slight_smile:

Pour info, la partie docker compose pour mon oracle:

  duniter-gtest-smith:
    image: duniter/duniter-v2s-gtest-1000:latest
    platform: linux/arm64/v8
    container_name: duniter-gtest-smith
    #...
    volumes:
      - data-validator:/var/lib/duniter/
    #...
  distance-oracle:
    # Should be same image as above !
    image: duniter/duniter-v2s-gtest-1000:latest
    container_name: duniter-gtest-distance-oracle
    entrypoint: docker-distance-entrypoint # other entrypoint
    environment:
      ORACLE_RPC_URL: ws://duniter-gtest-smith:9944 # container_name from SMITH node above
      ORACLE_RESULT_DIR: /var/lib/duniter/chains/gtest/distance/ # should match network
      ORACLE_EXECUTION_INTERVAL: 200 # <--- should be adjusted based on network
    volumes:
      - data-validator:/var/lib/duniter/ # use same volume
1 Like

Je n’ai pas réussi à faire fonctionner l’oracle avec le chemin gtest. Je pense que c’est hardcodé quelque part. Essaye avec gdev, puis émet une évaluation pour tester.


Pour ma part il y a évaluations, mais ça ne remonte peut-être pas à la tête (au nœud) :

INFO  [distance_oracle] Evaluating distance for period 175704
INFO  [distance_oracle] Distance for idty 344: 3519/3521 = 99.9432%
[…]
INFO  [distance_oracle] Evaluating distance for period 175833
INFO  [distance_oracle] Distance for idty 34: 3500/3519 = 99.460075%
1 Like

C’est bon j’avais effectivement oublié d’installer l’Oracle sur la ĞTest, c’est fait :


2025-10-03T18:42:07.755393381Z DEBUG [jsonrpsee-client] Connection established to target: Target { host: "gtest.cgeek.fr", host_header: "gtest.cgeek.fr", _mode: Tls, path_and_query: "/", basic_auth: None }
2025-10-03T18:42:07.809541839Z DEBUG [distance_oracle::api] Looking at Pool1 for pool index 0
2025-10-03T18:42:07.818033631Z INFO  [distance_oracle] Evaluating distance for period 176097
2025-10-03T18:42:19.014622886Z DEBUG [distance_oracle] Evaluating distance for idty 34
2025-10-03T18:42:19.016612386Z INFO  [distance_oracle] Distance for idty 34: 3497/3516 = 99.45962%
2025-10-03T18:42:19.017457136Z DEBUG [distance_oracle] Saving distance evaluation result to file `"/distance/001-176098"`

En fait le problème est que la fenêtre pour pousser l’inherent (7 blocs) est trop petite. Ici on voit bien que mon nœud essaye de pousser l’inherent (Providing evaluation result) mais n’y arrive pas et laisse tomber au bout de 7 coups (correspondant aux 7 blocs je présume).

Manque de bol, c’est au 8ème coup que je réussis à publier un bloc.

2025-10-03T18:42:18.169592928Z 2025-10-03 18:42:18 💤 Idle (10 peers), best: #1232685 (0x7e37…1598), finalized #1232682 (0x40d5…6600), ⬇ 7.0kiB/s ⬆ 19.2kiB/s
2025-10-03T18:42:23.174539263Z 2025-10-03 18:42:23 💤 Idle (10 peers), best: #1232685 (0x7e37…1598), finalized #1232683 (0xa85c…e0f4), ⬇ 13.9kiB/s ⬆ 16.4kiB/s
2025-10-03T18:42:24.047342347Z 2025-10-03 18:42:24 🧙 [distance inherent] No published result at this block.
2025-10-03T18:42:24.148900680Z 2025-10-03 18:42:24 🏆 Imported #1232686 (0x7e37…1598 → 0x8650…f251)
2025-10-03T18:42:28.173697501Z 2025-10-03 18:42:28 💤 Idle (10 peers), best: #1232686 (0x8650…f251), finalized #1232684 (0xf02e…aeeb), ⬇ 13.1kiB/s ⬆ 17.8kiB/s
2025-10-03T18:42:30.008354502Z 2025-10-03 18:42:30 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:42:30.110634461Z 2025-10-03 18:42:30 🏆 Imported #1232687 (0x8650…f251 → 0xfa21…9d9e)
2025-10-03T18:42:33.169515879Z 2025-10-03 18:42:33 💤 Idle (10 peers), best: #1232687 (0xfa21…9d9e), finalized #1232685 (0x7e37…1598), ⬇ 8.4kiB/s ⬆ 17.2kiB/s
2025-10-03T18:42:36.024612838Z 2025-10-03 18:42:36 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:42:36.126195047Z 2025-10-03 18:42:36 🏆 Imported #1232688 (0xfa21…9d9e → 0x2f31…3585)
2025-10-03T18:42:38.170234923Z 2025-10-03 18:42:38 💤 Idle (10 peers), best: #1232688 (0x2f31…3585), finalized #1232686 (0x8650…f251), ⬇ 7.4kiB/s ⬆ 17.0kiB/s
2025-10-03T18:42:42.006570050Z 2025-10-03 18:42:42 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:42:42.161685883Z 2025-10-03 18:42:42 🏆 Imported #1232689 (0x2f31…3585 → 0xbbb8…1fc8)
2025-10-03T18:42:43.179639217Z 2025-10-03 18:42:43 💤 Idle (10 peers), best: #1232689 (0xbbb8…1fc8), finalized #1232686 (0x8650…f251), ⬇ 9.5kiB/s ⬆ 14.8kiB/s
2025-10-03T18:42:48.028122303Z 2025-10-03 18:42:48 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:42:48.180602011Z 2025-10-03 18:42:48 🏆 Imported #1232690 (0xbbb8…1fc8 → 0xac15…23e7)
2025-10-03T18:42:48.180629636Z 2025-10-03 18:42:48 💤 Idle (10 peers), best: #1232690 (0xac15…23e7), finalized #1232687 (0xfa21…9d9e), ⬇ 11.5kiB/s ⬆ 16.4kiB/s
2025-10-03T18:42:53.186379638Z 2025-10-03 18:42:53 💤 Idle (10 peers), best: #1232690 (0xac15…23e7), finalized #1232688 (0x2f31…3585), ⬇ 7.6kiB/s ⬆ 15.9kiB/s
2025-10-03T18:42:54.057444097Z 2025-10-03 18:42:54 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:42:54.108475847Z 2025-10-03 18:42:54 🏆 Imported #1232691 (0xac15…23e7 → 0xf3f4…8ed4)
2025-10-03T18:42:58.202355210Z 2025-10-03 18:42:58 💤 Idle (10 peers), best: #1232691 (0xf3f4…8ed4), finalized #1232689 (0xbbb8…1fc8), ⬇ 12.0kiB/s ⬆ 16.3kiB/s
2025-10-03T18:43:00.040318377Z 2025-10-03 18:43:00 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:43:00.142823252Z 2025-10-03 18:43:00 🏆 Imported #1232692 (0xf3f4…8ed4 → 0xd017…1182)
2025-10-03T18:43:00.142847961Z 2025-10-03 18:43:00 ♻️  Reorg on #1232692,0xd017…1182 to #1232692,0x8965…ab11, common ancestor #1232691,0xf3f4…8ed4
2025-10-03T18:43:00.142849836Z 2025-10-03 18:43:00 🏆 Imported #1232692 (0xf3f4…8ed4 → 0x8965…ab11)
2025-10-03T18:43:03.212462170Z 2025-10-03 18:43:03 💤 Idle (10 peers), best: #1232692 (0x8965…ab11), finalized #1232690 (0xac15…23e7), ⬇ 15.8kiB/s ⬆ 17.3kiB/s
2025-10-03T18:43:06.041285755Z 2025-10-03 18:43:06 🧙 [distance inherent] Providing evaluation result
2025-10-03T18:43:06.092338422Z 2025-10-03 18:43:06 🏆 Imported #1232693 (0x8965…ab11 → 0xffdd…b66a)
2025-10-03T18:43:08.204606756Z 2025-10-03 18:43:08 💤 Idle (10 peers), best: #1232693 (0xffdd…b66a), finalized #1232691 (0xf3f4…8ed4), ⬇ 6.9kiB/s ⬆ 15.7kiB/s
2025-10-03T18:43:12.042278925Z 2025-10-03 18:43:12 🧙 [distance inherent] No published result at this block.
2025-10-03T18:43:12.042304091Z 2025-10-03 18:43:12 🙌 Starting consensus session on top of parent 0xffdd5c5a423ad77336c1423aa870189c5de66fe42a81e772da66709fc401b66a (#1232693)
2025-10-03T18:43:12.042305925Z 2025-10-03 18:43:12 🎁 Prepared block for proposing at 1232694 (3 ms) hash: 0x02f67e8b7597e0f2aac974284f1da50024dbdcb44241e6da4e60d4fc06b2a306; parent_hash: 0xffdd…b66a; end: NoMoreTransactions; extrinsics_count: 1
2025-10-03T18:43:12.042308216Z 2025-10-03 18:43:12 🔖 Pre-sealed block for proposal at 1232694. Hash now 0xe8afa60a575968773969dbac43d2a261f1dc9664976e5b9a1f011894eb4dc8d1, previously 0x02f67e8b7597e0f2aac974284f1da50024dbdcb44241e6da4e60d4fc06b2a306.
2025-10-03T18:43:12.042309675Z 2025-10-03 18:43:12 🏆 Imported #1232694 (0xffdd…b66a → 0xe8af…c8d1)

edit2 : voilà @HugoTrentesaux j’ai insisté et cette fois mon nœud a pu inclure l’inherent et j’ai été renouvelé :


2025-10-03T19:03:06.058607005Z 2025-10-03 19:03:06 🧙 [distance inherent] Providing evaluation result
2025-10-03T19:03:06.058634130Z 2025-10-03 19:03:06 🙌 Starting consensus session on top of parent 0x9dabafeece55bb9174a12966905625316921af0a8d0f1b32050cf72f3050fb50 (#1232892)
2025-10-03T19:03:06.058635963Z 2025-10-03 19:03:06 🎁 Prepared block for proposing at 1232893 (14 ms) hash: 0xf8c986b4e7f92fb4603fd1d50ec7741a6df793fc48b5335eebb29cd75779cc2a; parent_hash: 0x9dab…fb50; end: NoMoreTransactions; extrinsics_count: 2
2025-10-03T19:03:06.058638838Z 2025-10-03 19:03:06 🔖 Pre-sealed block for proposal at 1232893. Hash now 0x7c67f4ad27b26842e4abb1e1558b4214ca1cf06b11908b6e921bc363b7baface, previously 0xf8c986b4e7f92fb4603fd1d50ec7741a6df793fc48b5335eebb29cd75779cc2a.

Ceci dit effectivement, si l’on avait plus d’oracles les 7 blocs pourraient se révéler suffisants.

2 Likes

L’oracle calcule et enregistre son résultat en local dès qu’il peut.

Le résultat est publié uniquement quand le résultat est disponible et que le nœud publie un bloc.

Il est donc normal que la plupart des tentatives échouent, même avec plusieurs oracles.

Voici une MR pour rallonger la période à 40 blocs (4 minutes, donc 12 minutes au total), ce qui assure 99% de chances de succès si on a au moins 10% des forgerons qui ont un oracle.

3 Likes

voir : Development talks - #84 by joss.rendall

Je viens de redémarrer mon oracle avec le path ORACLE_RESULT_DIR: /var/lib/duniter/chains/gdev/distance/ et j’ai demandé l’évaluation de distance pour mon indentité; mais je ne vois toujours pas d’exécution dans les logs…

J’ai aussi ajouté les paramètres pour le logging debug et un pour max depth dont je ne sais pas trop ce qu’il change:

      ORACLE_MAX_DEPTH: "5"
      ORACLE_LOG_LEVEL: "debug"

Par contre je ne vois toujours aucune évaluation de distance dans mes logs :expressionless_face:

Quelqu’un d’autre peut confirmer quelle configuration est la bonne pour l’Oracle en GTest ?

@vjrj Comme ton Oracle semble bien fonctionner en GTest, est-ce que tu peux nous donner sa configuration ? :slight_smile:

Pour info, les logs avec debug toutes les 200 secondes:

duniter-gtest-distance-oracle  | DEBUG [jsonrpsee-client] Connecting to target: Target { host: "duniter-gtest-smith", host_header: "duniter-gtest-smith:9944", _mode: Plain, path_and_query: "/", basic_auth: None }
duniter-gtest-distance-oracle  | DEBUG [jsonrpsee-client] Connection established to target: Target { host: "duniter-gtest-smith", host_header: "duniter-gtest-smith:9944", _mode: Plain, path_and_query: "/", basic_auth: None }
duniter-gtest-distance-oracle  | DEBUG [distance_oracle::api] Looking at Pool0 for pool index 2
duniter-gtest-distance-oracle  | INFO  [distance_oracle] Nothing to do: Pool does not exist
duniter-gtest-distance-oracle  | Waiting 200 seconds before next execution...
1 Like

Pour le chemin gtest versus gdev je ne sais pas si c’est hardcodé dans Duniter v2s ou ça s’est hardcodé dans ma config de mes conteneurs Podman. Je veux bien avoir le retour d’autres maîtres d’oracles, concernant leur config et si ça fonctionne.

Non ce n’est pas hardcodé normalement, ça prend le nom du réseau pour faire le dossier.

En faisant quelques recherches sur le forum, je me rends compte que c’est effectivement difficile de trouver des informations à jour sur l’oracle de distance vu le nombre de modifications qu’il y a eu (version du client 0.9.0 et 0.9.1, runtime 900, reboot gtest…)

Sur la gdev on était passé à 100 blocs de période :

(merci cgeek d’avoir toujours un nœud gdev que j’ai pu interroger)

Mais depuis le reboot de la gtest, on est passé à 7 blocs de période, ce qui est trop peu.

Donc la remarque de tuxmain est la première chose à faire :

Il faut repasser à un rythme d’évaluation raisonnable. Ensuite, on pourra voir comment configurer son oracle, et je pense que je vais faire un autre sujet au propre, mais pas maintenant.

Pour l’instant, je conseille juste de change ORACLE_EXECUTION_INTERVAL pour 10, il y a plus de chances que ça tombe au bon moment pour que le nœud forgeron publie le résultat.

2 Likes

Je peux partager ma configuration K8S, si ça peut aider.

gtest-oracle
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gtest-oracle-deployment
  labels:
    app: gtest-oracle
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gtest-oracle
  template:
    metadata:
      name: gtest-oracle
      labels:
        app: gtest-oracle
    spec:
      terminationGracePeriodSeconds: 180
      imagePullSecrets:
        - name: regcred
      containers:
        - name: gtest-oracle
          image: duniter/duniter-v2s-gtest-1000:1000-0.11.0
          imagePullPolicy: Always
          command: ["docker-distance-entrypoint"]
          volumeMounts:
            - name: data-gtest-oracle
              mountPath: /distance
          env:
            - name: ORACLE_RPC_URL
              value: wss://gtest.cgeek.fr:443
            - name: ORACLE_LOG_LEVEL
              value: debug
            - name: ORACLE_EXECUTION_INTERVAL
              value: "20"
            - name: ORACLE_RESULT_DIR
              value: "/distance"
      volumes:
        - name: data-gtest-oracle
          hostPath:
            path: /Users/cgeek/data/gtest-oracle/distance
            type: Directory

gtest-validator
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gtest-validator-deployment
  labels:
    app: gtest-validator
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gtest-validator
  template:
    metadata:
      name: gtest-validator
      labels:
        app: gtest-validator
    spec:
      imagePullSecrets:
        - name: regcred
      containers:
        - name: gtest-validator
          image: duniter/duniter-v2s-gtest-1000:1000-0.11.0
          imagePullPolicy: Always
          volumeMounts:
            - name: data-validator
              mountPath: /var/lib/duniter/
            - name: data-gtest-oracle
              mountPath: /var/lib/duniter/chains/gtest/distance
          env:
            - name: DUNITER_VALIDATOR
              value: "true"
          command: [
            "docker-entrypoint",
            "--name", "cgeek-validator",
            "--bootnodes", "/dns/gt.elo.tf/tcp/30333/p2p/12D3KooWNUyHfjozVWP2ne5BN7AEwFNzUQvtK6GULxmgBucnYtjG",
            "--port", "30335",
            "--chain", "/var/lib/duniter/gtest-raw.json",
            "--public-rpc", "wss://gtest.cgeek.fr"
          ]

      volumes:
        - name: data-validator
          hostPath:
            path: /Users/cgeek/data/gtest-validator/data
            type: DirectoryOrCreate
        - name: data-gtest-oracle
          hostPath:
            path: /Users/cgeek/data/gtest-oracle/distance
            type: Directory
---
apiVersion: v1
kind: Service
metadata:
  name: gtest-validator-internal-service
spec:
  selector:
    app: gtest-validator
  type: LoadBalancer
  ports:
    - port: 9936
      targetPort: 9933
      name: gtest-rpc-https
    - port: 9947
      targetPort: 9944
      name: gtest-rpc-wss
---
apiVersion: v1
kind: Service
metadata:
  name: gtest-validator-p2p-service
spec:
  selector:
    app: gtest-validator
  type: LoadBalancer
  ports:
    - port: 30335
      targetPort: 30335
      name: gtest-validator-p2p
      protocol: TCP
1 Like

Il y a une période pour accumuler les demandes, une période pour laisser les oracles calculer, et une période pour publier les intrinsics. Donc tant que l’intervalle de l’oracle est plus petit qu’une période (avec au moins la marge du temps de calcul, pour l’instant 1s suffit), ça ne devrait rien changer. Les 3 périodes sont là pour s’assurer que les différents systèmes ne fassent pas la course entre eux.

1 Like

Si je comprend bien, la valeur pour ORACLE_RESULT_DIR n’est pas très importante comme c’est un répertoire de travail qui serait créé automatiquement…

Je viens de passer à 10 secondes, par contre pas moyen de tester car je ne peux plus faire de demande de réévaluation de distance :expressionless_face:

gcli identity request-distance-evaluation                                        │
(Vault: Base[address:5GhAZBagx87sTGfMppfPPcWhxCKGWE8zDi1oHp7YiKosD9KZ, g1v1_pub_key:EnFfLNWnonXwxmzipLbbqa1fybSs7xdPoYhmbkMYzR3G, name:Some("Nicolas80-G1V1"), crypto_scheme:Some(Ed25519)])
> Password ********
transaction submitted to the network, waiting 6 seconds...
Pallet error: Wot::MembershipRenewalPeriodNotRespected

Il y a un temps d’attente à respecter entre chaque demande d’évaluation, pour contrer le spam.
Cependant, tu peux faire la demande pour quelqu’un d’autre avec la commande :

gcli identity request-distance-evaluation-for <palapa>
2 Likes

J’ai tenté pour pas mal d’identités; ça ne passe pas (il en faut sans doute qui sont proches de la limite de validité ?)

gcli identity request-distance-evaluation-for NadiaV
(Vault: Base[address:5GhAZBagx87sTGfMppfPPcWhxCKGWE8zDi1oHp7YiKosD9KZ, g1v1_pub_key:EnFfLNWnonXwxmzipLbbqa1fybSs7xdPoYhmbkM
YzR3G, name:Some("Nicolas80-G1V1"), crypto_scheme:Some(Ed25519)])
> Password ********
transaction submitted to the network, waiting 6 seconds...
Pallet error: Distance::TargetMustBeUnvalidated

Est-ce qu’il y a moyen de lister des identités “Unvalidated” ? :slight_smile:

C’est nouveau ce problème, je le reproduis également.

Il y a g1N6i1fS9yiyFAK89Mvb7xqFpM5S5iSoGEe8WdPmMygLAUrp5 qui a 5 certifications et toujours pas validée.

1 Like

J’ai pu faire la demande pour celui là :slight_smile:

1 Like

Avec la configuration à 10 secondes; j’ai bien eu l’Oracle qui a fait l’évaluation :slight_smile:

duniter-gtest-distance-oracle  | DEBUG [jsonrpsee-client] Connecting to target: Target { host: "duniter-gtest-smith", host_header: "duniter-gtest-smith:9944", _mode: Plain, path_and_query: "
/", basic_auth: None }
duniter-gtest-distance-oracle  | DEBUG [jsonrpsee-client] Connection established to target: Target { host: "duniter-gtest-smith", host_header: "duniter-gtest-smith:9944", _mode: Plain, path_
and_query: "/", basic_auth: None }
duniter-gtest-distance-oracle  | DEBUG [distance_oracle::api] Looking at Pool2 for pool index 1
duniter-gtest-distance-oracle  | INFO  [distance_oracle] Evaluating distance for period 183757
duniter-gtest-distance-oracle  | DEBUG [distance_oracle] Evaluating distance for idty 17125
duniter-gtest-distance-oracle  | INFO  [distance_oracle] Distance for idty 17125: 3419/3457 = 98.90078%
duniter-gtest-distance-oracle  | DEBUG [distance_oracle] Saving distance evaluation result to file `"/var/lib/duniter/chains/gtest/distance/001-183758"`
duniter-gtest-distance-oracle  | Waiting 10 seconds before next execution...

Et l’identité est passée de Unvalidated à Member :smiley:

2 Likes