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

@poka voici une MR qui intègre de nombreux changement dans le binding rust pour Ğecko :

J’ai modifié la génération du code secret pour qu’il ne contienne que des lettres.
Je t’ai également rajouté un paramètre permettant de choisir le type de code secret (chiffres ou lettres).

La longueur du code secret est choisie automatiquement en fonction du type de code secret, à savoir 6 lettres ou 8 chiffres, les paramètres de scrypt n’ayant pas encore été modifiés.

J’en ai profité pour faire une refonte totale du code Rust :

  • Mieux modularisé en différents fichiers
  • Simplification du traitement des erreurs
  • Optimisation des grosses fonctions genWalletFromMnemonic et changeDewifPin
  • Mise à jour de la doc dans le README

La prochaine étape, ça sera de passer à DEWIF v3 pour adapter les param de scrypt au runtime, mais je voulais pas faire trop de changements d’un coup (effet tunnel, tout ça), donc ce sera pour une prochaine MR :slight_smile:

Alors voici mes retours sur l’UX, si j’enfonce des portes ouvertes tant mieux :smiley:

1. Harmoniser la langue.

Remplace «wallet» par «portefeuille» pour que tout soit en français :slight_smile:

2. Renommer «code pin» par «code secret»

Tout le monde ne sait pas ce que signifie «pin», et ça n’implique pas clairement que ce code doit rester secret. Les banques traditionnelles parlent bien de «code secret» pour le code de la CB.

Utiliser le terme «secret» pour le code permet de s’assurer que l’utilisateur comprenne bien qu’il doit… rester secret :slight_smile:

3. Le terme « phrase secrète » n’est pas adapté.

Si on utilise déjà le terme secret pour le code ça fait doublon.

J’avais proposé « phrase de sécurité ». On pourrait la nommer aussi « phrase de restauration ».En tous les cas il faut un rond avec un «?» dedans à côté de cette phrase avec un tooltip qui explique ce que c’est.

Indiquer par exemple dans le tooltip que cette phrase permet d’importer son portefeuille sur un autre appareil où de restaurer son portefeuille en cas de perte de données.

4. Associer un nom à chaque portefeuille.

Ce nom peut être stocké dans le nom du fichier trousseau. Puis tu stockes tous les fichiers trousseau dans un dossier.

Ça permettrait d’afficher la liste des portefeuilles dans la vue «Mes portefeuilles» plutôt que de demander un code directement (important pour le point suivant).

Ça permettrait également de pouvoir choisir quel portefeuille déverrouiller en cas de présence de plusieurs portefeuilles sur le téléphone (puisque la clé publique ne peut pas être affichée sans déverrouiller le portefeuille).

Tu peux préremplir le champ nom par un nom par défaut, par exemple «compte courant».

5. Simplifier le menu en bas

Il est inutile de proposer à la fois les options «Générer un portefeuille» et «Mes portefeuilles».

Je suggérerai de proposer uniquement l’option «Mes portefeuilles», puis d’adapter la vue «Mes portefeuilles» selon qu’un fichier trousseau existe ou non sur le disque.

Si aucun fichier trousseau:

Afficher au centre «Ce téléphone ne contient aucun portefeuille. », avec deux gros bouton rectangulaires juste en dessous «créer un portefeuille» où «importer un portefeuille».

Si un où plusieurs fichiers trousseau existent :

Afficher le nom de chaque portefeuille et demander le code secret si on clique sur ce nom.

Dans la vue «Mes portefeuilles», tu peux ajouter un bouton «+» en bas à droite permettant d’en générer un nouveau.
Il faudrait aussi une icône pour importer un portefeuille, mais je ne sais pas où la placer pour que ça n’alourdisse pas la vue, à réfléchir.

Voila pour mes retours :slight_smile:

Remarque concernant le multi-compte et les HD wallet

Je peux assez facilement ajouter les HD wallet dans le binding Rust. Ça permettrait de générer plusieurs comptes (jusqu’à 2 milliards !) à partir d’un seul fichier trousseau, donc un seul mnemonic et un seul code secret pour tous ses portefeuilles.

Si j’implémente ça, cela aurait des incidences fortes en termes d’UX sur la vue «Mes portefeuilles», c’est donc le bon moment pour y réfléchir :slight_smile:

Je pense même que le plus simple serait que Ğecko sois uniquement HD wallet.

Dans cette éventualité, le code secret serait demandé dès le clic sur «Mes portefeuilles» comme c’est le cas actuellement.
Si le code secret est valide, on peut alors calculer et afficher tous les comptes portefeuilles dérivés du trousseau.

Chaque dérivation nécessite un nombre entier. Il faut donc stocker sur le téléphone une map associant un nombre entier à chaque nom de portefeuilles. Par exemple :

{
  "Compte courant": 0,
  "Compte gchange": 1,
  "Projet bidule": 2,
  "gmix 1": 3,
   ...
}

“Projet bidule” pouvant être par exemple un compte pour un crowfunding pour le projet «bidule».

Il doit rester possible de modifier où supprimer des portefeuilles dans la vue «Mes portefeuilles».
Une modif étant juste un changement de nom, et une suppression étant juste une suppression de l’entrée dans la map. (Afficher une popup de confirmation pour la suppression, avec un avertissement spécial et une couleur plus violente si le compte supprimé à un solde non null).

Dans ce cas-là aussi je suggérerai un bouton «+» en bas à droite pour ajouter un portefeuille.
Par contre il n’y aurait pas d’import dans cette vue.
L’import de trousseau ne serait proposé que si aucun trousseau n’est présent sur le Téléphone.

Le cas «importer un trousseau» alors qu’il y a déjà un trousseau sur le téléphone serait un cas extrêmement rare en mode HD wallet. En termes d’UX ça implique de cacher cette option dans un menu déroulant «paramètres» où «options avancées».

3 Likes