# Oracle de distance dans un docker

**URL:** https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706
**Category:** Duniter-v2s
**Tags:** docker, distance
**Created:** [16 November 2023 11:27 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706 "2023-11-16T11:27:32Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [16 November 2023 11:27 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/1 "2023-11-16T11:27:32Z")

</div>

Ce serait bien de fournir une image docker qui soit capable de faire tourner l’oracle de distance. Sinon on va avoir peu de forgerons qui publient des résultats d’évaluation de la règle de distance, et ce sera plus fragile (peu de forgerons nécessaires pour changer la médiane des résultats).

J’ai créé le ticket [#138](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/138) à ce sujet. Est-ce que @Pini ça te tenterait ? La documentation de l’oracle de distance est ici : [docs/user/distance.md · master · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docs/user/distance.md).

---

<div class="post-metadata">

### Author: ![Pini](https://forum.duniter.org/user_avatar/forum.duniter.org/pini/32/6819_2.png) [@Pini](https://forum.duniter.org/u/Pini)
#### Post date: [16 November 2023 17:20 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/2 "2023-11-16T17:20:52Z")

</div>

OK je m’y colle. Il faut ça pour quand ?

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [16 November 2023 21:59 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/3 "2023-11-16T21:59:22Z")

</div>

On peut lancer le réseau de test sans, et il suffit d’un forgeron pour avoir un nombre non nul de résultats, donc pas d’urgence, fais selon ton rythme ! Si tu veux une échéance, ça fera un super cadeau de noël aux forgerons de la ǦTest ☺

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [19 November 2023 10:15 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/4 "2023-11-19T10:15:22Z")

</div>

Sur ma chaîne locale gdev\_dev, si j’essaie de donner la dernière certification avant de pouvoir devenir membre à une identité, alors je tombe sur l’erreur DistanceNotOk. Est-ce que cela signifie que même sur les nœuds de dev locaux il est nécessaire de faire tourner l’oracle ?

Ça me semble assez logique vue qu’il s’agit du runtime de la gdev mais je préfère demander, si jamais il y a possiblité de faire autrement (option pour désactiver le check de distance en mode dev, ou implémentation sans oracle possible en mode dev même si ça me semble surfait).

---

<div class="post-metadata">

### Author: ![tuxmain](https://forum.duniter.org/user_avatar/forum.duniter.org/tuxmain/32/6423_2.png) [@tuxmain](https://forum.duniter.org/u/tuxmain)
#### Post date: [19 November 2023 10:28 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/5 "2023-11-19T10:28:23Z")

</div>

L’oracle pourrait être intégré dans l’exécutable de Duniter comme sous-commande. Si une option `--distance-oracle` est passée au nœud, alors le client lancerait automatiquement l’oracle dans un processus à part. Ça évite de distribuer deux exécutables séparés et de devoir configurer cron.

On pourrait pousser l’intégration jusqu’à mettre l’oracle dans le client, ce qui simplifierait la communication oracle\<-\>Duniter (runtime API plutôt que fichiers temporaires et RPC) mais on perd l’isolation qui permet que l’un plante ou redémarre sans conséquence sur l’autre.

---

<div class="post-metadata">

### Author: ![Pini](https://forum.duniter.org/user_avatar/forum.duniter.org/pini/32/6819_2.png) [@Pini](https://forum.duniter.org/u/Pini)
#### Post date: [26 November 2023 13:23 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/6 "2023-11-26T13:23:36Z")

</div>

Je pensais à un truc du même genre. En tout cas il me semble inutile de générer une image Docker spécifique pour l’oracle. En mode pragmatique voici ce que je propose dans un premier temps :

- Générer l’exécutable de l’oracle dans l’image docker de duniter-v2s
- Configurer l’entrée de crontab pour appeler cet exécutable dans le contexte du conteneur v2s. Par ex.:

```auto
4,24,44 * * * * nice -n 2 docker exec <duniter-v2s-container> /usr/local/bin/distance-oracle

```

C’est très simple et ça permet de lever le blocage sur la disponibilité de l’outil.

Ensuite il sera possible de raffiner le mécanisme comme le propose @tuxmain si le besoin se confirme.

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [18 January 2024 11:16 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/7 "2024-01-18T11:16:44Z")

</div>

Voici la solution que j’ai retenue pour mon infra :

```auto
duniter-gdev-smith/
├── distance-oracle
│ └── docker-compose.yml
└── docker-compose.yml

```

et mon fichier `distance-oracle/docker-compose.yml` :

```auto
# Duniter distance oracle plugging to smith node

version: "3.5"

# distance oracle uses same image but another entrypoint
services:
  distance-oracle:
    image: duniter/duniter-v2s-gdev:latest
    entrypoint: docker-distance-entrypoint
    environment:
      ORACLE_RPC_URL: "ws://duniter-smith:9944"
      ORACLE_RESULT_DIR: "/var/lib/duniter/chains/gdev/distance/"
      ORACLE_EXECUTION_INTERVAL: "1800"
      ORACLE_MAX_DEPTH: "5"
      ORACLE_LOG_LEVEL: "debug"
    volumes:
      - data-smith:/var/lib/duniter

# external volume of duniter node to share data for the inherent to read
volumes:
  data-smith:
    name: duniter-gdev-smith_data-smith
    external: true

# external network of duniter node to read data from rpc API
networks:
  duniter:
    name: duniter-gdev-smith_default

```

Donc :

- j’utilise la même image mais le nouvel entrypoint
- je peux arrêter l’oracle de distance indépendamment de mon nœud forgeron (par exemple pour changer le niveau de log)
- j’utilise un réseau docker pour lire les données depuis le nœud et un volume docker partagé pour poser les données dont l’inherent aura besoin

Tout ce qui me manque, c’est la bonne image docker, qui n’a pas été publiée puisque c’est maintenant une action manuelle.

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [12 February 2024 10:25 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/8 "2024-02-12T10:25:34Z")

</div>

J’ai fait tourner mon oracle de distance comme ça mais apparemment ça n’a pas marché. Exemple au bloc [73775](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/73775) où l’on voit :

![image](https://forum.duniter.org/uploads/default/original/2X/7/75594cac034ba0910bc647a0226b81830ad87ae1.png)

Un unreserve sans événement `EvaluatedValid` ou `EvaluatedInvalid` vient forcément de l’absence de résultat. Ceci se confirme en regardant le contenu de la pool d’évaluation pour le bloc précédent :

 ![image](https://forum.duniter.org/uploads/default/original/2X/d/ddb1c6c83378b90459db39eef560b348ea3b1b8a.png)

La solution dans les logs :

```auto
hugo@trentesaux:~/docker/duniter-gdev-smith/distance-oracle$ docker compose logs -f
distance-oracle-distance-oracle-1 | error: unexpected argument '-D' found
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | Usage: distance-oracle [OPTIONS]
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | For more information, try '--help'.
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | error: unexpected argument '-D' found
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | Usage: distance-oracle [OPTIONS]
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | For more information, try '--help'.
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | error: unexpected argument '-D' found
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | Usage: distance-oracle [OPTIONS]
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | For more information, try '--help'.
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | error: unexpected argument '-D' found
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | Usage: distance-oracle [OPTIONS]
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | For more information, try '--help'.
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | error: unexpected argument '-D' found
distance-oracle-distance-oracle-1 | 
distance-oracle-distance-oracle-1 | Usage: distance-oracle [OPTIONS]

```

C’est donc un problème de entrypoint docker qui n’a pas été mis à jour après [!226](https://git.duniter.org/nodes/rust/duniter-v2s/-/merge_requests/226)

```auto
    ~/dev/duniter-v2s    master  ./target/debug/duniter distance-oracle --help  101 ✘ 
Run distance oracle

Usage: duniter distance-oracle [OPTIONS]

Options:
  -d, --evaluation-result-dir <EVALUATION_RESULT_DIR> [default: /tmp/duniter/chains/gdev/distance]
  -u, --rpc-url <RPC_URL> [default: ws://127.0.0.1:9944]
  -h, --help Print help
  -V, --version Print version

```

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [22 February 2024 23:59 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/9 "2024-02-22T23:59:38Z")

</div>

J’ai avancé à deux à l’heure sur le sujet mais :

- j’ai corrigé le entrypoint [!242](https://git.duniter.org/nodes/rust/duniter-v2s/-/merge_requests/242)
- j’ai autorisé la connexion à une URL non TLS et non localhost [!250](https://git.duniter.org/nodes/rust/duniter-v2s/-/merge_requests/250)
- j’ai publié une image docker correspondant à ces changements (en attendant qu’on règle [#195](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/195)) [h30x/duniter-v2s-gdev:800.2](https://hub.docker.com/r/h30x/duniter-v2s-gdev/tags)

> **schéma de la #195**
>
> ![image](https://forum.duniter.org/uploads/default/original/2X/6/67c4acaffb959a9836cb01b0719d63a6d03795c8.png)

J’ai testé sur mon nœud forgeron et demandé l’évaluation de la règle de distance pour benjamin `gcli identity request-distance-evaluation-for 14572` au bloc [262489](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/262489) (après avoir utilisé mon pouvoir de sudo pour qu’il ait plus de certifications, parce que depuis [ça](https://forum.duniter.org/t/apprentis-forgerons/10665/35) on a redémarré le réseau).

J’ai créé [#202](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/202) parce que ça me gave d’attendre deux heures à chaque test.

Je vais ajouter mon docker compose à la doc parce que ça me semble pas mal de séparer en deux parties.

D’ailleurs GPT-4 m’a dit qu’il manquait `networks: -duniter` dans

> [@HugoTrentesaux](#):
>
> mon fichier `distance-oracle/docker-compose.yml`

et il avait raison, merci à lui et à @poka

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [27 February 2024 13:12 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/10 "2024-02-27T13:12:55Z")

</div>

Je fais trop de choses en même temps en ce moment (mais on a bien avancé sur l’intégration de Hasura à duniter-squid avec @poka), donc je n’ai pas donné de suite à ce fil. Mais voici un résumé :

Au bloc [262489](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/262489), je fais la demande d’évaluation de la règle de distance pour @bgallois :

```auto
# oui, c'est bien son pseudo "14572", qui correspond également à son idty index
gcli identity request-distance-evaluation-for 14572

```

Au bloc [263585](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/263585), mon nœud forgeron publie un résultat de 98.9 % (supérieur à 80 %).

Au bloc [263587](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/263587), mon nœud forgeron tente de publier à nouveau le résultat, mais la blockchain refuse. Donc c’est un bug ([#207](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/207)), @tuxmain, il me semble que le nœud forgeron ne devrait pas essayer de publier plusieurs fois.

Même chose au bloc [263604](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/263604).

Même chose au bloc [263605](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/263605).

Pour retrouver ces blocs, voici la requête GraphQL que j’ai exécutée :

```auto
# au format squid
query Distance {
  calls(limit: 10, where: {pallet_eq: "Distance"}) {
    pallet
    name
    block {
      height
    }
  }
}

```

```auto
# au format Hasura
query Distance {
  call(limit: 10, where: {pallet: {_eq: "Distance"}}) {
    pallet
    name
    block {
      height
    }
  }
}

```

Au bloc [264181](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/264181), Duniter intègre le résultat et émet l’événement `EvaluatedValid` (cf [doc des événements](https://duniter.org/wiki/duniter-v2/runtime-events/)), ainsi que `IdtyValidated` et `MembershipAdded`. Donc tout a eu lieu automatiquement, c’est bon 🎉 🎉 🎉

Cf [Adhésion automatique après évaluation de la distance](https://forum.duniter.org/t/adhesion-automatique-apres-evaluation-de-la-distance/11865) pour les discussions qui ont abouti à ça.

À noter que si l’identité avait déjà été membre par le passé, on aurait juste eu l’événement `MembershipAdded` et pas `IdtyValidated`.

Et s’il s’était agit d’un renouvellement d’identité, on aurait eu `MembershipRenewed` seulement.

* * *

C’est donc le moment pour ceux qui utilisent docker d’installer un oracle de distance : [Duniter | Distance oracle](https://duniter.org/wiki/duniter-v2/distance-oracle/). Mais il vous faut pour cela utiliser l’image `h30x/duniter-v2s-gdev:800.2` pour l’instant parce qu’on n’en a pas encore publié d’officielle (cf [#195](https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/195))

### ⚠ image à utiliser : `h30x/duniter-v2s-gdev:800.2`

(Et il nous faudra régler le bug pour éviter que l’oracle soumette des inhérents en échec, ça fait tâche même si c’est sans conséquences 😆)

---

<div class="post-metadata">

### Author: ![joss.rendall](https://forum.duniter.org/user_avatar/forum.duniter.org/joss.rendall/32/8566_2.png) [@joss.rendall](https://forum.duniter.org/u/joss.rendall)
#### Post date: [27 February 2024 15:31 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/11 "2024-02-27T15:31:46Z")

</div>

Docker d’un oracle mis en place.  
ici les logs du démarrage de cet oracle

> 2024-02-27T15:10:14.466Z DEBUG [distance\_oracle::api] Looking at Pool1 for session 549  
> 2024-02-27T15:10:14.467Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…  
> 2024-02-27T15:21:28.838Z DEBUG [distance\_oracle::api] Looking at Pool2 for session 550  
> 2024-02-27T15:21:28.839Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…

je l’ai redemarré des l’ouverture de la session 550 mais pas de changement, il ne trouve pas les Pool…

Normal ? Plus qu’à laisser attendre les 30 minutes ?

---

<div class="post-metadata">

### Author: ![joss.rendall](https://forum.duniter.org/user_avatar/forum.duniter.org/joss.rendall/32/8566_2.png) [@joss.rendall](https://forum.duniter.org/u/joss.rendall)
#### Post date: [27 February 2024 16:51 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/12 "2024-02-27T16:51:25Z")

</div>

> 2024-02-27T15:10:14.466Z DEBUG [distance\_oracle::api] Looking at Pool1 for session 549  
> 2024-02-27T15:10:14.467Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…  
> 2024-02-27T15:21:28.838Z DEBUG [distance\_oracle::api] Looking at Pool2 for session 550  
> 2024-02-27T15:21:28.839Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…  
> 2024-02-27T15:51:28.895Z DEBUG [distance\_oracle::api] Looking at Pool2 for session 550  
> 2024-02-27T15:51:28.895Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…  
> 2024-02-27T16:21:28.947Z DEBUG [distance\_oracle::api] Looking at Pool0 for session 551  
> 2024-02-27T16:21:28.948Z INFO [distance\_oracle] Nothing to do: Pool does not exist  
> Waiting 1800 seconds before next execution…

l’oracle tourne en rond j’ai l’impression…

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [27 February 2024 16:52 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/13 "2024-02-27T16:52:04Z")

</div>

```auto
distance-oracle-distance-oracle-1 | 2024-02-23T00:07:03.793Z DEBUG [distance_oracle::api] Looking at Pool1 for session 438
distance-oracle-distance-oracle-1 | 2024-02-23T00:07:03.794Z INFO [distance_oracle] Nothing to do: Pool does not exist
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | 2024-02-23T00:37:03.853Z DEBUG [distance_oracle::api] Looking at Pool2 for session 439
distance-oracle-distance-oracle-1 | 2024-02-23T00:37:03.861Z INFO [distance_oracle] Evaluating distance for session 439
distance-oracle-distance-oracle-1 | 2024-02-23T00:37:07.762Z DEBUG [distance_oracle] Evaluating distance for idty 14572
distance-oracle-distance-oracle-1 | 2024-02-23T00:37:07.770Z INFO [distance_oracle] Distance for idty 14572: 4020/4063 = 98.94167%
distance-oracle-distance-oracle-1 | 2024-02-23T00:37:07.772Z DEBUG [distance_oracle] Saving distance evaluation result to file `"/var/lib/duniter/chains/gdev/distance/440"`
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...
distance-oracle-distance-oracle-1 | 2024-02-23T01:07:07.835Z DEBUG [distance_oracle::api] Looking at Pool2 for session 439
distance-oracle-distance-oracle-1 | 2024-02-23T01:07:07.837Z INFO [distance_oracle] Nothing to do: File already exists
distance-oracle-distance-oracle-1 | Waiting 1800 seconds before next execution...

```

Oui j’ai eu peur un moment, mais c’est le bon message quand il n’y a rien à faire pour la session.

* * *

Quand il n’y a aucune demande, l’oracle n’est pas consulté. Il ne parle que quand on a besoin de lui comme l’exemple dans mes logs.

---

<div class="post-metadata">

### Author: ![joss.rendall](https://forum.duniter.org/user_avatar/forum.duniter.org/joss.rendall/32/8566_2.png) [@joss.rendall](https://forum.duniter.org/u/joss.rendall)
#### Post date: [27 February 2024 16:53 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/14 "2024-02-27T16:53:11Z")

</div>

ouf… car si l’oracle est aveugle, on n’est pas dans la merde !!! 😂

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [27 February 2024 16:55 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/15 "2024-02-27T16:55:54Z")

</div>

Voilà en plus lisible la partie intéressante :

```auto
DEBUG [distance_oracle::api] Looking at Pool2 for session 439
INFO [distance_oracle] Evaluating distance for session 439
DEBUG [distance_oracle] Evaluating distance for idty 14572
INFO [distance_oracle] Distance for idty 14572: 4020/4063 = 98.94167%
DEBUG [distance_oracle] Saving distance evaluation result to file `"/var/lib/duniter/chains/gdev/distance/440"`

```

Il faudra faire des renouvellements d’adhésion en masse pour voir comment l’oracle se comporte maintenant qu’il y en a deux.

---

<div class="post-metadata">

### Author: ![joss.rendall](https://forum.duniter.org/user_avatar/forum.duniter.org/joss.rendall/32/8566_2.png) [@joss.rendall](https://forum.duniter.org/u/joss.rendall)
#### Post date: [27 February 2024 16:56 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/16 "2024-02-27T16:56:36Z")

</div>

Toujours pareil, je reste à votre dispo !!

 ![Capture d’écran du 2024-02-27 18-03-38](https://forum.duniter.org/uploads/default/original/2X/9/988347ee149f8c3eddd9bfbf25eef2dbd0ba5a03.png)  
Je vois de la commande Sudo !!! Monsieur @HugoTrentesaux fait des tests !!! 🫡

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [27 February 2024 17:12 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/17 "2024-02-27T17:12:23Z")

</div>

Affirmatif ! J’ai demandé l’évaluation de la distance pour plusieurs identités, certaines dont l’adhésion a expiré, d’autres qui étaient sur le point d’expirer. Dans les interfaces ça s’appellera “redemander l’adhésion” ou “renouveler l’adhésion” en fonction des cas. Mais c’est le même appel. Je l’ai fait en sudo car seul les utilisateurs peuvent gérer leurs identités. Et pour savoir quels utilisateurs utiliser, j’ai fait :

```auto
query MembershipsToExpire {
  identities(
    limit: 10
    orderBy: expireOn_ASC
    where: { expireOn_gt: 320000, AND: { expireOn_lt: 333333 } }
  ) {
    id
    index
    name
    expireOn
  }
}

```

Donc au prochain round, ton oracle (et le mien) auront un peu de travail.

---

<div class="post-metadata">

### Author: ![joss.rendall](https://forum.duniter.org/user_avatar/forum.duniter.org/joss.rendall/32/8566_2.png) [@joss.rendall](https://forum.duniter.org/u/joss.rendall)
#### Post date: [27 February 2024 17:23 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/18 "2024-02-27T17:23:13Z")

</div>

[\_duniter-v2s-oracle-dist-distance-oracle-1\_logs.txt](https://forum.duniter.org/uploads/short-url/x55dOXOKtdJELQUONBijCwV0Yqc.txt) (3,7 Ko)  
pas bossé longtemps l’oracle…quel _ **faignasse** _!!!

---

<div class="post-metadata">

### Author: ![tuxmain](https://forum.duniter.org/user_avatar/forum.duniter.org/tuxmain/32/6423_2.png) [@tuxmain](https://forum.duniter.org/u/tuxmain)
#### Post date: [27 February 2024 22:48 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/19 "2024-02-27T22:48:43Z")

</div>

> [@HugoTrentesaux](#):
>
> mon nœud forgeron tente de publier à nouveau le résultat

C’est étonnant, je regarderai. Il est censé vérifier s’il a déjà publié.

> [@joss.rendall](#):
>
> pas bossé longtemps l’oracle…quel _ **faignasse** _!!!

Justement, ça veut dire qu’il travaille vite ! Et si tu regardes le graphique d’utilisation des cœurs du processeur, ils devraient tous être utilisés simultanément.  
Sur une machine moins puissante, avec beaucoup plus de demandes et une toile plus large, il pourrait mettre plusieurs secondes voire minutes à tourner.

Edit: par contre les erreurs et les documentations ont été changées, je ne comprends pas ce que signifie `TooManyEvaluationsByAuthor` dont le doc-comment me semble avoir un sens contradictoire. Je n’ai pas suivi la vague de changements que vous avez faits depuis donc je suis complètement perdu, il faudra que je relise tout.

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [28 February 2024 12:41 UTC](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706/20 "2024-02-28T12:41:15Z")

</div>

Ça n’a pas tant changé que ça, c’est surtout des commentaires en plus. Et l’erreur `TooManyEvaluationsByAuthor` est toujours retournée lorsque l’auteur essaye de publier plusieurs fois une évaluation dans la même session avec l’inherent `update_evaluation`.

```rust
/// update distance evaluation in next pool
fn do_update_evaluation(
    evaluator: <T as frame_system::Config>::AccountId,
    computation_result: ComputationResult,
) -> DispatchResult {
    Pallet::<T>::mutate_next_pool(pallet_session::CurrentIndex::<T>::get(), |result_pool| {
        // evaluation must be provided for all identities (no more, no less)
        ensure!(
            computation_result.distances.len() == result_pool.evaluations.len(),
            Error::<T>::WrongResultLength
        );

        // insert the evaluator if not already there
        if result_pool
            .evaluators
            .try_insert(evaluator.clone())
            .map_err(|_| Error::<T>::TooManyEvaluators)?
        {
            // update the median accumulator with the new result
            for (distance_value, (_identity, median_acc)) in computation_result
                .distances
                .into_iter()
                .zip(result_pool.evaluations.iter_mut())
            {
                median_acc.push(distance_value);
            }
            Ok(())
        } else {
            // one author can only submit one evaluation
            Err(Error::<T>::TooManyEvaluationsByAuthor.into())
        }
    })
}

```

Pour l’instant je vois que le client de distance regarde s’il ne fait pas partie des evaluators des published\_results, mais il récupère cette donnée en utilisant un storage prefix hardcodé :

```rust
let published_results = client
    .storage(
        parent,
        &StorageKey(
            frame_support::storage::storage_prefix(

```

Il est possible que ce préfixe ait évolué et comme il n’y a pas de test pour ce scénario on ne s’en est pas aperçu. C’est mon hypothèse pour l’instant.

[Next page](https://forum.duniter.org/t/oracle-de-distance-dans-un-docker/11706.md?page=2)
