Nola eraiki, zabaldu eta probatu Waves RIDE dApp

Kaixo! Artikulu honetan Waves nodo batean dApp arrunt bat nola idatzi eta exekutatu erakutsiko dizut. Ikus ditzagun beharrezko tresnak, metodoak eta garapenaren adibide bat.

Nola eraiki, zabaldu eta probatu Waves RIDE dApp

dApps eta ohiko aplikazioen garapen-eskema ia berdina da:

  • Kodea idaztea
  • Proba automatizatuak idaztea
  • Aplikazioa martxan jartzea
  • Probak

Tresnak

1. docker nodoa eta Waves Explorer exekutatzeko

Nodo bat hasi nahi ez baduzu, urrats hau salta dezakezu. Azken finean, proba eta sare esperimentala dago. Baina zure nodoa zabaldu gabe, proba prozesua luzatu egin daiteke.

  • Etengabe beharko dituzu proba-tokenekin kontu berriak. Proba sareko txorrotak 10 OLATU transferitzen ditu 10 minuturo.
  • Batez besteko bloke-denbora proba sarean minutu 1 da, nodoan - 15 segundo. Hau bereziki nabarmena da transakzio batek hainbat baieztapen behar dituenean.
  • Proba nodo publikoetan caching erasokorra posible da.
  • Baliteke ere aldi baterako erabilgarri ez egotea mantentze-lanagatik.

Hemendik aurrera zure nodoarekin lanean ari zarela suposatuko dut.

2. Surf-taulen komando lerroko tresna

  • Deskargatu eta instalatu Node.js ppa, homebrew edo exe erabiliz hemen: https://nodejs.org/en/download/.
  • Instalatu Surfboard, lehendik dagoen nodo batean probak egiteko aukera ematen duen tresna.

npm install -g @waves/surfboard

3. Visual Studio Code plugina

Urrats hau hautazkoa da IDEen zalea ez bazara eta testu-editoreak nahiago badituzu. Beharrezko tresna guztiak komando lerroko utilitateak dira. Vim erabiltzen baduzu, arreta jarri pluginari vim-ibilaldi.

Deskargatu eta instalatu Visual Studio Code: https://code.visualstudio.com/

Ireki VS Code eta instalatu waves-ride plugina:

Nola eraiki, zabaldu eta probatu Waves RIDE dApp

Waves Keeper arakatzailearen luzapena: https://wavesplatform.com/products-keeper

Bukatu da!

Hasi nodoa eta Waves Explorer

1. Hasi nodoa:

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

Ziurtatu nodoa REST APIaren bidez abiarazten dela http://localhost:6869:

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Swagger REST APIa nodorako

2. Hasi Waves Explorer-en instantzia bat:

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

Ireki arakatzaile bat eta joan http://localhost:3000. Ikusiko duzu nodo lokaleko zirkuitu hutsa zein azkar eraikitzen den.

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Waves Explorer-ek nodo lokalaren instantzia bistaratzen du

RIDE egitura eta Surf taula tresna

Sortu direktorio huts bat eta exekutatu komandoa bertan

surfboard init

Komandoak direktorio bat hasieratzen du proiektuaren egiturarekin, "kaixo mundua" aplikazioekin eta testekin. Karpeta hau VS Coderekin irekitzen baduzu, ikusiko duzu:

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Surfboard.config.json

  • ./ride/ karpetaren azpian wallet.ride fitxategi bakarra aurkituko duzu - dApp kodea dagoen direktorioa. Hurrengo blokean dApp-ak laburki aztertuko ditugu.
  • ./test/ karpetaren azpian *.js fitxategi bat aurkituko duzu. Testak hemen gordetzen dira.
  • ./surfboard.config.json - probak exekutatzeko konfigurazio fitxategia.

Envs atal garrantzitsu bat da. Ingurune bakoitza honela konfiguratuta dago:

  • Sareko dApp eta CHAIN_ID abiarazteko erabiliko den nodoaren REST API amaiera-puntua.
  • Zure proba-token iturri izango diren tokenak dituen kontu baten esaldi sekretua.

Ikus dezakezunez, surfboard.config.json-ek ingurune anitz onartzen ditu lehenespenez. Lehenetsia ingurune lokala da (defaultEnv gakoa parametro aldagarria da).

Wallet-demo aplikazioa

Atal hau ez da RIDE hizkuntzaren erreferentzia bat. Baizik eta, inplementatzen eta probatzen dugun aplikazioari begirada bat blockchain-en gertatzen ari dena hobeto ulertzeko.

Ikus dezagun Wallet-demo aplikazio sinple bat. Edonork bidal ditzake tokenak dApp helbide batera. Zure WAVES bakarrik erretiratu dezakezu. Bi @Callable funtzio daude eskuragarri InvokeScriptTransaction bidez:

  • deposit()horrek ordainketa erantsia eskatzen du WAVES-en
  • withdraw(amount: Int)tokenak itzultzen dituena

dApp-en bizi-zikloan zehar, egitura (helbidea β†’ zenbatekoa) mantenduko da:

Ekintza
Ondoriozko egoera

hasierako
hutsik

Alicek 5 OLATU metatzen ditu
alice-helbidea β†’ 500000000

