Comment créer, déployer et tester Waves RIDE dApp

Bonjour! Dans cet article, je vais vous montrer comment écrire et exécuter une dApp standard sur un nœud Waves. Examinons les outils, les méthodes et un exemple de développement nécessaires.

Comment créer, déployer et tester Waves RIDE dApp

Le schéma de développement des dApps et des applications régulières est presque le même :

  • Nous écrivons le code
  • Rédaction de tests automatisés
  • Lancement de l'application
  • Test

Outils

1. docker pour exécuter le nœud et Waves Explorer

Si vous ne souhaitez pas démarrer de nœud, vous pouvez ignorer cette étape. Après tout, il existe un réseau de tests et d’expérimentations. Mais sans déployer votre propre nœud, le processus de test peut s'éterniser.

  • Vous aurez constamment besoin de nouveaux comptes avec des jetons de test. Le robinet du réseau de test transfère 10 ONDES toutes les 10 minutes.
  • Le temps de blocage moyen dans le réseau de test est de 1 minute, dans le nœud de 15 secondes. Ceci est particulièrement visible lorsqu'une transaction nécessite plusieurs confirmations.
  • La mise en cache agressive est possible sur les nœuds de test publics.
  • Ils peuvent également être temporairement indisponibles en raison de maintenance.

A partir de maintenant, je suppose que vous travaillez avec votre propre nœud.

2. Outil de ligne de commande de planche de surf

  • Téléchargez et installez Node.js en utilisant ppa, homebrew ou exe ici : https://nodejs.org/en/download/.
  • Installez Surfboard, un outil qui vous permet d'exécuter des tests sur un nœud existant.

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 de ligne de commande. Si vous utilisez vim, faites attention au plugin vim-ride.

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

Ouvrez VS Code et installez le plugin wave-ride :

Comment créer, déployer et tester Waves RIDE dApp

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

Fait!

Lancez le nœud et Waves Explorer

1. Démarrez le nœud :

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

Assurez-vous que le nœud est lancé via l'API REST dans http://localhost:6869:

Comment créer, déployer et tester Waves RIDE dApp
API REST Swagger pour le nœud

2. Démarrez 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 un navigateur et accédez à http://localhost:3000. Vous verrez à quelle vitesse un circuit de nœud local vide est construit.

Comment créer, déployer et tester Waves RIDE dApp
Waves Explorer affiche une instance de nœud local

Structure RIDE et outil planche de surf

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

surfboard init

La commande initialise un répertoire avec la structure du projet, les applications « hello world » et les tests. Si vous ouvrez ce dossier avec VS Code, vous verrez :

Comment créer, déployer et tester Waves RIDE dApp
Planche de surf.config.json

  • Sous le dossier ./ride/, vous trouverez un seul fichier wallet.ride - le répertoire où se trouve le code dApp. Nous analyserons brièvement les dApps dans le bloc suivant.
  • Sous le dossier ./test/, vous trouverez un fichier *.js. Les tests sont stockés ici.
  • ./surfboard.config.json – fichier de configuration pour exécuter les tests.

Envs est une section importante. Chaque environnement est configuré comme ceci :

  • Point de terminaison de l'API REST du nœud qui sera utilisé pour lancer le dApp et le CHAIN_ID du réseau.
  • Une phrase secrète pour un compte avec des tokens qui seront les sources de vos tokens de test.

Comme vous pouvez le constater, surfboard.config.json prend en charge plusieurs environnements par défaut. La valeur par défaut est l'environnement local (la clé defaultEnv est un paramètre modifiable).

Application de démonstration de portefeuille

Cette section n'est pas une référence au langage RIDE. Jetez plutôt un œil à l’application que nous déployons et testons pour mieux comprendre ce qui se passe dans la blockchain.

Regardons une simple application de démonstration Wallet. N'importe qui peut envoyer des jetons à une adresse dApp. Vous ne pouvez retirer que vos 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 la dApp, la structure (adresse → montant) sera maintenue :

