Kif tibni, tiskjera u tittestja Waves RIDE dApp

Bongu! F'dan l-artikolu ser nuruk kif tikteb u tmexxi dApp regolari fuq node Waves. Ejja nħarsu lejn l-għodda meħtieġa, il-metodi u eżempju ta 'żvilupp.

Kif tibni, tiskjera u tittestja Waves RIDE dApp

L-iskema ta' żvilupp għal dApps u applikazzjonijiet regolari hija kważi l-istess:

  • Aħna niktbu l-kodiċi
  • Kitba ta 'ttestjar awtomatizzat
  • Tnedija tal-applikazzjoni
  • Ittestjar

Għodod

1. docker biex tmexxi n-node u Waves Explorer

Jekk ma tridx tibda node, tista' taqbeż dan il-pass. Wara kollox, hemm test u netwerk sperimentali. Iżda mingħajr ma tuża n-nodu tiegħek stess, il-proċess tal-ittestjar jista 'jkaxkar.

  • Int ser ikollok bżonn kontinwament kontijiet ġodda b'tokens tat-test. Il-faucet tan-netwerk tat-test jittrasferixxi 10 WAVES kull 10 minuti.
  • Il-ħin medju tal-blokk fin-netwerk tat-test huwa ta 'minuta 1, fin-nodu - 15-il sekonda. Dan huwa speċjalment notevoli meta tranżazzjoni teħtieġ konfermi multipli.
  • Caching aggressiv huwa possibbli fuq nodi tat-test pubbliċi.
  • Jistgħu jkunu wkoll temporanjament mhux disponibbli minħabba manutenzjoni.

Minn issa 'l quddiem ser nassumi li qed taħdem man-node tiegħek stess.

2. Għodda tal-Linja tal-Kmand tal-Bord tas-Surfboard

  • Niżżel u installa Node.js billi tuża ppa, homebrew jew exe hawn: https://nodejs.org/en/download/.
  • Installa Surfboard, għodda li tippermettilek tmexxi testijiet fuq node eżistenti.

npm install -g @waves/surfboard

3. plugin Visual Studio Code

Dan il-pass huwa fakultattiv jekk m'intix fan tal-IDEs u tippreferi edituri tat-test. L-għodda kollha meħtieġa huma utilitajiet tal-linja tal-kmand. Jekk tuża vim, oqgħod attent għall-plugin vim-ride.

Niżżel u installa Visual Studio Code: https://code.visualstudio.com/

Iftaħ VS Code u installa l-plugin waves-ride:

Kif tibni, tiskjera u tittestja Waves RIDE dApp

Estensjoni tal-brawżer Waves Keeper: https://wavesplatform.com/products-keeper

Magħmul!

Tnedija l-node u Waves Explorer

1. Ibda n-node:

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

Kun żgur li n-node jiġi mniedi permezz tal-API REST in http://localhost:6869:

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Swagger REST API għan-node

2. Ibda eżempju ta' Waves Explorer:

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

Iftaħ browser u mur fuq http://localhost:3000. Se tara kemm jinbena malajr ċirkwit vojt ta 'nodi lokali.

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Waves Explorer juri istanza ta' nodu lokali

Struttura RIDE u għodda tas-Surfboard

Oħloq direttorju vojt u mexxi l-kmand fih

surfboard init

Il-kmand jinizjalizza direttorju bl-istruttura tal-proġett, applikazzjonijiet u testijiet "hello world". Jekk tiftaħ dan il-folder bil-VS Code, se tara:

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Surfboard.config.json

  • Taħt il-folder ./ride/ issib fajl wieħed wallet.ride - id-direttorju fejn jinsab il-kodiċi dApp. Aħna se nanalizzaw fil-qosor dApps fil-blokk li jmiss.
  • Taħt il-folder ./test/ issib fajl *.js. It-testijiet huma maħżuna hawn.
  • ./surfboard.config.json – fajl tal-konfigurazzjoni għat-twettiq tat-testijiet.

Envs hija taqsima importanti. Kull ambjent huwa kkonfigurat hekk:

  • REST API endpoint tan-node li se jintuża biex iniedi d-dApp u CHAIN_ID tan-netwerk.
  • Frażi sigrieta għal kont b'tokens li se jkunu s-sorsi tat-tokens tat-test tiegħek.

