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

Je propose autre chose pour éviter :

  1. d’embarquer plusieurs fois smoldot dans différentes applis (Ǧecko, Césium, Wotwizard…)
  2. que l’utilisateur débutant attende 100 ms de trop
  3. que l’utilisateur avancé puisse croire être connecté à son nœud p2p local éteint alors qu’il est connecté à un seul nœud

Ma proposition est la suivante :

  1. par défaut, l’appli est en mode « naïf » et se connecte à un seul nœud qui répond parmi une liste prédéfinie
  2. l’utilisateur avancé peut activer le mode « avancé », renseigner des nœuds custom, dont un smoldot local, et si la connexion au smoldot échoue, il est prévenu, ce qui lui laisse le choix de rallumer son smoldot ou basculer sur le mode naïf
1 Like

Je suis contre cette idée, et plus généralement contre l’idée que les light clients seraient réservés aux utilisateurs avancés.
Je veux qu’un utilisateur lambda qui ne comprend rien à la technique puisse utiliser un light client, qu’on est juste à lui dire, tu installes tel programme et que ça juste marche, sans configuration manuelle à faire.

1 Like

Moi je suis pour qu’un utilisateur lambda qui souhaite utiliser un light client le fasse en deux étapes

  1. installation du light client
  2. configuration de son / ses wallets

Ça me paraît être la base de la responsabilisation : comprendre qu’un app se connecte à quelque chose.

Mais on peut aussi faire ça de manière astucieuse avec un bouton dans le light client qui mène à l’écran de configuration du wallet. Par exemple dans Android, quand tu installes Fdroid, il te mène à l’écran qui l’autorise comme source d’installation de logiciels.

Dans un premier temps de toute façon je compte pas m’attaquer à smoldot tout de suite (trop de choses bien plus prioritaires) donc ce sera liste locale directement pendant un moment.

Quand on commencera à intégrer smoldot, bindé ou non, on commencera par une saisie manuelle uniquement comme le propose Hugo, le temps de bien tester dans la durée. Puis on envisagera plus d’automatisation plus tard.

1 Like

Attention, il faut avoir en tête la réalité : tous les noeuds n’auront pas les indexeurs, et tous les indexeurs ne seront pas forcément configurer avec la même stratégie.
Il faut donc bien savoir quel noeud propose quoi.

1 Like

Bien sûr, il y a (au moins) trois API :

  • les clients substrate pour soumettre des extrinsics via les libs clients
  • les indexeurs pour récupérer des données blockchain indexées (solde du compte, historique de transactions, statut membre…)
  • les données hors chaîne (photo de profile, commentaires de transaction…)

On peut désormais suivre l’état de son statut de membre dans Gecko, et publier son identity le moment venu :slight_smile:

L’UX est minimal, et on peut faire ça sur toutes les dérivations pour le moment.

Au final il ne manque que les certifications pour la workflow minimal de gestion de la wot.

6 Likes

Il faut un générateur de geckos, avec toutes les déclinaisons possibles ! :lizard:

2 Likes

Y’en a déjà quelqu’un dessinés par Chopp :wink:

1 Like

Nouvelle version 0.0.6+2:

Android: https://git.duniter.org/clients/gecko/uploads/4f7ac48bd9831f328e06975acae83325/gecko-0.0.6+2.apk

iOS (non testé): https://git.duniter.org/clients/gecko/uploads/1b250a77359c7605ea2941f84c97eaf6/Runner.app.zip


Normalement fonctionnel pour:

  • Se connecter à un noeud custom dans les paramètres (ws ou wss)
  • Générer/Importer des coffres format Ğdev, Mnemonic anglais uniquement, dérivation //2, //4, //6, ect …
  • Payer et voir les soldes en live
  • Suivre le statut de l’identité de chaque adresses
  • Confirmer son identité le moment venu
  • OnBoarding UX entièrement revu

Merci @HugoTrentesaux pour le petit peer programming sur les extrinsics :wink:

PS: Vous devrez supprimer les versions précédentes de Gecko pour installer celle-ci.

1 Like

Est-ce possible dans une prochaine version de pouvoir copier/coller tout les mots d’un coup ?

J’ai compilé sur master, ça marche bien ^^. Et j’en profite pour te rappeler le bug que j’ai toujours en saisissant le dernier mot de mon mnemonic « lawsuit » où le clavier se replie avec le « law ».

1 Like

C’est déjà le cas pour coller, tu as un bouton pour sur ton screenshot.


Oui j’ai pas pensé à le corriger, je referai probablement des builds dans les prochains jours.

1 Like

Oups, il n’est pas assez gros alors !!! lol :rofl: :rofl: :rofl:

1 Like

Non ça veut dire que c’est pas bon si ta pas compris au premier coup d’œil :wink:

