G1-stats.axiom-team.fr

Oui j’ai été très étonné je m’attendais à beaucoup plus de simple portefeuille.

Est-ce volontaire d’afficher le solde des membres en négatif ? J’imagine que c’est parce que le DU n’est pas compté.

Oui je n’ai pas trouvé de moyen simple d’ajouter les DU.

Scanner tous les DU non consommés de chaque wallet membre rallonge la durée d’exécution de 10 minutes à 1h30 …

Du coup, si un compte est vide et n’est plus utilisé (on peut pas le savoir), alors il est quand même compté. C’est de l’à-peu-près. Mais ça donne un ordre de grandeur. L’idéal serait que GVA fournisse un max de données.

C’est le cas de tous les développeurs de clients :wink: Plus j’écris de code basé sur BMA, je me dis qu’il faudra que j’adapte le code à GVA. Mais, ça devrait être un plaisir étant donné que ça devrait être mieux pensé.

2 Likes

Si il a déjà reçus au moins une transaction il est considéré actif, même si il n’a jamais rien fait d’autre.

Si on peut tout faire, je peux filtrer si aucune activité depuis plus de x mois, alors considéré comme inactif, ou si jamais envoyé aucune transaction …
Mais je trouve que c’est une bonne idée à terme d’intégrer ce genre de filtrage dans les statistiques d’utilisation, en affichant plusieurs conditions comme ça.
Comme je parse déjà toutes les transactions ça ne demanderai quasiment pas plus de ressources que d’inclure les date de réception et filtre d’émission.

En train d’investiguer autre chose, j’observe que G1-stats est bugué. Les comptes

Ab1MsqBxaT1oNU4id5Jp4yvwR8wF4SVpqhM34QEPLTsM
Ab1MsqBxaT1cNU4id5Jp4yvwR8wF4SVpqhM34QEPLTsm

ne sont pas présents dans le fichier “tous les wallets”, bien qu’ils soient tous deux approvisionnés.

Je vais regarder, c’est une info qui m’intéresse.

edit- c’est la boucle for de la fonction lookwalletup qui est buguée. La liste de n°s de blocs étant [52, 60, 62, …] , la boucle va directement voir la valeur n° 52, puis la valeur n°60, puis la n° 62, etc… Elle saute des blocs !

La belle étourderie des familles :sweat_smile:

Solution

Voilà la fonction loopWalletUp() telle que je l’ai faite tourner :

loopWalletUp() {
#	for i in ${TXBLOCKS[*]}; do
        echo "${#TXBLOCKS[@]}"
	for block in ${TXBLOCKS[@]} ; do
                echo "$block"
           #     block="block"
#		[[ -z ${TXBLOCKS[$i]} ]] && break
		[[ -z $block ]] && break
		sleep 0.1
#		WALLETS0=$(curl -s ${DUNITER}/blockchain/block/${TXBLOCKS[$i]})
		WALLETS0=$(curl -s ${DUNITER}/blockchain/block/$block)
		until WALLETS=$(echo $WALLETS0 | jq '.transactions[].outputs[]' 2>/dev/null); do
			[[ $isWeb != "web" ]] && echo -e "iter $iter \n$WALLETS0"
			sleep 2
#			WALLETS0=$(curl -s ${DUNITER}/blockchain/block/${TXBLOCKS[$i]})
			WALLETS0=$(curl -s ${DUNITER}/blockchain/block/$block)
		done
                [[ -z "$WALLETS" ]] && echo "Erreur: $RET" && exit 1
		WALLETS=$(echo "$WALLETS" | tr -d '"' | awk -F '(' '{ print $2 }' | tr -d ')')  
# attention : le dernier awk retient également les || et les espaces utilisées dans les conditions d'unlock composées, ça fait planter la suite du script.

#		bloc=${TXBLOCKS[$i]}
		wallets+=$(echo -e "$WALLETS \n" | sed 's/ /\\n/g')

		progress=$(echo "scale=1; $block*100/$lastBloc/1" | bc)


#		if [[ $isWeb != "web" ]]; then
#			clear
#			echo "Heure de début: $startTime"
#			echo
#			echo "Scan en cours: $progress% - $bloc/$lastBloc"
#		fi

		((iter++))
	done
}

J’ai fait tourner le script (plus de deux heures, au lieu de 15 min !), qui a parcouru tous les blocs avec des transaction. Malheureusement, il a rencontré une erreur par la suite, donc le débogage n’est pas fini.

Voici donc des résultats temporaires : 6534 simples portefeuilles, 9331 portefeuilles en tout !

A suivre… J’ai l’info qu’il me faut (la liste des wallets), je ne sais pas si j’irai voir plus loin.

(message édité après avoir un peu débogué)
Noeud: https://duniter-g1.p2p.legal
Nombre total de wallet: 9329
Nombre de membres: 2794 (29.9%)
Nombre de simple portefeuille: 6535 (70.0%)

---

Extraction wallets membres / Simples portefeuille

---

Isolation des simples portefeuilles...
Récupération du solde des simples wallets...
Reçus simples wallets:	 4.720.054,67
Envoyé simples wallets:	 2.943.669,22
Soldes simples wallets:	 1.776.385,45

---

Récupération du solde des membres...
Reçus membres:	 4.100.772,32
Envoyé membres:	 5.840.712,08
Soldes membres:	 -1.739.939,76
Total DU non consumés:	 0

---

Solde des membres (sans DU):	 36.445,69
Masse Monétaire:	 19.130.375,05 Ḡ1

---
Analyse
---

69,5% des Ḡ1 n'ont jamais été utilisés.
11-09-20 - Heure de fin: 10:35

