Hallo! In dit artikel laat ik je zien hoe je een gewone dApp schrijft en uitvoert op de Waves-node. We bekijken de benodigde tools, methoden en een ontwikkelingsvoorbeeld.

Het ontwikkelingsschema voor dApps en gewone applicaties verschilt bijna niet:
- Schrijf de code
- Schrijf geautomatiseerde tests
- Start de applicatie
- Testen
Hulpmiddelen
1. docker voor het uitvoeren van de node en Waves Explorer
Als je de node niet wilt uitvoeren, kun je deze stap overslaan. Er zijn immers een testnetwerk en een experimenteel netwerk. Maar zonder je eigen node uit te voeren, kan het testproces langer duren.
- Je hebt voortdurend nieuwe accounts nodig met testtokens. De faucet van het testnetwerk geeft elke 10 minuten 10 WAVES.
- De gemiddelde bloktijd in het testnetwerk is 1 minuut, in de node 15 seconden. Dit is vooral merkbaar als een transactie meerdere bevestigingen vereist.
- In openbare testnodes kan er agressieve caching plaatsvinden.
- Daarnaast kunnen ze tijdelijk niet beschikbaar zijn door onderhoud.
Daarna ga ik ervan uit dat je met je eigen node werkt.
2. Commandoregeltool Surfboard
- Download en installeer Node.js met behulp van ppa, homebrew of exe hier: .
- Installeer Surfboard – een tool die je in staat stelt om tests uit te voeren op een bestaande node.
npm install -g @waves/surfboard
3. Visual Studio Code-plugin
Deze stap is optioneel als je geen fan bent van IDE's en de voorkeur geeft aan teksteditors. Alle benodigde tools zijn commandoregeltools. Als je vim gebruikt, let dan op de plugin .
Download en installeer Visual Studio Code:
Open VS Code en installeer de plugin waves-ride:

Browseruitbreiding Waves Keeper:
Klaar!
Start de node en Waves Explorer
1. Start de node:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Zorg ervoor dat de node via de REST API draait op :

Swagger REST API-interface voor de node
2. Start een instantie van Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Open een browser en ga naar . Je zult zien hoe snel een lege keten van de lokale node wordt opgebouwd.

Waves Explorer toont een instantie van de lokale node
De structuur van RIDE en de Surfboard-tool
Maak een lege directory aan en voer in deze directory het commando uit
surfboard init
Het commando initialiseert de directory met de projectstructuur, een 'hello world'-applicatie en tests. Als je deze map opent met VS Code, zul je zien:

Surfboard.config.json
- Onder de map ./ride/ vind je een enkel bestand wallet.ride – de map waar de code van de dApp is opgeslagen. We zullen de dApp kort analyseren in het volgende blok.
- Onder de map .\/test\/ vindt u het bestand *.js. Hier worden de tests opgeslagen.
- .\/surfboard.config.json – het configuratiebestand voor het uitvoeren van tests.
Envs – een belangrijke sectie. Elke omgeving wordt ingesteld als volgt:
- De eindpunt van de REST API-node die gebruikt zal worden voor het starten van de dApp en de CHAIN_ID van het netwerk.
- De geheime frase voor een account met tokens, die de bronnen van uw testtokens zullen zijn.
Zoals u ziet, ondersteunt surfboard.config.json standaard meerdere omgevingen. De lokale omgeving is standaard ingesteld (de sleutelwaarde defaultEnv is een wijzigbaar parameter).
De Wallet-demo applicatie
Deze sectie is geen handleiding voor de RIDE-taal. Het is eerder een blik op de applicatie die we uitrollen en testen om beter te begrijpen wat er in de blockchain gebeurt.
Laten we kijken naar de eenvoudige Wallet-demo applicatie. Iedereen kan tokens naar het dApp-adres sturen. U kunt alleen uw eigen WAVES opnemen. Twee @Callable functies zijn beschikbaar via InvokeScriptTransaction:
deposit(), die een bijgevoegde betaling in WAVES vereist.withdraw(amount: Int), die tokens teruggeeft.
Gedurende de hele levenscyclus van de dApp zal de structuur (adres → bedrag) worden onderhouden:
Actie
Resultaatstaat
begin
leeg
Alice stort 5 WAVES
alice-address → 500000000
Bob stort 2 WAVES
alice-address → 500000000
bob-address → 200000000
Bob neemt 7 WAVES op
GEWEIGERD!
Alice neemt 4 WAVES op
alice-address → 100000000
bob-address → 200000000
Hier is de code voor een volledig begrip van de situatie:
# 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() = falseVoorbeeldcode is ook te vinden op .
De VSCode-plugin ondersteunt continue compilatie tijdens het bewerken van het bestand. U kunt de fouten altijd volgen in het tabblad PROBLEMEN.

