Développement d'une barre de contribution intégrable

Bonjour,

Suite à la proposition de @Galuel de créer une barre de progression intégrable pour les financements participatifs, je crée ce topic pour centraliser les contributions et les débats autour du sujet. Pour ma part, j’ai commencé à me pencher dessus, bien que je ne sois pas le seul.

Après avoir réalisé une maquette en HTML/CSS/JS, je commence maintenant la partie programmation (en PHP). J’aimerais donc récupérer, sur une pubkey, la liste des transactions entrantes entre deux dates pour compter le nombre de contributeurs distincts et faire la somme des contributions.

On m’a dit que le plus simple était d’interroger un nœud elasticSearch avec une URL de ce type :
http://g1.data.duniter.fr/g1/movement/_search?filter_path=hits.hits._source&size=10000&q=recipient:2kuv2CuMXwbi8gTTE5WnLC6vHXfPePZkzjed9pALnrsB&_source=medianTime,issuer,amount,comment

Or, il paraît que les nœuds ES ne sont pas tjrs synchronisés. Y’a-t-il un moyen plus efficace ? (sans forcément interroger un nœud Duniter local, bien qu’à mon avis, cela soit peut-être le plus fiable). Peut-être via l’API BMA ?
Dans tous les cas, quelqu’un pourrait me donner un exemple pour extraire les données qui m’intéressent ?

J’aimerais aussi savoir si il existe un moyen de vérifier qu’un champ STRING correspond bien à une pubkey (la longueur de chaîne par exemple).

Pour l’instant, je proposerai un iframe à intégrer du type :

iframe.php?pubkey=TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS&start_date=01/12/2019&end_date=31/12/2019&target=5000

Par la suite, il serait aussi judicieux de proposer une image construite à la volée pour intégration dans un forum par exemple.

2 J'aimes

ça m’a l’air pas mal avec ça en fait :slight_smile:
https://duniter.normandie-libre.fr/tx/history/TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS/times/1/1568634765

3 J'aimes

Oui tant que GVA n’est pas encore disponible il faut utiliser BMA, je vois que tu a trouvé tout seul la requete a effectuer, en effet c’est tx/history/[pubkey]/times/[from]/[to] :wink:

Voici la regex utilisée par Duniter : (dans app/lib/common-libs/constants.ts)

const PUBKEY = "[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}"

Enjoy ?

2 J'aimes

Oui mais je ne trouve pas dans quel champ sont enregistrés les montants des transactions. Il faut refaire une requête pour avoir le montant ?

Les transactions n’ont pas de montant, il te faut les extraires toi-même de la transaction : oui BMA c’est pas la joie pour les clients (GVA intègrera une notion de movements proposée par Benoit, ce qui permettra de récupérer directement le montant d’un « mouvement » de monnaie).

La il te faut sommer les outputs ayant pour condition SIG(A) ou A est la pubkey qui t’intéresse.

1 J'aime

Je me suis dit « les virements sur cette clef sont super étranges » avant de comprendre que c’est un tripot.

Assez blablaté, je casse tout :rofl:

  • Quand j’indique une end_date passée, le champs « jours restants » m’indique, en valeur absolue, la différence avec la date actuelle. Je voyage dans le temps ! Voir :

https://wotmap.duniter.org/iframe/iframe.php?pubkey=H2ZG8GrEYpMQi84wURXyHoj3yGFqjcdnh45k6GJEQ4qr&start_date=02/09/2019&end_date=10/09/2019&target=2000

  • Quand la end_date est avant la start_date, l’affichage est simplement à zéro. Une fonctionnalité sympa pourrait être de mettre un warning, certain.e.s pourraient faire l’erreur. Une telle erreur ruine le lancement d’un financement participatif.

  • OUAH ! Il prend en compte le début du financement ! Donc on peut avoir le (montant sur la clef) != (montant du financement), et régler une période d’observation ! C’est génial !

  • ne prend pas en compte les montants à virgule (c’est une feature inutile mais j’ai voulu essayer)

  • Quand je prends une large période (depuis le début de la Ğ1), le montant du financement indiqué est différent du montant sur la clef, mais également différent du montant total des recettes. -> qu’indique donc le montant du financement ?

Comparer https://wotmap.duniter.org/iframe/iframe.php?pubkey=H2ZG8GrEYpMQi84wURXyHoj3yGFqjcdnh45k6GJEQ4qr&start_date=01/03/2017&end_date=30/09/2019&target=20000

avec https://g1.duniter.fr/#/app/wot/tx/H2ZG8GrEYpMQi84wURXyHoj3yGFqjcdnh45k6GJEQ4qr/

Merci beaucoup en tout cas ! J’avais fait une promesse de don sur la recherche de financement, je suis pressé de dépenser ma monnaie :+1:

4 J'aimes

