Duniter mock: Easy start your v2s dev stack

Avec @ManUtopiK on a créé un repo Duniter mock: tools / Duniter mocks · GitLab

Ca permet de très facilement lancer une chaine Duniter, ainsi qu’un Squid associé, et l’orcale de distance, en local avec des données de tests mockés.

Le readme explique bien comment ça fonctionne, c’est très facile vous allez voir. Avec Manu en tout cas on aime beaucoup.

C’était un peu galère sinon de lancer un squid local cohérent avec notre chaine Duniter. Là on a tout.
Pour développer les clients ça va être très utile.

7 Likes

Premier essai de duniter-mocks ! :rocket:

C’est vraiment top d’utiliser uv ! :star_struck:

Je test donc le parcours membre :

  • Alice verse 5 Junes à un compte dérivé du mnémonique root de Alice, avec la dérivation //Zargos
  • Alice créer une identité pour Zargos dans Tikka. Ok.
  • Zargos confirme son identité #7 dans Tikka avec le nom Zargos. Ok.
  • Bob certifie Zargos qui a maintenant deux certifications et devrait passer membre. KO !

J’ai beau patienter, le statut de l’identité reste bloqué à Unvalidated avec 2 certifications.

j’ajoute une troisième certification, alors que la config de base semble ne demander que deux certifications. KO!

Voici les logs de l’oracle avec un message d’erreur de connection au départ.
A noter que j’ai deux message sur la pool avec les 2 certifications et 3 avec la 3ème.

(.venv) vit@K72Jr:~/Documents/dev/blockchain/duniter-mocks$ docker logs distance-oracle 
thread 'main' panicked at /root/distance-oracle/src/api.rs:32:10:
Cannot create RPC client: Rpc(ClientError(Transport(Io(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" }))))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Waiting 600 seconds before next execution...
INFO  [distance_oracle] Nothing to do: Pool does not exist
Waiting 600 seconds before next execution...
INFO  [distance_oracle] Nothing to do: Pool does not exist
Waiting 600 seconds before next execution...
INFO  [distance_oracle] Nothing to do: Pool does not exist
Waiting 600 seconds before next execution...

Dans la documentation je rajouterai de taper :(non pas la peine !)

uv venv .venv
source .venv/bin/activate

pour ne pas installer les dépendances python sur les dépendances du python système…

Super outil en tout cas ! Bravo ! :star_struck:

4 Likes

As-tu changé les ports dans le docker compose, car déjà occupés ? Ça doit rester à 9944, car c’est à l’intérieur du réseau docker, pas dans le réseau local de l’hôte.

ORACLE_RPC_URL: ws://duniter:9944

Uniquement la partie gauche de la ligne suivante peut être changée, en cas de conflit de ports, car déjà une instance de Duniter v2 qui tourne en local :

    ports:
      - "9946:9944"      # RPC/WS

Tout ça est plutôt bien géré dans le run.sh et ce dernier est plutôt bien documenté. La dépendance substrate-interface est utilisée uniquement avec ./run.sh generate pour le fichier generate.py. Autrement, pas besoin du venv Python, non ?

Non je n’ai rien changé et seul duniter-mock est lancé sur mon laptop…


CONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS                    PORTS                                                                                                                                 NAMES
241a5a1caf9c   duniter/squid-graphile-gtest:0.5.6    "./docker-entrypoint…"   57 minutes ago   Up 56 minutes             0.0.0.0:8081->5678/tcp, :::8081->5678/tcp                                                                                             squid-graphql
96de6088cd85   duniter/squid-app-gtest:0.5.6         "docker-entrypoint.s…"   57 minutes ago   Up 57 minutes (healthy)                                                                                                                                         squid-processor
218ab70b081e   duniter/duniter-v2s-gdev-800:latest   "docker-distance-ent…"   57 minutes ago   Up 57 minutes             9615/tcp, 9944/tcp, 30333/tcp                                                                                                         distance-oracle
f942dc326001   duniter/squid-postgres-gtest:0.5.6    "docker-entrypoint.s…"   57 minutes ago   Up 57 minutes (healthy)   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp                                                                                             squid-db
3238a8c5fe30   duniter/duniter-v2s-gdev-800:latest   "docker-entrypoint -…"   57 minutes ago   Up 57 minutes (healthy)   0.0.0.0:9615->9615/tcp, :::9615->9615/tcp, 0.0.0.0:9944->9944/tcp, :::9944->9944/tcp, 0.0.0.0:30333->30333/tcp, :::30333->30333/tcp   duniter-mock

Effectivement run.sh gère bien l’environnement python. J’ai modifié mon message.

Le calcul de distance par l’oracle de duniter-mock fonctionne parfaitement !

C’est juste moi qui avait oublié de faire la demande d’évaluation de distance après une certification sur une identité avec le statut Unvalidated.

Par contre, cela a fait surgir un bug sur le json des certifications (certDetails).
Dans la même certification, l’émetteur a le statut Validated et le receveur le statut Member, alors que c’est le même statut !!?? :sweat_smile:
Voir le ticket

J’ai relevé un problème similaire clients/python/tikka#32. C’est Duniter et/ou l’indexeur qui ont deux valeurs pour la même chose ?

1 Like

Je pense que tu as raison. Mes tests se font toujours sur les données importées de la V1, et sur les identités provenant des noeuds RPC. Le statut pour Duniter est Validated et est alors importé comme tel dans squid.

Puis, après lancement de la blockchain, quand une identité devient membre, squid utilise le mot Member pour ce statut. C’est donc un bug de squid. Je préconise que squid conserve la dénomination de Duniter.

1 Like

Je ne trouve aucune identité sur squid avec le statut “Validated” sur la ĞTest :

query I {
  identities(filter: {status: {notIn: ["Member", "Removed", "Unvalidated", "NotMember", "Unconfirmed", "Revoked"]}}) {
    nodes {
      name
      status
    }
  }
}

Pouvez-vous pointer plus précisément comment reproduire ce statut “Validated” ?

La seule occurrence de “Validated” dans le code de squid, c’est l’événement duniter IdtyValidated.

C’est peut-être sur la ĞDev ? Duniter-mock est sur la ĞDev.

Avec ta query sur la ĞDev, lancé avec duniter-mock, j’obtiens :

{
  "data": {
    "identities": {
      "nodes": [
        {
          "name": "Alice",
          "status": "Validated"
        },
        {
          "name": "Bob",
          "status": "Validated"
        },
        {
          "name": "Charlie",
          "status": "Validated"
        },
        {
          "name": "Dave",
          "status": "Validated"
        },
        {
          "name": "Eve",
          "status": "Validated"
        }
      ]
    }
  }
}

De toute manière il est temps de mettre à jour Duniter-mock vers une version plus à jour de Duniter v2. C’est dans mes cartons pour quand je m’attaquerais à ce projet.

4 Likes

Ok, intéressant. En effet les images de duniter mock sont duniter/duniter-v2s-gdev-800 et duniter/squid-postgres-gtest:0.5.6, il y a moyen que le nom du statut ait évolué depuis, ça fait quand même beaucoup de commits.

j’ai bump en local non commité vers dernière image gtest effectivement, je pousserai ça