Kif tistgħu taraw, surfboard.config.json jappoġġja ambjenti multipli awtomatikament. Il-default huwa l-ambjent lokali (iċ-ċavetta defaultEnv hija parametru li jista 'jinbidel).

Wallet-demo applikazzjoni

Din it-taqsima mhix referenza għal-lingwa RIDE. Pjuttost, ħarsa lejn l-applikazzjoni li niskjeraw u nittestjaw biex nifhmu aħjar dak li qed jiġri fil-blockchain.

Ejja nħarsu lejn applikazzjoni sempliċi Wallet-demo. Kulħadd jista' jibgħat tokens f'indirizz dApp. Tista' biss tirtira l-WAVES tiegħek. Żewġ funzjonijiet @Callable huma disponibbli permezz ta' InvokeScriptTransaction:

  • deposit()li teħtieġ ħlas anness f’WAVES
  • withdraw(amount: Int)li jirritorna tokens

Matul iċ-ċiklu tal-ħajja tad-dApp, l-istruttura (indirizz → ammont) se tinżamm:

azzjoni
Stat li jirriżulta

inizjali
vojta

Alice tiddepożita 5 WAVES
alice-indirizz → 500000000

Bob jiddepożita 2 WAVES

alice-indirizz → 500000000
bob-indirizz → 200000000

Bob jirtira 7 WAVES
MIĊHAĦDA!

Alice tirtira 4 WAVES
alice-indirizz → 100000000
bob-indirizz → 200000000

Hawn hu l-kodiċi biex tifhem bis-sħiħ is-sitwazzjoni:

# 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

Kodiċi tal-kampjun jista 'jinstab ukoll fuq GitHub.

Il-plugin VSCode jappoġġja kumpilazzjoni kontinwa waqt li jeditja fajl. Għalhekk, tista' dejjem tissorvelja l-iżbalji fit-tab PROBLEMI.

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Jekk trid tuża editur tat-test differenti meta tikkumpila l-fajl, uża

surfboard compile ride/wallet.ride

Dan se joħroġ serje ta 'base64 kompilati RIDE kodiċi.

Iskript tat-test għal 'wallet.ride'

Ejja nħarsu lejn fajl tat-test. Mħaddma mill-qafas Mocha ta' JavaScript. Hemm funzjoni "Qabel" u tliet testijiet:

  • "Qabel" tiffinanzja kontijiet multipli permezz ta 'MassTransferTransaction, tikkompila l-iskript u tiskjeraha fil-blockchain.
  • "Jista jiddepożita" jibgħat InvokeScriptTransaction lin-netwerk, billi tattiva l-funzjoni ta' depożitu () għal kull wieħed miż-żewġ kontijiet.
  • “Ma tistax tirtira aktar milli kien iddepożitat” testijiet li ħadd ma jista’ jisraq it-tokens ta’ ħaddieħor.
  • “Jista’ jiddepożita” jiċċekkja li l-irtirar jiġi pproċessat b’mod korrett.

Mexxi testijiet minn Surfboard u analizza r-riżultati fil-Waves Explorer

Biex tmexxi t-test, run

surfboard test

Jekk għandek skripts multipli (per eżempju, għandek bżonn skript ta 'skjerament separat), tista' taħdem

surfboard test my-scenario.js

Surfboard se jiġbor il-fajls tat-test fil-folder ./test/ u jmexxi l-iskript fuq in-node li huwa kkonfigurat f'surfboard.config.json. Wara ftit sekondi tara xi ħaġa bħal din:

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)

Ħura! It-testijiet għaddew. Issa ejja nagħtu ħarsa lejn x'jiġri meta tuża Waves Explorer: ħares lejn il-blokki jew waħħal wieħed mill-indirizzi hawn fuq fit-tfittxija (per eżempju, il-korrispondenti wallet#. Hemmhekk tista 'ssib l-istorja tat-tranżazzjonijiet, l-istatus dApp, fajl binarju dekompilat.

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Waves Explorer. Applikazzjoni li għadha kif ġiet skjerata.

Xi Tips Surfboard:

1. Biex tittestja fl-ambjent tat-testnet, uża:

surfboard test --env=testnet

Ikseb tokens tat-test

2. Jekk trid tara l-verżjonijiet JSON tat-tranżazzjonijiet u kif jiġu pproċessati min-node, agħmel it-test b'-v (ifisser 'verbose'):

surfboard test -v

L-użu ta' apps ma' Waves Keeper

1. Waħħal Waves Keeper biex jaħdem: http://localhost:6869

Kif tibni, tiskjera u tittestja Waves RIDE dApp
It-twaqqif ta' Waves Keeper biex jaħdem ma' node lokali

2. Importa frażi sigrieta b'tokens għan-netwerk? Għal sempliċità, uża ż-żerriegħa inizjali tan-node tiegħek: waves private node seed with waves tokens. Indirizz: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Tista 'tmexxi applikazzjoni ta' paġna waħda mingħajr server lilek innifsek billi tuża npm. Jew mur għal dik eżistenti: chrome-ext.wvservices.com/dapp-wallet.html

4. Daħħal l-indirizz tal-kartiera mill-ġirja tat-test (ssottolinjat hawn fuq) fil-kaxxa tat-test tal-indirizz tad-dApp

5. Daħħal ammont żgħir fil-qasam "Depożitu" u kklikkja l-buttuna:

Kif tibni, tiskjera u tittestja Waves RIDE dApp
Waves Keeper jitlob permess biex jiffirma InvokeScriptTransaction bi ħlas ta' 10 WAVES.

6. Ikkonferma t-tranżazzjoni:

Kif tibni, tiskjera u tittestja Waves RIDE dApp
It-tranżazzjoni hija maħluqa u mxandra lin-netwerk. Issa tista' tara l-ID tagħha

7. Tissorvelja t-tranżazzjoni billi tuża Waves Explorer. Daħħal l-ID fil-qasam tat-tfittxija

Kif tibni, tiskjera u tittestja Waves RIDE dApp

Konklużjonijiet u informazzjoni addizzjonali

Ħarsa lejn l-għodod għall-iżvilupp, l-ittestjar, l-iskjerament u l-użu ta’ dApps sempliċi fuq il-Pjattaforma Waves:

  • lingwa RIDE
  • Editur tal-Kodiċi VS
  • Waves Explorer
  • bord tas-surf
  • Waves Keeper

Links għal dawk li jridu jkomplu jitgħallmu RIDE:

Aktar eżempji
IDE onlajn b'eżempji
Waves Dokumentazzjoni
Chat tal-iżviluppatur f'Telegram
Waves u RIDE fuq stackoverflow
ĠODDA! Korsijiet onlajn dwar il-ħolqien ta' dApps fuq il-Pjattaforma Waves

Kompli tgħaddi fis-suġġett RIDE u oħloq l-ewwel dApp tiegħek!

TL; DR: bit.ly/2YCFnwY

Sors: www.habr.com

Żid kumment