Ludovic Frank - Développeur indépendant

Comment créer une application décentralisée sur la blockchain ? On va parler de smart contrat !

ionicons-v5-k Ludovic Frank 15 mars 2022
Logo vague
1692 lectures Niveau :

Eh ! Bonjour 😁

Comment ça va vous ?
Une fois, n’est pas coutume cette semaine nous allons parler de Blockchain, mais cette fois d’un point de vue plus dev que les autres fois. 
Saviez-vous qu’il est possible de développer sur la blockchain ?
On va discuter un peu de ça.

Une application décentralisée (dApp) est-elle complètement décentralisée ?

À l’heure ou j’écris ces lignes, il y a des points de centralisation dans ces applications, en fait c’est relativement simple de comprendre « pourquoi ? », ces dApp tourne dans un navigateur hors un navigateur ne reconnaît que quelques protocoles comme 

  • HTTP(s)
  • WebSocke(s)
  • FTP
  • WebRTC
  • Etc …

Le point commun de ces protocoles c’est qu’ils sont par nature “client / serveur” donc, centralisés. Aujourd’hui un navigateur ne peut pas “seul” aller communiquer avec la blockchain. 

Comment cela peut-il devenir complètement décentralisé ?

Édit : Ici je ne souhaite pas dire que Ledger Live est une dApp mais que pour certaines de ses fonctions, cette application de bureau se connecte directement a la blockchain, sans passer par une API tierce (et donc le serveur d'un tiers, qui peut s’il le souhaite couper l'accès).

Eh bien, aujourd’hui il y a déjà des applications complètement décentralisées, là tout de suite en tête j’ai l’application Ledger Live (desktop) qui me vient, cette application permet de gérer les portefeuilles de sa clef ledger depuis son ordinateur (Windows / macOS / Linux). 

Celle-ci utilise “Electron”, le framework développé par Github pour créer des app “desktop” avec des technologies Web et je pense que l’on verra de plus en plus d'applications comme ça dans le futur.

En fait, quand vous réalisez une transaction sur Ledger Live, vous la signez avec votre Hardware Wallet, Ledger live va ensuite directement se connecter à un nœud du réseau (Bitcoin, par exemple) pour envoyer cette transaction. 
Cette technique-là ne peut, pour le moment, pas se faire dans un navigateur.

Une autre méthode à l'utilisation d'électron pourrait être que : chaque nœud du réseau expose une API accessible en HTTP(s) et que l’application client (dans le navigateur) ait une liste embarquée de toutes les adresses et se connecte aléatoirement à l'une ou l’autre, sur le réseau.

Après dans ce scénario il reste encore un point de centralisation, le nom de domaine et le serveur qui héberge l’app (qui, pour le serveur est du contenu statique puisque c’est le code JavaScript qui fait tout).

Qu’est-ce qu’un smart contrat ?

Le smart contrat, c’est la base des dApp. En fait c’est ni plus ni moins que du code, mais au lieu de le déployer sur votre serveur, vous le déployez sur la blockchain cible (Ethereum, Terra, BNB, Elrond … etc). Ce petit bout de code va être répliqué sur tous les nœuds du réseau puisqu’il fait maintenant partie de la blockchain, il est lié à une adresse (oui, le même type d’adresse que votre portefeuille perso 😛).
Si vous voulez voir à quoi peut bien ressembler un smart contrat ? Pour le savoir, cliquez ici 

Ce code est le smart contrat de l'USDT, alors en fait il est compilé dans la blockchain, ici le code source a été soumis à des fins de vérification, ce code source est écrit avec le langage de programmation Solidity, c’est celui utilisé par Ethereum, pour le reste de l’article nous allons nous pencher à ma blockchain de cœur, Elrond.

À quoi peuvent servir les smart contrat ?

Voici une petite liste non exhaustive de ce que permet de faire un smart contrat :

  • Création de systèmes de prêt automatisés
  • Création d’une assurance décentralisée automatisée
  • Échange automatique d’actif contre un autre actif (tu me donnes des $PONNEY, je te donne des $ NES)
  • Tokenizer un bien immobilier : acheter un bien à plusieurs et automatiquement reverser les loyers en fonction des parts de chacun.

Que faut-il pour créer une dApp ?

