Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp

Bonjou! Nan atik sa a mwen pral montre w ki jan yo ekri ak kouri yon dApp regilye sou yon ne Waves. Ann gade nan zouti ki nesesè yo, metòd ak yon egzanp devlopman.

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp

Konplo devlopman pou dApps ak aplikasyon regilye se prèske menm bagay la:

  • Ekri kòd
  • Ekri tès otomatik
  • Lanse aplikasyon an
  • Tès

Zouti

1. docker kouri ne ak Waves Explorer

Si ou pa vle kòmanse yon ne, ou ka sote etap sa a. Apre yo tout, gen yon tès ak rezo eksperimantal. Men, san yo pa deplwaye ne pwòp ou a, pwosesis tès la ka trennen sou.

  • Ou pral toujou bezwen nouvo kont ak siy tès yo. Wobinèt rezo tès la transfere 10 VAG chak 10 minit.
  • Tan an mwayèn blòk nan rezo tès la se 1 minit, nan ne a - 15 segonn. Sa a se espesyalman aparan lè yon tranzaksyon mande pou plizyè konfimasyon.
  • Cache agresif posib sou nœuds tès piblik yo.
  • Yo ka pa disponib tou tanporèman akòz antretyen.

Depi koulye a mwen pral asime ke w ap travay ak ne pwòp ou a.

2. Surfboard Kòmand Liy Zouti

  • Telechaje epi enstale Node.js lè l sèvi avèk ppa, homebrew oswa ègzekutabl isit la: https://nodejs.org/en/download/.
  • Enstale Surfboard, yon zouti ki pèmèt ou fè tès sou yon ne ki egziste deja.

npm install -g @waves/surfboard

3. Visual Studio kòd plugin

Etap sa a opsyonèl si ou pa fanatik IDE epi ou prefere editè tèks. Tout zouti ki nesesè yo se sèvis piblik liy kòmand. Si w itilize vim, peye atansyon sou plugin la vim-woulib.

Telechaje epi enstale Kòd Visual Studio: https://code.visualstudio.com/

Louvri VS Code epi enstale plugin waves-ride la:

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp

Ekstansyon navigatè Waves Keeper: https://wavesplatform.com/products-keeper

Fè!

Kòmanse ne ak Waves Explorer

1. Kòmanse ne:

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

Asire w ke ne la lanse atravè API REST nan http://localhost:6869:

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Swagger REST API pou ne

2. Kòmanse yon egzanp Waves Explorer:

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

Louvri yon navigatè epi ale nan http://localhost:3000. Ou pral wè ki jan vit bati yon sikwi vid lokal ne.

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Waves Explorer montre yon egzanp ne lokal

RIDE estrikti ak zouti Surfboard

Kreye yon anyè vid epi kouri lòd la nan li

surfboard init

Kòmandman an inisyalize yon anyè ak estrikti pwojè a, aplikasyon "bonjou mond" ak tès yo. Si ou louvri katab sa a ak VS Code, ou pral wè:

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Surfboard.config.json

  • Anba katab la ./ride/ w ap jwenn yon sèl dosye wallet.ride - anyè kote kòd dApp la ye. Nou pral yon ti tan analize dApps nan pwochen blòk la.
  • Anba katab ./test/ w ap jwenn yon fichye *.js. Tès yo estoke isit la.
  • ./surfboard.config.json – fichye konfigirasyon pou fè tès yo.

Envs se yon seksyon enpòtan. Chak anviwònman konfigirasyon konsa:

  • Pwen final REST API nan ne ki pral itilize pou lanse dApp ak CHAIN_ID rezo a.
  • Yon fraz sekrè pou yon kont ak siy ki pral sous yo nan siy tès ou yo.

Kòm ou ka wè, surfboard.config.json sipòte plizyè anviwònman pa default. Defo a se anviwònman lokal la (kle defaultEnv la se yon paramèt ki ka chanje).

Aplikasyon pou bous-demo

Seksyon sa a pa yon referans a lang RIDE. Olye de sa, yon gade nan aplikasyon an ke nou deplwaye ak teste pi byen konprann sa k ap pase nan blockchain la.

Ann gade nan yon aplikasyon senp bous-demo. Nenpòt moun ka voye jeton nan yon adrès dApp. Ou ka sèlman retire WAVES ou yo. De fonksyon @Callable disponib atravè InvokeScriptTransaction:

  • deposit()ki mande yon peman tache nan WAVES
  • withdraw(amount: Int)ki retounen marqueur

Pandan tout sik lavi dApp la, estrikti a (adrès → kantite lajan) yo pral konsève:

Aksyon
Eta ki lakòz

premye
vid

Alice depoze 5 VAG
alice-address → 500000000

Bob depoze 2 VAG

