Comment construire, déployer et tester l'application décentralisée Waves RIDE

Bonjour ! Dans cet article, je vais vous montrer comment Ă©crire et exĂ©cuter un dApp sur la nƓud Waves. Nous examinerons les outils nĂ©cessaires, les mĂ©thodes et un exemple de dĂ©veloppement.

Comment construire, déployer et tester l'application décentralisée Waves RIDE

Le schéma de développement des dApps et des applications classiques est presque identique :

  • Écrivons le code
  • Écrivons des tests automatisĂ©s
  • DĂ©marrer l'application
  • Testons

Outils

1. docker pour lancer la nƓud et Waves Explorer

Si vous ne souhaitez pas lancer la nƓud, vous pouvez sauter cette Ă©tape. En effet, il existe un rĂ©seau de test et un rĂ©seau expĂ©rimental. Mais sans dĂ©ployer votre propre nƓud, le processus de test risque de s'Ă©tendre.

  • Vous aurez constamment besoin de nouveaux comptes avec des jetons de test. Le robinet du rĂ©seau de test envoie 10 WAVES toutes les 10 minutes.
  • Le temps moyen des blocs sur le rĂ©seau de test est d'une minute, tandis que sur la nƓud, il est de 15 secondes. Cela se ressent particuliĂšrement lorsque la transaction nĂ©cessite plusieurs confirmations.
  • Il est possible qu'il y ait un cache agressif sur les nƓuds de test publics.
  • De plus, ils peuvent ĂȘtre temporairement indisponibles en raison de la maintenance technique.

Je vais dĂ©sormais supposer que vous travaillez avec votre propre nƓud.

2. Outil en ligne de commande Surfboard

  • TĂ©lĂ©chargez et installez Node.js via ppa, homebrew ou exe ici : https://nodejs.org/en/download/.
  • Installez Surfboard, l'outil qui vous permettra de lancer des tests sur la nƓud existante.

npm install -g @waves/surfboard

3. Plugin Visual Studio Code

Cette Ă©tape est facultative si vous n'ĂȘtes pas fan des IDE et prĂ©fĂ©rez les Ă©diteurs de texte. Tous les outils nĂ©cessaires sont des utilitaires en ligne de commande. Si vous utilisez vim, regardez le plugin vim-ride.

Téléchargez et installez Visual Studio Code : https://code.visualstudio.com/

Ouvrez VS Code et installez le plugin waves-ride :

Comment construire, déployer et tester l'application décentralisée Waves RIDE

Extension de navigateur Waves Keeper : https://wavesplatform.com/products-keeper

C'est fait !

Lancez la nƓud et Waves Explorer

1. Lancez la nƓud :

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Assurez-vous que la nƓud s'exĂ©cute via l'API REST sur http://localhost:6869:

Comment construire, déployer et tester l'application décentralisée Waves RIDE
L'interface Swagger REST API pour la nƓud

2. Lancez une instance de Waves Explorer :

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Ouvrez votre navigateur et allez à http://localhost:3000. Vous verrez comment une chaüne vide se construit rapidement sur la nƓud locale.

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Waves Explorer affiche une instance de la nƓud locale

Structure RIDE et outil Surfboard

Créez un répertoire vide et exécutez-y la commande

surfboard init

La commande initialise le répertoire avec la structure du projet, une application de type « hello world » et des tests. Si vous ouvrez ce dossier avec VS Code, vous verrez :

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Surfboard.config.json

  • Sous le dossier ./ride/, vous trouverez un fichier unique wallet.ride – le rĂ©pertoire oĂč se trouve le code du dApp. Nous allons analyser briĂšvement le dApp dans le prochain bloc.
  • Sous le dossier .\/test\/, vous trouverez le fichier *.js. C'est ici que sont stockĂ©s les tests.
  • .\/surfboard.config.json – fichier de configuration pour exĂ©cuter les tests.

Envs – section importante. Chaque environnement est configurĂ© de la maniĂšre suivante :

  • Point de terminaison REST API du nƓud, qui sera utilisĂ© pour exĂ©cuter dApp et CHAIN_ID du rĂ©seau.
  • Phrase secrĂšte pour le compte avec des jetons qui seront les sources de jetons de votre test.

Comme vous pouvez le voir, surfboard.config.json prend en charge plusieurs environnements par défaut. L'environnement local est défini par défaut (la clé defaultEnv est un paramÚtre modifiable).

L'application Wallet-demo

Cette section n'est pas un manuel de langage RIDE. PlutÎt, elle donne un aperçu de l'application que nous déployons et testons pour mieux comprendre ce qui se passe sur la blockchain.

Considérons l'application simple Wallet-demo. Tout le monde peut envoyer des jetons à l'adresse dApp. On ne peut retirer que ses propres WAVES. Deux fonctions @Callable sont disponibles via InvokeScriptTransaction :

  • deposit(), qui nĂ©cessite un paiement attachĂ© en WAVES
  • withdraw(amount: Int), qui renvoie des jetons

Tout au long du cycle de vie de dApp, la structure (adresse → montant) sera maintenue :

Action
État rĂ©sultant

initial
vide

Alice dépose 5 WAVES
adresse-alice → 500000000

Bob dépose 2 WAVES

