Jak sestavit, nasadit a otestovat Waves RIDE dApp

Ahoj! V tomto článku vám ukážu, jak napsat a spustit běžný dApp na uzlu Waves. Podívejme se na potřebné nástroje, metody a příklad vývoje.

Jak sestavit, nasadit a otestovat Waves RIDE dApp

Schéma vývoje pro dApps a běžné aplikace je téměř stejné:

  • Napíšeme kód
  • Psaní automatizovaného testování
  • Spusťte aplikaci
  • Testování

Nástroje

1. docker spustit uzel a Waves Explorer

Pokud nechcete spustit uzel, můžete tento krok přeskočit. Koneckonců existuje testovací a experimentální síť. Ale bez nasazení vlastního uzlu se proces testování může protáhnout.

  • Neustále budete potřebovat nové účty s testovacími tokeny. Faucet testovací sítě přenáší 10 VLN každých 10 minut.
  • Průměrná doba blokování v testovací síti je 1 minuta, v uzlu – 15 sekund. To je zvláště patrné, když transakce vyžaduje více potvrzení.
  • Agresivní ukládání do mezipaměti je možné na veřejných testovacích uzlech.
  • Mohou být také dočasně nedostupné z důvodu údržby.

Od této chvíle budu předpokládat, že pracujete se svým vlastním uzlem.

2. Nástroj příkazového řádku Surfboard

  • Stáhněte a nainstalujte Node.js pomocí ppa, homebrew nebo exe zde: https://nodejs.org/en/download/.
  • Nainstalujte Surfboard, nástroj, který vám umožní spouštět testy na existujícím uzlu.

npm install -g @waves/surfboard

3. Zásuvný modul Visual Studio Code

Tento krok je volitelný, pokud nejste fanouškem IDE a dáváte přednost textovým editorům. Všechny potřebné nástroje jsou nástroje příkazového řádku. Pokud používáte vim, věnujte pozornost pluginu vim-ride.

Stáhněte a nainstalujte Visual Studio Code: https://code.visualstudio.com/

Otevřete VS Code a nainstalujte plugin waves-ride:

Jak sestavit, nasadit a otestovat Waves RIDE dApp

Rozšíření prohlížeče Waves Keeper: https://wavesplatform.com/products-keeper

Hotovo!

Spusťte uzel a Waves Explorer

1. Spusťte uzel:

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

Ujistěte se, že je uzel spuštěn přes REST API v http://localhost:6869:

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Swagger REST API pro uzel

2. Spusťte instanci Waves Explorer:

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

Otevřete prohlížeč a přejděte na http://localhost:3000. Uvidíte, jak rychle se vybuduje prázdný okruh místního uzlu.

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Waves Explorer zobrazuje instanci místního uzlu

Struktura RIDE a nástroj Surfboard

Vytvořte prázdný adresář a spusťte v něm příkaz

surfboard init

Příkaz inicializuje adresář se strukturou projektu, aplikacemi „hello world“ a testy. Pokud tuto složku otevřete pomocí kódu VS, uvidíte:

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Surfboard.config.json

  • Pod složkou ./ride/ najdete jeden soubor wallet.ride - adresář, kde je umístěn kód dApp. V dalším bloku stručně analyzujeme dApps.
  • Ve složce ./test/ najdete soubor *.js. Zde jsou uloženy testy.
  • ./surfboard.config.json – konfigurační soubor pro spouštění testů.

Envs je důležitá sekce. Každé prostředí je nakonfigurováno takto:

  • Koncový bod REST API uzlu, který bude použit ke spuštění dApp a CHAIN_ID sítě.
  • Tajná fráze pro účet s tokeny, které budou zdrojem vašich testovacích tokenů.

Jak můžete vidět, surfboard.config.json ve výchozím nastavení podporuje více prostředí. Výchozí je místní prostředí (klíč defaultEnv je měnitelný parametr).

Peněženka-demo aplikace

Tato část není odkazem na jazyk RIDE. Spíše pohled na aplikaci, kterou nasazujeme a testujeme, abychom lépe porozuměli tomu, co se v blockchainu děje.

Podívejme se na jednoduchou aplikaci Wallet-demo. Kdokoli může poslat tokeny na adresu dApp. Můžete stáhnout pouze své VLNY. Dvě funkce @Callable jsou dostupné prostřednictvím InvokeScriptTransaction:

  • deposit()která vyžaduje připojenou platbu ve WAVES
  • withdraw(amount: Int)který vrací tokeny

