Maîtriser le Web 3.0 avec Waves #5

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

Module #5 Tokenisation et Smart Assets

5.1 Tokenization;
5.2 Opérations avec actifs numériques,
5.3 Non Fongibles Tokens (NFT),
5.4 Smart Assets, comment ils fonctionnent et comment les utiliser
5.5 Coupon-Bazaar’s digital assets

Qu’est ce que la tokenization ?

La première chose dont nous devons discuter est ce qu’est exactement la Tokenisation. De manière générale, la Tokenisation est le processus de conversion d’une forme d’actif en un Token (jeton) pouvant être déplacé, enregistré ou stocké sur un réseau Blockchain. Cela semble plus complexe que ça ne l’est. Pour faire simple, la Tokenisation convertit la valeur stockée dans un objet — un objet physique, comme un tableau, ou un objet immatériel, comme un crédit carbone — en un Token pouvant être manipulé selon un système de Blockchain.

https://blockonomi.com/tokenization-blockchain

Comme nous pouvons le constater, l’évolution de la monnaie comporte plusieurs étapes importantes:

Troc avant argent

Or et argent ensuite

Pièces métalliques

Papier-monnaie ou billets de banque

Cartes en plastique

Monnaie électronique

Et enfin, les crypto-monnaies et les tokens — le phénomène moderne.

Les Tokens ne sont donc que des formes d’actifs numériques plus efficaces et automatisées.

De par leur nature décentralisée, les opérations avec les Tokens sont entièrement automatisées et ne peuvent être ni modérées ni bloquées par une tierce partie. Cela rend les systèmes de Tokens globaux et disponibles pour tout le monde sur la Terre. Quels que soient le pays d’origine, la situation politique, la culture, la religion ou la situation économique.

Pour avoir une valeur monétaire, tout actif cryptographique (Token) doit être liquide.

En affaires, en économie ou en investissement, la liquidité du marché est une caractéristique du marché selon laquelle un particulier ou une entreprise peut facilement et rapidement acheter ou vendre un actif sans provoquer de changement radical du prix de cet actif.

Pour avoir une valeur d’utilité (Utility Token), tout jeton doit être conçu comme un composant obligatoire de dApps ou d’opérations commerciales.

Vous pouvez également échanger des Tokens avec de nombreuses stratégies d’échange en passant des ordres de vente ou d’achat.

Waves DEX — est un échange décentralisé pour de nombreux Tokens liquides.

Comme dans toute économie, les actifs cryptographiques ont un prix déterminé par l’équilibre entre la demande et l’offre. Plus il y a de demande — plus le prix d’un actif est élevé. (Remarque : cela peut ne pas fonctionner avec les Smart Assets, où vous pouvez restreindre certaines options en appliquant un script d’actif/asset).

Nous connaissons déjà WAVES — le Token natif du réseau publique de la Blockchain Waves.

Dans toute Blockchain publique, un Token natif est très important pour les fonctionnalités de la plate-forme:

Cela rend les attaques DDoS coûteuses (à cause des frais)

Il incite les nœuds de réseau (nodes) / producteurs de blocs à maintenir le réseau

Cela incite les contributeurs de la plate-forme à améliorer l’infrastructure

Dans ce module, nous allons essayer de créer nos propres Tokens et d’automatiser certaines opérations avec les Tokens en les rendant intelligents.

Appelons les Tokens, qui ne sont pas des Tokens “natifs” pour la chaîne publique des “Tokens personnalisés”. Tous les Tokens autres que WAVES sont des Tokens personnalisés dans la Blockchain Waves.

Nous pouvons faire beaucoup de choses avec les Tokens personnalisés:

* Issue — signifie que nous pouvons créer nos propres Tokens

* Re-Issue — signifie que nous pouvons “imprimer” plus de Tokens (si cela est encore possible — cela dépend des paramètres Issue) ou modifier leur logique en appliquant un Asset Script.

* Burn — signifie que, dans certaines circonstances, nous sommes en mesure de supprimer certains jetons de la réserve en circulation.

* Transfert

* Exchange — nous pouvons échanger des Tokens sur DEX (échange décentralisé)

* Invokations — nos applications décentralisées (dApp) peuvent également utiliser des Tokens personnalisés

* Set Asset Script — Processus permettant de créer un smart asset à partir d’un Token personnalisé ou de modifier le comportement des smart assets existants.

