RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Hammaga salom!

Yaqinda, Waves Labs e'lon markazlashtirilmagan Ride4Dapps ilovalari uchun RIDE aqlli shartnoma tili kengaytmasini sinov tarmog'iga chiqarishga bag'ishlangan ishlab chiquvchilar uchun tanlov!

Biz DAO ishini tanladik, chunki Ventuar ijtimoiy funktsiyalarga ega dApps ishlab chiqishni rejalashtirmoqda: ovoz berish, mablag 'to'plash, ishonchli boshqaruv va boshqalar.
Biz oddiy misol bilan boshladik Savol-javob sessiyalari va RIDE IDE - bilan misol umumiy hamyon.

Keling, ushbu misolni ko'rib chiqaylik, farazlarni sinab ko'raylik va ba'zi g'alati narsalarni ko'rib chiqamiz:

Keling, Alice - dApp egasi bo'lsin
Boob va Cooper Alice sheriklari, Alice-BC DAO asoschilaridan biri
Neli moliyalashtirishga muhtoj biznes egasi
Bank - tokenlarni tarqatuvchi bank

1-bosqich. Balanslarni ishga tushirish

Tokenlarni to'lqinlar sinov tarmog'ida olish uchun siz bilan bog'lanishingiz kerak musluk va tokenlarni yuborish manzilini ko'rsating.
Hisob ma'lumotlarini ochib, manzilni IDE-da topishingiz mumkin.
Biz Bank 10 to'lqinlarini ta'kidlaymiz. Keyin biz ular blok va tranzaksiya brauzeri orqali kelganligini tekshiramiz: sharhlovchi

Endi qolgan ishtirokchilarga bankdan tokenlarni tarqatamiz. (Eslatmalar: to'lqinlar tarmog'idagi barcha tranzaktsiyalar bepul emas, shuning uchun tranzaktsiyalarni amalga oshirish uchun barcha ishtirokchilar uchun minimal ijobiy balans talab qilinadi).

1 TOLQINLAR = 100000000 birlik (to'lqinlar), chunki miqdorlar faqat butun son bo'lishi mumkin
0.01 TO‘LQINLAR (Tranzaktsiya to‘lovi) = 1000000

Bank -> [3 to'lqin] -> Alice, TransferTransaction orqali (Tur: 4).

Bitimlar imzolangan env.SEED bankimizga mos kelishini tekshiramiz:
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Agar sizda mos keladigan asosiy ibora bo'lmasa, Hisoblar ko'rinishida unga o'ting va yana tekshiring.
Shundan so'ng, biz 3 WAVES Elisni o'tkazish uchun bitim tuzamiz, e'lon qilamiz va imzolaymiz.
Elisning ma'lumotlarini env.accounts o'zgaruvchisi orqali ham bilib olishingiz mumkin. Raqamlash 0 dan boshlanadi, shuning uchun Alice env.accounts[1] hisoblanadi.
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Natijani brauzerda ham kuzatish mumkin, unga havola bajarilgandan so'ng darhol bizga qaytariladi operatsiyalar.

Biz Elisning balansi 3 ta to'lqin bilan to'ldirilganiga ishonch hosil qilamiz va bank balansi 10 - 3 - 0.01 = 0.699 da qoladi.
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Biz Boob va Cooperning har biriga 3 ta toʻlqinni, Neli, Xena va Mark esa 0.2 TOʻLQINNI bir xil tarzda joʻnatamiz.
(Eslatmalar: Biz bir belgi xato qildik va Neli 0.02 WAVES yubordik. Ehtiyot bo'ling!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Barcha ishtirokchilarning balanslarini to'ldirgandan so'ng, biz quyidagilarni ko'ramiz:
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

2-bosqich. dApp hisobini yarating

Biz Elis markazlashtirilmagan dasturning yaratuvchisi va egasi bo'lishiga kelishib oldik.
Hisoblar bo'limiga o'ting, uni SEED sifatida o'rnating va env.SEED bilan Elisga mos kelishini tekshiring.

Keling, Elisning hisobiga eng oddiy skriptni (shartnoma) o'rnatishga harakat qilaylik.
To'lqinlardagi aqlli kontaktlar ma'lum sharoitlarda har qanday turdagi chiquvchi tranzaktsiyalarni amalga oshirishni taqiqlovchi yoki ruxsat beruvchi predikatlardir. Bunday holda, bu holat DOIM. Shartnoma kodi to'g'ri. Qo'ng'iroq deploy().

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

setScript tranzaksiyasi uchun to'lov 1400000/100000000 = 0.014 TO'LQIN. Elisning balansida 2.986 ta to'lqin bor.

Keling, Alice hisobiga yanada murakkab aqlli kontrakt mantiqini o'rnatishga harakat qilaylik misol

Ride4Dapps endi ikkita yangi izoh turini o'z ichiga oladi:

  1. @Callable(i) — i parametr sifatida tranzaktsiyaga qaysi hisob qaydnomasi qoʻngʻiroq qilgan/imzolanganligi haqidagi maʼlumotlarni oladi. Aynan shu funktsiyaning natijasi dApp hisobi holatining o'zgarishini aniqlaydi. Boshqa hisoblar tranzaktsiyalar yaratishi va ushbu izoh bilan funktsiyalarni bajarishi va dApp hisobining holatini o'zgartirishi mumkin.
  2. @Verifier(tx) — tranzaksiya tx parametri bilan tranzaksiya tekshiruvi. RIDE dan predikat mantig'iga mos keladi. Aynan shu iborada siz dApp hisobidagi aqlli shartnomalar mantig'iga qo'shimcha o'zgartirishlar kiritishga ruxsat berishingiz yoki taqiqlashingiz mumkin.

qilaylik toza barcha ishtirokchilar uchun umumiy hamyon sifatida hisob.
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Hisobingizda qaysi shartnoma faol ekanligini tekshirish uchun siz blok tadqiqotchisida aqlli shartnomaning base64 kodini nusxalashingiz va uni dekompilyator yordamida tanib olishingiz mumkin (masalan)
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Biz aqlli shartnoma mantig'i biz kutgan narsaga mos kelishiga ishonch hosil qilamiz.
Elisning balansida 2.972 ta to'lqin bor.

Ushbu dApp mexanizm orqali har bir ishtirokchi umumiy fondga qancha hissa qo'shayotganini kuzatib boradi ma'lumotlar tranzaksiyasi - DataEntry (joriy kalit, yangi summa), bu erda joriyKey - depozit funksiyasini chaqiruvchi hisob, newAmount - to'ldirilgan balans qiymati.

Boob va Cooper o'z depozitlarini 1 WAVES bilan dApp hisobiga kiritadilar.
RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Biz xato qilamiz va tranzaksiya amalga oshmaydi. Biz Bob nomidan tranzaktsiyani amalga oshirayotganimizga amin bo'lganimizga qaramay, indeksda xatoga yo'l qo'ydik va aqlli shartnomaga ega bo'lmagan bank hisobini ko'rsatdik. Bu erda muhim bir narsani ta'kidlash kerak - tranzaktsiyalarni boshlash uchun muvaffaqiyatsiz urinishlar uchun haq olinadi olib tashlab bo'lmaydi! Elisning balansida 2.972 ta to'lqin bor. Bobda 3 ta to'lqin bor.

Bob dApp hisobiga 1 ta toʻlqin yubordi.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Bobda 1.99 TO‘LQIN qoldi. Ya'ni, Bob 0.01 WAVES komissiyasini to'lagan

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Elisning balansida 2.972 TO‘LQIN bor edi, hozir esa 3.972. Alice hisobida ham tranzaktsiya ro'yxatga olingan, ammo dApp hisobidan komissiya olinmagan (Alice).
Kuper ham hisobni to'ldirgandan so'ng, Elisning balansi 4.972 TO'LQINga aylandi.

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Ma'lumotlar ko'rinishidagi blok tadqiqotchisida umumiy hamyonda qancha to'lqin kimga tegishli ekanligini bilib olishingiz mumkin.

Kuper umumiy hamyonda 1 TO‘LQIN miqdorini qoldirish haqidagi fikrini o‘zgartirdi va yaqinlikning yarmini olib qo‘yishga qaror qildi. Buning uchun u olib tashlash funksiyasini chaqirishi kerak.

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Biroq, biz yana xato qildik, chunki qaytarib olish funktsiyasi butunlay boshqa parametrlarga va boshqa imzoga ega. RIDE4DAPPS-da aqlli shartnomalarni loyihalashda siz ushbu nuqtaga e'tibor berishingiz kerak

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Kuperning balansida endi 2.48 TO‘LQIN bor. Shunga ko'ra, 3 to'lqin - 1 - 0.01, keyin esa + 0.5 - 0.01. Shunga ko'ra, depozit va yechib olish uchun har bir qo'ng'iroq 0.01 WAVES turadi. Natijada, dApps egalari jadvalidagi yozuvlar quyidagicha o'zgardi.

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Bob ham umumiy hamyondan bir oz pul olishga qaror qildi, lekin xatoga yo'l qo'ydi va 1.5 WAVESni olishga harakat qildi.

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Biroq, aqlli shartnoma bu vaziyatni tekshirishga ega edi.

Xena - firibgar, u jami hisobdan 1 ta to'lqinni olishga harakat qildi.

RIDE va ​​RIDE4DAPPS-da Waves aqlli shartnomalarini yozishni o'rganish. 1-qism (Ko'p foydalanuvchili hamyon)

Unga ham bu ish bermadi.

Keyingi qismda biz Alice dApp hisobining nomukammalligi bilan bog'liq yanada murakkab masalalarni ko'rib chiqamiz.

Manba: www.habr.com

a Izoh qo'shish