Ğecko: Nouveau client de paiements Ḡ1 sur mobile en cours de développement (Dart/Flutter)

Aller, je fais un petit point Gecko, ça commence à faire un moment que je ne donne pas de nouvelles.

Voici un lien vers la dernière version:

J’ai bien avancé, je ne saurais être exhaustif quant aux changements depuis la dernière fois, mais voici quelques points à noter:

  • Utilisation de Hive pour les données locales: Base de donnée clé/valeur full dart, chiffré en sha512 et optimal pour flutter. Finit la gestion du stockage en mode fichier brutes parsés maison (mode bash…)

  • La plupart des écrans du dernier prototype Figma de Boris on été implémentés, dont l’UI a pas mal changé pour la plupart des écrans (l’écran d’onbarding cela dit n’a pas bougé d’un poil, il est toujours obsolète, ça devrait venir bientôt…)

  • Nouveaux écrans de changement de coffre, et de choix de coffre et de portefeuille lors du paiement

  • Import de coffre via mnemonic fonctionnel

  • Import de portefeuilles Cesium de nouveau fonctionnel, avec cette fois ci la gestion de multi coffre-à-Cesium

  • La recherche par username fait son apparition, mais avec un fonctionnement temporaire (utilisation du cache g1-stats qui lui même utilise une requête GVA gourmande, avec envoi d’un json entier mis en cache localement…) en attendant d’avoir mieux côté API. Quand je vois les performance de wotwizard-ui pour la recherche par username, je me demande si je ne vais pas partir là dessus aussi (ce qui ferait un total de 4 API pour Gecko: GVA, Cs+, gchange-pod et wotwizard, plus BMA si je décide d’intégrer les certifications maintenant… En espérant a terme remplacer tout ça pour une unique API RPC + gchange-pod).

  • Plus de binding Rust, j’ai créé ma propre lib de crypto (qui externalise aussi une partie des requêtes GVA aussi du coup, et dont les requêtes Cs+ viendront): Durt (Duniter/Dart, j’étais pas très inspiré pour le nom…)

  • Passage de toute l’app entièrement en « sound null safety ».

Au début je pensais que le binding rust était une force pour le projet, d’une part en couplant le client avec une partie du code de Duniter pour la crypto, en factorisant donc le code, en augmentant les performances grâce au Rust, et en m’épargnant du travail si d’autres se chargent de cette partie.

En réalité, Duniter n’est plus maintenu et est voué à disparaître sous cette forme, le mainteneur de la lib n’est plus disponible, le binding complique sensiblement la stack pour le potentiels futurs contributeurs, et enfin, il m’empêchait de compiler Gecko pour le web, ainsi que pour Desktop (ça aurait été possible sur desktop mais en adaptant le binding, on ne savais pas pourquoi cela ne fonctionnait pas avec Elois).
Il est vrai que des pertes en performance sont à noter lors de la création d’un coffre ou le déverrouillage de ce dernier, mais j’ai fait mon maximum pour le compenser, vous verrez (peut-être) à l’usage.

Voici donc une version native Linux: https://cloud.p2p.legal/s/WdNq8PyWQKZeg3c
Et une version web de Gecko: https://gecko.axiom-team.fr
Et en bonus une version iOS, non testé car je n’ai pas d’iPhone à disposition… Mais je sais d’avance que le scan de qrcode ne fonctionnera pas car il faut que je change de lib pour ça.

La version Linux fonctionne très bien, malgré des layout parfois pas du tout adaptés à cette taille d’écran et quelques détails ergonomiques. On sens bien que l’app n’a pas été pensé pour Desktop ^^

Cependant la version web est très décevante pour le moment, des lenteurs au chargement (le navigateur télécharge toute l’application avant d’afficher quoi que ce soit, manque à minima d’un écran de chargement), la recherche est anormalement lente, les requêtes Cs+ ne se font pas correctement, il y a un soucis avec les requêtes http pour le web (un comble) alors que les requêtes graphql fonctionnent bien.

Je rappel cependant que le but est avant tout de sortir une version Android et iOS fiable avant de penser aux autres plateformes, mais j’ai ouvert la voie pour ceux qui souhaiteraient s’y atteler :wink:


Contrairement à ce que je disais dans le sujet Durt, la cryptographie est pour le moment exactement la même que celle utilisé par Dubp-Rust, c’est à dire l’utilisation de scrypt pour le passage mnemonic → seed pour les HD wallets.
Durt permet optionnellement de passer de Pbkdf2 ou Scrypt lors de la génération d’un dewif à partir d’un mnemonic (pour la partie mnemonic → seed bien sûr).

J’attends qu’on se mette tous d’accords sur les HD wallets avant de changer quoi que ce soit.


Il y a probablement des bugs dans cette version, mes tests d’intégrations ne sont plus à jours (je sais c’est vilain). Je me suis rendu compte que je perdais du temps à faire des tests si je sais que les écrans vont changer prochainement (c’est le cas de l’onboarding notamment, et certainement d’autres). Comme il s’agit de tests end-to-end chaque changement d’UI me fait refaire mes tests.
J’attends donc un peu d’être sûr de garder à peu prêt ces écrans avant de refaire mes tests.

Je vous donne donc des nouvelles uniquement pour les curieux et ceux qui se posaient des questions.
Cela dit vos retours m’intéressent tout de même ^^


J’ai essayé de dé-prioriser au maximum tout ce qui concerne GVA et le dialogue avec Duniter pour me concentrer sur la mécanique propre à l’application (même si parfois je n’ai pas le choix de passer un peu de temps dessus).
J’attends de mieux comprendre de mon côté le fonctionnement de l’api RPC et de savoir comment l’intégrer à Gecko, ainsi que l’avancement de Duniter v2, avant de songer à laisser GVA et Duniter v1 de côté.

Mais au rythme où vont les choses, je n’exclus toujours pas de sortir Gecko GVA si je le considère prêt (v0.1.0) bien avant que Duniter v2 soit prêt. A voir, je suis un peu dans le flou à ce sujet là, étant donnée qu’il n’y a pas d’échéances.


Plus j’avance et plus je me rends compte du travail qu’il me reste avant d’espérer sortir une version grand publique.
Je remet en question beaucoup de choses, que ce soit au niveau de l’UX, mais aussi au niveau de l’organisation de mon code.
Je me dis aussi de plus en plus que sortir une version sans la possibilité de gérer son compte membre et ses certifications n’a peut être pas trop de sens, et risque de perdre les utilisateurs avec un outil qui ne permet pas de tout faire.
Vos avis m’intéressent là dessus.


La bonne nouvelle pour ceux qui souhaiterai contribuer, c’est que désormais débarrassé du binding Rust, il devient beaucoup plus simple de lancer Gecko en mode dev.
A vrai dire, en théorie si vous arrivez à lancer un hello world flutter, vous devriez pouvoir lancer gecko de la même manière :slight_smile:

(désolé pour ce pavé, en espérant ne pas attendre de nouveau 6 mois pour les prochaines nouvelles…)

9 Likes