Vôtre dApp va se constituer de plusieurs choses :

  • Un ou plusieurs smart contrats sur la blockchain (écrit en Rust chez Elrond)
  • Une API d’accès à la blockchain, comme je l’ai dit plus haut, pour le moment c’est un point de centralisation, pour cet exemple nous allons utiliser l’api Elrond
  • La partie front, ce que vous utilisateurs voient, souvent écrit avec des frameworks comme React ou Angular (React semble être le standard dans l’industrie)

Ici, vous avez surement compris le point de centralisation, il suffit que le serveur api.elrond.com soit hors ligne ou encore que l’enregistrement DNS n’existe plus. Et, vôtre dApp sera hors ligne, la bonne nouvelle c’est que c’est uniquement la connexion entre l’interface et le back qui est interrompu, les données de vos utilisateurs, elles, sont toujours bien dans la blockchain et bien décentralisé.

Le smart contrat

Pour écrire votre smart contrat sur Elrond, il va falloir vous familiariser avec le langage Rust, pas d'inquiétude, si vous êtes dev, vous vous habituez très vite, la documentation de Rust est disponible ici

Comme toute plateforme, Elrond dispose d’un SDK, en fait ils ont fait les choses bien, il y a un plugin « Visual studio code », pour vous créer un IDE de smart contrat Elrond en quelques minutes, la vidéo de présentation est ici

Je vous conseille néanmoins d’utiliser Linux ou macOS, toutes les fonctions de « erdpy », ne fonctionne pas sous Windows (même avec WSL), « edpy » est la ligne de commande pour interagir avec Elrond, écrit en Python (dont le py, en fait 😛)

Voici un exemple de code de smart contrat, tiré de la doc d’Elrond, il fait juste un “ping pong”,
Ce smart contrat est très simple, l’utilisateur dépose de l’argent dessus, décide au bout de combien de temps il pourra récupérer son argent puis une fois cette période passée il peut  “claim” son argent (les récupérer quoi)

Oui, je sais qu'au début le code du smart contrat fait peur, mais, regardez, il y a énormément de commentaires et une fois qu’on a le nez dedans ça devient plus simple.
Ce smart contrat, une fois compilée est envoyée à tous les nœuds du réseau, eh oui votre petit bout de code va être copié sur 3200 machines partout dans le monde … ce n’est pas beau ça ? 😛

Maintenant que nous avons un smart contrat voyons l’autre partie, l’interface utilisateur.

À ce moment là de l’article, vous galérez et vous dites « oui, mais il manque des infos là, non ? »
Oui en fait, je vous donnerai un lien à la fin si vous voulez vraiment développé cette dApp, pour le moment je vous explique les concepts de comment ça marche

La partie front (l’interface utilisateur)

Franchement ici, si vous êtes développeur front, il n’y a rien de spécial, vous faites de call API, via l’api d’Elrond… Ah s' il y a deux ou trois petits détails…

Il n’y a pas de « login / pass », comme on voit sur une application classique, pour s’authentifier un utilisateur utilise un wallet, soit « Maiar », soit une clef ledger … etc. 

L’idée c’est que lors des transactions, l’utilisateur utilise sa clef privée pour la signer afin de la rendre valide, une transaction non signée à l’aide de la clef privée du compte est tout simplement ignorée et non valide… 

Tiens ! On parle de clef privée, encore une occasion de parler de mon article sur les ransomware pour ceux qui ne l’ont pas lu.

Pour ça, pas d’inquiétude, il y a bien sûr un SDK JavaScript fourni par Elrond, pour vous montrer « à quoi ça ressemble » vous pouvez regarder le projet qui va avec le smart contrat ping-pong, ici

Et l’api dans tout ça ?

Pour l’heure; l’API est fourni par Elrond, celle-ci fait le passage entre votre application JavaScript et la blockchain.

Plus tard cette partie sera remplacée, je ne sais pas encore comment, mais perso je dirais que “chaque nœud du réseau expose une API”, mais je ne suis pas dev chez Elrond.

Du coup pour elle vous avez juste à lire la doc disponible ici

Conclusion

Cet article était une mise en bouche pour ceux qui veulent se mettre à écrire des applications décentralisées, vous voulez aller plus loin ?

Suivez le guide de démarrage Elrond, par ici (en anglais)

Quant à moi il ne me reste plus qu'à vous souhaiter une très bonne semaine 😁