Jak budować, wdrażać i testować Waves RIDE dApp

Cześć! W tym artykule pokażę, jak napisać i uruchomić zwykłą aplikację dApp na węźle Waves. Przyjrzyjmy się niezbędnym narzędziom, metodom i przykładowi rozwoju.

Jak budować, wdrażać i testować Waves RIDE dApp

Schemat rozwoju dApps i zwykłych aplikacji jest prawie taki sam:

  • Piszemy kod
  • Pisanie testów automatycznych
  • Uruchomienie aplikacji
  • Testowanie

Narzędzia

1. docker aby uruchomić węzeł i Eksploratora Waves

Jeśli nie chcesz uruchamiać węzła, możesz pominąć ten krok. W końcu istnieje sieć testowa i eksperymentalna. Jednak bez wdrożenia własnego węzła proces testowania może się przeciągnąć.

  • Będziesz stale potrzebował nowych kont z tokenami testowymi. Kran sieci testowej przesyła 10 FALI co 10 minut.
  • Średni czas blokady w sieci testowej wynosi 1 minutę, w węźle – 15 sekund. Jest to szczególnie zauważalne, gdy transakcja wymaga wielokrotnych potwierdzeń.
  • Agresywne buforowanie jest możliwe w publicznych węzłach testowych.
  • Mogą być również chwilowo niedostępne ze względu na prace konserwacyjne.

Od teraz będę zakładał, że pracujesz z własnym węzłem.

2. Narzędzie wiersza poleceń deski surfingowej

  • Pobierz i zainstaluj Node.js za pomocą ppa, homebrew lub exe tutaj: https://nodejs.org/en/download/.
  • Zainstaluj Surfboard, narzędzie umożliwiające przeprowadzenie testów na istniejącym węźle.

npm install -g @waves/surfboard

3. Wtyczka Visual Studio Code

Ten krok jest opcjonalny, jeśli nie jesteś fanem IDE i wolisz edytory tekstu. Wszystkie niezbędne narzędzia to narzędzia wiersza poleceń. Jeśli używasz vima, zwróć uwagę na wtyczkę jazda vimem.

Pobierz i zainstaluj kod Visual Studio: https://code.visualstudio.com/

Otwórz kod VS i zainstaluj wtyczkę wave-ride:

Jak budować, wdrażać i testować Waves RIDE dApp

Rozszerzenie przeglądarki Waves Keeper: https://wavesplatform.com/products-keeper

Gotowe!

Uruchom węzeł i Eksploratora fal

1. Uruchom węzeł:

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

Upewnij się, że węzeł jest uruchomiony poprzez API REST w http://localhost:6869:

Jak budować, wdrażać i testować Waves RIDE dApp
Swagger REST API dla węzła

2. Uruchom instancję Waves Explorer:

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

Otwórz przeglądarkę i przejdź do http://localhost:3000. Zobaczysz, jak szybko budowany jest pusty obwód węzła lokalnego.

Jak budować, wdrażać i testować Waves RIDE dApp
Eksplorator Waves wyświetla instancję węzła lokalnego

Struktura RIDE i narzędzie do deski surfingowej

Utwórz pusty katalog i uruchom w nim polecenie

surfboard init

Komenda inicjuje katalog ze strukturą projektu, aplikacjami i testami „hello world”. Jeśli otworzysz ten folder za pomocą VS Code, zobaczysz:

Jak budować, wdrażać i testować Waves RIDE dApp
Surfboard.config.json

  • W folderze ./ride/ znajdziesz pojedynczy plik portfel.ride - katalog, w którym znajduje się kod dApp. W następnym bloku krótko przeanalizujemy dApps.
  • W folderze ./test/ znajdziesz plik *.js. Tutaj przechowywane są testy.
  • ./surfboard.config.json – plik konfiguracyjny do uruchamiania testów.

Envs to ważna sekcja. Każde środowisko jest skonfigurowane w następujący sposób:

  • Punkt końcowy API REST węzła, który będzie używany do uruchamiania dApp i CHAIN_ID sieci.
  • Tajna fraza dla konta z tokenami, która będzie źródłem Twoich tokenów testowych.

Jak widać, surfboard.config.json domyślnie obsługuje wiele środowisk. Wartość domyślna to środowisko lokalne (klucz defaultEnv jest parametrem, który można zmieniać).

Aplikacja demonstracyjna portfela

Ta sekcja nie jest odniesieniem do języka RIDE. Raczej spójrz na aplikację, którą wdrażamy i testujemy, aby lepiej zrozumieć, co dzieje się w blockchainie.

Przyjrzyjmy się prostej aplikacji demonstracyjnej Portfela. Każdy może wysłać tokeny na adres dApp. Możesz wypłacić jedynie swoje FALE. Dwie funkcje @Callable są dostępne poprzez InvokeScriptTransaction:

  • deposit()co wymaga załączonej płatności w WAVES
  • withdraw(amount: Int)który zwraca tokeny

Przez cały cykl życia dApp struktura (adres → kwota) zostanie zachowana:

Działania
Wynikowy stan

początkowy
pusty

Alicja odkłada 5 FAL
adres-alicji → 500000000

