Kako izgraditi, implementirati i testirati Waves RIDE dApp

Zdravo! U ovom članku ću vam pokazati kako napisati i pokrenuti običnu dApp na Waves čvoru. Pogledajmo potrebne alate, metode i primjer razvoja.

Kako izgraditi, implementirati i testirati Waves RIDE dApp

Razvojna shema za dApps i obične aplikacije gotovo je ista:

  • Mi pišemo kod
  • Pisanje automatiziranog testiranja
  • Pokretanje aplikacije
  • Testiranje

Alat

1. docker za pokretanje čvora i Waves Explorera

Ako ne želite pokrenuti čvor, možete preskočiti ovaj korak. Uostalom, postoji testna i eksperimentalna mreža. Ali bez postavljanja vlastitog čvora, proces testiranja može se odužiti.

  • Stalno ćete trebati nove račune s testnim tokenima. Testna mrežna slavina prenosi 10 VALOVA svakih 10 minuta.
  • Prosječno vrijeme bloka u testnoj mreži je 1 minuta, u čvoru – 15 sekundi. To je posebno vidljivo kada transakcija zahtijeva više potvrda.
  • Agresivno predmemoriranje moguće je na javnim testnim čvorovima.
  • Također mogu biti privremeno nedostupni zbog održavanja.

Od sada ću pretpostaviti da radite sa svojim vlastitim čvorom.

2. Alat naredbenog retka daske za surfanje

  • Preuzmite i instalirajte Node.js koristeći ppa, homebrew ili exe ovdje: https://nodejs.org/en/download/.
  • Instalirajte Surfboard, alat koji vam omogućuje pokretanje testova na postojećem čvoru.

npm install -g @waves/surfboard

3. Visual Studio Code dodatak

Ovaj korak nije obavezan ako niste ljubitelj IDE-a i preferirate uređivače teksta. Svi potrebni alati su pomoćni programi naredbenog retka. Ako koristite vim, obratite pozornost na dodatak vim-vožnja.

Preuzmite i instalirajte Visual Studio Code: https://code.visualstudio.com/

Otvorite VS Code i instalirajte dodatak za vožnju valovima:

Kako izgraditi, implementirati i testirati Waves RIDE dApp

Proširenje preglednika Waves Keeper: https://wavesplatform.com/products-keeper

Gotovo!

Pokrenite čvor i Waves Explorer

1. Pokrenite čvor:

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

Provjerite je li čvor pokrenut putem REST API-ja http://localhost:6869:

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Swagger REST API za čvor

2. Pokrenite instancu Waves Explorera:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Otvorite preglednik i idite na http://localhost:3000. Vidjet ćete kako se brzo gradi krug praznog lokalnog čvora.

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Waves Explorer prikazuje lokalnu instancu čvora

RIDE struktura i alat za surfanje

Napravite prazan direktorij i pokrenite naredbu u njemu

surfboard init

Naredba inicijalizira direktorij sa strukturom projekta, "hello world" aplikacijama i testovima. Ako otvorite ovu mapu s VS kodom, vidjet ćete:

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Daska za surfanje.config.json

  • U mapi ./ride/ pronaći ćete jednu datoteku wallet.ride - direktorij u kojem se nalazi dApp kod. U sljedećem bloku ćemo ukratko analizirati dApps.
  • U mapi ./test/ pronaći ćete *.js datoteku. Ovdje se pohranjuju testovi.
  • ./surfboard.config.json – konfiguracijska datoteka za pokretanje testova.

Envs je važan odjeljak. Svako okruženje konfigurirano je ovako:

  • REST API krajnja točka čvora koja će se koristiti za pokretanje dApp i CHAIN_ID mreže.
  • Tajna fraza za račun s tokenima koji će biti izvori vaših testnih tokena.

Kao što vidite, surfboard.config.json prema zadanim postavkama podržava više okruženja. Zadano je lokalno okruženje (defaultEnv ključ je promjenjivi parametar).

Wallet-demo aplikacija

Ovaj odjeljak nije referenca na jezik RIDE. Umjesto toga, pogledajte aplikaciju koju postavljamo i testiramo kako bismo bolje razumjeli što se događa u blockchainu.

Pogledajmo jednostavnu aplikaciju Wallet-demo. Svatko može poslati tokene na dApp adresu. Možete povući samo svoje VALOVE. Dvije funkcije @Callable dostupne su putem InvokeScriptTransaction:

  • deposit()što zahtijeva priloženo plaćanje u WAVES-u
  • withdraw(amount: Int)koji vraća žetone

Tijekom životnog ciklusa dApp-a, struktura (adresa → iznos) će se održavati:

Akcijski
Rezultirajuće stanje

početni
prazan

Alice polaže 5 VALOVA
alice-adresa → 500000000

Bob polaže 2 VALA

alice-adresa → 500000000
bob-adresa → 200000000

Bob povlači 7 VALOVA
ODBIJENO!

Alisa povlači 4 VALA
alice-adresa → 100000000
bob-adresa → 200000000

Evo koda za potpuno razumijevanje situacije:

# 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

Uzorak koda također se može pronaći na GitHub.

Dodatak VSCode podržava kontinuiranu kompilaciju tijekom uređivanja datoteke. Stoga uvijek možete pratiti pogreške u kartici PROBLEMI.

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Ako želite koristiti drugi uređivač teksta prilikom sastavljanja datoteke, koristite

surfboard compile ride/wallet.ride

Ovo će ispisati niz base64 kompajliranog RIDE koda.

Testna skripta za 'wallet.ride'

Pogledajmo testna datoteka. Pokreće JavaScriptov okvir Mocha. Postoji funkcija "Prije" i tri testa:

  • "Before" financira više računa putem MassTransferTransaction, kompilira skriptu i implementira je u blockchain.
  • “Can deposit” šalje InvokeScriptTransaction mreži, aktivirajući funkciju deposit() za svaki od dva računa.
  • "Ne može povući više nego što je položeno" testovi da nitko ne može ukrasti tuđe tokene.
  • “Može uplatiti” provjerava jesu li isplate ispravno obrađene.

Pokrenite testove iz Surfboarda i analizirajte rezultate u Waves Exploreru

Da biste pokrenuli test, pokrenite

surfboard test

Ako imate više skripti (na primjer, potrebna vam je zasebna skripta za implementaciju), možete pokrenuti

surfboard test my-scenario.js

Surfboard će prikupiti testne datoteke u mapu ./test/ i pokrenuti skriptu na čvoru koji je konfiguriran u surfboard.config.json. Nakon nekoliko sekundi vidjet ćete nešto poput ovoga:

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)

hura! Testovi su prošli. Sada pogledajmo što se događa kada koristite Waves Explorer: pogledajte blokove ili zalijepite jednu od gornjih adresa u pretraživanje (na primjer, odgovarajuću wallet#. Tamo možete pronaći povijest transakcija, status dApp-a, dekompiliranu binarnu datoteku.

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Waves Explorer. Aplikacija koja je upravo postavljena.

Neki savjeti za dasku za surfanje:

1. Za testiranje u testnet okruženju koristite:

surfboard test --env=testnet

Nabavite testne tokene

2. Ako želite vidjeti JSON verzije transakcija i kako ih čvor obrađuje, pokrenite test s -v (znači 'verbose'):

surfboard test -v

Korištenje aplikacija s Waves Keeperom

1. Postavite Waves Keeper da radi: http://localhost:6869

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Postavljanje Waves Keepera za rad s lokalnim čvorom

2. Uvesti tajnu frazu s tokenima za mrežu? Radi jednostavnosti, upotrijebite početno sjeme vašeg čvora: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Možete sami pokrenuti jednostraničnu aplikaciju bez poslužitelja koristeći npm. Ili idite na postojeći: chrome-ext.wvservices.com/dapp-wallet.html

4. Unesite adresu novčanika iz probnog rada (gore podvučeno) u tekstni okvir dApp adrese

5. Unesite mali iznos u polje "Depozit" i kliknite na gumb:

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Waves Keeper traži dopuštenje za potpisivanje InvokeScriptTransaction uz plaćanje od 10 WAVES.

6. Potvrdite transakciju:

Kako izgraditi, implementirati i testirati Waves RIDE dApp
Transakcija se kreira i emitira na mrežu. Sada možete vidjeti njezinu osobnu iskaznicu

7. Pratite transakciju pomoću Waves Explorera. Unesite ID u polje za pretraživanje

Kako izgraditi, implementirati i testirati Waves RIDE dApp

Zaključci i dodatne informacije

Pogledali smo alate za razvoj, testiranje, implementaciju i korištenje jednostavnih dApps na platformi Waves:

  • RIDE jezik
  • VS uređivač koda
  • Waves Explorer
  • Daska za surfanje
  • Čuvar valova

Linkovi za one koji žele nastaviti učiti RIDE:

Još primjera
Online IDE s primjerima
Waves Dokumentacija
Chat programera u Telegramu
Waves and RIDE na stackoverflowu
NOVI! Online tečajevi o izradi dApps na Waves platformi

Nastavite zaranjati u temu RIDE i izradite svoju prvu dApp!

TL; DR: bit.ly/2YCFnwY

Izvor: www.habr.com

Dodajte komentar