Action
État résultant

initiale
vide

Alice dépose 5 VAGUES
adresse-alice → 500000000

Bob dépose 2 VAGUES

adresse-alice → 500000000
adresse bob → 200000000

Bob retire 7 WAVES
REFUSÉ!

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

Voici le code pour bien comprendre 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 d'un fichier. Par conséquent, vous pouvez toujours surveiller les erreurs dans l'onglet PROBLÈMES.

Comment créer, déployer et tester Waves RIDE dApp
Si vous souhaitez utiliser un autre éditeur de texte lors de la compilation du fichier, utilisez

surfboard compile ride/wallet.ride

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

Script de test pour 'wallet.ride'

Regardons fichier de test. Propulsé par le framework Mocha de JavaScript. Il existe une fonction « Avant » et trois tests :

  • « Avant » finance plusieurs comptes via MassTransferTransaction, compile le script et le déploie sur la blockchain.
  • « Can deposit » envoie une InvokeScriptTransaction au réseau, 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.
  • « Can deposit » vérifie que les retraits sont traités correctement.

Exécutez des tests depuis Surfboard et analysez les résultats dans Waves Explorer

Pour exécuter le test, exécutez

surfboard test

Si vous disposez de plusieurs scripts (par exemple, vous avez besoin d'un script de déploiement distinct), vous pouvez exécuter

surfboard test my-scenario.js

Surfboard collectera les fichiers de test dans le dossier ./test/ et exécutera le script sur le nœud configuré dans surfboard.config.json. Après quelques secondes, vous verrez quelque chose comme ceci :

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

Hourra! Tests réussis. Voyons maintenant ce qui se passe lors de l'utilisation de Waves Explorer : regardez les blocs ou collez l'une des adresses ci-dessus dans la recherche (par exemple, le correspondant wallet#. Vous y trouverez l'historique des transactions, le statut de la dApp et le fichier binaire décompilé.

Comment créer, déployer et tester Waves RIDE dApp
Explorateur de vagues. Une application qui vient d'être déployée.

Quelques conseils en matière de planche de surf :

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

surfboard test --env=testnet

Obtenez des jetons de test

2. Si vous souhaitez voir les versions JSON des transactions et comment elles sont traitées par le nœud, exécutez le test avec -v (signifie « verbeux ») :

surfboard test -v

Utiliser des applications avec Waves Keeper

1. Configurez Waves Keeper pour qu'il fonctionne : http://localhost:6869

Comment créer, déployer et tester Waves RIDE dApp
Configuration de Waves Keeper pour fonctionner avec un nœud local

2. Importer une phrase secrète avec des jetons pour le réseau ? Pour plus de simplicité, utilisez la graine initiale de votre nœud : waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Vous pouvez exécuter vous-même une application sans serveur à page unique à l'aide de npm. Ou allez à celui existant : chrome-ext.wvservices.com/dapp-wallet.html

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

5. Entrez un petit montant dans le champ « Dépôt » et cliquez sur le bouton :

Comment créer, déployer et tester Waves RIDE dApp
Waves Keeper demande l'autorisation de signer une InvokeScriptTransaction avec le paiement de 10 WAVES.

6. Confirmez la transaction :

Comment créer, déployer et tester Waves RIDE dApp
La transaction est créée et diffusée sur le réseau. Maintenant vous pouvez voir sa carte d'identité

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

Comment créer, déployer et tester Waves RIDE dApp

Conclusions et informations complémentaires

Nous avons examiné les outils permettant de développer, tester, déployer et utiliser des dApps simples sur la plateforme Waves :

  • Langue RIDE
  • Éditeur de code VS
  • Explorateur de vagues
  • Planche de surf
  • Gardien des vagues

Liens pour ceux qui souhaitent continuer à apprendre RIDE :

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

Continuez à plonger dans le sujet RIDE et créez votre première dApp !

TL; DR: bit.ly/2YCFnwY

Source: habr.com

Ajouter un commentaire