A Waves RIDE dApp felépítése, telepítése és tesztelése

Helló! Ebben a cikkben megmutatom, hogyan írhat és futtathat egy szokásos dApp-ot egy Waves csomóponton. Nézzük a szükséges eszközöket, módszereket és egy példát a fejlesztésre.

A Waves RIDE dApp felépítése, telepítése és tesztelése

A dApps és a normál alkalmazások fejlesztési sémája majdnem ugyanaz:

  • Írjuk a kódot
  • Automatizált tesztelés írása
  • Az alkalmazás elindítása
  • Tesztelés

Tools

1. docker a csomópont és a Waves Explorer futtatásához

Ha nem szeretne csomópontot indítani, kihagyhatja ezt a lépést. Hiszen létezik egy teszt- és kísérleti hálózat. De a saját csomópont telepítése nélkül a tesztelési folyamat elhúzódhat.

  • Folyamatosan új fiókokra lesz szüksége teszt tokenekkel. A teszt hálózati csaptelep 10 percenként 10 HULMÁT továbbít.
  • Az átlagos blokkolási idő a teszthálózatban 1 perc, a csomópontban - 15 másodperc. Ez különösen akkor észrevehető, ha egy tranzakció több megerősítést igényel.
  • Agresszív gyorsítótárazás lehetséges a nyilvános tesztcsomópontokon.
  • Előfordulhat, hogy karbantartás miatt átmenetileg nem elérhetők.

Mostantól azt feltételezem, hogy a saját csomópontjával dolgozik.

2. Szörfdeszka parancssori eszköz

  • Töltse le és telepítse a Node.js fájlt ppa, homebrew vagy exe használatával itt: https://nodejs.org/en/download/.
  • Telepítse a Surfboardot, egy olyan eszközt, amely lehetővé teszi tesztek futtatását egy meglévő csomóponton.

npm install -g @waves/surfboard

3. Visual Studio Code beépülő modul

Ez a lépés nem kötelező, ha nem rajong az IDE-ért, és inkább a szövegszerkesztőket részesíti előnyben. Az összes szükséges eszköz parancssori segédprogram. Ha vim-et használ, figyeljen a bővítményre vim-ride.

Töltse le és telepítse a Visual Studio kódot: https://code.visualstudio.com/

Nyissa meg a VS Code-ot, és telepítse a waves-ride bővítményt:

A Waves RIDE dApp felépítése, telepítése és tesztelése

Waves Keeper böngészőbővítmény: https://wavesplatform.com/products-keeper

Kész!

Indítsa el a csomópontot és a Waves Explorert

1. Indítsa el a csomópontot:

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

Győződjön meg arról, hogy a csomópont a REST API-n keresztül indul el http://localhost:6869:

A Waves RIDE dApp felépítése, telepítése és tesztelése
Swagger REST API csomóponthoz

2. Indítsa el a Waves Explorer egy példányát:

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

Nyisson meg egy böngészőt, és lépjen ide http://localhost:3000. Látni fogja, milyen gyorsan épül fel egy üres helyi csomópont áramkör.

A Waves RIDE dApp felépítése, telepítése és tesztelése
A Waves Explorer egy helyi csomópontpéldányt jelenít meg

RIDE szerkezet és szörfdeszka eszköz

Hozzon létre egy üres könyvtárat, és futtassa a parancsot

surfboard init

A parancs inicializál egy könyvtárat a projekt szerkezetével, a „hello world” alkalmazásokkal és tesztekkel. Ha megnyitja ezt a mappát a VS Code segítségével, a következőket fogja látni:

A Waves RIDE dApp felépítése, telepítése és tesztelése
Surfboard.config.json

  • A ./ride/ mappa alatt egyetlen wallet.ride fájl található – az a könyvtár, ahol a dApp kód található. A következő blokkban röviden elemezzük a dApps-okat.
  • A ./test/ mappa alatt egy *.js fájl található. A teszteket itt tárolják.
  • ./surfboard.config.json – konfigurációs fájl tesztek futtatásához.

Az Envs fontos rész. Minden környezet a következőképpen van konfigurálva:

  • A dApp és a hálózat CHAIN_ID elindításához használt csomópont REST API-végpontja.
  • Titkos kifejezés egy tokenekkel rendelkező fiókhoz, amely a teszt tokenek forrása lesz.

Mint látható, a surfboard.config.json alapértelmezés szerint több környezetet is támogat. Az alapértelmezett a helyi környezet (a defaultEnv kulcs egy megváltoztatható paraméter).

Wallet-demó alkalmazás

Ez a rész nem utal a RIDE nyelvre. Inkább tekintse meg az általunk telepített és tesztelt alkalmazást, hogy jobban megértse, mi történik a blokkláncban.

Nézzünk egy egyszerű Wallet-demó alkalmazást. Bárki küldhet tokeneket egy dApp címre. Csak a HULLÁMAIDAT vonhatod vissza. Két @Callable függvény érhető el az InvokeScriptTransaction segítségével:

  • deposit()amelyhez mellékelt befizetés szükséges WAVES-ben
  • withdraw(amount: Int)amely tokeneket ad vissza

A dApp életciklusa során a struktúra (cím → mennyiség) megmarad:

Akció
Eredmény állapot

kezdetben
üres

