Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp

Ahoj! V tomto článku vám ukážem, ako napísať a spustiť bežnú dApp na uzle Waves. Pozrime sa na potrebné nástroje, metódy a príklad vývoja.

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp

Schéma vývoja pre dApps a bežné aplikácie je takmer rovnaká:

  • Písanie kódu
  • Písanie automatizovaného testovania
  • Spustenie aplikácie
  • Testovanie

Nástroje

1. docker na spustenie uzla a prieskumníka Waves

Ak nechcete spustiť uzol, môžete tento krok preskočiť. Koniec koncov, existuje testovacia a experimentálna sieť. Bez nasadenia vlastného uzla sa však proces testovania môže pretiahnuť.

  • Neustále budete potrebovať nové účty s testovacími tokenmi. Faucet testovacej siete prenesie 10 VLN každých 10 minút.
  • Priemerný čas blokovania v testovacej sieti je 1 minúta, v uzle – 15 sekúnd. Toto je obzvlášť viditeľné, keď transakcia vyžaduje viacero potvrdení.
  • Agresívne ukladanie do vyrovnávacej pamäte je možné na verejných testovacích uzloch.
  • Môžu byť tiež dočasne nedostupné z dôvodu údržby.

Odteraz budem predpokladať, že pracujete s vlastným uzlom.

2. Surfboard Command Line Tool

  • Stiahnite si a nainštalujte Node.js pomocou ppa, homebrew alebo exe tu: https://nodejs.org/en/download/.
  • Nainštalujte Surfboard, nástroj, ktorý vám umožní spustiť testy na existujúcom uzle.

npm install -g @waves/surfboard

3. Doplnok Visual Studio Code

Tento krok je voliteľný, ak nie ste fanúšikom IDE a dávate prednosť textovým editorom. Všetky potrebné nástroje sú nástroje príkazového riadku. Ak používate vim, venujte pozornosť pluginu vim-ride.

Stiahnite si a nainštalujte kód Visual Studio: https://code.visualstudio.com/

Otvorte VS Code a nainštalujte doplnok waves-ride:

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp

Rozšírenie prehliadača Waves Keeper: https://wavesplatform.com/products-keeper

Hotovo!

Spustite uzol a Waves Explorer

1. Spustite uzol:

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

Uistite sa, že je uzol spustený cez REST API v http://localhost:6869:

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Swagger REST API pre uzol

2. Spustite inštanciu Waves Explorer:

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

Otvorte prehliadač a prejdite na http://localhost:3000. Uvidíte, ako rýchlo sa vybuduje prázdny okruh miestnych uzlov.

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Waves Explorer zobrazuje inštanciu lokálneho uzla

Štruktúra RIDE a nástroj Surfboard

Vytvorte prázdny adresár a spustite príkaz v ňom

surfboard init

Príkaz inicializuje adresár so štruktúrou projektu, aplikáciami „hello world“ a testami. Ak otvoríte tento priečinok pomocou kódu VS, uvidíte:

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Surfboard.config.json

  • Pod priečinkom ./ride/ nájdete jeden súbor wallet.ride - adresár, kde sa nachádza kód dApp. V nasledujúcom bloku stručne rozoberieme dApps.
  • V priečinku ./test/ nájdete súbor *.js. Tu sú uložené testy.
  • ./surfboard.config.json – konfiguračný súbor pre spustenie testov.

Envs je dôležitá sekcia. Každé prostredie je nakonfigurované takto:

  • Koncový bod REST API uzla, ktorý sa použije na spustenie dApp a CHAIN_ID siete.
  • Tajná fráza pre účet s tokenmi, ktoré budú zdrojom vašich testovacích tokenov.

Ako môžete vidieť, surfboard.config.json štandardne podporuje viacero prostredí. Predvolené je lokálne prostredie (kľúč defaultEnv je meniteľný parameter).

Peňaženka-demo aplikácia

Táto časť nie je odkazom na jazyk RIDE. Skôr pohľad na aplikáciu, ktorú nasadzujeme a testujeme, aby sme lepšie pochopili, čo sa v blockchaine deje.

Pozrime sa na jednoduchú aplikáciu Wallet-demo. Ktokoľvek môže poslať tokeny na adresu dApp. Môžete len stiahnuť svoje VLNY. Cez InvokeScriptTransaction sú dostupné dve funkcie @Callable:

  • deposit()ktorá vyžaduje priloženú platbu vo WAVES
  • withdraw(amount: Int)ktorý vracia žetóny

Počas celého životného cyklu dApp sa zachová štruktúra (adresa → suma):

akčná
Výsledný stav

počiatočné
prázdny

Alice vloží 5 VLN
alice-adresa → 500000000

