Jak budovat, nasazovat a testovat Waves RIDE dApp

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

Jak budovat, nasazovat a testovat Waves RIDE dApp

Schéma vývoje dApp a běžných aplikací se téměř neliší:

  • Píšeme kód
  • Píšeme automatizované testování
  • Spouštíme aplikaci
  • Testujeme.

Nástroje

1. docker pro spuštění nody a Waves Explorer

Pokud nechcete spouštět nodu, můžete tento krok přeskočit. Existuje totiž testovací a experimentální síť. Ale bez nasazení vlastní nody se může proces testování protáhnout.

  • Stále budete potřebovat nové účty s testovacími tokeny. Kran testovací sítě převádí 10 WAVES každých 10 minut.
  • Průměrná doba bloků v testovací síti je 1 minuta, v nodě pak 15 sekund. To je obzvláště patrné, když transakce vyžaduje několik potvrzení.
  • Ve veřejných testovacích nodách může docházet k agresivnímu cachování.
  • Mohou být také dočasně nedostupné kvůli technické údržbě.

Dále budu předpokládat, že pracujete se svou nodou.

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ý umožní spustit testy na existující nodě.

npm install -g @waves/surfboard

3. Plugin Visual Studio Code

Tento krok je nepovinný, pokud nejste fanouškem IDE a dáváte přednost textovým editorům. Všechny potřebné nástroje jsou utility 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 budovat, nasazovat a testovat Waves RIDE dApp

Prohlížečové rozšíření Waves Keeper: https://wavesplatform.com/products-keeper

Hotovo!

Spusťte nodu a Waves Explorer

1. Spusťte nodu:

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

Ujistěte se, že nodu spouštíte přes REST API na http://localhost:6869:

Jak budovat, nasazovat a testovat Waves RIDE dApp
Rozhraní Swagger REST API pro nodu

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 buduje prázdný řetězec lokální nody.

Jak budovat, nasazovat a testovat Waves RIDE dApp
Waves Explorer zobrazuje instanci lokální nody

Struktura RIDE a nástroj Surfboard

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

surfboard init

Příkaz inicializuje adresář se strukturou projektu, aplikaci typu "hello world" a testy. Když tuto složku otevřete ve VS Code, uvidíte:

Jak budovat, nasazovat a testovat Waves RIDE dApp
Surfboard.config.json

  • Pod složkou ./ride/ najdete jediný soubor wallet.ride – adresář, kde je umístěn kód dApp. Krátce analyzujeme dApp v následující části.
  • Ve složce .\/test\ najdete soubor *.js. Zde jsou uloženy testy.
  • .\/surfboard.config.json – konfigurační soubor pro spuštění testů.

Envs – důležitá sekce. Každé prostředí se nastavuje takto:

  • Konečný bod REST API uzlu, který se bude používat pro spuštění dApp a CHAIN_ID sítě.
  • Tajná fráze pro účet s tokeny, které budou zdroji tokenů vašeho testu.

Jak vidíte, surfboard.config.json ve výchozím nastavení podporuje více prostředí. Výchozí prostředí je nastaveno na lokální (klíč defaultEnv – měnitelný parametr).

Aplikace Wallet-demo

Tato sekce není příručkou pro jazyk RIDE. Spíše se jedná o pohled na aplikaci, kterou nasazujeme a testujeme, abychom lépe pochopili, co se děje v blockchainu.

Podívejme se na jednoduchou aplikaci Wallet-demo. Každý může posílat tokeny na adresu dApp. Vybrat lze pouze své WAVES. Dvě @Callable funkce jsou dostupné prostřednictvím InvokeScriptTransaction:

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

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

Akce
Výsledný stav

počáteční
prázdný

Alice vloží 5 WAVES
alice-adresa → 500000000

Bob vloží 2 WAVES

alice-adresa → 500000000
bob-adresa → 200000000

Bob vybírá 7 WAVES
Odmítnuto!

Alice vybírá 4 WAVES
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

Příklad kódu lze také nalézt na GitHub.

Plugin VSCode podporuje nepřetržitou kompilaci při úpravě souboru. Proto vždy můžete sledovat chyby na kartě PROBLEMS.

Jak budovat, nasazovat a testovat Waves RIDE dApp
Pokud chcete použít jiný textový editor při kompilaci souboru, použijte