Bob gordailuak 2 OLATU

alice-helbidea β†’ 500000000
bob-helbidea β†’ 200000000

Bobek 7 OLATU erretiratzen ditu
EZKETA!

Alicek 4 OLATU erretiratzen ditu
alice-helbidea β†’ 100000000
bob-helbidea β†’ 200000000

Hona hemen egoera guztiz ulertzeko kodea:

# 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

Lagin kodea helbidean ere aurki daiteke GitHub.

VSCode pluginak etengabeko konpilazioa onartzen du fitxategi bat editatzen duzun bitartean. Hori dela eta, erroreak beti kontrola ditzakezu PROBLEMAK fitxan.

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Fitxategia konpilatzerakoan beste testu-editore bat erabili nahi baduzu, erabili

surfboard compile ride/wallet.ride

Honek base64 konpilatutako RIDE kode sorta bat aterako du.

'wallet.ride'-ren proba-gidoia

Ikus dezagun proba fitxategia. JavaScript-en Mocha esparruak bultzatuta. "Lehenago" funtzio bat eta hiru proba daude:

  • "Aurretik" hainbat kontu finantzatzen ditu MassTransferTransaction bidez, script-a konpilatu eta blokeo-katean zabaltzen du.
  • "Gordaindu dezake" InvokeScriptTransaction bat bidaltzen du sarera, bi kontuetako gordailua () funtzioa aktibatuz.
  • "Ezin da kendu gordailatutakoa baino gehiago" probak, inork ezin dituela besteen tokenak lapurtu.
  • "Gordailatu dezake" erretiratzeak behar bezala prozesatzen direla egiaztatzen du.

Egin probak Surfboard-etik eta aztertu emaitzak Waves Explorer-en

Proba egiteko, exekutatu

surfboard test

Hainbat script badituzu (adibidez, inplementazio script bereizi bat behar duzu), exekutatu dezakezu

surfboard test my-scenario.js

Surfboard-ek ./test/ karpetan bilduko ditu proba-fitxategiak eta scripta exekutatu egingo du surfboard.config.json-en konfiguratuta dagoen nodoan. Segundo batzuk igaro ondoren, honelako zerbait ikusiko duzu:

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)

Aupa! Probak gaindituta. Orain ikus dezagun zer gertatzen den Waves Explorer erabiltzean: begiratu blokeak edo itsatsi goiko helbideetako bat bilaketan (adibidez, dagokion wallet#. Bertan transakzioen historia, dApp egoera, deskonpilatutako fitxategi bitar aurki ditzakezu.

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Olatuen esploratzailea. Inplementatu berri den aplikazioa.

Surf taularen aholku batzuk:

1. Testnet ingurunean probatzeko, erabili:

surfboard test --env=testnet

Lortu proba-tokenak

2. Transakzioen JSON bertsioak eta nodoak nola prozesatzen dituen ikusi nahi baduzu, exekutatu proba -v-rekin ('ahozkoa' esan nahi du):

surfboard test -v

Waves Keeper-ekin aplikazioak erabiltzea

1. Konfiguratu Waves Keeper funtziona dezan: http://localhost:6869

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Waves Keeper konfiguratzea tokiko nodo batekin lan egiteko

2. Sarerako tokenekin esaldi sekretua inportatu? Sinpletasuna lortzeko, erabili zure nodoaren hasierako hazia: waves private node seed with waves tokens. Helbidea: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Zerbitzaririk gabeko orrialde bakarreko aplikazio bat zuk zeuk exekutatu dezakezu npm erabiliz. Edo lehendik dagoenera joan: chrome-ext.wvservices.com/dapp-wallet.html

4. Sartu proba-exekuzioaren zorroaren helbidea (goian azpimarratuta) dApp helbidearen testu-koadroan

5. Sartu kopuru txiki bat "Gordailua" eremuan eta egin klik botoian:

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Waves Keeper-ek InvokeScriptTransaction bat sinatzeko baimena eskatzen du 10 WAVES ordainduta.

6. Berretsi transakzioa:

Nola eraiki, zabaldu eta probatu Waves RIDE dApp
Transakzioa sortu eta sarera igortzen da. Orain bere NAN ikus dezakezu

7. Jarraitu transakzioa Waves Explorer erabiliz. Sartu ID bilaketa-eremuan

Nola eraiki, zabaldu eta probatu Waves RIDE dApp

Ondorioak eta informazio osagarria

Waves Plataforman dApps sinpleak garatzeko, probatzeko, zabaltzeko eta erabiltzeko tresnak aztertu ditugu:

  • RIDE hizkuntza
  • VS Kode Editorea
  • Olatuen esploratzailea
  • surf
  • Olatuen zaintzailea

RIDE ikasten jarraitu nahi dutenentzako estekak:

Adibide gehiago
Lineako IDEa adibideekin
Olatuen Dokumentazioa
Garatzaileen txata Telegram-en
Waves eta RIDE stackoverflow-en
BERRIA! Waves Plataforman dApps sortzeko lineako ikastaroak

Jarraitu RIDE gaian murgiltzen eta sortu zure lehen dApp!

TL; DR: bit.ly/2YCFnwY

Iturria: www.habr.com

Gehitu iruzkin berria