Maîtriser le Web 3.0 avec Waves #2

Christophe Verdot
Maîtriser le Web 3.0 avec Waves
14 min readJul 23, 2019

Module #2 Web 3.0, décentralisation, blockchain et cryptocurrency

C’est la formation Maîtriser le Web 3.0 avec Waves. Aujourd’hui nous allons discuter des aspects fondamentaux du web du futur.

Une évolution de la technologie web. Principes fondamentaux du web 3.0. Signatures Digitales, Technologie des Registres Distribués (Distributed Ledger Technology DLT), Blockchain et Cryptocurrency.

Nous allons présenter la Blockchain Waves, son consensus et l’utilité des Tokens plus précisément.

Et, bien sur, à la fin de ce module nous devrons compléter le test pratique.

Let’s go!

2.0 “Coupon Bazaar” présentation. Actifs numériques.

2.1 Histoire courte de l’évolution du Web

2.2 Services Web aujourd’hui et Web 3.0. Signatures Digitales

2.3 Transaction. Blockchain. Décentralisation. DLT & Consensus.

2.4 Cryptocurrency. Transparence. Liquidité. Gateways. Echanges.

2.5 L’utilité du token Waves. Coûts.

2.6 Pratique : “Coupon Bazaar” avec stockage de données décentralisées et crypto paiement.

Enjoy!

Souvenez vous, c’est une formation pratique en ligne et nous allons construire un marché décentralisé de coupon de réduction en ligne — “Coupon Bazaar”.

Les utilisateurs recherchent des coupons de réduction pour des produits et services et ils peuvent les acheter à prix réduit sur la plateforme.

Chaque coupon est un Actifs Numériques (Digital Asset) qui représente un coupon de réduction spécial venant d’un fournisseur.

“Coupon Bazaar” est une place de marché. Cela contient une correspondance, une gestion des paiements et opérations et la livraison de services entre les fournisseurs et les clients.

Cool! Mais quel est le soucis des services web actuels ? Regardons ensemble l’évolution d’internet.

Au commencement, les pages web étaient uniquement “read only” ou “lecture seule” pour les utilisateurs réguliers. Les grandes sociétés étaient les principales créateurs de contenu et les pages elles même étaient seulement statiques.

L’adoption d’internet et l’adoption grandissait rapidement. Et maintenant nous avons beaucoup de contenu générés par les utilisateurs eux même. Internet est devenu “Lecture / Ecriture” (“read” and “write”). Les pages sont devenues dynamiques et interactives.

Mais ensuite ?

Nous pouvons observer qu’internet devient de plus en plus intelligent. Il y a beaucoup d’utilisateurs, leurs communications, leurs contenus. La complexité des comportements utilisateurs augmente de manière dramatique. Ceci est également amplifié par l’intégration des technologies modernes dans le web tel que : Internet Of Things, Intelligence Artificielle, BigData, Réalité Virtuelle et augmentée.

Pour supporter la complexité grandissante, internet se doit d’être plus décentralisé, sécurisé et centré sur l’utilisateur.

Voyons à quoi cela devrait ressembler!

Les traditionnels Services Web ont un côté “client” et un côté “serveur”. Quand l’utilisateur ouvre une page dans son navigateur le serveur renvoie une page de contenu statique, HTML, éléments (comme les images et les polices de caractères) et du code Java Script.

Quand l’utilisateur interagit avec un composant de l’interface utilisateur, par exemple un bouton et un formulaire, le code Java Script crée de nouvelles requêtes vers le serveur pour obtenir les données à afficher ou écrire des données dans la base de données du serveur.

Après avoir traité cette requête le serveur renvoie une réponse sous la forme d’un objet de données JSON au format clé/valeur. Le navigateur utilise ces données pour changer l’état et l’affichage de l’application en cours.

Le Web 3.0 fonctionne de manière différente. Bien sur, les application Web 3.0 ont toujours besoin du HTML et Java Script exécuté du côté client et pour cela, le code de l’application côté serveur est toujours nécessaire

Quand les utilisateurs interagissent avec l’application côté client, la requête “Lecture” est créée. Cette requête est exécutée par les application (Node) du Registre Distribué (Distributed Ledger) sur le Réseau Blockchain.

La différence principale ici c’est que les données peuvent être visibles par tout le monde. Elles sont publiques pour les registres distribués populaires.

