Kako napraviti, 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 napraviti, implementirati i testirati Waves RIDE dApp

Šema razvoja za dApps i obične aplikacije je skoro ista:

  • Pisanje koda
  • Pisanje automatskog testiranja
  • Pokretanje aplikacije
  • Testiranje

Alati

1. docker da pokrenete čvor i Waves Explorer

Ako ne želite da pokrenete čvor, možete preskočiti ovaj korak. Na kraju krajeva, postoji testna i eksperimentalna mreža. Ali bez postavljanja vlastitog čvora, proces testiranja može se povući.

  • Stalno će vam trebati novi računi sa probnim tokenima. Probna mrežna slavina prenosi 10 TALASOVA svakih 10 minuta.
  • Prosečno vreme blokade u test mreži je 1 minut, u čvoru 15 sekundi. Ovo je posebno uočljivo kada je za transakciju potrebno više potvrda.
  • Agresivno keširanje je moguće na javnim test čvorovima.
  • Također mogu biti privremeno nedostupni zbog održavanja.

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

2. Alat komandne linije za surfovanje

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

npm install -g @waves/surfboard

3. Dodatak Visual Studio Code

Ovaj korak je neobavezan ako niste ljubitelj IDE-a i preferirate uređivače teksta. Svi potrebni alati su uslužni programi komandne linije. Ako koristite vim, obratite pažnju na dodatak vim-ride.

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

Otvorite VS Code i instalirajte waves-ride plugin:

Kako napraviti, implementirati i testirati Waves RIDE dApp

Ekstenzija za preglednik 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

Uvjerite se da je čvor pokrenut preko REST API-ja http://localhost:6869:

Kako napraviti, 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 pretraživač i idite na http://localhost:3000. Vidjet ćete koliko brzo se gradi prazan lokalni čvor.

Kako napraviti, implementirati i testirati Waves RIDE dApp
Waves Explorer prikazuje instancu lokalnog čvora

RIDE struktura i alat za surfovanje

Kreirajte prazan direktorij i pokrenite naredbu u njemu

surfboard init

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

Kako napraviti, implementirati i testirati Waves RIDE dApp
Surfboard.config.json

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

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

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

Kao što vidite, surfboard.config.json podrazumevano podržava više okruženja. Podrazumevano je lokalno okruženje (defaultEnv ključ je promenljivi parametar).

Wallet-demo aplikacija

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

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

  • deposit()što zahtijeva priloženu uplatu u WAVES
  • withdraw(amount: Int)koji vraća tokene

Kroz životni ciklus dApp, struktura (adresa → iznos) će se održavati:

akcija
Rezultirajuće stanje

početni
prazno

Alisa polaže 5 TALASA
alice-adresa → 500000000

Bob polaže 2 TALASA

alice-adresa → 500000000
bob-adresa → 200000000

Bob povlači 7 TALASA
DENIED!

Alice povlači 4 TALASA
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 se također može naći na GitHub.

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

Kako napraviti, implementirati i testirati Waves RIDE dApp
Ako želite da koristite drugi uređivač teksta prilikom kompajliranja datoteke, koristite

surfboard compile ride/wallet.ride

Ovo će dati niz base64 kompajliranih RIDE koda.

Test skripta za 'wallet.ride'

Hajde da pogledamo test fajl. Pokreće JavaScript-ov Mocha framework. Postoji funkcija "prije" i tri testa:

  • “Prije” financira više računa putem MassTransferTransaction, kompajlira skriptu i implementira je u blockchain.
  • “Može uplatiti” šalje InvokeScriptTransaction mreži, aktivirajući funkciju depozit() za svaki od dva računa.
  • “Ne mogu povući više nego što je deponovano” testira da niko ne može ukrasti tuđe tokene.
  • “Može uplatiti” provjerava da li su isplate ispravno obrađene.

Pokrenite testove sa Surfboard-a i analizirajte rezultate u Waves Exploreru

Da pokrenete test, pokrenite

surfboard test

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

surfboard test my-scenario.js

Surfboard će prikupiti test fajlove u fascikli ./test/ i pokrenuti skriptu na čvoru koji je konfigurisan 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)

Ura! Testovi su prošli. Sada pogledajmo šta se dešava kada koristite Waves Explorer: pogledajte blokove ili zalijepite jednu od gore navedenih adresa u pretragu (na primjer, odgovarajuću wallet#. Tamo možete pronaći povijest transakcija, status dApp, dekompilirani binarni fajl.

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

Nekoliko savjeta 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 sa -v (znači 'opširno'):

surfboard test -v

Korištenje aplikacija uz Waves Keeper

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

Kako napraviti, implementirati i testirati Waves RIDE dApp
Postavljanje Waves Keeper-a za rad s lokalnim čvorom

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

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

4. Unesite adresu novčanika iz probnog rada (podvučeno iznad) u tekstualni okvir adrese aplikacije

5. Unesite mali iznos u polje “Depozit” i kliknite na dugme:

Kako napraviti, implementirati i testirati Waves RIDE dApp
Waves Keeper traži dozvolu da potpiše InvokeScriptTransaction uz plaćanje od 10 WAVES.

6. Potvrdite transakciju:

Kako napraviti, implementirati i testirati Waves RIDE dApp
Transakcija se kreira i emituje na mrežu. Sada možete vidjeti njenu identifikaciju

7. Pratite transakciju koristeći Waves Explorer. Unesite ID u polje za pretragu

Kako napraviti, implementirati i testirati Waves RIDE dApp

Zaključci i dodatne informacije

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

  • RIDE jezik
  • VS Code Editor
  • Waves Explorer
  • Surfanje
  • Waves Keeper

Linkovi za one koji žele nastaviti sa učenjem RIDE:

Još primjera
Online IDE sa primjerima
Waves Documentation
Chat programera u Telegramu
Waves i RIDE na stackoverflow
NOVO! Online kursevi o kreiranju dApps-a na Waves platformi

Nastavite da se bavite temom RIDE i kreirajte svoju prvu dApp!

TL; DR: bit.ly/2YCFnwY

izvor: www.habr.com

Dodajte komentar