adresse-alice → 500000000
adresse-bob → 200000000

Bob retire 7 WAVES
REFUSÉ !

Alice retire 4 WAVES
adresse-alice → 100000000
adresse-bob → 200000000

Voici le code pour comprendre pleinement la situation :

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

Un exemple de code peut Ă©galement ĂȘtre trouvĂ© sur GitHub.

Le plugin VSCode prend en charge la compilation continue lors de l'édition du fichier. Vous pouvez donc toujours suivre les erreurs dans l'onglet PROBLEMS.

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Si vous voulez utiliser un autre éditeur de texte lors de la compilation du fichier, utilisez

surfboard compile ride\/wallet.ride

Cela affichera une série de code RIDE compilé en base64.

ScĂ©nario de test pour ‘wallet.ride’

Regardons le fichier de test. Il fonctionne sur le cadre JavaScript Mocha. Il y a une fonction ‘Before’ et trois tests :

  • ‘Before’ finance plusieurs comptes via MassTransferTransaction, compile le script et le dĂ©ploie sur la blockchain.
  • ‘Peut dĂ©poser’ envoie dans le rĂ©seau InvokeScriptTransaction, activant la fonction deposit() pour chacun des deux comptes.
  • ‘Impossible de retirer plus que ce qui a Ă©tĂ© dĂ©posé’ teste que personne ne peut voler les jetons d'autrui.
  • ‘Peut dĂ©poser’ vĂ©rifie que les retraits sont traitĂ©s correctement.

Exécution des tests avec Surfboard et analyse des résultats dans Waves Explorer

Pour exécuter le test, exécutez

surfboard test

Si vous avez plusieurs scénarios (par exemple, un script de déploiement distinct est nécessaire), vous pouvez exécuter

surfboard test my-scenario.js

Surfboard rassemblera les fichiers de test dans le dossier . /test/ et lancera le script dans le nƓud qui est configurĂ© dans surfboard.config.json. AprĂšs quelques secondes, vous verrez quelque chose comme ceci :

série de tests de portefeuille
Génération de comptes avec nonce : ce8d86ee
Compte généré : foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Compte généré : barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Compte généré : wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Comptes financés avec succÚs
Le script a été configuré
   √ Peut dĂ©poser (4385 ms)
   √ Ne peut pas retirer plus que ce qui a Ă©tĂ© dĂ©posĂ©
   √ Peut retirer (108 ms)
3 réussites (15 s)

Hourra ! Les tests sont passés. Voyons maintenant ce qui se passe lors de l'utilisation de Waves Explorer : consultons les blocs ou insérons l'une des adresses mentionnées ci-dessus dans la recherche (par exemple, la correspondante wallet#. Vous pouvez y trouver l'historique des transactions, l'état de la dApp, le fichier binaire décompilé.

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Waves Explorer. L'application qui vient d'ĂȘtre dĂ©ployĂ©e.

Quelques conseils sur Surfboard :

1. Pour tester dans l'environnement testnet, utilisez :

surfboard test --env=testnet

Obtenir des tokens de test

2. Si vous souhaitez voir les versions JSON des transactions et comment elles sont traitĂ©es par le nƓud, lancez le test avec -v (signifie 'verbose') :

surfboard test -v

Utilisation des applications avec Waves Keeper

1. Configurez Waves Keeper pour fonctionner : http://localhost:6869

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Configuration de Waves Keeper pour fonctionner avec un nƓud local

2. Importez la phrase secrĂšte avec des tokens pour le rĂ©seau ? Pour simplifier, utilisez la graine initiale de votre nƓud : waves private node seed with waves tokens. Adresse : 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Vous pouvez lancer une application sans serveur d'une seule page vous-mĂȘme en utilisant npm. Ou allez Ă  l'existant : chrome-ext.wvservices.com/dapp-wallet.html

4. Entrez l'adresse du portefeuille du lancement de test (soulignée ci-dessus) dans le champ de texte de l'adresse dApp

5. Saisissez un petit montant dans le champ 'DépÎt' et appuyez sur le bouton :

Comment construire, déployer et tester l'application décentralisée Waves RIDE
Waves Keeper demande l'autorisation de signer l'InvokeScriptTransaction avec un paiement de 10 WAVES.

6. Confirmez la transaction :

Comment construire, déployer et tester l'application décentralisée Waves RIDE
La transaction a été créée et est diffusée dans le réseau. Son ID est maintenant visible

7. Surveillez la transaction avec Waves Explorer. Entrez l'ID dans le champ de recherche

Comment construire, déployer et tester l'application décentralisée Waves RIDE

Conclusions et informations supplémentaires

Nous avons examiné les outils de développement, de test, de déploiement et d'utilisation de simples dApps sur la plateforme Waves :

  • Langage RIDE
  • Éditeur VS Code
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Liens pour ceux qui souhaitent continuer Ă  explorer RIDE :

Plus d'exemples
IDE en ligne avec des exemples
Documentation Waves
Chat des développeurs sur Telegram
Waves et RIDE sur stackoverflow
NOUVEAU ! Cours en ligne sur la création de dApps sur la Waves Platform

Continuez à explorer le sujet de RIDE et créez votre premier dApp !

TL;DR : bit.ly/2YCFnwY

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster