ProHoster > blog > Utawala > Jinsi ya Kujenga, Kupeleka na Kujaribu Mawimbi RIDE dApp
Jinsi ya Kujenga, Kupeleka na Kujaribu Mawimbi RIDE dApp
Habari! Katika makala hii nitakuonyesha jinsi ya kuandika na kuendesha dApp ya kawaida kwenye node ya Waves. Hebu tuangalie zana muhimu, mbinu na mfano wa maendeleo.
Mpango wa maendeleo wa dApps na programu za kawaida ni karibu sawa:
Nambari ya kuandika
Kuandika majaribio ya kiotomatiki
Kuzindua maombi
Kupima
Vyombo vya
1. docker kuendesha nodi na Waves Explorer
Ikiwa hutaki kuanzisha nodi, unaweza kuruka hatua hii. Baada ya yote, kuna mtandao wa majaribio na majaribio. Lakini bila kupeleka nodi yako mwenyewe, mchakato wa majaribio unaweza kuendelea.
Utahitaji akaunti mpya kila wakati na tokeni za majaribio. Bomba la mtandao wa majaribio huhamisha WAVES 10 kila baada ya dakika 10.
Wakati wa wastani wa kuzuia kwenye mtandao wa mtihani ni dakika 1, katika node - sekunde 15. Hii inaonekana hasa wakati shughuli inahitaji uthibitisho mwingi.
Uakibishaji mkali unawezekana kwenye nodi za majaribio za umma.
Huenda pia zisipatikane kwa muda kutokana na matengenezo.
Kuanzia sasa nitafikiria kuwa unafanya kazi na nodi yako mwenyewe.
Sakinisha Ubao wa Surf, chombo kinachokuwezesha kufanya majaribio kwenye nodi iliyopo.
npm install -g @waves/surfboard
3. Programu-jalizi ya Msimbo wa Visual Studio
Hatua hii ni ya hiari ikiwa wewe si shabiki wa IDE na unapendelea vihariri vya maandishi. Zana zote muhimu ni huduma za mstari wa amri. Ikiwa unatumia vim, makini na programu-jalizi vim-safari.
Pakua na usakinishe Msimbo wa Visual Studio: https://code.visualstudio.com/
Fungua Msimbo wa VS na usakinishe programu-jalizi ya safari ya mawimbi:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Fungua kivinjari na uende http://localhost:3000. Utaona jinsi mzunguko wa nodi wa eneo tupu hujengwa haraka.
Waves Explorer huonyesha mfano wa nodi za ndani
RIDE muundo na Surfboard chombo
Unda saraka tupu na uendesha amri ndani yake
surfboard init
Amri huanzisha saraka na muundo wa mradi, programu na majaribio ya "hello world". Ukifungua folda hii na Msimbo wa VS, utaona:
Surfboard.config.json
Chini ya ./ride/ folda utapata faili moja wallet.ride - saraka ambapo msimbo wa dApp iko. Tutachambua kwa ufupi dApps katika block inayofuata.
Chini ya ./test/ folda utapata faili ya *.js. Majaribio yanahifadhiwa hapa.
./surfboard.config.json - faili ya usanidi kwa ajili ya kufanya majaribio.
Envs ni sehemu muhimu. Kila mazingira yameundwa kama hii:
Sehemu ya mwisho ya API ya REST ya nodi ambayo itatumika kuzindua dApp na CHAIN_ID ya mtandao.
Neno la siri la akaunti iliyo na tokeni ambazo zitakuwa vyanzo vya tokeni zako za majaribio.
Kama unavyoona, surfboard.config.json inaauni mazingira mengi kwa chaguo-msingi. Chaguo-msingi ni mazingira ya ndani (kitufe cha defaultEnv ni parameta inayoweza kubadilika).
Programu ya onyesho la Wallet
Sehemu hii si rejeleo la lugha ya RIDE. Badala yake, angalia programu ambayo tunatuma na kujaribu ili kuelewa vyema kile kinachotokea kwenye blockchain.
Wacha tuangalie programu rahisi ya onyesho la Wallet. Mtu yeyote anaweza kutuma tokeni kwa anwani ya dApp. Unaweza tu kuondoa MAWIMBI yako. Vitendaji viwili vya @Callable vinapatikana kupitia InvokeScriptTransaction:
deposit()ambayo inahitaji malipo yaliyoambatishwa katika WAVES
withdraw(amount: Int)ambayo inarudisha ishara
Katika kipindi chote cha maisha ya dApp, muundo (anwani β kiasi) utadumishwa:
Alice atoa MAWIMBI 4
alice-anwani β 100000000
bob-anwani β 200000000
Hapa kuna nambari ya kuelewa hali hiyo kikamilifu:
# 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
Nambari ya sampuli pia inaweza kupatikana kwa GitHub.
Programu-jalizi ya VSCode inasaidia ujumuishaji unaoendelea wakati wa kuhariri faili. Kwa hiyo, unaweza daima kufuatilia makosa katika kichupo cha PROBLEMS.
Ikiwa unataka kutumia kihariri tofauti cha maandishi wakati wa kuunda faili, tumia
surfboard compile ride/wallet.ride
Hii itatoa msururu wa msimbo wa RIDE uliojumuishwa wa base64.
Hati ya majaribio ya 'wallet.ride'
Hebu tuangalie faili ya mtihani. Inaendeshwa na mfumo wa Mocha wa JavaScript. Kuna chaguo la kukokotoa "Kabla" na majaribio matatu:
"Kabla" hufadhili akaunti nyingi kupitia MassTransferTransaction, hukusanya hati na kuipeleka kwa blockchain.
"Anaweza kuweka" hutuma InvokeScriptTransaction kwa mtandao, na kuwezesha kipengele cha deposit() kwa kila akaunti mbili.
majaribio ya "Haiwezi kutoa zaidi ya ilivyowekwa" ambayo hakuna mtu anayeweza kuiba tokeni za watu wengine.
"Anaweza kuweka" hukagua kuwa uondoaji unachakatwa ipasavyo.
Fanya majaribio kutoka Ubao wa Kuvinjari na uchanganue matokeo katika Waves Explorer
Ili kuendesha jaribio, endesha
surfboard test
Ikiwa una hati nyingi (kwa mfano, unahitaji hati tofauti ya kupeleka), unaweza kukimbia
surfboard test my-scenario.js
Surfboard itakusanya faili za majaribio katika ./test/ folda na kuendesha hati kwenye nodi ambayo imesanidiwa katika surfboard.config.json. Baada ya sekunde chache utaona kitu kama hiki:
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)
Hooray! Majaribio yamepita. Sasa hebu tuangalie kile kinachotokea wakati wa kutumia Waves Explorer: angalia vizuizi au ubandike moja ya anwani hapo juu kwenye utaftaji (kwa mfano, inayolingana. wallet#. Huko unaweza kupata historia ya muamala, hali ya dApp, faili ya binary iliyoharibika.
Waves Explorer. Programu ambayo imetumwa hivi punde.
Baadhi ya Vidokezo vya Ubao wa Kuteleza Mawimbi:
1. Ili kujaribu katika mazingira ya testnet, tumia:
Kuweka Mlinzi wa Waves kufanya kazi na nodi ya ndani
2. Leta maneno ya siri yenye ishara za mtandao? Kwa unyenyekevu, tumia mbegu ya awali ya nodi yako: waves private node seed with waves tokens. Anwani: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.