# Mise en place oracle : mise en place connexion réseau RPC avec le nœud forgeron

**URL:** https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504
**Category:** Duniter-v2s
**Tags:** docker, podman, oracle, distance, systemd
**Created:** [23 September 2024 15:21 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504 "2024-09-23T15:21:00Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [23 September 2024 15:21 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/1 "2024-09-23T15:21:00Z")

</div>

J’essaye de mettre en place l’oracle. J’ai ça dans les journaux :

```auto
thread 'main' panicked at /root/distance-oracle/src/api.rs:31:10:
Cannot create RPC client: Rpc(ClientError(Transport(Error when opening the TCP socket: Connection refused (os error 111))))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Waiting 1800 seconds before next execution...

```

Comment communiquent le nœud forgeron et l’oracle ? Via RPC ? Via le système de fichier ? Je suppose via RPC.  
Cette erreur dit-elle que l’oracle a un problème à se connecter au nœud smith via RPC ?  
Il me semble avoir un problème sous Fedora pour avoir un bridge, réseau de `podman` et `docker` fonctionner correctement, car `firewalld` est utilisé à la place `iptables`. À creuser…

---

<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: [24 September 2024 08:38 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/2 "2024-09-24T08:38:19Z")

</div>

Effectivement l’oracle récupère la toile de confiance via l’API RPC et ensuite dépose le résultat sur le système de fichier. Les configurations par défaut sont visibles ici : [distance-oracle/src/lib.rs · e26f94afd0221178957d5f6be3164483edf1de92 · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/e26f94afd0221178957d5f6be3164483edf1de92/distance-oracle/src/lib.rs#L80-81).

Peux-tu donner plus d’infos sur la manière dont tu configures ton réseau ? Voici comment j’ai fait la séparation sur [la doc](https://duniter.org/wiki/duniter-v2/distance-oracle/) :

1. je déclare un réseau extérieur correspondant à mon nœud archive

```auto
# external network of duniter node to read data from rpc API
networks:
  duniter:
    name: duniter-gdev-smith_default # <---- network name of your smith node
    external: true

```

1. je définis le endpoint RPC en utilisant le nom du service dans ce réseau

```auto
ORACLE_RPC_URL: "ws://duniter-smith:9944" # <--- here "duniter-smith" corresponds to your smith service

```

Comme en pratique ça ne fonctionne pas actuellement parce que j’ai configuré mon nœud forgeron pour garder 256 blocs alors qu’il en faudrait 600 (cf [docs/user/distance.md#additional-duniter-configuration](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docs/user/distance.md?ref_type=heads#additional-duniter-configuration)), j’ai opté pour une solution externe :

```auto
ORACLE_RPC_URL: "wss://gdev.coinduf.eu/"

```

Ça a l’air de fonctionner :

```auto
2024-09-23T17:21:17.856Z DEBUG [distance_oracle::api] Looking at Pool1 for session 5568
2024-09-23T17:21:17.872Z INFO [distance_oracle] Evaluating distance for session 5568
2024-09-23T17:21:36.401Z DEBUG [distance_oracle] Evaluating distance for idty 14588
2024-09-23T17:21:36.405Z INFO [distance_oracle] Distance for idty 14588: 1684/1736 = 97.00461%
2024-09-23T17:21:36.407Z DEBUG [distance_oracle] Saving distance evaluation result to file `"/var/lib/duniter/chains/gdev/distance/5569"`
Waiting 180 seconds before next execution...

```

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [24 September 2024 15:31 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/3 "2024-09-24T15:31:41Z")

</div>

J’ai suivi [le readme](https://git.duniter.org/nodes/rust/duniter-v2s/-/tree/master/distance-oracle#usage-with-docker), qui m’a amené sur ce [`compose`](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docker-compose.yml).

Merci pour ta réponse, ça m’a aidé avec plus de ressources.

J’ai essayé de convertir les fichiers compose vers Quadlet (Podman + Systemd).  
J’ai un peu galéré avec les volumes et réseaux. J’ai fini par trouver, il m’a fallu définir `"ORACLE_RPC_URL=ws://systemd-duniter-v2s-validator:9944"` en rapport avec le nom du fichier et définir ces deux champs dans les deux fichiers :

```yml
Volume=data-validator:/var/lib/duniter/
Network=duniter-v2s_default

```

Maintenant, j’ai ça dans les logs de l’oracle, je vais voir si ça bouge dans le futur :

```auto
podman logs -f systemd-distance-oracle
INFO [distance_oracle] Nothing to do: Pool does not exist
Waiting 1800 seconds before next execution...

```

Voici mes fichiers pour ceux qui veulent essayer la solution Podman + systemd :

- 
##### `$HOME/.config/containers/systemd/duniter-v2s-validator.container` :

```yml
[Container]
Image=docker.io/duniter/duniter-v2s-gdev-800:latest
AutoUpdate=registry
# Prometheus endpoint
PublishPort=9615:9615
# p2p
PublishPort=30333:30333
# rpc websocket
PublishPort=9944:9944
Volume=data-validator:/var/lib/duniter/
Network=duniter-v2s_default
Environment="DUNITER_CHAIN_NAME=gdev" "DUNITER_VALIDATOR=true" "DUNITER_NODE_NAME=XYZ-smith"

[Service]
Restart=always

[Install]
WantedBy=default.target

```

- 
##### `$HOME/.config/containers/systemd/distance-oracle.container` :

```yml
[Container]
Image=docker.io/duniter/duniter-v2s-gdev-800:latest
AutoUpdate=registry
Volume=data-validator:/var/lib/duniter/
Network=duniter-v2s_default
Environment="ORACLE_RPC_URL=ws://systemd-duniter-v2s-validator:9944" "ORACLE_RESULT_DIR=/var/lib/duniter/chains/gdev/distance/" "ORACLE_EXECUTION_INTERVAL=1800" "ORACLE_MAX_DEPTH=5" "ORACLE_LOG_LEVEL=info"
Entrypoint=docker-distance-entrypoint

[Service]
Restart=always

[Install]
WantedBy=default.target

```

À utiliser ainsi (sans `root`) :

```auto
systemd --user daemon-reload
systemd --user start duniter-v2s-validator
systemd --user start distance-oracle

```

---

<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: [24 September 2024 15:55 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/4 "2024-09-24T15:55:22Z")

</div>

Effectivement, il y a des trucs à mettre à jour sur ce docker-compose, j’ai une MR en cours là dessus que je n’ai jamais terminée [Draft: update docker compose examples (!270) · Merge requests · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/merge_requests/270/diffs).

Notamment :

- l’API RPC unsafe n’est pas censée être ouverte sur l’extérieur, donc il ne faut pas bind le port 9944 à 0.0.0.0 mais seulement localhost
- c’est mieux de déclarer explicitement l’adresse publique p2p, notamment si le port public n’est pas 30333

Quand il faudra évaluer la distance de Daigongen (cf [Compte Daigongen en v2](https://forum.duniter.org/t/compte-daigongen-en-v2/12508)), on devrait le voir dans les logs. En attendant, il n’y a pas beaucoup de demande.

Amusant Quadlet, je me souviens avoir lu [l’article que tu avais partagé](https://forum.duniter.org/t/podman-et-buildah-cest-docker-sans-docker/6062/9). Peut-être à proposer officiellement parmi les différentes méthodes d’installation…

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [24 September 2024 16:58 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/5 "2024-09-24T16:58:49Z")

</div>

Est-ce toujours nécessaire de mettre en place [la section `Running distance evaluation` de la documentation](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docs/user/distance.md?ref_type=heads#running-distance-evaluation) ? L’oracle semble à présent fonctionner comme un daemon et la fréquence est configurable. Si c’est correct, je veux bien supprimer cette section via une MR.

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [24 September 2024 17:01 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/6 "2024-09-24T17:01:39Z")

</div>

Concernant le fait de devoir conserver plus de blocs pour que l’oracle fonctionne correctement. J’ai tenté de passer mon nœud en archive, mais c’est incompatible avec le fait d’être forgeron.  
La définition de la [variable d’environnement `DUNITER_PRUNING_PROFILE`](https://git.duniter.org/nodes/rust/duniter-v2s/-/tree/master/docker?ref_type=heads#environment-variables) n’est pas clair, elle ne précise pas combien c’est par défault. Est-il possible de passer une valeur comme `600` à cette envvar ?

---

<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: [24 September 2024 17:19 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/7 "2024-09-24T17:19:00Z")

</div>

Non, le binaire de l’oracle ne fonctionne pas comme un daemon il me semble, c’est juste un script bash qui l’exécute régulièrement : [docker/docker-distance-entrypoint · master · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docker/docker-distance-entrypoint?ref_type=heads).

Effectivement, c’est _a priori_ pas une bonne idée d’avoir un nœud validateur configuré comme archive. Le `DUNITER_PRUNING_PROFILE` est un wrapper de `--state-pruning` et `--blocks-pruning` (cf [docker/docker-entrypoint · master · nodes / rust / Duniter v2S · GitLab](https://git.duniter.org/nodes/rust/duniter-v2s/-/blob/master/docker/docker-entrypoint?ref_type=heads#L75)). Pour l’aide de duniter directement, c’est `duniter --help` :

```auto
      --state-pruning <PRUNING_MODE>
          Specify the state pruning mode.
          
          This mode specifies when the block's state (ie, storage) should be pruned (ie, removed) from the database.
          This setting can only be set on the first creation of the database. Every subsequent run will load the pruning
          mode from the database and will error if the stored mode doesn't match this CLI value. It is fine to drop this
          CLI flag for subsequent runs. Possible values: - archive: Keep the state of all blocks. - 'archive-canonical'
          Keep only the state of finalized blocks. - number Keep the state of the last number of finalized blocks.
          [default: 256]

      --blocks-pruning <PRUNING_MODE>
          Specify the blocks pruning mode.
          
          This mode specifies when the block's body (including justifications) should be pruned (ie, removed) from the
          database. Possible values: - 'archive' Keep all blocks. - 'archive-canonical' Keep only finalized blocks. -
          number Keep the last `number` of finalized blocks.
          
          [default: archive-canonical]

```

Pas la peine de passer à 600 par défaut, puisque le runtime 802 ramène à une évaluation plus fréquente de la règle de distance. Il faut juste lancer un runtime upgrade, ce sera l’occasion de faire fonctionner le comité technique.

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [26 September 2024 12:13 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/8 "2024-09-26T12:13:32Z")

</div>

Ça y est, il y a du mouvement sur mon oracle :

```auto
Waiting 1800 seconds before next execution...
INFO [distance_oracle] Evaluating distance for session 5634
INFO [distance_oracle] Distance for idty 9653: 797/1710 = 46.608185%
INFO [distance_oracle] Distance for idty 13585: 1362/1710 = 79.649124%
INFO [distance_oracle] Distance for idty 9710: 1369/1710 = 80.05848%
INFO [distance_oracle] Distance for idty 5938: 1454/1710 = 85.02924%
INFO [distance_oracle] Distance for idty 10051: 1590/1710 = 92.98246%
INFO [distance_oracle] Distance for idty 6535: 1618/1710 = 94.61988%
INFO [distance_oracle] Distance for idty 13578: 1634/1710 = 95.55556%
INFO [distance_oracle] Distance for idty 9902: 1616/1710 = 94.50293%
INFO [distance_oracle] Distance for idty 10291: 1688/1710 = 98.713455%
Waiting 1800 seconds before next execution...
INFO [distance_oracle] Nothing to do: File already exists

```

Mon oracle est donc bien installé et fonctionnel ! Le résultat est ensuite partagé via le volume au nœud forgeron 🎉

* * *

J’aimerais rajouter la date dans les logs, mais ça semble être déjà activé par défaut sur [`simple logger`](https://docs.rs/crate/simple_logger/latest/features#time). Je ne trouve pas dans le répertoire de l’oracle où est-ce que ça pourrait être désactivé.

---

<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 September 2024 08:42 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/9 "2024-09-27T08:42:10Z")

</div>

> [@Moul](#):
>
> il y a du mouvement sur mon oracle

C’est la vague de renouvellements que j’ai initié ici : [Renouvellement d'adhésion sudo](https://forum.duniter.org/t/renouvellement-dadhesion-sudo/12516). Bizarre pour la date, moi elle est bien présente :

```auto
distance-oracle-distance-oracle-1 | 2024-09-27T08:38:31.423Z INFO [distance_oracle] Nothing to do: Pool does not exist

```

Est-ce que ce serait docker qui l’ajoute ?

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [27 September 2024 09:12 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/10 "2024-09-27T09:12:25Z")

</div>

En effet, je découvre, que `podman logs --help` a une option pour afficher le timestamp :

```auto
-t, --timestamps Output the timestamps in the log

```

L’option doit être activée par défaut avec `docker logs`.

Du coup, je suppose que les timestamps sont écrits dans le fichier de log par `simple_logger` et que `podman` et `docker` l’affichent ou pas avec la commande `logs`.

---

<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 September 2024 12:49 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/11 "2024-09-27T12:49:33Z")

</div>

Il me semble que le “fichier log” est juste le _stdout_. Mais bon, si l’option `-t` répond au problème, très bien ^^

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [27 September 2024 12:55 UTC](https://forum.duniter.org/t/mise-en-place-oracle-mise-en-place-connexion-reseau-rpc-avec-le-noeud-forgeron/12504/12 "2024-09-27T12:55:11Z")

</div>

En fait, si j’active cette option sur les logs de Duniter v2s, j’ai deux fois la date.  
Du coup, pour l’oracle, je n’ai pas de date. Autrement, cette option me suffit avec l’oracle dans un conteneur.