Le point le plus important est : Comment écrire de nouvelles informations sur le réseau Blockchain. Ici nous avons les termes transactions et signatures digitales.

Toutes les mises à jour sur le réseau Blockchain doivent être implémentées par des envoies de transactions qui nécessitent une signature digitale de l’initiateur de la dite transaction.

Qu’est ce qu’une Signature Digitale ?

Imaginez : Bob crée deux clés, clé privée et clé publique. Ces clés sont connectées via une formule mathématique, donc pour chaque clé publique nous avons une seule clé privée et vice versa.

Quand Bob crée un message ou une transaction il peut le signer avec sa clé privée. Bob doit garder sa clé privée secrète. Bob peut partager sa clé publique avec tout le monde afin de valider la signature du message ou de la transaction. N’importe qui en possession de la clé publique de Bob peut vérifier qu’une certaine transaction à bien été signée pas la clé privée de Bob. Donc, cela signifie que a bien créé et signé la transaction.

En générale, on appel cela la cryptographie asymétrique.

Les clé publiques et privées sont connectées par une formule mathématique, donc pour chaque clé publique nous avons une seule et unique clé privée et vice versa.

Un point important :

La clé privée peu être générée depuis une “seed phrase”, un ensemble de mots aléatoire, utilisant une fonction de “hashing”.
La clé publique est obtenu depuis la clé privée via une multiplication de courbe elliptique. Les adresses sont obtenues depuis la clé publique également via une fonction de hashing.

Donc, comme vous pouvez le voir, toutes ces transformations sont seulement uni directionnelles. La direction opposé est très compliqué en terme de calcules.

Ce serait une valeur astronomique (~2²⁵⁶)!

Les Seed phrases et clés privées doivent être gardées de manière sécurisée. En même temps, cela doit être facile à utiliser pour signer les transactions. L’application principale pour le Web étant les navigateurs web, la meilleure solution est de garder ces informations (clés et seed) dans une extension de navigateur.

Waves Keeper est une extension de navigateur qui est capable de garder les clés de manières sécurisées et permet de signer facilement les transactions d’application web tierce.

Voyons les définitions de ces termes.

Qu’est ce qu’une transaction? Une transaction Blockchain est un nouvel enregistrement avec des champs obligatoires et optionels. Chaque nouvel enregistrement change l’état du réseau Blockchain. Cela est réversible ou irreversible selon l’étape à laquelle se trouve la transaction, le statu du bloque de validation et les conditions de l’infrastructure.

Par example : Une transaction de transfert d’Asset contient un “timestamp” (horodatage), un numéro de bloque, un expéditeur, un destinataire, un montant et un coût de transaction.

La Blockchain Waves supporte différents types de transactions a la racine.

Qu’est ce qu’une Blockchain ? C’est simplement une structure de données avec des règles spécifiques : plusieurs transactions sont combinées dans un bloque , chaque bloque a un hash unique basé sur les hash de toutes les transactions du bloque (au format Merkle Tree).

Chaque bloque contient le hash du bloque précédent. La séquence de tous les bloques représente la Blockchain.

Cette structure empêche toute modification des données.

Si quelque chose devait être changé dans le bloque A, tous les bloques suivants seraient automatiquement invalides et nécessiteraient d’être recréés un à un.

Comme on peut le voir, réécrire tous les bloques demanderait énormément de puissance de calcul pour une structure de données comme la Blockchain.

Imaginons que l’on ai des centaines et des milliers de copies de données sur des ordinateurs différents dans différents pays et continents. Maintenant, pour changer l’historique complète nous devrions réécrire tous les bloques pour la majorité des copies ce qui serait encore plus cher en terme de puissance de calcul et de ressources.

C’est pour cela que vous entendez souvent dire que la Blockchain garde les données de manière immuable dans le temps.

Le problème c’est que différentes machines ont la possibilité de générer des Blockchains différentes. Ce phénomène s’appel un fork.

Pour garder les même données sur des machines différentes tous les participants doivent arriver à un consensus pour chaque nouveau bloque.

Les participants du réseau doivent décider qui est responsable de la génération du bloque suivant. Le participant sélectionné via un algorithme de consensus est responsable de la création du nouveau bloque. Cela s’appel “miner” un bloque, générer un bloque ou produire un bloque. Le processus de génération de bloque s’appel le “Mining”.

