Hallo! I denne artikkelen vil jeg vise deg hvordan du skriver og kjører en vanlig dApp på en Waves-node. La oss se på nødvendige verktøy, metoder og et eksempel på utvikling.

Utviklingsskjemaet for dApps og vanlige applikasjoner er nesten det samme:
- Vi skriver koden
- Skrive automatisert testing
- Å starte programmet
- Testing
Verktøy
1. docker for å kjøre noden og Waves Explorer
Hvis du ikke vil starte en node, kan du hoppe over dette trinnet. Tross alt er det et test- og eksperimentelt nettverk. Men uten å distribuere din egen node, kan testprosessen trekke ut.
- Du vil stadig trenge nye kontoer med testtokens. Testnettverkskranen overfører 10 BØLGER hvert 10. minutt.
- Gjennomsnittlig blokkeringstid i testnettverket er 1 minutt, i noden – 15 sekunder. Dette er spesielt merkbart når en transaksjon krever flere bekreftelser.
- Aggressiv caching er mulig på offentlige testnoder.
- De kan også være midlertidig utilgjengelige på grunn av vedlikehold.
Fra nå av vil jeg anta at du jobber med din egen node.
2. Surfebrett kommandolinjeverktøy
- Last ned og installer Node.js ved å bruke ppa, homebrew eller exe her: .
- Installer Surfboard, et verktøy som lar deg kjøre tester på en eksisterende node.
npm install -g @waves/surfboard
3. Visual Studio Code-plugin
Dette trinnet er valgfritt hvis du ikke er en fan av IDE-er og foretrekker tekstredigerere. Alle nødvendige verktøy er kommandolinjeverktøy. Hvis du bruker vim, vær oppmerksom på plugin .
Last ned og installer Visual Studio Code:
Åpne VS Code og installer waves-ride plugin:

Waves Keeper nettleserutvidelse:
Ferdig!
Start noden og Waves Explorer
1. Start noden:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Sørg for at noden er lansert via REST API i :

Swagger REST API for node
2. Start en forekomst av Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Åpne en nettleser og gå til . Du vil se hvor raskt en tom lokal nodekrets bygges.

Waves Explorer viser en lokal nodeforekomst
RIDE-struktur og surfebrettverktøy
Opprett en tom katalog og kjør kommandoen i den
surfboard init
Kommandoen initialiserer en katalog med prosjektstrukturen, "hallo verden"-applikasjoner og tester. Hvis du åpner denne mappen med VS-kode, vil du se:

Surfboard.config.json
- Under ./ride/-mappen finner du en enkelt fil wallet.ride - katalogen der dApp-koden er plassert. Vi vil kort analysere dApps i neste blokk.
- Under ./test/-mappen finner du en *.js-fil. Tester lagres her.
- ./surfboard.config.json – konfigurasjonsfil for å kjøre tester.
Envs er en viktig del. Hvert miljø er konfigurert slik:
- REST API-endepunkt for noden som skal brukes til å starte nettverkets dApp og CHAIN_ID.
- En hemmelig setning for en konto med tokens som vil være kildene til testtokenene dine.
Som du kan se, støtter surfboard.config.json flere miljøer som standard. Standard er det lokale miljøet (standardEnv-nøkkelen er en parameter som kan endres).
Lommebok-demo-applikasjon
Denne delen er ikke en referanse til RIDE-språket. Snarere en titt på applikasjonen som vi distribuerer og tester for bedre å forstå hva som skjer i blokkjeden.
La oss se på en enkel Wallet-demo-applikasjon. Alle kan sende tokens til en dApp-adresse. Du kan bare ta ut dine WAVES. To @Callable-funksjoner er tilgjengelige via InvokeScriptTransaction:
deposit()som krever en vedlagt betaling i WAVESwithdraw(amount: Int)som returnerer tokens
Gjennom hele dApps livssyklus vil strukturen (adresse → beløp) opprettholdes:
Handling
Resulterende tilstand
innledende
tom
Alice legger inn 5 BØLGER
alice-adresse → 500000000
Bob setter inn 2 BØLGER
alice-adresse → 500000000
bob-adresse → 200000000
Bob trekker tilbake 7 BØLGER
NEKTE!
Alice trekker seg tilbake 4 BØLGER
alice-adresse → 100000000
bob-adresse → 200000000
Her er koden for å forstå situasjonen fullt ut:
# 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() = falseEksempelkode finner du også på .
VSCode-pluginen støtter kontinuerlig kompilering mens du redigerer en fil. Derfor kan du alltid overvåke feil i PROBLEMER-fanen.

