Développer une DApp Native sur Android – Partie 1 : UX et Architecture

Bookmark and Share

Ce poste vient comme suite logique à deux premiers posts pour créer un Smart Contract pour Ethereum et le deployer sur un testnet , je voulais créer une DApp Native : une application Android qui permetrait d'utiliser ce contrat de façon intuitive. 

La communauté Ethereum ne tarit pas de tutoriels pour créer des DApp "Web", mais pour les DApp Natives sur Android tous les choix techniques et UX sont à faire. Ce post est dédié à cela.

L'écosystème dans lequel une DApp s'intègre ?

DApp Native doit s'intégrer dans l'environnement technique de la blockchain, pour cela elle doit interagir avec :

  1. La blockchain dans laquelle "vit" le Smart Contract.

  2. Le Wallet : l'application à la quelle l'utilisateur fait confiance pour effectuer ses paiements. 

Interagir avec le Wallet

Chaque compte (adresse) dans une blockchain est lié à une clé privée : on peut la représenter comme une séquence de caractères:

8F241D8E4169D4118FD6158BFE81D6158BFE81ADD961ADD961241D8E4169D411

Exemple de clé privée 256 bit

Quiconque connais cette séquences peut exécuter des transactions sur le compte associé. Par exemple : dépenser de la cryptomonnaie.

Le Wallet est l'application hautement sécurisée dans laquelle l'utilisateur génère et garde cette clé. Des exemples de Wallet sont Trust et Status sur Android. Le Wallet doit donc signer des transactions avec cette clé pour qu'elles puissent être acceptées sur un blockchain.

On pourrait utiliser une librairie comme KEthereum pour stocker ces clés directement dans notre DApp et se passer du Wallet, mais cela nuirait à la sécurité à la user expérience : ce serait l'équivalent d'une application à laquelle vous devez donner le PIN de votre carte bancaire. La DApp doit pouvoir interagir avec le Wallet pour faire signer ses transactions.

Après étude, j'ai décidé de partir sur le Wallet Open Source WallETH pour deux raisons :

  1. En regardant le code source, j'ai découvert que WallETH propose un Intent Android pour signer les transactions décrites au format ERC681.

  2. Au besoin, il me sera possible d'enrichir cette interface puisque WallETH est Open Source.

Interagir avec la Blockchain

Là aussi, il y a un choix à faire. Il existe en résumé 3 modes pour interagir avec la blockchain :

De point de vue UX l'approche JSON RPC est la meilleur car elle offre une réponse immédiate. De point de vue technique aussi c'est celle qui s'adapte au mieux aux ressources limitées des appareils mobiles. 

Mais de point de vue sécurité, on accepte ainsi de rompre avec l'idéal de décentralisation et de faire confiance au fournisseur du service JSON/RPC.

En effectuant des recherche la librairie Web3J semble être la plus adaptée pour interagir avec JSON/RPC. Coté serveur, il est plus rapide d'utiliser le service en ligne gratuit d'Infura, mais il est aussi possible d'utiliser son propre serveur JSON RPC. 

UX Finale Retenue

L'UX finale retenue est donc : 

  1. La DApp crée une transaction : par exemple un payement une mensualité sur un Smart Contract Daret et la soumet au Wallet. Sous Android, le mécanisme le plus intuitif serait un Intent.

  2. Le Wallet s'active et demander la confirmation de l'utilisateur. Le Wallet signe alors la transaction avec la clé privée et renvoie la signature à l'application.

  3. La DApp soumettra alors la transaction à la Blockchain en utilisant un service JSON RPC.

  4. La DApp suit le status de la transaction jusqu'à son enregistrement ou son Refus. 

En conclusion

Beaucoup d'options sont possibles et il n'y a pas encore d'approche standard. Cela est  certainement dû à la complexité des compromis à faire entre sécurité et UX et aux différents cas de figure en Wallet et DApp. En effet le Wallet peut être Web ou Mobile, sur le même mobile que la DApp our différent …

Toujours est-il qu'on a abouti à une UX qui devrait être satisfaisante, ressemblant peu ou proue aux workflows de paiement en ligne, qu'on appliquera dans le prochain post de la série.