Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE

Përshëndetje! Në këtë artikull, do të tregoj se si të shkruani dhe të nisni një dApp në nodën Waves. Do të shqyrtojmë mjetet e nevojshme, metodat dhe një shembull zhvillimi.

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE

Skema e zhvillimit të dApps dhe aplikacioneve të zakonshme nuk ndryshon shumë:

  • ShkruajmĂ« kodin
  • KrijojmĂ« testimin automatizuar
  • Nisim aplikacionin
  • TestojmĂ«

Mjetet

1. docker për të nisur nodën dhe Waves Explorer

Nëse nuk dëshironi të nisni nodën, mund ta kaloni këtë hap. Sepse ka rrjetin testues dhe atë eksperimental. Por pa vendosjen e nodës suaj, procesi i testimit mund të zgjasë.

  • Do t'ju nevojiten vazhdimisht llogari tĂ« reja me tokene testuese. Kranin e rrjetit testues e transferon 10 WAVES çdo 10 minuta.
  • Koha mesatare e blloqeve nĂ« rrjetin testues Ă«shtĂ« 1 minutĂ«, ndĂ«rsa nĂ« nodĂ« Ă«shtĂ« 15 sekonda. Kjo ndihet veçanĂ«risht kur njĂ« transaksion kĂ«rkon disa konfirmime.
  • NĂ« nodat testuese publike, Ă«shtĂ« e mundur njĂ« ruajtje agresive e caches.
  • Gjithashtu, ato mund tĂ« jenĂ« pĂ«rkohĂ«sisht tĂ« paqasshme pĂ«r shkak tĂ« mirĂ«mbajtjes teknike.

Më tej do të konsideroj se po punoni me nodën tuaj.

2. Mjeti i komandave Surfboard

  • Shkarkoni dhe instaloni Node.js nĂ«pĂ«rmjet ppa, homebrew ose exe kĂ«tu: https://nodejs.org/en/download/.
  • Instaloni Surfboard – mjetin qĂ« do tĂ« lehtĂ«sojĂ« ekzekutimin e testeve nĂ« nodĂ«n ekzistuese.

npm install -g @waves/surfboard

3. Shtesa për Visual Studio Code

Hapi është opsional, nëse nuk jeni adhurues i IDE-ve dhe preferoni redaktorët e tekstit. Të gjithë mjetet e nevojshme janë utilitarë të komandave. Nëse përdorni vim, kushtoni vëmendje shtesës vim-ride.

Shkarkoni dhe instaloni Visual Studio Code: https://code.visualstudio.com/

Hapni VS Code dhe instaloni shtesën waves-ride:

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE

Shtesë shfletuesi Waves Keeper: https://wavesplatform.com/products-keeper

Gati!

Nisni nodën dhe Waves Explorer

1. Nisni nodën:

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

Sigurohuni që nodën të nisë përmes REST API në http://localhost:6869:

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Ndërfaqja Swagger REST API për nodën

2. Nisni një instancë të Waves Explorer:

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

Hapni shfletuesin dhe shkoni në http://localhost:3000. Do të shihni se sa shpejt ndërtoshet një zinxhir bosh në nodën lokale.

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Waves Explorer tregon një instancë të nodës lokale

Struktura RIDE dhe mjeti Surfboard

Krijoni një direktor të zbrazët dhe ekzekutoni komandën

surfboard init

Komanda inicializon direktorine me strukturën e projektit, aplikacionin tip «hello world» dhe testet. Nëse e hapni këtë dosje me VS Code, do të shihni:

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Surfboard.config.json

  • NĂ«n dosjen ./ride/ do tĂ« gjeni njĂ« skedar tĂ« vetĂ«m wallet.ride – direktorja ku gjendet kodi i dApp. Ne do ta analizojmĂ« shkurtimisht dApp nĂ« blokun e ardhshĂ«m.
  • NĂ«n dosjen .\/test\/ do tĂ« gjeni skedarin *.js. KĂ«tu ruhen testet.
  • .\/surfboard.config.json – skedari i konfigurimit pĂ«r ekzekutimin e testeve.

Envs – njĂ« seksion i rĂ«ndĂ«sishĂ«m. Çdo mjedis konfigurohet kĂ«shtu:

  • Pika e fundit REST API e nodit, e cila do tĂ« pĂ«rdoret pĂ«r tĂ« ekzekutuar dApp dhe CHAIN_ID e rrjetit.
  • Fraza sekrete pĂ«r llogarinĂ« me tokenat qĂ« do tĂ« jenĂ« burime tĂ« tokenave tĂ« testit tuaj.

Siç e shihni, surfboard.config.json mbĂ«shtet disa mjedise nga tĂ« dhĂ«nat. Mjedisi i paracaktuar Ă«shtĂ« lokal (çelĂ«si defaultEnv – parametri qĂ« mund tĂ« ndryshohet).

Aplikacioni Wallet-demo

Ky seksion nuk është një manual për gjuhën RIDE. Më tepër, është një shikim në aplikacionin që po e implementojmë dhe testojmë për të kuptuar më mirë se çfarë po ndodh në blockchain.

Le të shqyrtojmë një aplikacion të thjeshtë Wallet-demo. Secili mund të dërgojë tokena në adresën e dApp. Mund të tërheqë vetëm WAVES të tijat. Dy funksione @Callable janë të disponueshme përmes InvokeScriptTransaction:

  • deposit(), i cili kĂ«rkon njĂ« pagesĂ« tĂ« lidhur nĂ« WAVES
  • withdraw(amount: Int), i cili kthen tokenat

GjatĂ« gjithĂ« ciklit tĂ« jetĂ«s sĂ« dApp, struktura (adresa → sasia) do tĂ« mbahet:

