Si të ndërtoni, vendosni dhe testoni valët RIDE dApp

Përshëndetje! Në këtë artikull do t'ju tregoj se si të shkruani dhe ekzekutoni një dApp të rregullt në një nyje Waves. Le të shohim mjetet, metodat e nevojshme dhe një shembull të zhvillimit.

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp

Skema e zhvillimit për dApps dhe aplikacionet e rregullta është pothuajse e njëjtë:

  • Ne shkruajmë kodin
  • Shkrimi i testimit të automatizuar
  • Nisja e aplikacionit
  • Duke testuar

Mjete

1. docker për të ekzekutuar nyjen dhe Waves Explorer

Nëse nuk dëshironi të filloni një nyje, mund ta kaloni këtë hap. Në fund të fundit, ekziston një rrjet testues dhe eksperimental. Por pa vendosur nyjen tuaj, procesi i testimit mund të zvarritet.

  • Do t'ju duhet vazhdimisht llogari të reja me argumente testimi. Rubineti i rrjetit testues transferon 10 VALËT çdo 10 minuta.
  • Koha mesatare e bllokimit në rrjetin e testimit është 1 minutë, në nyje - 15 sekonda. Kjo është veçanërisht e dukshme kur një transaksion kërkon konfirmime të shumta.
  • Memoria agresive është e mundur në nyjet e testimit publik.
  • Ato gjithashtu mund të jenë përkohësisht të padisponueshme për shkak të mirëmbajtjes.

Që tani e tutje unë do të supozoj se ju jeni duke punuar me nyjen tuaj.

2. Mjeti i linjës së komandës së surfboard

  • Shkarkoni dhe instaloni Node.js duke përdorur ppa, homebrew ose exe këtu: https://nodejs.org/en/download/.
  • Instaloni Surfboard, një mjet që ju lejon të kryeni teste në një nyje ekzistuese.

npm install -g @waves/surfboard

3. Shtojca Visual Studio Code

Ky hap është opsional nëse nuk jeni adhurues i IDE-ve dhe preferoni redaktuesit e tekstit. Të gjitha mjetet e nevojshme janë shërbimet e linjës së komandës. Nëse përdorni vim, kushtojini vëmendje shtojcës vim-ride.

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

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

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp

Zgjatja e shfletuesit Waves Keeper: https://wavesplatform.com/products-keeper

Done!

Filloni nyjen dhe Waves Explorer

1. Filloni nyjen:

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

Sigurohuni që nyja të jetë nisur nëpërmjet API-së REST në http://localhost:6869:

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Swagger REST API për nyjen

2. Filloni një shembull 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 një shfletues dhe shkoni te http://localhost:3000. Do të shihni se sa shpejt ndërtohet një zinxhir i zbrazët i nyjeve lokale.

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Waves Explorer shfaq një shembull të nyjeve lokale

Struktura RIDE dhe mjeti i sërfit

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

surfboard init

Komanda inicializon një direktori me strukturën e projektit, aplikacionet dhe testet "hello world". Nëse e hapni këtë dosje me VS Code, do të shihni:

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Surfboard.config.json

  • Nën dosjen ./ride/ do të gjeni një skedar të vetëm wallet.ride - drejtoria ku ndodhet kodi dApp. Ne do të analizojmë shkurtimisht dApps në bllokun e ardhshëm.
  • Nën dosjen ./test/ do të gjeni një skedar *.js. Testet ruhen këtu.
  • ./surfboard.config.json – skedari i konfigurimit për ekzekutimin e testeve.

Envs është një seksion i rëndësishëm. Çdo mjedis është konfiguruar kështu:

  • REST API pikë fundore e nyjës që do të përdoret për të nisur dApp dhe CHAIN_ID të rrjetit.
  • Një frazë sekrete për një llogari me argumente që do të jenë burimet e argumenteve tuaja të testimit.

Siç mund ta shihni, surfboard.config.json mbështet mjedise të shumta si parazgjedhje. Parazgjedhja është mjedisi lokal (çelësi defaultEnv është një parametër i ndryshueshëm).

Aplikacioni demonstrues i portofolit

Ky seksion nuk është një referencë për gjuhën RIDE. Përkundrazi, një vështrim në aplikacionin që ne vendosim dhe testojmë për të kuptuar më mirë se çfarë po ndodh në blockchain.

Le të shohim një aplikacion të thjeshtë demonstrues të Portofolit. Çdokush mund të dërgojë token në një adresë dApp. Ju mund të tërhiqni vetëm VALËT tuaja. Dy funksione @Callable janë të disponueshme përmes InvokeScriptTransaction:

  • deposit()e cila kërkon një pagesë të bashkangjitur në WAVES
  • withdraw(amount: Int)e cila kthen argumentet

Gjatë gjithë ciklit të jetës së dApp, struktura (adresa → shuma) do të ruhet:

