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

Merci d’avoir essayé, mais en fait je crois que tu peux rester sur l’API 28 sans problème :slight_smile:

1 Like

Ouf :slight_smile:
*API 29 en l’occurence.

1 Like

Et grâce au binding Rust, la génération de wallets fut

Merci @elois, je crois que ça va énormément me faciliter la tâche, et sécuriser l’engin !

Nouveau build

5 Likes

Nouveau build 0.0.0+7

Détail de la version 0.0.0+7

4 Likes

Je viens de voir le HW “Jade”, et en lisant le quide de démarrage, je trouve une bonne pratique de sécurité :

Je comprends que le client :

  • génère le trousseau, et le mnemonic
  • demande à la personne de noter le mnemonic
  • passe à un autre écran, et demande à la personne de re-ecrire le mnemonic, pour vérifier qu’elle l’a noté. (ça peut aussi être des questions de vérifications, p.ex le mot BIDULE fait-il partie du mnemonic? et à quelle position se trouve le mot TRUC ?)
3 Likes

Nouveau build 0.0.0+8

Détail de la version 0.0.0+8

Un peu de couleur bordel :slight_smile:

L’icône à fait son apparition !

Merci @Attilax pour ces super icônes !


Sur les conseil de @matograine, les prémisses d’une page de validation de wallet à stocker est là.

Sera ajouté question sur un mot, place d’un mot dans la phrase, et validation du code pin :slight_smile:

6 Likes

Question:
Quand on clique sur « Enregistrer ce wallet », ça enregistre quoi exactement et où ?

lorsque tu confirmes, ça enregistre le DEWIF généré à partir de la phrase secrète dans le répertoire application de l’app.

Tout sera mieux expliqué avant la v1 bien sûr.


Actuellement quand tu va sur Mes wallets, tu ne sais pas si tu en a enregistré un ou non, donc tu peux jsute tester le PIN, si c’est vert et que la pubkey s’affiche, c’est déverrouillé.

A terme tu verra tous les wallets ici en liste, avec les premiers caractères de leur pubkey, le solde, et des options en cliquant dessus. Tu pourra en activer un seul à la fois pour payer.

Dans ce options par wallets enregistré, tu pourra notamment changer le code PIN, supprimer le wallet et envoyer les fonds sur un autre wallets, entre autre.

Dans l’explorateur de mon tel, je trouve ce dossier :
/Android/data/com.example.gecko/ et dedans il y a un dossier /files suivi de /Pictures
mais aucun fichier, ils sont vide… :frowning:

Est-ce à cet endroit ?

Et tu arrives bien a déverrouiller ton wallet avec ton PIN ?

Quand je tape mon code PIN, celui-ci passe au vert et je voie ma clé.
Mais je sais comment aller plus loin (voir l’historique par exemple)

Pour le moment tu va pas plus loin lol.

J’en suis là.

1 Like

Chaque chose en son temps, c’est long tout ça mine de rien derrière.

Je préfère itérer plusieurs build régulièrement pour tester le rendu, avoir des retours.

Je vais déjà me focus sur la partie Enregistrement de wallet, que ce soit clair, intuitif, c’est important.

2 Likes

Pas de souci… c’est déjà énorme :wink:

1 Like

Et tu as fait attention aux daltonien.ne.s, peut-être sans t’en rendre compte ! Merci pour elleux. :
quand le PIN est faux, il y a couleur + mouvement ; quand le pin est juste, il y a juste couleur (et affichage de la clef pub)

2 Likes

La version d’Android ne me semble pas être le meilleur critère.

Il vaudrait mieux se baser sur la quantité de RAM de l’appareil, car c’est ça qui va permettre de choisir un paramètre N plus grand pour scrypt.

1 Like

En fait je suis daltonien (Deutéranomalie), mais je ne m’en suis pas vraiment rendu compte lol (je veux dire je me suis pas rendu compte que l’action de faire bouger le PIN faux était bénéfique pour moi ^^).
En fait j’ai justement pris un vert et un rouge bien flashy pour pouvoir les distingué, et inconsciemment c’est vrai que je me disais “De toute façon il bouge si c’est faux…” ^^

Oui ça me parait limpide.

Si ta pas de RAM, utilise ta mémoire.

@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

