Yes c’est une solution !
Mais je viens d’avoir une fulgurance ! En fait il y a beaucoup plus simple ! Sur la couche identify() de libp2p, on peut déclarer tous les protocoles que l’on veut, par exemple aujourd’hui une nœud Substrate déclare tous ceux-là :
[
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/block-announces/1'
'/gdev/block-announces/1'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/grandpa/1'
'/paritytech/grandpa/1'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/transactions/1'
'/gdev/transactions/1'
'/ipfs/ping/1.0.0'
'/ipfs/id/1.0.0'
'/ipfs/id/push/1.0.0'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/kad'
'/gdev/kad'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/state/2'
'/gdev/state/2'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/sync/warp'
'/gdev/sync/warp'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/sync/2'
'/gdev/sync/2'
'/c184c4ccde8e771483bba7a01533d007a3e19a66d3537c7fd59c5d9e3550b6c3/light/2'
'/gdev/light/2'
]
Mais on peut bien rajouter ceux que l’on veut, par exemple ceux précisés par les options au lancement de Duniter V2. Ainsi, c’est le nœud qui déclare lui-même “ses APIs”, il peut dire qu’il supporte le protocole “indexeur V2S” sur telle adresse. Bien évidemment derrière ce n’est pas lui mais on s’en fiche, on se sert juste de la couche P2P pour porter l’information.
Bref c’est un gossip naturel porté par libp2p.
Bon, je ferai quelques tests d’ici demain mais ça semble bien plus souple et très facile d’accès !