Il y a actuellement deux type d’algorithme de consensus avec différents avantages et inconvénients.

Le premier consensus classique est l’algorithme appelé Proof of Work (PoW). Il a été pensé à l’origine par Adam Back pour le projet de service d’e-mail Hashcash. Hashcash est un système de proof-of-work utilisé pour limiter le spam d’e-mail et les attaques de type denial-of-device. Il est basé sur le calcul de valeur de nonce spéciaux (nombre arbitraire) ou le hash généré aura un certain nombre de zéros. Tous les participants exécute le même calcul pour trouver la valeur correct.

La probabilité de trouver cette valeur dépend de la puissance de calcul. C’est un algorithme de consensus relativement cher en ressources et peu efficient en terme de d’évolutivité et rapidité.

En 2018, un autheur anonyme du nom de Satoshi Nakamoto a proposé d’utiliser le Proof of Work pour la nouvelle money digitale nommée Bitcoin.

Un des algorithme de censensus les plus populaires aujourd’hui est le Delegated Proof of Stake. Tous les détenteurs de cryptocurrency votent pour leur délégués. Le nombre de délégués est limité par un nombre relativement petit.

Seul les participants sélectionnés peuvent générer un nouveau bloque dans un ordre prédéfini. Tous les autres participants sont exclu du processus de génération de bloque. Il est souvent questionné à savoir si cela est donc vraiment décentralisé ou non.

La blockchain Waves utilise un consensus de Leased Proof of Stake (LPoS). Au lieu de sélectionner un nombre limité de producteurs de bloques, LPoS est en mesure de louer (et non transférer) vos Waves tokens aux nodes que vous aimez et en qui vous avez confiance. La probabilité de devenir un validateur de bloque est proportionnelle au montant total des tokens loué par les “leasers” (loueurs).

Les Waves loués sont verrouillés dans le compte de l’utilisateur (loueur) et ne peuvent ni êtres transféré ni échangés durant la période de location. Les tokens restent cependant et à tout moment totalement contrôlés par le compte du loueur et la location peut être annulée à tout moment.

Dans les deux types de consensus le propriétaire de node travaillent généralement à la popularisation de sa node et à l’attraction d’utilisateurs (loueurs) via des activités sur les réseaux sociaux ou en créant des produits dérivés pour sa communauté.

Pour travailler avec le réseaux Blockchain les développeurs on besoin d’une version de test du réseau. Waves à deux types de réseaux publiques que les développeurs peuvent utiliser :

TestNet et MainNet. MainNet — est l’environnement de production du réseau. TestNet est le réseau pour tester vos produits et dApps dans un environnement qui est similaire à la version de production mais sans les risques financiers durant la période de test.

Chaque action sur le réseau Blockchain a un coût payé sur la base du token natif de la plateforme, Waves. La même chose est vrai pour le TestNet. Il existe un accès gratuit aux tokens du TestNet appelé “Faucet” est ouvert à tous. Entrez votre adresse TestNet, cochez le captcha et vous recevrez des tokens TestNet Waves gratuits pour tester votre application.

Parlons un peu de l’aspect économique du Web 3.0.

Comme nous pouvons le voir l’évolution de l’argent a plusieurs étapes importantes :

  • Troc avant la monnaie
  • L’or et l’agent ensuite
  • Les pièces en métal
  • La monnaie papier et les billets de banque.
  • Les cartes en plastiques
  • La monnaie électronique
  • Et finalement les cryptomonnaies, le phénomène moderne.

De par leur nature décentralisées, les cryptomonnaies n’appartiennent à personne. Une cryptomonnaie ne peut pas être contrôlée ou bloquée par personne. Chaque personne qui a accès à internet peut opérer avec sans aucune restrictions. Cela rend le système de cryptomonnaie global et accessible à tous sur terre. Peut importe quel est votre pays d’origine, situation politique, culture, religion ou situation économique…

Tout sur le réseau Blockchain publique est transparent. Tout le monde peut voir ses transactions et celles des autres.

Tout est anonyme jusqu’à ce que vous partagiez éventuellement que tel ou tel adresse vous appartient ou appartient à quelqu’un.

Vous pouvez voir le détail de toutes les transactions dans l’explorer de la Blockchain.

