KÄ izveidot, izvietot un pÄrbaudÄ«t viļÅus RIDE dApp
Sveiki! Å ajÄ rakstÄ es jums parÄdÄ«Å”u, kÄ Waves mezglÄ uzrakstÄ«t un palaist parastu dApp. ApskatÄ«sim nepiecieÅ”amos rÄ«kus, metodes un attÄ«stÄ«bas piemÄru.
DApps un parasto lietojumprogrammu izstrÄdes shÄma ir gandrÄ«z vienÄda:
Koda rakstīŔana
AutomatizÄtas pÄrbaudes rakstÄ«Å”ana
Lietojumprogrammas palaiŔana
TestÄÅ”ana
Darbarīki
1. docker lai palaistu mezglu un Waves Explorer
Ja nevÄlaties sÄkt mezglu, varat izlaist Å”o darbÄ«bu. Galu galÄ ir testu un eksperimentu tÄ«kls. TaÄu, neizvietojot savu mezglu, testÄÅ”anas process var ievilkties.
Jums pastÄvÄ«gi bÅ«s nepiecieÅ”ami jauni konti ar testa marÄ·ieriem. Testa tÄ«kla jaucÄjkrÄns ik pÄc 10 minÅ«tÄm pÄrraida 10 VIĻŠUS.
VidÄjais bloÄ·ÄÅ”anas laiks testa tÄ«klÄ ir 1 minÅ«te, mezglÄ ā 15 sekundes. Tas ir Ä«paÅ”i pamanÄms, ja darÄ«jumam ir nepiecieÅ”ami vairÄki apstiprinÄjumi.
Publiskajos testa mezglos ir iespÄjama agresÄ«va keÅ”atmiÅa.
Tie var bÅ«t arÄ« Ä«slaicÄ«gi nepieejami apkopes dÄļ.
TurpmÄk es pieÅemÅ”u, ka strÄdÄjat ar savu mezglu.
InstalÄjiet Surfboard ā rÄ«ku, kas ļauj veikt testus esoÅ”ajÄ mezglÄ.
npm install -g @waves/surfboard
3. Visual Studio Code spraudnis
Å Ä« darbÄ«ba nav obligÄta, ja neesat IDE cienÄ«tÄjs un dodat priekÅ”roku teksta redaktoriem. Visi nepiecieÅ”amie rÄ«ki ir komandrindas utilÄ«tas. Ja izmantojat vim, pievÄrsiet uzmanÄ«bu spraudnim vim-ride.
LejupielÄdÄjiet un instalÄjiet Visual Studio kodu: https://code.visualstudio.com/
Atveriet VS Code un instalÄjiet spraudni waves-ride:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
PÄrliecinieties, vai mezgls ir palaists, izmantojot REST API http://localhost:6869:
Swagger REST API mezglam
2. SÄciet Waves Explorer gadÄ«jumu:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Atveriet pÄrlÅ«kprogrammu un dodieties uz http://localhost:3000. JÅ«s redzÄsiet, cik Ätri tiek izveidota tukÅ”a lokÄlÄ mezgla Ä·Äde.
Waves Explorer parÄda lokÄlÄ mezgla gadÄ«jumu
RIDE struktÅ«ra un vÄjdÄļa rÄ«ks
Izveidojiet tukÅ”u direktoriju un palaidiet tajÄ esoÅ”o komandu
surfboard init
Komanda inicializÄ direktoriju ar projekta struktÅ«ru, "hello world" lietojumprogrammÄm un testiem. Ja atverat Å”o mapi ar VS kodu, jÅ«s redzÄsit:
Surfboard.config.json
Zem mapes ./ride/ atradÄ«sit vienu failu wallet.ride ā direktoriju, kurÄ atrodas dApp kods. NÄkamajÄ blokÄ mÄs Ä«si analizÄsim dApps.
MapÄ ./test/ atradÄ«sit *.js failu. Å eit tiek glabÄti testi.
./surfboard.config.json ā konfigurÄcijas fails testu veikÅ”anai.
Envs ir svarÄ«ga sadaļa. Katra vide ir konfigurÄta Å”Ädi:
TÄ mezgla REST API galapunkts, kas tiks izmantots, lai palaistu dApp un tÄ«kla CHAIN_ID.
Slepena frÄze kontam ar marÄ·ieriem, kas bÅ«s jÅ«su testa tokenu avoti.
KÄ redzat, surfboard.config.json pÄc noklusÄjuma atbalsta vairÄkas vides. NoklusÄjums ir lokÄlÄ vide (noklusÄjuma Env atslÄga ir mainÄms parametrs).
Maka demonstrÄcijas programma
Å Ä« sadaļa nav atsauce uz RIDE valodu. DrÄ«zÄk apskatiet lietojumprogrammu, kuru mÄs izvietojam un pÄrbaudÄm, lai labÄk saprastu, kas notiek blokÄ·ÄdÄ.
ApskatÄ«sim vienkÄrÅ”u Maka demonstrÄcijas lietojumprogrammu. Ikviens var nosÅ«tÄ«t marÄ·ierus uz dApp adresi. JÅ«s varat izÅemt tikai savus VIĻŠUS. Izmantojot InvokeScriptTransaction, ir pieejamas divas @Callable funkcijas:
deposit()kam nepiecieÅ”ams pievienots maksÄjums WAVES
# 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
Ja, veidojot failu, vÄlaties izmantot citu teksta redaktoru, izmantojiet
surfboard compile ride/wallet.ride
Tas izvadÄ«s base64 apkopota RIDE koda sÄriju.
Testa skripts āwallet.rideā
ApskatÄ«sim testa fails. Darbojas ar JavaScript Mocha ietvaru. Ir funkcija āPirmsā un trÄ«s testi:
āPirmsā iemaksÄ vairÄkus kontus, izmantojot MassTransferTransaction, apkopo skriptu un izvieto to blokÄ·ÄdÄ.
āVar noguldÄ«tā nosÅ«ta tÄ«klam InvokeScriptTransaction, aktivizÄjot depozÄ«ta () funkciju katram no diviem kontiem.
āNevar izÅemt vairÄk, nekÄ tika noguldÄ«tsā pÄrbauda, āāka neviens nevar nozagt citu cilvÄku žetonus.
āVar iemaksÄtā pÄrbauda, āāvai izÅemÅ”ana ir pareizi apstrÄdÄta.
Veiciet testus no Surfboard un analizÄjiet rezultÄtus programmÄ Waves Explorer
Lai palaistu testu, palaist
surfboard test
Ja jums ir vairÄki skripti (piemÄram, jums ir nepiecieÅ”ams atseviŔķs izvietoÅ”anas skripts), varat palaist
surfboard test my-scenario.js
Surfboard apkopos testa failus mapÄ ./test/ un palaidÄ«s skriptu mezglÄ, kas ir konfigurÄts failÄ surfboard.config.json. PÄc dažÄm sekundÄm jÅ«s redzÄsit kaut ko lÄ«dzÄ«gu:
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)
UrrÄ! PÄrbaudÄ«jumi nokÄrtoti. Tagad apskatÄ«sim, kas notiek, izmantojot Waves Explorer: apskatiet blokus vai ielÄ«mÄjiet kÄdu no iepriekÅ” minÄtajÄm adresÄm meklÄÅ”anÄ (piemÄram, atbilstoÅ”o wallet#. Tur jÅ«s varat atrast darÄ«jumu vÄsturi, dApp statusu, dekompilÄtu binÄro failu.
ViļÅu pÄtnieks. Lietojumprogramma, kas tikko tika izvietota.