Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp

Zdravo! V tem članku vam bom pokazal, kako napisati in zagnati običajno dApp na vozlišču Waves. Oglejmo si potrebna orodja, metode in primer razvoja.

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp

Razvojna shema za dApps in običajne aplikacije je skoraj enaka:

  • Napišemo kodo
  • Pisanje avtomatiziranega testiranja
  • Zaženite aplikacijo
  • Testiranje

Orodja

1. docker za zagon vozlišča in Waves Explorerja

Če ne želite zagnati vozlišča, lahko ta korak preskočite. Navsezadnje obstaja testna in eksperimentalna mreža. Toda brez uvedbe lastnega vozlišča se lahko postopek testiranja zavleče.

  • Nenehno boste potrebovali nove račune s testnimi žetoni. Testna omrežna pipa prenese 10 VALOV vsakih 10 minut.
  • Povprečni čas bloka v testnem omrežju je 1 minuta, v vozlišču pa 15 sekund. To je še posebej opazno, ko transakcija zahteva več potrditev.
  • Agresivno predpomnjenje je možno na javnih testnih vozliščih.
  • Lahko so tudi začasno nedosegljivi zaradi vzdrževanja.

Od zdaj naprej bom predvideval, da delate s svojim vozliščem.

2. Orodje ukazne vrstice za surfanje

  • Tukaj prenesite in namestite Node.js z uporabo ppa, homebrew ali exe: https://nodejs.org/en/download/.
  • Namestite Surfboard, orodje, ki vam omogoča izvajanje testov na obstoječem vozlišču.

npm install -g @waves/surfboard

3. Vtičnik Visual Studio Code

Ta korak ni obvezen, če niste ljubitelj IDE in imate raje urejevalnike besedil. Vsa potrebna orodja so pripomočki ukazne vrstice. Če uporabljate vim, bodite pozorni na vtičnik vim-vožnja.

Prenesite in namestite Visual Studio Code: https://code.visualstudio.com/

Odprite kodo VS in namestite vtičnik za vožnjo po valovih:

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp

Razširitev brskalnika Waves Keeper: https://wavesplatform.com/products-keeper

Končano!

Zaženite vozlišče in Waves Explorer

1. Zaženite vozlišče:

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

Prepričajte se, da je vozlišče zagnano prek API-ja REST v http://localhost:6869:

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
API Swagger REST za vozlišče

2. Zaženite primerek Waves Explorerja:

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

Odprite brskalnik in pojdite na http://localhost:3000. Videli boste, kako hitro se zgradi prazno vezje lokalnega vozlišča.

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Waves Explorer prikaže primerek lokalnega vozlišča

Struktura RIDE in orodje za surfanje

Ustvarite prazen imenik in v njem zaženite ukaz

surfboard init

Ukaz inicializira imenik s strukturo projekta, aplikacijami »zdravo, svet« in testi. Če odprete to mapo s kodo VS, boste videli:

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Surfboard.config.json

  • Pod mapo ./ride/ boste našli eno datoteko wallet.ride – imenik, kjer se nahaja koda dApp. V naslednjem bloku bomo na kratko analizirali dApps.
  • V mapi ./test/ boste našli datoteko *.js. Tukaj so shranjeni testi.
  • ./surfboard.config.json – konfiguracijska datoteka za izvajanje testov.

Envs je pomemben razdelek. Vsako okolje je konfigurirano takole:

  • Končna točka REST API vozlišča, ki bo uporabljeno za zagon dApp in CHAIN_ID omrežja.
  • Skrivna fraza za račun z žetoni, ki bodo viri vaših testnih žetonov.

Kot lahko vidite, surfboard.config.json privzeto podpira več okolij. Privzeto je lokalno okolje (ključ defaultEnv je spremenljiv parameter).

Denarnica-demo aplikacija

Ta razdelek se ne nanaša na jezik RIDE. Namesto tega si oglejte aplikacijo, ki jo uvajamo in testiramo, da bi bolje razumeli, kaj se dogaja v verigi blokov.

Oglejmo si preprosto demo aplikacijo Wallet. Vsakdo lahko pošlje žetone na naslov dApp. Dvignete lahko le svoje WAVES. Prek InvokeScriptTransaction sta na voljo dve funkciji @Callable:

  • deposit()ki zahteva priloženo plačilo v WAVES
  • withdraw(amount: Int)ki vrne žetone

V celotnem življenjskem ciklu aplikacije dApp bo ohranjena struktura (naslov → količina):

Ukrep
Posledično stanje

začetna
prazen

Alice položi 5 VALOV
alice-naslov → 500000000

