Kaixo! Artikulu honetan Waves nodo batean dApp arrunt bat nola idatzi eta exekutatu erakutsiko dizut. Ikus ditzagun beharrezko tresnak, metodoak eta garapenaren adibide bat.
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.
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/
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.
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:
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.
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
# 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
VSCode pluginak etengabeko konpilazioa onartzen du fitxategi bat editatzen duzun bitartean. Hori dela eta, erroreak beti kontrola ditzakezu PROBLEMAK fitxan.
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.
Olatuen esploratzailea. Inplementatu berri den aplikazioa.
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:
Waves Keeper-ek InvokeScriptTransaction bat sinatzeko baimena eskatzen du 10 WAVES ordainduta.
6. Berretsi transakzioa:
Transakzioa sortu eta sarera igortzen da. Orain bere NAN ikus dezakezu
7. Jarraitu transakzioa Waves Explorer erabiliz. Sartu ID bilaketa-eremuan
Ondorioak eta informazio osagarria
Waves Plataforman dApps sinpleak garatzeko, probatzeko, zabaltzeko eta erabiltzeko tresnak aztertu ditugu: