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.

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 : .
- 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 .
Téléchargez et installez Visual Studio Code :
Ouvrez VS Code et installez le plugin waves-ride :

Extension de navigateur Waves 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 :

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 Ă . Vous verrez comment une chaĂźne vide se construit rapidement sur la nĆud locale.

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 :

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 WAVESwithdraw(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() = falseUn exemple de code peut Ă©galement ĂȘtre trouvĂ© sur .
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.

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 . 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é.

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
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 :

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 :
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 :

Waves Keeper demande l'autorisation de signer l'InvokeScriptTransaction avec un paiement de 10 WAVES.
6. Confirmez la transaction :

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

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 :
Continuez à explorer le sujet de RIDE et créez votre premier dApp !
TL;DR :
Source : habr.com