Il y a un souci car quand j’interroge mon nœud via BMA, je n’ai que 18 transactions entrantes. Alors que sur g1.duniter.fr, j’en ai 86. Une idée d’où peut venir le problème ?

@Pierre_Jean_CHANCELL l’explication la plus probable est que tu à sync sans l’option --store-txs puis que tu a activé cette même option après (sans resync totale entre temps), ce qui fait que tu n’historise que les tx récentes. Si c’est ça une seule solution: reset data && sync (avec l’option --store-txs dés la sync).

1 J'aime

Ah. Je ne connaissais pas cette option. Ce serait bien de l’ajouter à https://duniter.org/fr/wiki/duniter/commandes/

1 J'aime

N’hésitez pas a compléter vous même la doc en soumettant une MR sur le dépôt du site web : https://git.duniter.org/websites/website_fr

2 J'aimes

J’ai corrigé le code de l’iframe pour gérer les erreurs de saisies que tu as soulevées et j’ai resynchronisé mon nœud comme indiqué par @elois .Voici le résultat depuis le début de la june sur le même compte de tripot ^^ J’obtiens 4927.75Ğ1 entrants.

Or, lorsque j’analyse le compte avec Cesium et que je fais la somme des recettes à partir du camembert ou de l’histogramme, j’obtiens 4757.85Ğ1 entrants…

J’ai donc un delta de 169.9Ğ1. Je vais essayer de voir d’où ça vient cet a-m mais si qqun a une idée, ça m’intéresse :wink:

Surement le backchange (le retour à l’envoyeur lorsque tu coupes une source trop grande en deux) dans le document de transaction que tu ne prends pas en compte.

2 J'aimes

Mettons que je possède un compte T.

J’ai reçu 5 versements a,b,c,d,e.

Je souhaite faire un virement d’un montant m vers un compte U.

Mon client va faire :
a+b+c = M tel que M >= m
m est envoyé à U.

f = (M-m) est le « backchange » qui par défaut dans les clients existants, est renvoyé sur le compte d’envoi T. Le compte a donc pour nouvelles sources :

d,e,f


Donc si vous prenez uniquement en compte les inputs et que vous oubliez le Backchange, vous devez tomber sur un montant, euh… inférieur au montant du compte (là mon cerveau me joue des tours, je ne suis pas bien sûr).

Je ne sais pas si c’est ça, mais j’espère avoir explicité ce qu’est le backchange.

2 J'aimes

Donc récupère toutes les sorties vers cette clé publique sauf quand l’émetteur de cette transaction est le même que la clé observée.

3 J'aimes

Cas d’usage improbable : le financement participatif est sur une clef de compte membre.

Dans ce cas, la somme des recettes ne prend pas en compte les dividendes universels, qui doivent sans doute demander une autre requête BMA.

Je trouve que cette fonctionnalité non-codée est juste parfaite et ne devrait pas être changée.

Franchement super boulot !
J’aime beaucoup ce que tu as fait, avec la date de début, de fin et la somme à atteindre paramétrable dans l’URL.
C’est quoi une iframe pour faire rapide ?


Tu nous fais une barre de financement pour financer la libération du code de ta barre de financement ? :wink:
Eat your own dog food.

3 J'aimes

Pas tant que ça : sur gannonce.duniter.org il me semble que pas mal de personnes utilisent leur compte membre.

Tu veux dire que c’est normal de ne pas prendre en compte les DU dans le cas d’un financement participatif ? En tous cas, pour moi ça paraît normal de ne pas les prendre en considération.

Pour le cas d’un compte membre écrivain, on pourrait exclure les transactions dont le commentaire commence par REMU. Qu’en pensez-vous ?

C’est un document HTML dans un document HTML. Exemple d’intégration :

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>
</head>
<body>
<div>
	<iframe name="iframe" src="iframe.php?pubkey=H2ZG8GrEYpMQi84wURXyHoj3yGFqjcdnh45k6GJEQ4qr&start_date=01/03/2017&end_date=30/09/2019&target=20000" width="100%" height="700px">
</div>
</body>
</html>
2 J'aimes

Je vais aussi paramétrer le nœud interrogé. Pour l’instant il est en dur dans le code mais on pourrait avoir un paramètre optionnel « node » qui, s’il n’est pas renseigné, irait chercher sur g1.duniter.org par exemple.

iframe.php?pubkey=H2ZG8GrEYpMQi84wURXyHoj3yGFqjcdnh45k6GJEQ4qr&start_date=01/03/2017&end_date=30/09/2019&target=20000&node=g1.presles.fr

2 J'aimes

Pour le compte des développeurs de Duniter sur le mois de septembre

2 J'aimes

Je compte utiliser https://git.duniter.org/jytou/simple-node-watcher pour élire le serveur à utiliser, ça pourra te servir?