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.

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: .
- 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 .
Stáhněte a nainstalujte Visual Studio Code:
Otevřete VS Code a nainstalujte plugin waves-ride:

Prohlížečové rozšíření Waves 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 :

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 . Uvidíte, jak rychle se buduje prázdný řetězec lokální nody.

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:

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 WAVESwithdraw(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() = falsePříklad kódu lze také nalézt na .
Plugin VSCode podporuje nepřetržitou kompilaci při úpravě souboru. Proto vždy můžete sledovat chyby na kartě PROBLEMS.

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 . 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.

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
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:

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í:
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:

Waves Keeper žádá o povolení k podepsání InvokeScriptTransaction s platbou 10 WAVES.
6. Potvrďte transakci:

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

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:
Pokračujte v prohlubování tématu RIDE a vytvořte svůj první dApp!
TL;DR:
Zdroj: habr.com
