ProHoster > Blog > Ma'muriyat > RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
Salom! Ushbu maqolada men sizga Waves tugunida oddiy dApp-ni qanday yozish va ishga tushirishni ko'rsataman. Keling, kerakli vositalar, usullar va rivojlanish misolini ko'rib chiqaylik.
DApps va oddiy ilovalarni ishlab chiqish sxemasi deyarli bir xil:
Kod yozish
Avtomatlashtirilgan test yozish
Ilova ishga tushirilmoqda
Sinov
asboblar
1. docker tugunni va Waves Explorer-ni ishga tushirish uchun
Agar siz tugunni ishga tushirishni xohlamasangiz, bu bosqichni o'tkazib yuborishingiz mumkin. Axir sinov va eksperimental tarmoq mavjud. Ammo o'z tuguningizni joylashtirmasdan, sinov jarayoni davom etishi mumkin.
Sizga doimiy ravishda test tokenlari bo'lgan yangi hisoblar kerak bo'ladi. Sinov tarmog'i krani har 10 daqiqada 10 ta to'lqinni uzatadi.
Sinov tarmog'ida o'rtacha bloklash vaqti 1 daqiqa, tugunda - 15 soniya. Bu, ayniqsa, tranzaksiya bir nechta tasdiqlashni talab qilganda seziladi.
Umumiy sinov tugunlarida agressiv keshlash mumkin.
Shuningdek, ular texnik xizmat ko'rsatish tufayli vaqtincha ishlamay qolishi mumkin.
Bundan buyon siz o'zingizning tuguningiz bilan ishlayapsiz deb taxmin qilaman.
Surfboard, mavjud tugunda testlarni o'tkazish imkonini beruvchi vositani o'rnating.
npm install -g @waves/surfboard
3. Visual Studio Code plagini
Agar siz IDE muxlisi bo'lmasangiz va matn muharrirlarini afzal ko'rsangiz, bu qadam ixtiyoriy. Barcha kerakli vositalar buyruq qatori yordamchi dasturlari. Agar siz vim dan foydalansangiz, plaginga e'tibor bering vim-ride.
Visual Studio kodini yuklab oling va o'rnating: https://code.visualstudio.com/
VS kodini oching va waves-ride plaginini o'rnating:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Tugun REST API orqali ishga tushirilganligiga ishonch hosil qiling http://localhost:6869:
Tugun uchun Swagger REST API
2. Waves Explorer misolini ishga tushiring:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Brauzerni oching va o'ting http://localhost:3000. Bo'sh mahalliy tugun sxemasi qanchalik tez qurilganligini ko'rasiz.
Waves Explorer mahalliy tugun namunasini ko'rsatadi
RIDE tuzilishi va Surfboard vositasi
Bo'sh katalog yarating va undagi buyruqni bajaring
surfboard init
Buyruq loyiha tuzilishi, "salom dunyo" ilovalari va testlari bilan katalogni ishga tushiradi. Agar siz ushbu jildni VS kodi bilan ochsangiz, quyidagilarni ko'rasiz:
Surfboard.config.json
./ride/ papkasida siz wallet.ride bitta faylni topasiz - dApp kodi joylashgan katalog. Keyingi blokda dApps-ni qisqacha tahlil qilamiz.
./test/ jildida siz *.js faylini topasiz. Testlar shu yerda saqlanadi.
./surfboard.config.json – sinovlarni bajarish uchun konfiguratsiya fayli.
Envs - bu muhim bo'lim. Har bir muhit quyidagicha sozlangan:
Tarmoqning dApp va CHAIN_ID dasturini ishga tushirish uchun foydalaniladigan tugunning REST API so‘nggi nuqtasi.
Tokenlar bilan hisob qaydnomasi uchun maxfiy ibora, bu sizning test tokenlaringizning manbalari bo'ladi.
Ko'rib turganingizdek, surfboard.config.json sukut bo'yicha bir nechta muhitlarni qo'llab-quvvatlaydi. Standart mahalliy muhit (defaultEnv kaliti o'zgaruvchan parametr).
Wallet-demo ilovasi
Ushbu bo'lim RIDE tiliga havola emas. Aksincha, blokcheynda nima sodir bo'layotganini yaxshiroq tushunish uchun biz o'rnatadigan va sinovdan o'tkazadigan dasturni ko'rib chiqing.
Keling, oddiy Wallet-demo ilovasini ko'rib chiqaylik. Har kim tokenlarni dApp manziliga yuborishi mumkin. Siz faqat WAVES-ni qaytarib olishingiz mumkin. InvokeScriptTransaction orqali ikkita @Callable funksiyasi mavjud:
deposit()bu WAVES-da biriktirilgan to'lovni talab qiladi
withdraw(amount: Int)bu tokenlarni qaytaradi
dApp hayotiy tsikli davomida struktura (manzil → summa) saqlanib qoladi:
harakat
Natija holati
boshlang'ich
Bo'sh
Elis 5 to'lqinni qo'yadi
elis-manzil → 500000000
Bob 2 to'lqinni qo'yadi
elis-manzil → 500000000
bob-manzil → 200000000
Bob 7 ta to'lqinni tortib oladi
RAD ETILGAN!
Elis 4 to'lqinni tortib oladi
elis-manzil → 100000000
bob-manzil → 200000000
Vaziyatni to'liq tushunish uchun kod:
# 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
Kod namunasini quyidagi manzilda ham topishingiz mumkin GitHub.
VSCode plagini faylni tahrirlashda uzluksiz kompilyatsiyani qo'llab-quvvatlaydi. Shuning uchun, siz har doim MUAMMOLAR ko'rinishida xatolarni kuzatishingiz mumkin.
Agar faylni kompilyatsiya qilishda boshqa matn muharriridan foydalanmoqchi bo'lsangiz, foydalaning
surfboard compile ride/wallet.ride
Bu bir qator base64 kompilyatsiya qilingan RIDE kodini chiqaradi.
"wallet.ride" uchun sinov skripti
Keling, ko'rib chiqaylik sinov fayli. JavaScript-ning Mocha ramkasi tomonidan quvvatlanadi. “Oldin” funksiyasi va uchta test mavjud:
"Oldin" MassTransferTransaction orqali bir nechta hisoblarni moliyalashtiradi, skriptni tuzadi va uni blokcheynga joylashtiradi.
"Depozit qo'yish mumkin" ikki hisobning har biri uchun depozit() funksiyasini faollashtirib, tarmoqqa InvokeScriptTransaction yuboradi.
Hech kim boshqa odamlarning tokenlarini o'g'irlay olmaydigan "Depozitga qo'yilganidan ko'proq pul olib bo'lmaydi" testlari.
"Depozitga qo'yish mumkin" pul mablag'lari to'g'ri bajarilganligini tekshiradi.
Surfboard-dan testlarni o'tkazing va natijalarni Waves Explorer-da tahlil qiling
Sinovni bajarish uchun ishga tushiring
surfboard test
Agar sizda bir nechta skriptlar bo'lsa (masalan, sizga alohida joylashtirish skripti kerak), siz ishga tushirishingiz mumkin
surfboard test my-scenario.js
Surfboard test fayllarini ./test/ jildiga to'playdi va skriptni surfboard.config.json da sozlangan tugunda ishga tushiradi. Bir necha soniyadan so'ng siz shunga o'xshash narsani ko'rasiz:
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)
Xayr! Sinovlar o'tdi. Endi keling, Waves Explorer-dan foydalanganda nima sodir bo'lishini ko'rib chiqaylik: bloklarga qarang yoki yuqoridagi manzillardan birini qidiruvga qo'ying (masalan, mos keladigan wallet#. U erda tranzaktsiyalar tarixi, dApp holati, dekompilyatsiya qilingan ikkilik faylni topishingiz mumkin.
To'lqinlar Explorer. Hozirgina ishga tushirilgan ilova.
Surfboard bo'yicha ba'zi maslahatlar:
1. Testnet muhitida sinab ko'rish uchun quyidagilardan foydalaning:
2. Agar siz tranzaksiyalarning JSON versiyalarini va ular tugun tomonidan qanday qayta ishlanishini ko‘rishni istasangiz, testni -v bilan bajaring (“mukammal” degan ma’noni anglatadi):
Mahalliy tugun bilan ishlash uchun Waves Keeper-ni sozlash
2. Tarmoq uchun tokenli maxfiy iborani import qiling? Oddiylik uchun tuguningizning dastlabki urug'idan foydalaning: waves private node seed with waves tokens. Manzil: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.