Merci pour ces retours @elois
Beaucoup de choses dans ce que tu dis :slight_smile:

  1. Oui

  2. Oui

  3. Ok pour “Phrase de restauration”.
    Pour le toolip, je vais y réfléchir, là j’ai écrit 3 phrases d’explications au dessus du bouton “Enregistrer ce wallet” qui sont:

    Notez bien votre phrase secrète sur un papier ou imprimez le, ainsi que votre code PIN, que vous devrez retenir.
    Pour payer ou manipuler votre wallet, seul votre code PIN vous sera nécessaire.
    Votre phrase secrète quant à elle, vous permet de restaurer votre wallet sur un autre appareil.
    Gardez la précieusement.

    Mais c’est déjà beaucoup trop, ça ne va pas, en effet c’est mieux de séparer déjà le transfert de cette information en 2, via un genre de tooltip au niveau du mnemonic, et une info concernant le code secret juste au dessus du bouton “Enregistrer ce wallet”.

  4. Oui alors j’avais pensé enregistrer la clé publique dans une mini db sur le téléphone pour chaque wallets. Je me suis dit que tu ferais la gueule pour des soucis de sécurité, ne pas qu’un pirate ayant récupéré ton DEWIF ne sache forcément la clé publique associé, ce qui faciliterait le brute force…
    Mais ainsi, les gens n’auraient qu’a cliqué sur le portefeuille qu’ils souhaite pour voir les options, et activer celui qu’ils veulent pour les paiements.
    J’avais pensé à attribuer un nom aussi. A vrai dire, j’ai même pensé utiliser les pods ES Cesium+ pour stocker ces noms de portefeuilles, de manière à ce qu’ils soient visibles sur Cesium (cc @kimamila).
    Mais je sais que ça va faire débat, je comptais le faire sournoisement pour tester. Je vais voir :stuck_out_tongue_winking_eye:
    Mais sinon oui, des noms des portefeuilles stockés localement comme tu le dit, me semble une bonne idée.

  5. Oui j’y pensais :wink:
    Je n’étais pas sûr, 2 ou 3 onglets, tout en préférent en avoir 2, j’en ai fait 3 pour tester, et faciliter mon workflow le temps de dev, mais je crois que ta raison, ya moyen de faire un UX clair et simple juste avec un onglet “Mes portefeuilles”. Je pars là dessus.

  6. Pour les HD Wallets, oui je t’avais soumis l’idée il y a quelque semaines, tu me disais que c’était possible, j’en suis très content.
    Maintenant, concernant Ḡecko, franchement, je ne sais pas, je suis pas sûr.
    Comme tu l’a dit, en terme d’UX, c’est l’un ou l’autre, sinon on permet de générer des seeds + dériver chacune en HD wallets, ce sera beaucoup trop dense, pas bon.
    Et franchement, je vois aussi l’intéret de pouvoir générer des wallets différents, de pouvoir importer des wallets autant qu’on veut, et même d’importer des wallets salt+password Cesium en fait.

    Je sais que c’est la porte ouverte à ce que les utilisateurs d’aujourd’hui qui sont tous sur Cesium, préfèrent importer leurs wallets ainsi, en le stockant en DEWIF avec PIN. Et aussi, que ça permet de facilement ajouter son portefeuille membre dans Ḡecko, ce que je n’aime pas trop, mais en même temps, je pense que pour le stade où en est l’écosystème Ḡ1, ça peut être une option pratique. On peut débattre de ce point oralement sur un talk si tu veux.
    Donc je dirais pour le moment, pas de HD wallets, je garde les générations de wallets et vais ajouter les imports.

  7. Ah non y’en a pas ^^


Je vais déjà tester les nouveautés de ton binding Rust, je te dirais si ça roule :slight_smile:
Beaucoup de taf varié en perspective ^^

Il faut qu’on s’harmonise là dessus.
Moi, j’ai suivi le forum et même si “wallet” signifie “portefeuille” en anglais, j’ai remarqué qu’on utilise “trousseau” pour parler d’un fichier physique contenant les accès au compte. Et ça me plaît bien.

Pour résumer :

  • Compte : c’est notre coffre-fort, comme un compte bancaire. Il peut être “membre” ou simple “portefeuille” (notez que portefeuille est déjà pris depuis trois ans par ce distinguo).
  • Portefeuille : un “compte” non membre, qui ne crée pas de monnaie.
  • Trousseau : un fichier sur disque contenant les clefs d’accès au “compte”.
  • Identifiants/Phrase de passe/Mot de passe : codes d’accès au “compte”, mémorisés ou notés quelque part.

C’est la nomenclature que j’utilise pour Tikka.

Dites moi si vous pensez à une autre nomenclature pour qu’on utilise tous le même langage. Abla Duniter ? :wink:

1 Like