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.

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: .
- 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 .
Niżżel u installa Visual Studio Code:
Iftaħ VS Code u installa l-plugin waves-ride:

Estensjoni tal-brawżer Waves 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 :

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 . Se tara kemm jinbena malajr ċirkwit vojt ta 'nodi lokali.

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:

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’WAVESwithdraw(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() = falseKodiċi tal-kampjun jista 'jinstab ukoll fuq .
Il-plugin VSCode jappoġġja kumpilazzjoni kontinwa waqt li jeditja fajl. Għalhekk, tista' dejjem tissorvelja l-iżbalji fit-tab PROBLEMI.

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 . 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.

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
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:

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:
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:

Waves Keeper jitlob permess biex jiffirma InvokeScriptTransaction bi ħlas ta' 10 WAVES.
6. Ikkonferma t-tranżazzjoni:

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

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:
Kompli tgħaddi fis-suġġett RIDE u oħloq l-ewwel dApp tiegħek!
TL; DR:
Sors: www.habr.com