Cette fonction n’a pas été prototypé par Boris, et ça se ressent ^^

Faudra rendre ça plus clair.

1 Like

Je viens de télécharger et installer l’app, chez moi ça ne fonctionne pas, l’app ne s’ouvre pas :pensive:

Quand je regarde toutes mes app, pour gecko j’ai un écran blanc, et quand je clique sur l’écran de gecko la fenêtre disparaît et ça retourne sur mon menu principal.

Je pense que quelque chose plante au démarrage, mais je ne sais pas comment obtenir plus d’informations :confused:

1 Like

Je viens d’installer la stack de dev ğecko sur le laptop que j’emmène aux RML16 et ğecko plante au démarrage avec le message dans la console de debug :

Launching lib/main.dart on sdk gphone64 x86 64 in debug mode...
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
Error waiting for a debug connection: The log reader stopped unexpectedly
Error launching application on sdk gphone64 x86 64.
Exited (sigterm)

[edit] ça avait l’air dû à une collision entre le adb système et android studio. Et maintenant ça crash avec :

Launching lib/main.dart on sdk gphone64 x86 64 in debug mode...
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
E/AndroidRuntime(12227): FATAL EXCEPTION: pool-3-thread-1
E/AndroidRuntime(12227): Process: gecko.axiomteam.fr, PID: 12227
E/AndroidRuntime(12227): java.lang.IllegalArgumentException: gecko.axiomteam.fr: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
E/AndroidRuntime(12227): Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
E/AndroidRuntime(12227): 	at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
E/AndroidRuntime(12227): 	at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
E/AndroidRuntime(12227): 	at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
E/AndroidRuntime(12227): 	at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent(ForceStopRunnable.java:196)
E/AndroidRuntime(12227): 	at androidx.work.impl.utils.ForceStopRunnable.isForceStopped(ForceStopRunnable.java:128)
E/AndroidRuntime(12227): 	at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:93)
E/AndroidRuntime(12227): 	at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
E/AndroidRuntime(12227): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/AndroidRuntime(12227): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/AndroidRuntime(12227): 	at java.lang.Thread.run(Thread.java:920)

Une fois qu’on a un environnement qui marche c’est génial Flutter, mais avant d’en arriver là c’est un enfer :rofl:

1 Like

Alors d’abord, quelqu’un avec un fairphone 3 a rencontré ce pbm hier :

LateInitializationError: Field 'cesiumSeed' has not been initialized.

Preuve que le runtime Dart fonctionne bien, l’attribue late Uint8List cesiumSeed; n’était plus initialisé au démarrage de l’app, car plus utilisé nulle part, ce qui n’est pas possible pour un late.

Pas contre je ne sais pas pourquoi ne pas avoir eu ce problème en debug, d’habitude c’est le cas. Ni sur mon téléphone d’ailleurs !
C’est corrigé.

E/AndroidRuntime(12227): java.lang.IllegalArgumentException: gecko.axiomteam.fr: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.

Ok merci @HugoTrentesaux, je pense que c’est l’origine du pbm d’@elois qui doit être sur Android 12:

    // required to avoid crash on Android 12 API 31
    implementation 'androidx.work:work-runtime-ktx:2.7.0'

Mon émulateur et mon phone son sur Android 11 donc j’avais pas cette erreur.

C’est corrigé aussi, tu me dira @elois si ça corrige bien ton pbm, et @HugoTrentesaux dans ton debug.


Nouvelle version 0.0.6+3:

Android: https://git.duniter.org/clients/gecko/uploads/e923477c1fcb24e90a54508ce879ef41/gecko-0.0.6+3.apk

iOS (non testé): https://git.duniter.org/clients/gecko/uploads/52f42758778ef3083525d9f0e5a2ceb9/Runner.app_1_.zip

3 Likes

Oui je suis sous android 12

Incroyable, ça corrige mon problème !!

Maintenant Ğecko se lance bien, je viens de créer un portefeuille, c’est vrai que la procédure est longue, mais il faut bien ça pour s’assure que l’utilisateur comprenne bien les implications :slight_smile:

Par contre quand je paramètre l’url d’un nœud duniter-v2s, ça ne marche pas, il dit que le nœud duniter est injoiniable, c’est normal ? À noter que c’est un nœud dont le endpoint websocket est derrière un path, peut-être que tu ne gères pas correctement les path ? Fausse alerte, je n’avais pas saisi la bonne URL.

1 Like

Alors je n’ai encore jamais testé sur des path, je n’avais à disposition jusque là qu’un noeud en local.
Dès que tu me donne un endpoint avec path, je pourrais tester et fix si nécessaire.


Il faut bien mettre wss:// au début si c’est un noeud ssl, mais ça je pense que tu le sais ^^

1 Like