WotWizardV2

Bonjour,

Félicitations pour votre titanesque travail d’implémentation de duniterv2.

Je lance le développement de la nouvelle version de WotWizard. Tout d’abord, j’aimerais connaître le protocole exact de connexion aux indexeurs de duniter. J’ai essayé plusieurs variantes, mais aucune ne fonctionne. Par exemple, pour obtenir mon identité, j’ai envoyé en POST :

{
	"query":
		"query test($hint:String!){identityByAccountId(accountId:$hint){id name status isMember}}",
	"variables":
		[
			{
				"hint":
				"g1LKtUSD1ArvJ2vNXTi7GTjebJc1YMxtgo8ZmcNhraz2pFgHa"
			}
		]
}

et j’obtiens l’erreur suivante :

{
    "errors": [
        {
            "message": "Must provide a query string."
        }
    ]
}

Que dois-je modifier ? Merci.

6 Likes

C’est bon, grâce à Hugo Trentesaux, ça marche maintenant.

{
	"query":
		"query test($hint:String!){identityByAccountId(accountId:$hint){nodeId id name status createdOn lastChangeOn isMember expireOn firstEligibleUd accountId accountRemovedId createdInId account{nodeId id createdOn isActive balance linkedIdentityId}}squidStatus{name height hash}version{version type}}",
	"variables":
		
		{
			"hint":
			"g1LKtUSD1ArvJ2vNXTi7GTjebJc1YMxtgo8ZmcNhraz2pFgHa"
		}
		
}

5 Likes

Coucou @gerard94 pourrais-tu stp nous indiquer le lien ici quand WotWizardV2 sera prêt et utilisable pour la Communauté ? merci beaucoup pour ce travail :folded_hands:

Oui, bien sûr.

1 Like

Je suis en train d’essayer de comprendre l’interface graphQL des indexeurs de Duniter. J’ai pas mal de questions, je commence par celle-ci : qu’est-ce qu’un “Call” ?

Autre question : comment récupérer la liste des url des indexeurs, telle que celle affichée dans Cesium2 ?

Je viens d’obtenir une erreur RATE_LIMIT_EXCEEDED sur un indexeur. OK ! J’aimerais savoir quelles sont les limites à ne pas dépasser (fréquence max, volume max de la réponse, etc …).

Comme je vais avoir sans doute pas mal de questions à poser sur les indexeurs, j’aimerais savoir à qui je peux m’adresser. Merci.

2 Likes

Les call sont les appels de fonction sur blockchain. Ils sont listés ici : https://duniter.org/wiki/duniter-v2/doc/runtime-calls/.

Réponse simple : ce fichier https://git.duniter.org/nodes/networks/-/blob/master/g1.json

Réponse plus complexe : en interrogeant l’API RPC des nœuds avec une requête comme ça :

curl -X POST https://g1.coinduf.eu -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"duniter_peerings","params":{}}'  | jq

Et de manière récursive, demander à tous les nœuds les informations dont il dispose.

Chaque indexeur peut régler les siennes, nous recommandons ces valeurs :

# Anti spam
RATE_LIMIT_WINDOW_MS=15         # Delay for queries window
RATE_LIMIT_MAX_REQUESTS=3000    # Queries for RATE_LIMIT_WINDOW_MS minutes

Indiquées dans le fichier https://git.duniter.org/nodes/duniter-squid/-/blob/main/.env.example.

Ici c’est parfait. Je réponds quand je peux, et d’autres peuvent répondre aussi quand je ne peux pas. L’entraide habituelle sur le forum, en fait !

5 Likes

Merci, merci.

J’ai trouvé un bug dans l’indexeur v0.5.13, je ne sais pas exactement où le mettre. En attendant, je le mets ici :

Dans MembershipEvent, le champ blockNumber affiche 0 pour les blocs de numéros négatifs.

2 Likes

Ce n’est pas tout à fait un bug, mais un choix d’implémentation qui est ici : https://git.duniter.org/nodes/duniter-squid/-/blob/main/src/genesis/genesis.ts?ref_type=heads#L243, en attendant que cette fonctionnalité soit implémentée.

Il faudrait récupérer l’historique des événements d’adhésion depuis une archive v1 et les ajouter dans squid :

C’est le genre de fonctionnalités qui n’étaient pas indispensables à la bascule v2 et ont donc été omises temporairement.

1 Like

Sur la page indiquée, je lis :

# Anti spam
RATE_LIMIT_WINDOW_MS=15         # Delay for queries window
RATE_LIMIT_MAX_REQUESTS=3000    # Queries for RATE_LIMIT_WINDOW_MS minutes

Ce que j’interprète par “Pas plus de 3000 requêtes en 15 minutes”. C’est bien ça ?

Cela donne donc “Au moins 300 ms par requête”. D’accord ? C’est ce que je fais, mais j’obtiens toujours la même erreur :

{“error”:“Too many requests from this IP, please try again later.”,“code”:“RATE_LIMIT_EXCEEDED”,“retryAfter”:900}

Y a-t-il d’autres contraintes que je ne vois pas ? Je demande de grosses réponses, y a-t-il une contrainte là dessus ?

Les valeurs qu’il y avait par défaut avant étaient peut-être plus basses; il est aussi possible que tu contactes un serveur qui n’a pas encore appliqué celles-ci ?

1 Like

Ce serait peut-être plus simple pour toi d’installer un indexeur en local pour pouvoir directement requêter sa base, ou son api sans restriction. Sinon effectivement, tous les indexeurs n’ont pas forcément réglé les mêmes valeurs de limite de cadence.

Oui, c’est ça ! Merci.

Oui, j’y pensais. Cela me permettrait de parcourir la bdd beaucoup plus vite. Tu as quelques explications pour cette installation ?

Et, en fait, ce qui serait encore mieux pour moi, ce serait de récupérer les blocs directement à la sortie de la forge.

Sous quelle forme se trouve actuellement le genesis, et où peut-on le trouver ? Merci.