Bob deponuje 2 FALE

adres-alicji → 500000000
bob-adres → 200000000

Bob wycofuje 7 FALI
ZAPRZECZONY!

Alicja wycofuje 4 FALE
adres-alicji → 100000000
bob-adres → 200000000

Oto kod pozwalający w pełni zrozumieć sytuację:

# 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

Przykładowy kod można również znaleźć pod adresem GitHub.

Wtyczka VSCode obsługuje ciągłą kompilację podczas edycji pliku. Dlatego zawsze możesz monitorować błędy w zakładce PROBLEMY.

Jak budować, wdrażać i testować Waves RIDE dApp
Jeśli chcesz użyć innego edytora tekstu podczas kompilacji pliku, użyj

surfboard compile ride/wallet.ride

Spowoduje to wyświetlenie serii kodu RIDE skompilowanego w base64.

Skrypt testowy dla „wallet.ride”

Spójrzmy na plik testowy. Obsługiwane przez framework Mocha JavaScript. Dostępna jest funkcja „Przed” i trzy testy:

  • „Przed” finansuje wiele kont za pośrednictwem MassTransferTransaction, kompiluje skrypt i wdraża go w łańcuchu bloków.
  • „Może wpłacić” wysyła do sieci InvokeScriptTransaction, aktywując funkcję depozytu() dla każdego z dwóch kont.
  • Testy „Nie można wypłacić więcej niż wpłacono” potwierdzają, że nikt nie może ukraść tokenów innych osób.
  • „Może wpłacić” sprawdza, czy wypłaty są przetwarzane prawidłowo.

Uruchom testy z Surfboard i przeanalizuj wyniki w Waves Explorer

Aby uruchomić test, uruchom

surfboard test

Jeśli masz wiele skryptów (na przykład potrzebujesz osobnego skryptu wdrażania), możesz je uruchomić

surfboard test my-scenario.js

Surfboard zbierze pliki testowe w folderze ./test/ i uruchomi skrypt na węźle skonfigurowanym w surfboard.config.json. Po kilku sekundach zobaczysz coś takiego:

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)

Brawo! Testy zaliczone. Przyjrzyjmy się teraz, co dzieje się podczas korzystania z Eksploratora Waves: spójrz na bloki lub wklej jeden z powyższych adresów do wyszukiwania (na przykład odpowiedni wallet#. Znajdziesz tam historię transakcji, status dApp, zdekompilowany plik binarny.

Jak budować, wdrażać i testować Waves RIDE dApp
Eksplorator fal. Aplikacja, która właśnie została wdrożona.

Kilka wskazówek dotyczących deski surfingowej:

1. Aby przetestować w środowisku testnetowym, użyj:

surfboard test --env=testnet

Zdobądź tokeny testowe

2. Jeśli chcesz zobaczyć wersje transakcji JSON i sposób ich przetwarzania przez węzeł, uruchom test z -v (oznacza „pełny”):

surfboard test -v

Korzystanie z aplikacji z Waves Keeper

1. Skonfiguruj Waves Keeper do działania: http://localhost:6869

Jak budować, wdrażać i testować Waves RIDE dApp
Konfigurowanie Waves Keeper do pracy z węzłem lokalnym

2. Zaimportować tajną frazę z tokenami dla sieci? Dla uproszczenia użyj początkowego materiału siewnego swojego węzła: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Możesz samodzielnie uruchomić bezserwerową aplikację jednostronicową, używając npm. Lub przejdź do istniejącego: chrome-ext.wvservices.com/dapp-wallet.html

4. Wpisz adres portfela z przebiegu testowego (podkreślony powyżej) w polu tekstowym adresu dApp

5. Wpisz niewielką kwotę w polu „Wpłata” i kliknij przycisk:

Jak budować, wdrażać i testować Waves RIDE dApp
Waves Keeper prosi o pozwolenie na podpisanie transakcji InvokeScript z płatnością w wysokości 10 WAVES.

6. Potwierdź transakcję:

Jak budować, wdrażać i testować Waves RIDE dApp
Transakcja zostaje utworzona i rozesłana do sieci. Teraz możesz zobaczyć jej identyfikator

7. Monitoruj transakcję za pomocą Waves Explorer. Wpisz identyfikator w polu wyszukiwania

Jak budować, wdrażać i testować Waves RIDE dApp

Wnioski i dodatkowe informacje

Przyjrzeliśmy się narzędziom do tworzenia, testowania, wdrażania i używania prostych dApps na platformie Waves:

  • Język JAZDY
  • Edytor kodu VS
  • Eksplorator fal
  • Deska surfingowa
  • Strażnik fal

Linki dla chcących kontynuować naukę RIDE:

Więcej przykładów
Internetowe IDE z przykładami
Dokumentacja fal
Czat programisty w Telegramie
Fale i RIDE na stackoverflow
NOWY! Kursy online dotyczące tworzenia dApps na platformie Waves

Kontynuuj temat RIDE i stwórz swoją pierwszą dApp!

TL; DR: bit.ly/2YCFnwY

Źródło: www.habr.com

Dodaj komentarz