Hammaga salom!
Yaqinda, Waves Labs
Biz DAO ishini tanladik, chunki
Biz oddiy misol bilan boshladik
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
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:
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:

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.
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Natijani brauzerda ham kuzatish mumkin, unga havola bajarilgandan so'ng darhol bizga qaytariladi
Biz Elisning balansi 3 ta to'lqin bilan to'ldirilganiga ishonch hosil qilamiz va bank balansi 10 - 3 - 0.01 = 0.699 da qoladi.
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:
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().
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
Ride4Dapps endi ikkita yangi izoh turini o'z ichiga oladi:
- @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.
- @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.
Hisobingizda qaysi shartnoma faol ekanligini tekshirish uchun siz blok tadqiqotchisida aqlli shartnomaning base64 kodini nusxalashingiz va uni dekompilyator yordamida tanib olishingiz mumkin (
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.
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 }]}))
Bobda 1.99 TO‘LQIN qoldi. Ya'ni, Bob 0.01 WAVES komissiyasini to'lagan
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.
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.
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
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.
Bob ham umumiy hamyondan bir oz pul olishga qaror qildi, lekin xatoga yo'l qo'ydi va 1.5 WAVESni olishga harakat qildi.
Biroq, aqlli shartnoma bu vaziyatni tekshirishga ega edi.
Xena - firibgar, u jami hisobdan 1 ta to'lqinni olishga harakat qildi.
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