alice-address → 500000000
bob-adrès → 200000000

Bob retire 7 VAG
NYE!

Alice retire 4 VAG
alice-address → 100000000
bob-adrès → 200000000

Isit la se kòd la konplètman konprann sitiyasyon an:

# 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

Ou ka jwenn echantiyon kòd tou nan GitHub.

Plugin VSCode a sipòte konpilasyon kontinyèl pandan y ap modifye yon dosye. Se poutèt sa, ou ka toujou kontwole erè nan tab la PWOBLÈM.

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Si ou vle sèvi ak yon lòt editè tèks lè w ap konpile dosye a, sèvi ak

surfboard compile ride/wallet.ride

Sa a pral bay yon seri kòd RIDE konpile base64.

Script tès pou 'wallet.ride'

Ann gade dosye tès la. Powered by moka fondasyon JavaScript a. Gen yon fonksyon "Anvan" ak twa tès:

  • "Anvan" finanse plizyè kont atravè MassTransferTransaction, konpile script la epi deplwaye li nan blockchain la.
  • "Ka depoze" voye yon Tranzaksyon InvokeScript nan rezo a, aktive fonksyon an depo () pou chak nan de kont yo.
  • "Pa ka retire plis pase sa te depoze" tès ke pèsonn pa ka vòlè siy lòt moun.
  • "Ka depoze" chèk ke retrè yo trete kòrèkteman.

Kouri tès nan Surfboard epi analize rezilta yo nan Waves Explorer

Pou kouri tès la, kouri

surfboard test

Si ou gen plizyè script (pa egzanp, ou bezwen yon script deplwaman separe), ou ka kouri

surfboard test my-scenario.js

Surfboard pral kolekte dosye tès yo nan katab la ./test/ epi kouri script la sou ne ki configuré nan surfboard.config.json. Apre kèk segonn ou pral wè yon bagay tankou sa a:

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)

Houra! Tès yo te pase. Koulye a, ann gade sa k ap pase lè w ap itilize Waves Explorer: gade blòk yo oswa kole youn nan adrès ki anwo yo nan rechèch la (pa egzanp, korespondan an. wallet#. Gen ou ka jwenn istwa tranzaksyon, estati dApp, dekonpile dosye binè.

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Onn Explorer. Yon aplikasyon ki fèk deplwaye.

Kèk Konsèy Surfboard:

1. Pou teste nan anviwònman testnet la, sèvi ak:

surfboard test --env=testnet

Jwenn siy tès yo

2. Si ou vle wè vèsyon JSON yo nan tranzaksyon yo ak fason yo trete pa ne la, kouri tès la ak -v (sa vle di 'verbose'):

surfboard test -v

Sèvi ak apps ak Waves Keeper

1. Mete kanpe Waves Keeper pou travay: http://localhost:6869

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Mete kanpe Waves Keeper pou travay avèk yon ne lokal

2. Enpòte fraz sekrè ak marqueur pou rezo a? Pou senplisite, sèvi ak premye grenn nan ne ou: waves private node seed with waves tokens. Adrès: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Ou ka kouri yon aplikasyon yon sèl paj sèvè tèt ou lè l sèvi avèk npm. Oswa ale nan youn ki deja egziste a: chrome-ext.wvservices.com/dapp-wallet.html

4. Antre adrès bous ki soti nan tès la (souliye pi wo a) nan bwat tèks adrès dApp la

5. Antre yon ti kantite lajan nan jaden an "Depo" epi klike sou bouton an:

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Waves Keeper mande pèmisyon pou l siyen yon Tranzaksyon InvokeScript ak peman 10 WAVES.

6. Konfime tranzaksyon an:

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp
Se tranzaksyon an kreye epi difize nan rezo a. Koulye a, ou ka wè ID li

7. Siveye tranzaksyon an lè l sèvi avèk Waves Explorer. Antre ID nan jaden rechèch la

Kijan pou konstwi, deplwaye ak teste Waves RIDE dApp

Konklizyon ak enfòmasyon adisyonèl

Nou te gade zouti pou devlope, teste, deplwaye ak itilize dApps senp sou Platfòm Waves la:

  • RIDE lang
  • VS Kòd Editè
  • Onn Explorer
  • Planch
  • Waves Keeper

Lyen pou moun ki vle kontinye aprann RIDE:

Plis egzanp
IDE sou entènèt ak egzanp
Dokimantasyon Waves
Chat devlopè nan Telegram
Vag ak RIDE sou stackoverflow
NOUVO! Kou sou entènèt sou kreye dApps sou Platfòm Waves

Kontinye plonje nan sijè RIDE la epi kreye premye dApp ou!

TL; DR: bit.ly/2YCFnwY

Sous: www.habr.com

Add nouvo kòmantè