Alice letétbe helyez 5 HULLÁMOT
alice-cím → 500000000

Bob letétbe helyez 2 HULLÁT

alice-cím → 500000000
bob-cím → 200000000

Bob visszahúz 7 HULLÁMOT
TAGADVA!

Alice visszahúz 4 HULLÁMOT
alice-cím → 100000000
bob-cím → 200000000

Íme a kód a helyzet teljes megértéséhez:

# 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

A kódminta a címen is megtalálható GitHub.

A VSCode beépülő modul támogatja a folyamatos fordítást a fájl szerkesztése közben. Ezért mindig figyelheti a hibákat a PROBLÉMÁK lapon.

A Waves RIDE dApp felépítése, telepítése és tesztelése
Ha más szövegszerkesztőt szeretne használni a fájl összeállításakor, használja a

surfboard compile ride/wallet.ride

Ez egy sorozat base64 lefordított RIDE kódot ad ki.

Tesztszkript a 'wallet.ride' számára

Nézzük tesztfájl. A JavaScript Mocha keretrendszere működteti. Van egy „Előtte” funkció és három teszt:

  • A „Mielőtt” több számlát finanszíroz a MassTransferTransaction segítségével, lefordítja a szkriptet és telepíti a blokkláncra.
  • A „Can deposit” egy InvokeScriptTransaction-t küld a hálózatnak, aktiválva a deposit() funkciót mind a két számlán.
  • „Nem lehet többet kivenni, mint amennyit letétbe helyeztek” teszteli, hogy senki sem lophatja el mások tokenjeit.
  • A „Lehet befizetni” ellenőrzi, hogy a kifizetések feldolgozása megfelelő-e.

Futtasson teszteket a szörfdeszkáról, és elemezze az eredményeket a Waves Explorerben

A teszt futtatásához futtassa

surfboard test

Ha több szkriptje van (például külön telepítési szkriptre van szüksége), futtathatja

surfboard test my-scenario.js

A Surfboard összegyűjti a tesztfájlokat a ./test/ mappában, és futtatja a szkriptet a surfboard.config.json fájlban konfigurált csomóponton. Néhány másodperc múlva valami ilyesmit fog látni:

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)

Hurrá! A tesztek sikeresek. Most nézzük meg, mi történik a Waves Explorer használatakor: nézze meg a blokkokat, vagy illessze be a fenti címek egyikét a keresésbe (például a megfelelő wallet#. Itt megtalálhatja a tranzakciós előzményeket, a dApp állapotát, a dekompilált bináris fájlt.

A Waves RIDE dApp felépítése, telepítése és tesztelése
Waves Explorer. Egy alkalmazás, amelyet most telepítettek.

Néhány tipp szörfdeszkához:

1. A testnet környezetben való teszteléshez használja:

surfboard test --env=testnet

Szerezzen tesztjelzőket

2. Ha látni szeretné a tranzakciók JSON-verzióit és azt, hogy a csomópont hogyan dolgozza fel azokat, futtassa a tesztet a -v paranccsal (azaz „bőbeszédű”):

surfboard test -v

Alkalmazások használata a Waves Keeperrel

1. Állítsa be a Waves Keepert, hogy működjön: http://localhost:6869

A Waves RIDE dApp felépítése, telepítése és tesztelése
A Waves Keeper beállítása helyi csomóponttal való együttműködésre

2. Importál titkos kifejezést tokenekkel a hálózathoz? Az egyszerűség kedvéért használja a csomópont kezdeti magját: waves private node seed with waves tokens. Cím: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Ön is futtathat egy kiszolgáló nélküli egyoldalas alkalmazást az npm használatával. Vagy lépjen a meglévőre: chrome-ext.wvservices.com/dapp-wallet.html

4. Írja be a pénztárca címét a próbaüzemből (fent aláhúzva) a dApp cím szövegmezőbe

5. Írjon be egy kis összeget a „Befizetés” mezőbe, és kattintson a gombra:

A Waves RIDE dApp felépítése, telepítése és tesztelése
A Waves Keeper engedélyt kér egy InvokeScriptTransaction aláírására 10 WAVES fizetésével.

6. Erősítse meg a tranzakciót:

A Waves RIDE dApp felépítése, telepítése és tesztelése
A tranzakció létrejön, és a hálózatra kerül. Most láthatja az azonosítóját

7. Figyelje a tranzakciót a Waves Explorer segítségével. Írja be az azonosítót a keresőmezőbe

A Waves RIDE dApp felépítése, telepítése és tesztelése

Következtetések és további információk

Megnéztük az egyszerű dApp-ok fejlesztésére, tesztelésére, telepítésére és használatára szolgáló eszközöket a Waves Platformon:

  • RIDE nyelv
  • VS kódszerkesztő
  • Waves Explorer
  • Szörfdeszka
  • Waves Keeper

Linkek azoknak, akik szeretnének továbbtanulni RIDE:

További példák
Online IDE példákkal
Hullámok dokumentációja
Fejlesztői csevegés a Telegramban
Waves és RIDE a stackoverflow-n
ÚJ! Online tanfolyamok a dApp-ok létrehozásáról a Waves platformon

Merüljön tovább a RIDE témában, és hozza létre első dApp-ját!

TL; DR: bit.ly/2YCFnwY

Forrás: will.com

Hozzászólás