Veprimi
Gjendja e rezultuar

fill
e zbrazët

Alice depoziton 5 WAVES
adresa-alice → 500000000

Bob depoziton 2 WAVES

adresa-alice → 500000000
adresa-bob → 200000000

Bob tërheq 7 WAVES
REFUZUAR!

Alice tërheq 4 WAVES
adresa-alice → 100000000
adresa-bob → 200000000

Ja kodi për të kuptuar plotësisht situatën:

# 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

Shembulli i kodit mund të gjendet gjithashtu në GitHub.

Plugin-i VSCode mbështet kompilimin e vazhdueshëm gjatë redaktimit të skedarit. Prandaj, gjithmonë mund të ndihmoni në monitorimin e gabimeve në seksionin PROBLEMS.

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Nëse dëshironi të përdorni një editor tjetër teksti gjatë kompilimit të skedarit, përdorni

surfboard compile ride\/wallet.ride

Kjo do të prodhojë një sërë të dhënash base64 të kodit të kompozuar RIDE.

Skenari i testit pĂ«r ‘wallet.ride’

Le tĂ« shohim skedarin e testit. Funksionon nĂ« kuadrin JavaScript’s Mocha. Ka njĂ« funksion "Before" dhe tre teste:

  • "Before" financoin disa llogari pĂ«rmes MassTransferTransaction, kompilon skenarin dhe e vendos atĂ« nĂ« blockchain.
  • "Can deposit" dĂ«rgon nĂ« rrjet InvokeScriptTransaction, duke aktivizuar funksionin deposit() pĂ«r secilĂ«n nga dy llogaritĂ«.
  • "Can’t withdraw more than was deposited" teston qĂ« askush nuk mund tĂ« vidhet tokenat e tĂ« tjerĂ«ve.
  • "Can deposit" kontrollon se tĂ«rheqjet pĂ«rpunohen saktĂ«.

Ekzekutimi i testeve me Surfboard dhe analizimi i rezultateve në Waves Explorer

Për të ekzekutuar testin, kryeni

surfboard test

Nëse keni disa skenarë (p.sh., nevojitet një skenar i veçantë për implementim), mund të ekzekutoni

surfboard test my-scenario.js

Surfboard do të mbledhë skedarët provues në dosjen ./test/ dhe do të ekzekutojë skenarin në nodën e cila është e konfiguruar në surfboard.config.json. Pas disa sekondash do të shihni diçka të tillë:

wallet test suite
Krijimi i llogarive me nonce: ce8d86ee
Llogaria e krijuar: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Llogaria e krijuar: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Llogaria e krijuar: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Llogaritë janë financuar me sukses
Skripta është vendosur
   √ Mund tĂ« depozitohet (4385ms)
   √ Nuk mund tĂ« tĂ«rhiqet mĂ« shumĂ« se sa Ă«shtĂ« depozituar
   √ Mund tĂ« tĂ«rhiqet (108ms)
3 kalime (15s)

Hurrah! Testet kaluan. Tani le të shohim çfarë ndodh gjatë përdorimit të Waves Explorer: le të shqyrtojmë blloqet ose të futim një nga adresat e mësipërme në kërkese (p.sh., përkatësisht wallet#. Aty mund të gjeni historinë e transaksioneve, gjendjen e dApp, skedarin binar të dekompiluara.

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Waves Explorer. Aplikacioni që sapo është vendosur.

Disa këshilla për Surfboard:

1. Për të testuar në ambientin testnet, përdorni:

surfboard test --env=testnet

Merrni tokenat testues

2. Nëse dëshironi të shihni versionet JSON të transaksioneve dhe si përpunohen nga nodi, ekzekutoni testin me -v (duke nënkuptuar 'verbose'):

surfboard test -v

Përdorimi i aplikacioneve me Waves Keeper

1. Konfiguroni Waves Keeper për të punuar: http://localhost:6869

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Konfigurimi i Waves Keeper për të punuar me nodën lokale

2. Importoni frazën sekrete me tokenat për rrjetin? Për lehtësi, përdorni seed fillestar të nodës tuaj: waves private node seed with waves tokens. Adresa: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Mund të ekzekutoni një aplikacion pa server njëfaqësh vetë, duke përdorur npm. Ose shkoni në një ekzistues: chrome-ext.wvservices.com/dapp-wallet.html

4. Futni adresën e portofolit nga testimi i inicializimit (e theksuar më lart) në fushën e adresës së dApp

5. Futni një shumë të vogël në fushën 'Depozitë' dhe klikoni butonin:

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Waves Keeper kërkon lejen për të nënshkruar InvokeScriptTransaction me një pagesë prej 10 WAVES.

6. Konfirmoni transaksionin:

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE
Transaksioni është krijuar dhe po transmetohet në rrjet. Tani shihet ID e tij

7. Vini re tranzaksionin me ndihmën e Waves Explorer. Futni ID-në në fushën e kërkimit

Si të ndërtojmë, zhvillojmë dhe testojmë dApp Waves RIDE

Përfundimet dhe informacionet shtesë

Ne shqyrtuam mjetet për zhvillimin, testimin, vendosjen dhe përdorimin e dApps të thjeshta në Waves Platform:

  • Gjuha RIDE
  • Redaktori VS Code
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Lidhje për ata që dëshirojnë të vazhdojnë të studiojnë RIDE:

Më shumë shembuj
IDE online me shembuj
Dokumentacioni i Waves
Chat për zhvilluesit në Telegram
Waves dhe RIDE në stackoverflow
E re! Kurse online për ndërtimin e dApps në Waves Platform

Vazhdoni të thelloheni në temën RIDE dhe krijoni dApp-in tuaj të parë!

TL;DR: bit.ly/2YCFnwY

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster