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.

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish

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.

2. Surfboard buyruq qatori vositasi

  • Bu yerdan ppa, homebrew yoki exe yordamida Node.js-ni yuklab oling va o'rnating: https://nodejs.org/en/download/.
  • 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:

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish

Waves Keeper brauzer kengaytmasi: https://wavesplatform.com/products-keeper

Bajar!

Tugun va Waves Explorer-ni ishga tushiring

1. Tugunni ishga tushiring:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Tugun REST API orqali ishga tushirilganligiga ishonch hosil qiling http://localhost:6869:

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
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.

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
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:

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
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.

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
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.

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
To'lqinlar Explorer. Hozirgina ishga tushirilgan ilova.

Surfboard bo'yicha ba'zi maslahatlar:

1. Testnet muhitida sinab ko'rish uchun quyidagilardan foydalaning:

surfboard test --env=testnet

Test tokenlarini oling

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

surfboard test -v

Waves Keeper bilan ilovalardan foydalanish

1. Ishlash uchun Waves Keeper-ni sozlang: http://localhost:6869

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
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.

3. npm yordamida serversiz bitta sahifali dasturni o'zingiz ishga tushirishingiz mumkin. Yoki mavjudiga o'ting: chrome-ext.wvservices.com/dapp-wallet.html

4. DApp manzili matn maydoniga test sinovidagi hamyon manzilini kiriting (yuqorida tagiga chizilgan).

5. “Depozit” maydoniga kichik miqdorni kiriting va tugmani bosing:

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
Waves Keeper 10 WAVES to'lash bilan InvokeScriptTransaction imzolash uchun ruxsat so'raydi.

6. Tranzaksiyani tasdiqlang:

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish
Tranzaktsiya yaratiladi va tarmoqqa uzatiladi. Endi siz uning shaxsini ko'rishingiz mumkin

7. Waves Explorer yordamida tranzaktsiyani kuzatib boring. Qidiruv maydoniga ID kiriting

RIDE dApp to'lqinlarini qanday yaratish, o'rnatish va sinab ko'rish

Xulosa va qo'shimcha ma'lumotlar

Biz Waves platformasida oddiy dApp-larni ishlab chiqish, sinovdan o'tkazish, joylashtirish va ishlatish vositalarini ko'rib chiqdik:

  • RIDE tili
  • VS kod muharriri
  • To'lqinlar Explorer
  • Surfboard
  • To'lqinlar qo'riqchisi

RIDE o'rganishni davom ettirmoqchi bo'lganlar uchun havolalar:

Boshqa misollar
Misollar bilan onlayn IDE
To'lqinlar hujjatlari
Telegramda dasturchi suhbati
Stackoverflow-da to'lqinlar va RIDE
YANGI! Waves platformasida dApps yaratish bo'yicha onlayn kurslar

RIDE mavzusiga sho'ng'ishda davom eting va birinchi dApp-ni yarating!

TP; DR: bit.ly/2YCFnwY

Manba: www.habr.com

a Izoh qo'shish