surfboard compile ride\/wallet.ride

To vyprodukuje řadu base64 zkompilovaného kódu RIDE.

Testovací scénář pro 'wallet.ride'

Podívejme se na testovací soubor. Pracuje na rámci JavaScriptu Mocha. Existuje funkce „Before“ a tři testy:

  • „Before“ financuje několik účtů prostřednictvím MassTransferTransaction, kompiluje skript a nasazuje ho do blockchainu.
  • „Může vkládat“ odesílá do sítě InvokeScriptTransaction, aktivující funkci deposit() pro každý ze dvou účtů.
  • „Nelze vybrat více, než bylo uloženo“ testuje, že nikdo nemůže ukrást cizí tokeny.
  • „Může vkládat“ kontroluje, že výběry jsou zpracovávány správně.

Spuštění testů s Surfboard a analýza výsledků ve Waves Explorer

Pro spuštění testu spusťte

surfboard test

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

surfboard test my-scenario.js

Surfboard shromáždí testovací soubory do složky ./test/ a spustí skript na nodě, která je nastavena v surfboard.config.json. Za několik sekund budete moci pozorovat něco podobného:

wallet test suite
Generování účtů s nonce: ce8d86ee
Účet vygenerován: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Účet vygenerován: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Účet vygenerován: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Účty byly úspěšně financovány
Skript byl nastaven
   √ Může vložit (4385ms)
   √ Nemůže vybrat víc než bylo vloženo
   √ Může vybrat (108ms)
3 prošlo (15s)

Hurá! Testy úspěšně proběhly. Nyní se podívejme, co se děje při použití Waves Explorer: prozkoumejme bloky nebo vložte jednu z výše uvedených adres do vyhledávání (například odpovídající wallet#. Zde můžete najít historii transakcí, stav dApp a dekompilovaný binární soubor.

Jak budovat, nasazovat a testovat Waves RIDE dApp
Waves Explorer. Aplikace, kterou jste právě nasadili.

Několik tipů pro Surfboard:

1. Chcete-li testovat v prostředí testnet, použijte:

surfboard test --env=testnet

Získat testovací tokeny

2. Pokud chcete vidět JSON verze transakcí a jak jsou zpracovávány nodou, spusťte test s -v (to znamená 'verbose'):

surfboard test -v

Použití aplikací s Waves Keeper

1. Nastavte Waves Keeper k práci: http://localhost:6869

Jak budovat, nasazovat a testovat Waves RIDE dApp
Nastavení Waves Keeper pro práci s lokální nodou

2. Importujte tajnou frázi s tokeny pro síť? Pro snadnost použijte počáteční seed vaší nody: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Můžete spustit jednopageovou bezserverovou aplikaci sami pomocí npm. Nebo přejděte k existující: chrome-ext.wvservices.com/dapp-wallet.html

4. Zadejte adresu peněženky z testovacího spuštění (zdůrazněná výše) do textového pole adresy dApp

5. Zadejte malou částku do pole „Deposit“ a stiskněte tlačítko:

Jak budovat, nasazovat a testovat Waves RIDE dApp
Waves Keeper žádá o povolení k podepsání InvokeScriptTransaction s platbou 10 WAVES.

6. Potvrďte transakci:

Jak budovat, nasazovat a testovat Waves RIDE dApp
Transakce byla vytvořena a odesílá se do sítě. Nyní je vidět její ID

7. Sledujte transakci pomocí Waves Explorer. Zadejte ID do vyhledávacího pole

Jak budovat, nasazovat a testovat Waves RIDE dApp

Shrnutí a další informace

Prozkoumali jsme nástroje pro vývoj, testování, nasazení a používání jednoduchých dApps na Waves Platform:

  • Jazyk RIDE
  • Editor VS Code
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Odkazy pro ty, kteří chtějí pokračovat ve studiu RIDE:

Více příkladů
Online IDE s příklady
Dokumentace Waves
Chat pro vývojáře na Telegramu
Waves a RIDE na stackoverflow
NOVINKA! Online kurzy pro vytváření dApps na Waves Platform

Pokračujte v prohlubování tématu RIDE a vytvořte svůj první dApp!

TL;DR: bit.ly/2YCFnwY

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster