Bonjour Dans l'article, je vais montrer comment Ă©crire et exĂ©cuter une dApp rĂ©guliĂšre sur le nĆud Waves. ConsidĂ©rez les outils, mĂ©thodes et exemples de dĂ©veloppement nĂ©cessaires.
Le schĂ©ma de dĂ©veloppement des dApps et des applications rĂ©guliĂšres est presque le mĂȘme:
- Ăcrire un code
- Ăcriture de tests automatisĂ©s
- Lancez l'application
- Test
Les outils
1.
docker
pour exĂ©cuter des nĆuds et Waves Explorer
Si vous ne souhaitez pas exĂ©cuter le nĆud, vous pouvez ignorer cette Ă©tape. AprĂšs tout, il existe un rĂ©seau de test et d'expĂ©rimentation. Mais sans dĂ©ployer votre nĆud, le processus de test peut ĂȘtre retardĂ©.
- Vous aurez constamment besoin de nouveaux comptes avec des jetons de test. La grue de réseau de test traduit 10 ONDES toutes les 10 minutes.
- La durĂ©e moyenne des blocs dans un rĂ©seau de test est de 1 minute, dans un nĆud - 15 secondes. Cela est particuliĂšrement visible lorsqu'une transaction nĂ©cessite plusieurs confirmations.
- Dans les nĆuds de test publics, une mise en cache agressive est possible.
- Ils peuvent Ă©galement ĂȘtre temporairement indisponibles en raison de la maintenance.
De plus, je considĂ©rerai que vous travaillez avec votre 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 un fan 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 plug-in wave-ride:

Extension de navigateur Waves Keeper:
https://wavesplatform.com/products-keeperC'est fait!
Lancez le nĆud et l'explorateur de vagues
1. ExĂ©cutez le nĆud:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Assurez-vous que le nĆud s'exĂ©cute via l'API REST sur
http: // localhost: 6869 :
API REST Swagger pour un nĆud2. Lancez l'instance Waves Explorer:
docker run -d -e API_NODE_URL=http:
Ouvrez un navigateur et accĂ©dez Ă
http: // localhost: 3000 . Voyez Ă quelle vitesse une chaĂźne de nĆuds locaux vide est créée.
Waves Explorer affiche une instance d'un nĆud localOutil de structure et de planche de surf RIDE
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, des applications comme "hello world" et des tests. Si vous ouvrez ce dossier avec VS Code, vous verrez:
Surfboard.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 dApp dans le bloc suivant.
- Sous le dossier ./test/, vous trouverez le fichier * .js. Les tests sont stockés ici.
- ./surfboard.config.json - fichier de configuration pour l'exécution des tests.
Envs est une section importante. Chaque environnement est configuré comme suit:
- Le point de terminaison de l'API REST du nĆud qui sera utilisĂ© pour exĂ©cuter les rĂ©seaux dApp et CHAIN_ID.
- La phrase secrĂšte pour le compte avec des jetons qui sera la source des jetons de votre test.
Comme vous pouvez le voir, surfboard.config.json prend en charge plusieurs environnements par défaut. Par défaut, l'environnement local est défini (la clé defaultEnv est un paramÚtre modifiable).
Application de démonstration de portefeuille
Cette section n'est pas un guide de la langue RIDE. Un regard sur les applications que nous déployons et testons afin de mieux comprendre ce qui se passe sur la blockchain.
Considérez la simple application Wallet-démo. Tout le monde peut envoyer des jetons à l'adresse dApp. Vous ne pouvez retirer que vos VAGUES. Deux fonctions @Callable sont disponibles via InvokeScriptTransaction:
deposit()
, qui nécessite un paiement joint en VAGUESwithdraw(amount: Int)
, qui retourne des jetons
Tout au long du cycle de vie de dApp, la structure (adresse â montant) sera prise en charge:
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 la modification d'un fichier. Par consĂ©quent, vous pouvez toujours suivre les erreurs dans l'onglet PROBLĂMES.
Si vous souhaitez utiliser un autre éditeur de texte lors de la compilation du fichier, utilisez surfboard compile ride/wallet.ride
Cela produira une plage de code RIDE compilé en base64.
Cas de test pour 'wallet.ride'
Regardons le
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.
- «Peut déposer» envoie une InvokeScriptTransaction au réseau, activant la fonction deposit () pour chacun des deux comptes.
- Des tests «ne peuvent pas retirer plus que ce qui a été déposé» que personne ne peut voler les jetons des autres.
- Le dépÎt peut vérifier que les retraits sont traités correctement.
Exécution de tests avec Surfboard et analyse des 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 dans le nĆud configurĂ© dans surfboard.config.json. AprĂšs quelques secondes, vous observerez 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! Les tests ont réussi. Voyons maintenant ce qui se passe lors de l'utilisation de Waves Explorer: regardez les blocs ou insérez l'une des adresses ci-dessus dans la recherche (par exemple, le
wallet#
correspondant
wallet#
. Vous y trouverez l'historique des transactions, le statut dApp, le fichier binaire décompilé.
Explorateur de vagues. L'application que vous venez de déployer.Quelques conseils sur les planches de surf:
1. Pour tester dans l'environnement testnet, utilisez:
surfboard test --env=testnet
Obtenez des jetons de test2. Si vous voulez voir les versions JSON des transactions et comment elles sont traitĂ©es par un nĆud, exĂ©cutez le test avec -v (signifie "verbeux"):
surfboard test -v
Utilisation d'applications avec Waves Keeper
1. Configurez Waves Keeper pour qu'il fonctionne:
http: // localhost: 6869
Configuration de Waves Keeper pour fonctionner avec un nĆud local2. 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 d'une seule page Ă l'aide de npm. Ou accĂ©dez Ă celui existant:
chrome-ext.wvservices.com/dapp-wallet.html4. Entrez l'adresse du portefeuille à partir du test (souligné 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:
Waves Keeper demande la permission de signer une InvokeScriptTransaction avec un paiement de 10 WAVES.
6. Confirmez la transaction:
La transaction est créée et diffusée sur le réseau. Maintenant, vous pouvez voir son ID7. Observez la transaction à l'aide de Waves Explorer. Entrez l'ID dans le champ de recherche

Conclusions et informations supplémentaires
Nous avons examiné le développement, les tests, le déploiement et l'utilisation d'outils dApps simples sur la plate-forme Waves:
- Langue RIDE
- Ăditeur de code VS
- Explorateur de vagues
- Planche de surf
- Gardien des vagues
Liens pour ceux qui veulent continuer à étudier RIDE:
Plus d'exemplesIDE en ligne avec des exemplesDocumentation des vaguesTelegram Developer ChatWaves et RIDE sur stackoverflowNOUVEAU! Cours en ligne sur la création de dApps sur la plateforme WavesContinuez à vous plonger dans le thÚme RIDE et créez votre premiÚre dApp!
TL; DR:
bit.ly/2YCFnwY