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 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é.
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
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
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
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
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.
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.
La worldwotmap fait ça aussi
@poka : ah merci
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 …
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 ^^
Tu peux rechercher soit une clé publique, soit un pseudo ici.
Et bien tu peux faire la même chose sur cette page:
Tu peux aussi ordonner chaque colonne:
@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
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.
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.
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 ? …
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
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.