Als u een andere teksteditor wilt gebruiken tijdens het compileren van het bestand, gebruik dan
surfboard compile ride\/wallet.ride
Dit zal een reeks base64-gecompileerde RIDE-code genereren.
Testscript voor 'wallet.ride'
Laten we kijken naar . Dit werkt op het JavaScript Mocha-framework. Er is een 'Before' functie en drie tests:
- 'Before' financiert meerdere rekeningen via MassTransferTransaction, compileert het script en zet het in de blockchain.
- 'Kan depot' verzendt InvokeScriptTransaction naar het netwerk, waardoor de functie deposit() voor elk van de twee rekeningen wordt geactiveerd.
- 'Kan niet meer opnemen dan wat is gestort' test of niemand de tokens van iemand anders kan stelen.
- 'Kan depot' controleert of opnames correct worden verwerkt.
Voer tests uit met Surfboard en analyseer de resultaten in Waves Explorer.
Voer om de test uit:
surfboard test
Als u meerdere scenario's heeft (bijvoorbeeld als een apart implementatiescript nodig is), kunt u deze uitvoeren.
surfboard test my-scenario.js
Surfboard verzamelt testbestanden in de map ./test/ en voert het script uit op de node die is ingesteld in surfboard.config.json. Na een paar seconden zult u iets vergelijkbaars zien:
wallet test suite
Rekeningen aanmaken met nonce: ce8d86ee
Rekening aangemaakt: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Rekening aangemaakt: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Rekening aangemaakt: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Rekeningen succesvol gefinancierd
Script is ingesteld
√ Kan storten (4385ms)
√ Kan niet meer opnemen dan er is gestort
√ Kan opnemen (108ms)
3 slagen (15s)
Hoera! De tests zijn geslaagd. Laten we kijken naar wat er gebeurt wanneer we Waves Explorer gebruiken: bekijken we blokken of voeren we een van de bovengenoemde adressen in de zoekbalk in (bijvoorbeeld de bijbehorende wallet#. Hier kunt u de transactiegeschiedenis, de status van de dApp en het gedemonteerde binaire bestand vinden.

Waves Explorer. De applicatie die zojuist is gedeployed.
Enkele tips voor Surfboard:
1. Om te testen in een testnetomgeving, gebruik:
surfboard test --env=testnet
2. Als u de JSON-versies van de transacties en hoe ze door de node worden verwerkt wilt bekijken, start de test met -v (betekent 'verbose'):
surfboard test -v
Gebruik van applicaties met Waves Keeper
1. Stel Waves Keeper in om te werken:

Instellen van Waves Keeper om te werken met een lokale node
2. Importeren van de geheime zin met tokens voor het netwerk? Gebruik voor eenvoud de beginseed van uw node: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. U kunt zelf een single-page serverless applicatie uitvoeren met npm. Of ga naar een bestaande:
4. Voer het walletadres in van de teststart (onderstreept hierboven) in het tekstveld voor dApp-adressen
5. Vul een klein bedrag in het veld 'Deposit' in en klik op de knop:

Waves Keeper vraagt om toestemming om de InvokeScriptTransaction met een betaling van 10 WAVES te ondertekenen.
6. Bevestig de transactie:

De transactie is aangemaakt en wordt naar het netwerk verzonden. Nu is de ID zichtbaar.
7. Volg de transactie met behulp van Waves Explorer. Voer de ID in het zoekveld in.

Conclusies en aanvullende informatie
We hebben de tools voor ontwikkeling, testen, implementatie en gebruik van eenvoudige dApps op het Waves Platform bekeken:
- RIDE-taal
- VS Code-editor
- Waves Explorer
- Surfboard
- Waves Keeper
Links voor degenen die verder willen leren over RIDE:
Blijf dieper in het onderwerp RIDE duiken en maak je eerste dApp!
TL;DR:
Bron: habr.com