2 Likes

Woua effectivement belle erreur des familles comme tu dis …
Je me disais bien qu’il y avait un soucis dans ces stats, et ce n’est peut être pas le seul, d’où le gros disclaimer sur la page web…

Il y a quelques mois j’avais même entrepris de refaire entièrement ce code un peu mieux, sur une autre branche, avec une autre manière de scanner les blocs qui me permet d’avoir plus d’informations quotidiennes sur les comptes, et en stockant les valeurs en json cette fois ci, un peu plus proprement … Mais d’une part mes résultats n’étaient pas cohérents avec la version actuelle, et d’autre part je me suis rendu compte à la fin que Benoit index déjà un certain nombre de stats dans ses DB ElasticSearch bien plus proprement que moi, donc ce que je faisais ne semblait plus très utile.

Je fix ça au plus vite, merci @matograine

La base de donnée de Duniter recense exactement 8375 portefeuilles (au bloc #355937), mais elle ne contient que ceux ayant un solde non-null :slight_smile:

Je travaille actuellement sur un explorateur de la DB de Duniter en ligne de commande (dex) qui permettra d’extraire ce genre d’infos, et bien d’autres :slight_smile:

C’est ainsi que j’ai eu le nombre de portefeuilles avec un solde non-null :

$ ./dex count wallet
Database opened in 0.149972 seconds.
Count operation performed in 0.010083 seconds.

This collection contains 8375 entries.
2 Likes

Pour ceux qui veulent j’ai extrait la liste des wallet dans un fichier json avec dex :

$ ./dex find wallet -f wallet.json -o json --pretty --keys-only
Database opened in 0.106677 seconds.
Search performed in 0.210568 seconds.

8375 entries found.
Export all 8375 entries ? (Be careful, may crash your system!) [y/N]
y
Search results were written to file: ‘wallet.json’ in 0.282570 seconds.

Voici le fichier: wallet.json (449.4 KB)

Je peux aussi faire un export avec les soldes.

Pour ceux qui voudraient compiler dex eux-mêmes afin de faire les exports eux-mêmes depuis leur propre nœud duniter les indications sont là : Dex (Duniter DBs Explorer)

Après quelques mois d’interruption suite aux coupures des noeuds GVA, g1-stats is back again: https://g1-stats.axiom-team.fr

C’est surtout la recherche de pubkey par pseudo express qui me manquait en vrai…

Les données de géoloc pour carte.monnaie-libre.fr sont en cours de génération.

5 Likes

La worldwotmap fait ça aussi :wink:

2 Likes

@poka : ah merci :slight_smile:

Par contre cette page https://g1-stats.axiom-team.fr/data/wallets_balance.html n’est pas à jour:

Données générées le 28-08-2021

woooaaw, tu découvres des pages que je ne savais même pas en ligne … :sweat_smile:

En fait il faut utiliser cette page ci, qui elle est bien à jour: https://g1-stats.axiom-team.fr/data/search.html

Oui @poka, je connais aussi search.html.

Les deux pages sont complémentaires. search.html est présentée par pages, il y a moins de mémoire en utilisation. wallets_balance.html a l’avantage d’avoir tout sur une seule page. Par exemple quand on fait une recherche dans la page par Crl-F, avec un pseudo ou une clef, elle est tout de suite trouvée. Cette recherche n’est pas possible avec search.html.

Pourquoi vouloir faire un ctrl+f sur cette page, il y a une zone de recherche prévus pour ^^

image

Tu peux rechercher soit une clé publique, soit un pseudo ici.

Et bien tu peux faire la même chose sur cette page:

Peek 10-03-2023 22-28

Tu peux aussi ordonner chaque colonne:

Peek 10-03-2023 22-29

2 Likes

@poka tu as réussi à faire planter mon ordi!

Je savais que ce n’était pas sans danger niveau ressource mémoire de demander le maximum. Bien mal m’en a pris, j’ai cliqué sur TOUT mais après RIEN ne fonctionnait :frowning:

ah bah tu ma demandé de tout afficher, avec les données à jours de 2023, ça fait ça.

J’ai pas dit que c’était une bonne idée.

1 Like

Moralité: on ne peut pas tout avoir dans la vie.
Moralité 2: garder à l’esprit que les dev ont des bécanes bien plus puissantes que le commun des mortels, pour faire ce qu’ils font.

2 Likes

Mais en fait, wotwizard-ui le fait aussi, et mieux encore: https://wotwizard.axiom-team.fr/fr/membres

… je sais pas pourquoi je n’y pensais plus (alors que c’est hébergé sur notre infra et mis en place par mes soins (et Hugo)…), je me faisais chier sur Cesium pendant que g1-stats était HS alors que ya ça qui tourne quoi…

Ah, je me souviens aussi pourquoi g1-stats saute plus qu’avant maintenant, en fait avant il était branché à un noeud que j’avais dû recompiler moi même car juste changé cette simple petite variable de rien du tout dans le code, pour que ça marche bien quoi: app/modules/bma/lib/limiter.ts · dev · nodes / typescript / duniter · GitLab

@Pini @aya , vous croyez que c’est possible de binder ce petit booléen via le docker-compose 1.9 ? :face_with_peeking_eye:

Je vois qu’il y a un setter ici utilisé notamment ici, je ne sais pas si ça peu aider…

… perso c’est le genre de nom de fonction que j’aime :sunglasses:


edit: juste pour préciser, ne vous prendrais pas trop la tête avec ce binding de variable si c’est un casse tête à faire passer dans le docker compose, pas la peine d’y passer la semaine, on fera autrement.

1 Like