Bob vloží 2 VLNY

alice-adresa → 500000000
bob-adresa → 200000000

Bob stiahne 7 VLN
ZAMIETNUTÉ!

Alice stiahne 4 VLNY
alice-adresa → 100000000
bob-adresa → 200000000

Tu je kód na úplné pochopenie situácie:

# 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

Vzorový kód nájdete aj na GitHub.

Doplnok VSCode podporuje nepretržitú kompiláciu pri úprave súboru. Preto môžete vždy sledovať chyby na karte PROBLÉMY.

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Ak chcete pri kompilácii súboru použiť iný textový editor, použite

surfboard compile ride/wallet.ride

Toto vytvorí sériu kódu RIDE skompilovaného v base64.

Testovací skript pre „wallet.ride“

Poďme sa pozrieť na testovací súbor. Poháňané rámcom Mocha JavaScriptu. K dispozícii je funkcia „Pred“ a tri testy:

  • „Pred“ financuje viacero účtov prostredníctvom MassTransferTransaction, skompiluje skript a nasadí ho do blockchainu.
  • „Can deposit“ odošle InvokeScriptTransaction do siete, čím sa aktivuje funkcia deposit() pre každý z dvoch účtov.
  • „Nedá sa vybrať viac, ako bolo vložené“ testuje, že nikto nemôže ukradnúť žetóny iných ľudí.
  • „Môže vložiť“ kontroluje, či sú výbery spracované správne.

Spustite testy zo Surfboardu a analyzujte výsledky vo Waves Explorer

Ak chcete spustiť test, spustite

surfboard test

Ak máte viacero skriptov (napríklad potrebujete samostatný skript nasadenia), môžete spustiť

surfboard test my-scenario.js

Surfboard zhromaždí testovacie súbory v priečinku ./test/ a spustí skript na uzle, ktorý je nakonfigurovaný v surfboard.config.json. Po niekoľkých sekundách uvidíte niečo takéto:

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)

Hurá! Testy prešli. Teraz sa pozrime na to, čo sa stane pri používaní Waves Explorer: pozrite sa na bloky alebo vložte jednu z vyššie uvedených adries do vyhľadávania (napríklad zodpovedajúcu wallet#. Nájdete tam históriu transakcií, stav dApp, dekompilovaný binárny súbor.

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Waves Explorer. Aplikácia, ktorá bola práve nasadená.

Niekoľko tipov na surfovanie:

1. Na testovanie v prostredí testovacej siete použite:

surfboard test --env=testnet

Získajte testovacie žetóny

2. Ak chcete vidieť verzie transakcií JSON a spôsob ich spracovania uzlom, spustite test s -v (znamená 'podrobné'):

surfboard test -v

Používanie aplikácií s Waves Keeper

1. Nastavte Waves Keeper tak, aby fungoval: http://localhost:6869

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Nastavenie Waves Keeper na prácu s lokálnym uzlom

2. Importovať tajnú frázu s tokenmi pre sieť? Pre jednoduchosť použite počiatočný zdroj vášho uzla: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Jednostránkovú aplikáciu bez servera môžete spustiť sami pomocou npm. Alebo prejdite na existujúci: chrome-ext.wvservices.com/dapp-wallet.html

4. Do textového poľa adresy dApp zadajte adresu peňaženky z testovacej prevádzky (podčiarknuté vyššie).

5. Do poľa „Vklad“ zadajte malú čiastku a kliknite na tlačidlo:

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Waves Keeper požaduje povolenie na podpísanie transakcie InvokeScript s platbou 10 WAVES.

6. Potvrďte transakciu:

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp
Transakcia sa vytvorí a odošle do siete. Teraz môžete vidieť jej ID

7. Monitorujte transakciu pomocou Waves Explorer. Do vyhľadávacieho poľa zadajte ID

Ako vytvoriť, nasadiť a otestovať Waves RIDE dApp

Závery a ďalšie informácie

Pozreli sme sa na nástroje na vývoj, testovanie, nasadenie a používanie jednoduchých dApps na platforme Waves:

  • jazyk RIDE
  • Editor kódu VS
  • Waves Explorer
  • surf
  • Strážca vĺn

Odkazy pre tých, ktorí sa chcú ďalej učiť RIDE:

Viac príkladov
Online IDE s príkladmi
Dokumentácia k vlnám
Vývojársky chat v telegrame
Vlny a RIDE na stackoverflow
NOVÝ! Online kurzy vytvárania dApps na platforme Waves

Pokračujte v ponorení do témy RIDE a vytvorte si svoju prvú dApp!

TL; DR: bit.ly/2YCFnwY

Zdroj: hab.com

Pridať komentár