Oracle de distance sur la ĞDev

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

Je regarde pour faire tourner un Oracle.

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.

@bgallois tu peux tenter !

3 Likes
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é.

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

query MyQuery {
  calls(where: {pallet_eq: "Distance"}) {
    pallet
    name
    block{height}
  }
}
query MyQuery {
  events(where: {name_eq: "Unreserved"}) {
    pallet
    name
    block {
      height
    }
  }
}
  • 115754 unreserve pour cgeek
  • 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é []).

Je viens de re-tenter, ça vient peut-être de cette instruction :

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%
2 Likes

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.

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

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 !

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

Une session plus tard :

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

6 Likes

Je viens de merger, vous pouvez tenter l’installation en prenant exemple sur le docker-compose.yml :

  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
1 Like

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)

2 Likes