Během životního cyklu dApp bude zachována struktura (adresa → částka):

Akce
Výsledný stav

počáteční
prázdný

Alice vloží 5 VLN
alice-adresa → 500000000

Bob vloží 2 VLNY

alice-adresa → 500000000
bob-adresa → 200000000

Bob stáhne 7 VLN
ZAMÍTNUTO!

Alice stáhne 4 VLNY
alice-adresa → 100000000
bob-adresa → 200000000

Zde je kód pro úplné pochopení situace:

# 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

Ukázkový kód lze také nalézt na GitHub.

Plugin VSCode podporuje průběžnou kompilaci při úpravě souboru. Proto můžete vždy sledovat chyby v záložce PROBLÉMY.

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Pokud chcete při kompilaci souboru použít jiný textový editor, použijte

surfboard compile ride/wallet.ride

Tím se vytiskne série RIDE kódu zkompilovaného base64.

Testovací skript pro 'wallet.ride'

Pojďme se podívat testovací soubor. Poháněno JavaScriptovým rámcem Mocha. K dispozici je funkce „Před“ a tři testy:

  • „Před“ zafinancuje více účtů prostřednictvím MassTransferTransaction, zkompiluje skript a nasadí jej do blockchainu.
  • „Can deposit“ odešle InvokeScriptTransaction do sítě a aktivuje funkci deposit() pro každý ze dvou účtů.
  • „Nelze vybrat více, než bylo uloženo“, testuje, že nikdo nemůže ukrást žetony jiných lidí.
  • „Může vložit“ kontroluje, zda jsou výběry zpracovány správně.

Spusťte testy ze Surfboardu a analyzujte výsledky ve Waves Explorer

Chcete-li spustit test, spusťte

surfboard test

Pokud máte více skriptů (například potřebujete samostatný skript nasazení), můžete spustit

surfboard test my-scenario.js

Surfboard shromáždí testovací soubory ve složce ./test/ a spustí skript na uzlu, který je nakonfigurován v surfboard.config.json. Po několika sekundách uvidíte něco takového:

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 prošly. Nyní se podívejme, co se stane při použití Waves Explorer: podívejte se na bloky nebo vložte jednu z výše uvedených adres do vyhledávání (například odpovídající wallet#. Najdete tam historii transakcí, stav dApp, dekompilovaný binární soubor.

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Waves Explorer. Aplikace, která byla právě nasazena.

Několik tipů pro surfování:

1. Pro testování v prostředí testnet použijte:

surfboard test --env=testnet

Získejte testovací žetony

2. Pokud chcete vidět verze transakcí JSON a způsob jejich zpracování uzlem, spusťte test s -v (znamená 'podrobné'):

surfboard test -v

Používání aplikací s Waves Keeper

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

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Nastavení aplikace Waves Keeper pro práci s místním uzlem

2. Importovat tajnou frázi s tokeny pro síť? Pro zjednodušení použijte počáteční zdroj vašeho uzlu: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Jednostránkovou aplikaci bez serveru můžete spustit sami pomocí npm. Nebo přejděte na stávající: chrome-ext.wvservices.com/dapp-wallet.html

4. Do textového pole adresy dApp zadejte adresu peněženky z testovacího provozu (podtrženo výše).

5. Do pole „Vklad“ zadejte malou částku a klikněte na tlačítko:

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Waves Keeper žádá o povolení podepsat transakci InvokeScript s platbou 10 WAVES.

6. Potvrďte transakci:

Jak sestavit, nasadit a otestovat Waves RIDE dApp
Transakce je vytvořena a vysílána do sítě. Nyní můžete vidět její ID

7. Monitorujte transakci pomocí Waves Explorer. Do vyhledávacího pole zadejte ID

Jak sestavit, nasadit a otestovat Waves RIDE dApp

Závěry a doplňující informace

Podívali jsme se na nástroje pro vývoj, testování, nasazení a používání jednoduchých dApps na platformě Waves:

  • jazyk RIDE
  • Editor kódu VS
  • Waves Explorer
  • Surf
  • Strážce vln

Odkazy pro ty, kteří se chtějí dál učit RIDE:

Další příklady
Online IDE s příklady
Dokumentace vln
Vývojářský chat v telegramu
Vlny a RIDE na stackoverflow
NOVÝ! Online kurzy vytváření dApps na platformě Waves

Pokračujte v ponořování do tématu RIDE a vytvořte svou první dApp!

TL; DR: bit.ly/2YCFnwY

Zdroj: www.habr.com

Přidat komentář