Hvis du vil bruke et annet tekstredigeringsprogram når du kompilerer filen, bruk
surfboard compile ride/wallet.ride
Dette vil sende ut en serie med base64-kompilert RIDE-kode.
Testskript for 'wallet.ride'
La oss se på . Drevet av JavaScripts Mocha-rammeverk. Det er en "Før"-funksjon og tre tester:
- "Før" finansierer flere kontoer via MassTransferTransaction, kompilerer skriptet og distribuerer det til blokkjeden.
- "Can deposit" sender en InvokeScriptTransaction til nettverket, og aktiverer deposit()-funksjonen for hver av de to kontoene.
- "Kan ikke ta ut mer enn det ble satt inn" tester som ingen kan stjele andres tokens.
- "Kan sette inn" sjekker at uttak behandles riktig.
Kjør tester fra Surfboard og analyser resultater i Waves Explorer
For å kjøre testen, kjør
surfboard test
Hvis du har flere skript (du trenger for eksempel et separat distribusjonsskript), kan du kjøre
surfboard test my-scenario.js
Surfboard vil samle testfilene i ./test/-mappen og kjøre skriptet på noden som er konfigurert i surfboard.config.json. Etter noen sekunder vil du se noe slikt:
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)
Hurra! Tester bestått. La oss nå ta en titt på hva som skjer når du bruker Waves Explorer: se på blokkene eller lim inn en av adressene ovenfor i søket (for eksempel den tilsvarende wallet#. Der kan du finne transaksjonshistorikk, dApp-status, dekompilert binær fil.

Waves Explorer. En applikasjon som nettopp har blitt distribuert.
Noen surfebretttips:
1. For å teste i testnettmiljøet, bruk:
surfboard test --env=testnet
2. Hvis du ønsker å se JSON-versjonene av transaksjoner og hvordan de behandles av noden, kjør testen med -v (betyr 'verbose'):
surfboard test -v
Bruke apper med Waves Keeper
1. Sett opp Waves Keeper til å fungere:

Sette opp Waves Keeper for å jobbe med en lokal node
2. Importere hemmelig frase med tokens for nettverket? For enkelhets skyld, bruk det første frøet til noden din: waves private node seed with waves tokens. Adresse: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Du kan kjøre en serverløs enkeltsideapplikasjon selv ved å bruke npm. Eller gå til den eksisterende:
4. Skriv inn lommebokadressen fra testkjøringen (understreket ovenfor) i dApp-adressetekstboksen
5. Skriv inn et lite beløp i «Innskudd»-feltet og klikk på knappen:

Waves Keeper ber om tillatelse til å signere en InvokeScriptTransaction med betaling av 10 WAVES.
6. Bekreft transaksjonen:

Transaksjonen opprettes og kringkastes til nettverket. Nå kan du se ID-en hennes
7. Overvåk transaksjonen ved hjelp av Waves Explorer. Skriv inn ID i søkefeltet

Konklusjoner og tilleggsinformasjon
Vi så på verktøyene for å utvikle, teste, distribuere og bruke enkle dApps på Waves-plattformen:
- RIDE språk
- VS Code Editor
- Waves Explorer
- Surfebrett
- Waves Keeper
Lenker for de som vil fortsette å lære RIDE:
Fortsett å dykke inn i RIDE-emnet og lag din første dApp!
TL; DR:
Kilde: www.habr.com