Apprenons à travailler avec des Tokens dans nos applications web 3.0 !

Suivant…

Tout le monde peut émettre un nouveau jeton avec certains paramètres. Pour faire cela en JavaScript, utilisez simplement la méthode de transaction issue.

C’est le cas du Token “custom currency”.

Regardez le paramètre — decimals. En le réglant sur 2, vous obtiendrez la même image qu’avec EUR et CENT. 1 CENT équivaut à 1/100 d’EUR et constitue une valeur symbolique minimale disponible pour des opérations telles que les transfers, les exchanges ou les burn.

Si vous définissez le paramètre reissuable sur false, les paramètres du Token émis ne seront jamais modifiés (reissued ou devenus un Smart Asset).

Documentation: https://docs.wavesplatform.com/en/blockchain/token/custom-tokens.html

API: https://wavesplatform.github.io/waves-transactions/globals.html#issue

P.S .: Dans l’interface utilisateur du client Waves, n’importe qui peut émettre un Token en quelques clics :

(testnet Waves Client UI: https://testnet.wavesplatform.com/tokens )

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’émettre votre propre Token en utilisant le code JS de “l’étape 2” (avec 2 décimales).

Trouvez ce Token dans l’explorateur et mettez ici la valeur du champ “Scripted”:

Indice : https://wavesexplorer.com/testnet/assets/{asset_id}

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’émettre votre propre Token en utilisant le code JS de “l’étape 2” (avec 2 décimales). Trouvez ce “issue” (création) transaction dans l’explorateur et mettez ici la valeur du champ “Fee”:

Indice : https://wavesexplorer.com/testnet/tx/{asset_id}

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’émettre votre propre Token en utilisant le code JS de “l’étape 2” (avec 2 décimales).

Recherchez le compte de l’émetteur dans l’explorateur (onglet Assets) et indiquez ici la valeur du champ “Balance” du Token émis :

Les utilisateurs peuvent émettre des Token indivisibles en mettant à zéro le nombre de décimales.

Dans notre dApp “Coupon Bazaar” nous travaillons avec des assets indivisible, des “coupons”.

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’émettre votre propre Token indivisible (quantité — 100) en utilisant le code JS de “Étape 6” (avec 0 décimale).

Recherchez le compte émetteur dans l’explorateur (onglet Assets) et indiquez ici la valeur du champ “Balance” du Token indivisible émis:

Re-Issue — signifie que nous pouvons “émettre” plus de Token (si cela est encore possible — dépend du paramètre Issue) ou modifier leur logique en appliquant un Asset Script.

Le fournisseur peut souhaiter vendre un peu plus de coupons pour le même service ou produit sur le marché.

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’émettre votre propre Token indivisible (quantité — 100) en utilisant le code JS de “Étape 6” (avec 0 décimale). Réémettez 10 autres jetons (“Étape 8”).

Trouvez la transaction “Reissue” dans l’explorateur Waves et mettez ici la valeur du champ “Fee”:

Dans l’interface utilisateur du client Waves, tout utilisateur peut transférer un Token d’une adresse à une autre.

Testnet Waves Client UI: https://testnet.wavesplatform.com/wallet/portfolio

Faisons cela dans l’interface utilisateur en premier et dans JavaScript ensuite.

Recherchez votre Token de coupon dans le portefeuille et essayez d’envoyer un nouveau Token à une autre adresse.

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’envoyer un Token de coupon depuis l’interface utilisateur du client testnet :

Trouvez le transfert transaction dans l’explorateur et mettez ici la valeur du champ “Fee” :

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Quelle fonction de l’api (@waves-transactions) est utilisée pour les transferts d’Assets ?

Exchange — nous pouvons échanger des Tokens sur DEX (exchange décentralisé)

Faisons cela manuellement sur testnet DEX :

L’émetteur peut vendre ses Tokens en passant un ordre de vente — “Sell”.

D’autres utilisateurs passent des ordres d’achat — “Buy”.

Nous avons donc un carnet de commandes (order book) pour notre Token.

Lorsque les prix des ordres “Sell” et “Buy” sont les mêmes, nous avons un “match” et une exécution des ordres — c’est-à-dire une transaction d’échange (Exchange Transaction).

API: https://wavesplatform.github.io/waves-transactions/globals.html#exchange

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Essayez d’échanger des Tokens de coupon sur le testnet DEX (d’un compte à un autre):

Utilisez la paire “coupon / WAVES”.

Trouvez la transaction d’échange (Exchange Transaction) dans l’explorateur et mettez ici la valeur du champ “Fee”:

Page avec le lien du Waves Client UI : https://stepik.org/lesson/237607/step/2?unit=209936

Veuillez utiliser le “compte par défaut” en tant que signataire pour tous les défis de ce module afin de les réussir. Sinon, les fee (frais de transaction) seront différents !

Les utilisateurs sont capables de détruire (Burn) leurs Tokens.

Par exemple : Dans notre cas, les fournisseurs peuvent souhaiter détruire (Burn) des Tokens de coupon lorsque les coupons ont été transférés par les clients.

API: https://wavesplatform.github.io/waves-transactions/globals.html#burn

Détruisons 10 tokens:

Trouvez la transaction Burn dans l’explorateur et mettez ici la valeur du champ “Fee”:

Dans les modules précédents, nous avons vu comment dApps pourrait fonctionner avec WAVES — le Token natif.

Pour les utiliser avec des jeTokens ons personnalisés, nous devons appliquer une logique aux fonctions @Callable.

Regardons l’exemple “Portefeuille multi-utilisateurs” qui fonctionne maintenant uniquement avec la devise wEUR (Token):

i.payment.assetId — doit être utilisé pour autoriser ou refuser les transactions de dApp.

ScriptTransfer utilise l’assetId approprié pour exécuter le transfert de fonds du compte dApp vers certaines adresses.

La même logique en code JavaScript. Utilisez simplement votre assetID dans le paramètre de paiement de invokeScript tx.

Suivant…

Essayez d’implémenter un nouveau compte dapp (“Step 1”) avec la prise en charge de votre Token et déployez le script sur le compte.

Trouvez ce script dans l’explorateur via l’adresse du compte utilisé et mettez le code décompilé ici:

Essayez d’implémenter un nouveau comptedapp (“Step 1”) avec votre Tokenet déployez le script sur le compte.

Déposer 3 Token wEUR sur la dApp.

Trouvez la transaction de dépôt invoquée dans l’explorateur et mettez la valeur du champ “Payment” ici:

Un non-fungible token (NFT) est un type de Token cryptographique spécial qui représente quelque chose d’unique; Les non-fungible token ne sont donc pas interchangeables. Cela contraste avec les crypto-monnaies telles que Bitcoin et de nombreux Token sécuritaire ou Token utilitaires de nature fongible.

https://en.wikipedia.org/wiki/Non-fungible_token

Les Non-fungible Tokens sont utilisés pour créer une rareté numérique vérifiable. Les NFT sont utilisés dans plusieurs applications spécifiques qui nécessitent des éléments numériques uniques tels que des crypto-collectibles et des crypto-gaming, des certificats ou des coupons uniques.

Sur Waves, les NFTs sont des Tokens personnalisés avec 0 décimale et 1 quantité.

Les frais d’émission pour les NFTs sont 1000 fois moins élevés que pour les non-NFTs .

Les utilisateurs ne peuvent pas envoyer un “morceau” de ces jetons.

Parlons encore un peu des smart contracts.

Les smart contracts représentent des accords entre participants (parties). Ils sont validés et mis en œuvre par une entité tierce officielle ou par le gouvernement. Les entités tierces sont des participants clés pour la validation des conditions du contrat, des conditions environnementales et des événements susceptibles d’influencer l’exécution de l’accord du contact.

Malgré des termes similaires, les smart contracts ne sont pas contractuels par définition d ’« accord entre les parties ». Le smart contract est un code source ou un programme informatique pouvant être exécuté dans un environnement distribué, tel qu’un réseau Blockchain. Toutes les opérations et résultats d’exécution sont stockés dans la Blockchain.

Dans cette définition, un smart contract n’est pas un contrat entre des parties, mais un protocole de coopération entre utilisateurs, mais également entre utilisateur et ordinateur, voire même ordinateur et ordinateur, conformément aux règles décrites dans le code source du smart contract.

Dans Waves, nous avons deux types de smart contracts: les smart accounts (dApps) et les smart assets.

Le script Smart Asset autorise ou refuse certaines transactions sortantes avec certains assets, en fonction de certaines conditions décrites dans le code de script Smart Asset.

Examinons l’excellent exemple d’utilisation de smart assets : les Tokens de récompense Waves (WRT).

L’objectif: Seuls les ambassadeurs pourront vendre le WRT, que l’équipe Waves rachètera sur DEX. C’est un cas particulier de programmes de fidélisation et de motivation.

Les membres de la communauté Waves qui ont satisfait à certaines conditions reçoivent un certain nombre de WRT (base mensuelle ou trimestrielle).

Ils pourront ensuite envoyer des WRT aux Ambassadeurs Waves en guise de récompense pour leurs activités.

En présentant WRT, l’équipe Waves encourage la communauté à suivre les activités des ambassadeurs, à exprimer leurs opinions et à les récompenser, s’ils le méritent.

Le smart asset fonctionnera comme suit:

  • Le WRT ne peut être envoyé qu’aux adresses figurant sur la liste blanche (celles des ambassadeurs)
  • Le Token ne peut pas être détruit (Burn)
  • Il ne peut pas être échangé sur DEX; seulement les adresses sur la liste blanche peuvent le vendre

L’asset ID de WRT mainnet : H1RmwqzeXsdQMt6jR6DPkGbZjA2PKUoofP4WjuCRz1st

Recherchez le Token WRT dans l’explorateur Waves Mainnet et mettez ici le script décompilé du smart asset :

Recherchez le Token WRT dans l’explorateur Waves Mainnet et regardez le script décompilé du smart asset.

Recherchez le stockage clé-valeur avec la liste blanche (White list) et placez toutes les données clé-valeur ici :

Essayez de créer votre propre Smart Asset en appliquant le script à votre Token émis (choisissez un exemple existant ou créez-en un nouveau).

Dans ce script Smart Asset vous devez autoriser uniquement les transactions d’échange pour tout le monde.

API: https://wavesplatform.github.io/waves-transactions/globals.html#setassetscript

StackOverflow: https://stackoverflow.com/questions/55041411/how-to-set-a-script-for-an-asset-using-waves-ide

Indice : IDE librairies avec des cas d’exemple de Smart Assets

Mettez votre code RIDE de smart asset ici:

Ceci est la suite de l’étape précédente…

Essayez de créer votre propre Smart Asset en appliquant le script à votre Token émis (choisissez exemple existant ou créez-en un nouveau).

Dans ce script Smart Asset, seules les transactions d’échange sont autorisées pour tout le monde.

API: https://wavesplatform.github.io/waves-transactions/globals.html#setassetscript

StackOverflow: https://stackoverflow.com/questions/55041411/how-to-set-a-script-for-an-asset-using-waves-ide

Mettez votre code de test Java Script ici :

Nous construisons une place de marché Web 3.0 décentralisé pour des coupons de réductions- le «bazar des coupons».

Les utilisateurs recherchent des remises sur les produits et services et peuvent les acheter à un prix modique sur le marché.

Chaque coupon — est un actif numérique (Digital Asset) qui représente une réduction spécial du fournisseur.

«Coupon Bazaar» est un marché d’actifs numériques — des coupons symbolisés sous forme de Tokens émis par des fournisseurs.

Les fournisseurs sont en mesure de configurer une logique pour ces Tokens tels que la quantité et l’expiration.

Nous avons déjà un compte dApp “Coupon Bazaar” avec smart contract et des fonctions de test. Ajoutons quelques fonctionnalités pour un fournisseur:

Dans le code RIDE du smart asset, nous autorisons la destruction (Burn)et la réémission de bons de reduction uniquement pour le fournisseur émetteur.

Les clients peuvent acheter des coupons, vendre des coupons sur le DEX, transférer des coupons à leurs amis et aux membres de la famille dans les délais impartis.

P.S : regardez l’astuce dans l’IDE. Vous pouvez utiliser la fonction file(…) pour utiliser le code source du fichier RIDE directement dans le code de réémission.

Créons votre propre smart asset “coupon”! Recherchez le script d’asset dans l’explorateur et mettez le code décompilé ici :

En fait, nous avons tout pour créer notre propre Coupon Bazaar dWeb3 entièrement fonctionnel.

Dans le module 6, nous allons tous combiner!

--

--

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