# Oracle de distance sur la ĞDev

**URL:** https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807
**Category:** ĞDev
**Tags:** distance
**Created:** [7 December 2023 13:19 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807 "2023-12-07T13:19:33Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [7 December 2023 13:19 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/1 "2023-12-07T13:19:33Z")

</div>

C’est bon pour @bgallois pour être membre, reste plus que la distance.

Je regarde pour faire tourner un Oracle.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [7 December 2023 21:15 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/2 "2023-12-07T21:15:09Z")

</div>

C’est bon, j’ai ajouté un Oracle de distance sur mon nœud. J’ai envoyé une demande pour moi-même afin de vérifier que tout roule, mais j’ai déjà testé en local donc je suis confiant.

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

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

@bgallois tu peux tenter !

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [8 December 2023 06:26 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/3 "2023-12-08T06:26:18Z")

</div>

```
2023-12-07T21:42:52.516Z DEBUG [distance_oracle::api] Looking at Pool1 for session 192
2023-12-07T21:42:52.519Z DEBUG [distance_oracle] Evaluating distance for session 192
2023-12-07T21:42:52.519Z DEBUG [distance_oracle] Loading WoT data…
2023-12-07T21:42:54.679Z DEBUG [distance_oracle] Evaluating distance for idty 34
2023-12-07T21:42:54.681Z DEBUG [distance_oracle] Distance for idty 34: 3998/4040 = 98.9604%

```

Je pense que tout s’est bien passé, il faudrait retrouver les évènements dans l’indexeur mais à mon avis tout a bien roulé.

---

<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: [8 December 2023 12:08 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/4 "2023-12-08T12:08:08Z")

</div>

On dirait que non. C’est difficile à observer sans événements, mais :

```auto
query MyQuery {
  calls(where: {pallet_eq: "Distance"}) {
    pallet
    name
    block{height}
  }
}

```

- [114147](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/114147) demande de cgeek
- [121197](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/121197) demande de benjamin
- [121497](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/121497) demande de hugo

```auto
query MyQuery {
  events(where: {name_eq: "Unreserved"}) {
    pallet
    name
    block {
      height
    }
  }
}

```

- [115754](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/115754) unreserve pour cgeek
- [122939](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fgdev.coinduf.eu%2Fws#/explorer/query/122939) unreserve pour benjamin et hugo

Il y a deux cas pour unreserve :

- une évaluation positive (mais dans ce cas `identityDistanceStatus()` est `Some()`)
- pas d’évaluation fournie

Donc je pense qu’il n’y a pas eu d’évaluation (`samples` est toujours resté `[]`).

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [8 December 2023 20:40 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/5 "2023-12-08T20:40:38Z")

</div>

Je viens de re-tenter, ça vient peut-être de [cette instruction](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/client/distance/src/lib.rs#L45-45) :

```auto
let &[owner_key] = owner_keys else {
    return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None));
};

```

Le pattern `let-else` en Rust fait que si `owner_keys` n’est pas exactement un tableau à une entrée alors on tombe dans le `return Ok`, et donc le résultat calculé par l’oracle est ignoré.

C’est possible si le répertoire `keystore/` héberge plusieurs clés Babe. Normalement le répertoire ne contient que 4 fichiers pour la ĞDev. J’en avais plus, tout comme en local cette instruction m’a posé problème car j’avais seulement 4 fichiers MAIS j’utilisais l’option `--alice` en plus, qui injectait un trousseau supplémentaire.

Plus qu’à attendre.

```
2023-12-08T20:50:05.633Z DEBUG [distance_oracle] Evaluating distance for session 215
2023-12-08T20:50:05.633Z DEBUG [distance_oracle] Loading WoT data…
2023-12-08T20:50:07.809Z DEBUG [distance_oracle] Evaluating distance for idty 34
2023-12-08T20:50:07.811Z DEBUG [distance_oracle] Distance for idty 34: 3995/4037 = 98.959625%

```

---

<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: [8 December 2023 22:37 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/6 "2023-12-08T22:37:03Z")

</div>

Ok si `owner_keys` peut avoir plusieurs éléments on peut remplacer le let par `let &[owner_key, ..]`. Mais alors je ne sais plus si la première est vraiment celle qu’il faut prendre.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [9 December 2023 07:34 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/7 "2023-12-09T07:34:57Z")

</div>

Non mais je pense que c’est déjà bien codé, j’ajouterai juste un log du style :

```rust
let &[owner_key] = owner_keys else {
    log::error!("🧙 [distance oracle] More than one Babe owner key: oracle cannot work");
    return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None));
};

```

Du reste, la distance n’est pas mieux passée cette nuit. Je viens d’ajouter des logs pour comprendre ce qui bloque.

edit : OK j’avais un bug dans mon installation, je vais re-tenter !

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [9 December 2023 11:44 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/8 "2023-12-09T11:44:21Z")

</div>

Et voilà, une évaluation a été publiée via l’oracle 🙂 bien joué @tuxmain !

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

Une session plus tard :

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

Je vais m’atteler à publier une MR pour nettoyer tout ça, et que chacun puisse ajouter son Oracle au réseau via Docker.

---

<div class="post-metadata">

### Author: ![cgeek](https://forum.duniter.org/user_avatar/forum.duniter.org/cgeek/32/279_2.png) [@cgeek](https://forum.duniter.org/u/cgeek)
#### Post date: [5 January 2024 20:42 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/9 "2024-01-05T20:42:50Z")

</div>

Je viens de merger, vous pouvez tenter l’installation en prenant exemple sur le [`docker-compose.yml`](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/bd45d2f6b356171b4373295383a4ac869addaed1/docker-compose.yml) :

```plaintext
  distance-oracle:
    container_name: distance-oracle
    # choose the version of the image here
    image: duniter/duniter-v2s:latest
    entrypoint: docker-distance-entrypoint
    environment:
      ORACLE_RPC_URL: "ws://duniter-v2s:9944"
      ORACLE_RESULT_DIR: "/var/lib/duniter/chains/gdev/distance/"
      ORACLE_EXECUTION_INTERVAL: "1800"
      ORACLE_MAX_DEPTH: "5"
      ORACLE_LOG_LEVEL: "info"
    volumes:
      - duniter-local-data:/var/lib/duniter

```

---

<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: [8 January 2024 17:57 UTC](https://forum.duniter.org/t/oracle-de-distance-sur-la-gdev/11807/10 "2024-01-08T17:57:10Z")

</div>

C’est mergé, maintenant l’exécutable séparé pour l’oracle n’est plus nécessaire, on peut le remplacer par la commande `duniter distance-oracle`. (mais c’est toujours un processus séparé, et il faut toujours lui donner les arguments adéquats)