Bob položi 2 VALOVA

alice-naslov → 500000000
bob-naslov → 200000000

Bob umakne 7 VALOV
ZAVRNJENO!

Alice umakne 4 VALOVE
alice-naslov → 100000000
bob-naslov → 200000000

Tukaj je koda za popolno razumevanje 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

Vzorčno kodo lahko najdete tudi na GitHub.

Vtičnik VSCode podpira neprekinjeno prevajanje med urejanjem datoteke. Zato lahko vedno spremljate napake v zavihku TEŽAVE.

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Če želite pri prevajanju datoteke uporabiti drug urejevalnik besedil, uporabite

surfboard compile ride/wallet.ride

To bo izpisalo niz base64 prevedene kode RIDE.

Testni skript za 'wallet.ride'

Poglejmo si testna datoteka. Poganja JavaScriptovo ogrodje Mocha. Obstaja funkcija "Pred" in trije testi:

  • »Before« financira več računov prek MassTransferTransaction, sestavi skript in ga namesti v verigo blokov.
  • »Can deposit« pošlje InvokeScriptTransaction v omrežje in aktivira funkcijo deposit() za vsakega od obeh računov.
  • Preizkusi »ni mogoče dvigniti več, kot je bilo položeno«, da nihče ne more ukrasti žetonov drugih ljudi.
  • »Can deposit« preverja, ali so dvigi pravilno obdelani.

Zaženite teste iz Surfboarda in analizirajte rezultate v Waves Explorerju

Če želite izvesti test, zaženite

surfboard test

Če imate več skriptov (potrebujete na primer ločen skript za uvajanje), lahko zaženete

surfboard test my-scenario.js

Surfboard bo zbral preskusne datoteke v mapi ./test/ in zagnal skript na vozlišču, ki je konfigurirano v surfboard.config.json. Po nekaj sekundah boste videli nekaj takega:

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! Testi opravljeni. Zdaj pa poglejmo, kaj se zgodi, ko uporabljate Waves Explorer: poglejte bloke ali prilepite enega od zgornjih naslovov v iskanje (na primer ustrezen wallet#. Tam lahko najdete zgodovino transakcij, status dApp, dekompilirano binarno datoteko.

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Raziskovalec valov. Aplikacija, ki je bila pravkar nameščena.

Nekaj ​​nasvetov za surfanje:

1. Za testiranje v okolju testne mreže uporabite:

surfboard test --env=testnet

Pridobite testne žetone

2. Če si želite ogledati različice JSON transakcij in kako jih obdeluje vozlišče, zaženite test z -v (pomeni 'podrobno'):

surfboard test -v

Uporaba aplikacij z Waves Keeper

1. Nastavite Waves Keeper za delovanje: http://localhost:6869

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Nastavitev Waves Keeper za delo z lokalnim vozliščem

2. Uvoz skrivne fraze z žetoni za omrežje? Za poenostavitev uporabite začetno seme vašega vozlišča: waves private node seed with waves tokens. Naslov: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Enostransko aplikacijo brez strežnika lahko zaženete sami z uporabo npm. Ali pa pojdite na obstoječega: chrome-ext.wvservices.com/dapp-wallet.html

4. Vnesite naslov denarnice iz preskusnega zagona (podčrtan zgoraj) v besedilno polje za naslov dApp

5. Vnesite majhen znesek v polje »Depozit« in kliknite gumb:

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Waves Keeper zahteva dovoljenje za podpis InvokeScriptTransaction s plačilom 10 WAVES.

6. Potrdite transakcijo:

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp
Transakcija je ustvarjena in oddana v omrežje. Zdaj lahko vidite njeno osebno izkaznico

7. Spremljajte transakcijo z Waves Explorerjem. V iskalno polje vnesite ID

Kako zgraditi, namestiti in preizkusiti Waves RIDE dApp

Sklepi in dodatne informacije

Ogledali smo si orodja za razvoj, testiranje, uvajanje in uporabo preprostih dApps na platformi Waves:

  • RIDE jezik
  • Urejevalnik kod VS
  • Raziskovalec valov
  • Deskanje za desko
  • Varuh valov

Povezave za tiste, ki želite nadaljevati učenje RIDE:

Več primerov
Spletni IDE s primeri
Dokumentacija o valovih
Klepet razvijalcev v Telegramu
Waves in RIDE na stackoverflowu
NOVO! Spletni tečaji o ustvarjanju dApps na platformi Waves

Nadaljujte s potapljanjem v temo RIDE in ustvarite svojo prvo dApp!

TL; DR: bit.ly/2YCFnwY

Vir: www.habr.com

Dodaj komentar