veprim
Gjendja që rezulton

fillestar
bosh

Alice depoziton 5 VALËT
Alice-adresa → 500000000

Depozitat e Bobit 2 VALËT

Alice-adresa → 500000000
adresa bob → 200000000

Bob tërheq 7 VALËT
MOHOHET!

Alice tërheq 4 VALËT
Alice-adresa → 100000000
adresa bob → 200000000

Këtu është 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.

Shtojca VSCode mbështet përpilimin e vazhdueshëm gjatë redaktimit të një skedari. Prandaj, gjithmonë mund të monitoroni gabimet në skedën PROBLEM.

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Nëse dëshironi të përdorni një redaktues tjetër teksti gjatë përpilimit të skedarit, përdorni

surfboard compile ride/wallet.ride

Kjo do të nxjerrë një seri kodesh RIDE të përpiluar nga base64.

Skript testimi për "wallet.ride"

Le të shohim skedar testimi. Mundësuar nga korniza Mocha e JavaScript. Ekziston një funksion "Para" dhe tre teste:

  • "Para" financon llogari të shumta përmes MassTransferTransaction, përpilon skriptin dhe e vendos atë në blockchain.
  • "Mund të depozitoj" dërgon një Transaksion InvokeScript në rrjet, duke aktivizuar funksionin e depozitës() për secilën nga dy llogaritë.
  • Testet "Nuk mund të tërhiqni më shumë se sa është depozituar" që askush nuk mund të vjedhë tokenat e njerëzve të tjerë.
  • "Mund të depozitojë" kontrolle që tërheqjet janë përpunuar në mënyrë korrekte.

Kryeni teste nga Surfboard dhe analizoni rezultatet në Waves Explorer

Për të kryer testin, vraponi

surfboard test

Nëse keni shumë skripta (për shembull, keni nevojë për një skript të veçantë vendosjeje), mund të ekzekutoni

surfboard test my-scenario.js

Surfboard do të mbledhë skedarët e testimit në dosjen ./test/ dhe do të ekzekutojë skriptin në nyjen që është konfiguruar në surfboard.config.json. Pas disa sekondash do të shihni diçka të tillë:

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)

Hora! Testet e kaluara. Tani le të hedhim një vështrim se çfarë ndodh kur përdorni Waves Explorer: shikoni blloqet ose ngjisni një nga adresat e mësipërme në kërkim (për shembull, adresën përkatëse wallet#. Aty mund të gjeni historinë e transaksioneve, statusin dApp, skedarin binar të dekompiluar.

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Eksploruesi i valëve. Një aplikacion që sapo është vendosur.

Disa këshilla për dërrasën e sërfit:

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

surfboard test --env=testnet

Merrni argumentet e provës

2. Nëse dëshironi të shihni versionet JSON të transaksioneve dhe mënyrën se si ato përpunohen nga nyja, ekzekutoni testin me -v (do të thotë 'me fjalë'):

surfboard test -v

Përdorimi i aplikacioneve me Waves Keeper

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

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Vendosja e Waves Keeper për të punuar me një nyje lokale

2. Importoni frazë sekrete me argumente për rrjetin? Për thjeshtësi, përdorni farën fillestare të nyjës suaj: waves private node seed with waves tokens. Adresë: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Mund të ekzekutoni vetë një aplikacion me një faqe pa server duke përdorur npm. Ose shkoni te ai ekzistues: chrome-ext.wvservices.com/dapp-wallet.html

4. Futni adresën e portofolit nga testi (i nënvizuar më sipër) në kutinë e tekstit të adresës dApp

5. Fusni një shumë të vogël në fushën "Depozita" dhe klikoni butonin:

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Waves Keeper kërkon leje për të nënshkruar një Transaksion InvokeScript me pagesë prej 10 WAVES.

6. Konfirmoni transaksionin:

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp
Transaksioni krijohet dhe transmetohet në rrjet. Tani mund ta shihni ID-në e saj

7. Monitoroni transaksionin duke përdorur Waves Explorer. Futni ID në fushën e kërkimit

Si të ndërtoni, vendosni dhe testoni valët RIDE dApp

Përfundime dhe informacione shtesë

Ne shikuam mjetet për zhvillimin, testimin, vendosjen dhe përdorimin e aplikacioneve të thjeshta në platformën Waves:

  • gjuha RIDE
  • Redaktori i kodit VS
  • Eksploruesi i valëve
  • sërf
  • Mbajtës i valëve

Lidhje për ata që duan të vazhdojnë të mësojnë RIDE:

Më shumë shembuj
IDE në internet me shembuj
Dokumentacioni i Valëve
Biseda e zhvilluesve në Telegram
Valët dhe RIDE në stackoverflow
I RI! Kurse online për krijimin e dApps në platformën Waves

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

TL; DR: bit.ly/2YCFnwY

Burimi: www.habr.com

Shto një koment