Pour avoir une valeur monétaire une cryptomonnaie doit être “liquide”. En business, économie ou investissement, un marché liquide est un marché ou un individu ou une société peut facilement acheter ou vendre un asset sans causer un changement drastique au prix du marché de l’asset en question.

Comme dans toute économie, les assets crypto on un prix déterminé par l’équilibre entre l’offre et la demande.

Plus il y a de demande plus le prix de l’asset est élevé.

Pour acheter ou vendre des assets crypto les utilisateurs peuvent utiliser des gateway (passerelles) ou des échanges.

Les assets nationaux et traditionnels sont appelé “fiat”. Donc pour acheter des assets cryptos vous devez utiliser des passerelles/échanges fiat-to-crypto et vice versa.

Waves est capable d’utiliser plusieurs passerelles de monnaie nationales.

Vous pouvais aussi échanger vos crypto assets sous différentes stratégies sur les échanges en plaçant des ordre de vente ou d’achat. Waves DEX — est un échange décentralisé pour beaucoup d’asset crypto liquides.

La Blockchain publique Waves a un token natif WAVES. La demande du token natif Waves est assurée par sont utilité au sein de la plateform.

Toutes les transactions ont un coûts en WAVES. Cela signifie que pour pouvoir utiliser la plateforme les utilisateurs doivent payer pour cela. Heureusement, les coûts sont vraiment bas et cela rend la plateforme accessible à tous.

Par exemple : une transaction de Transfert a un coût égale de manière approximative à la moitié d’un centime de dollar US. Peut importe le nombre d’asset transférés.

Vraiment pas cher n’est pas ?

Le token natif est très important pour les fonctionnalités de la plateforme :

  • Cela rend toute attaque de type DDOS très coûteuse
  • Cela incite le réseau de nodes et les producteurs de bloques à maintenir le réseau
  • Cela incite les contributeurs de la plateforme à améliorer l’infrastructure

N’oubliez pas.

Waves blockchain utiliser un consensus de Leased Proof of Stake. La probabilité d’être un validateur de bloque est proportionnelle au montant total des tokens accumulés venant des loueurs. Avec chaque bloque validé les mineurs reçoivent les récompenses générées par les coûts de transactions.

Waves Nodes Monitor (pywaves)

Dans ce module nous allons pratiquer avec le stockage de données décentralisées et les crypto paiements avec Waves.

Revenons à notre place de marché du futur.

Nous construison une place de marché décentralisée de ventre de coupons de type Web 3.0 — “Coupon Bazaar”. Les utilisateurs recherchent des bons de réductions pour des services et produits et ils peuvent les acheter à petit prix. Chaque coupon est un asset digital qui représente une réduction spéciale venant du fournisseur.

Nous allons donc implémenter les fonctionnalités pour les Fournisseurs :

  • Enregistrement des fournisseurs
  • Gestion des produits et services
  • Confirmation des achats

… puis les fonctionnalités pour les Clients :

  • Recherche de “coupon”
  • Achat avec des cryptocurrencies

Nous allons utiliser une fonctionnalité spéciale et la plus important du développement de dApp — Data Transaction.

… ainsi que les smart account (dApp) — qui accepteront toutes les Data Transactions venant des Fournisseurs et declineront toutes les autres transactions sortantes, hormis les transactions set script qui sont nécessaires pour nous afin de mettre à jour la logique du smart account dans le future.

Waves IDE

Data Transactions — fourni un moyen de stocker des informations dans le réseau Blockchain avec une structure clé/valeur :

“La taille maximum pour une clé est de 100 caractères et la clé peut contenir des caractère de type Unicode incluant des espaces et autres symboles non imprimables. La limite des valeurs de type String est de 32,768 bytes et le nombre d’entrée maximum dans une transaction de type Data est de 100. La taille maximum d’une transaction de type Data est de 140kb, pour référence c’est l’équivalent du roman de Shakespeare’s ‘Romeo et Juliet’.”

Nous vous souhaitons bonne chance pour le “Code Challenge”!

Enjoy!

--

--

Christophe Verdot
Maîtriser le Web 3.0 avec Waves

Web Developer - Waves Platform France Tech Ambassador— Waves Platform Lead for Philippines - Signature Chain founder and Lead Developer / signature-chain.com