Hello!
Bu yaxınlarda, Waves Labs
Biz DAO davasını seçdik, çünki
Sadə bir nümunə ilə başladıq
Gəlin bu nümunəni təhlil edək, fərziyyələri yoxlayaq və bəzi qəribəlikləri nəzərdən keçirək:
Bizə Alice - dApp Sahibi olsun
Boob və Cooper Alice-BC DAO-nun həmtəsisçiləri olan Alicenin tərəfdaşlarıdır
Neli maliyyəyə ehtiyacı olan biznes sahibidir
Bank - ayələr paylayan bank
Mərhələ 1. Balansların işə salınması
Dalğalar test şəbəkəsində tokenləri almaq üçün əlaqə saxlamalısınız
Ünvanı IDE-də hesab təfərrüatlarını aşkar etməklə tapmaq olar.
Bank 10 WAVES seçin. Onların blokdan və əməliyyat tədqiqatçısından keçdiyini yoxladıqdan sonra:
İndi bankdan tokenləri qalan iştirakçılara paylayaq. (Qeydlər: Dalğalar şəbəkəsində bütün əməliyyatlar pulsuz deyil, ona görə də əməliyyatların aparılması üçün bütün iştirakçılar üçün minimum müsbət balans tələb olunur).
1 DALĞA = 100000000 vahid (dalğalar) çünki məbləğlər yalnız tam ədəd ola bilər
0.01 DALĞA (Əməliyyat haqqı) = 1000000
Bank -> [3 DALĞA] -> Alice, TransferTransaction vasitəsilə (Növ: 4).
Əməliyyatların imzalandığı env.SEED-in Bankımıza uyğun olduğunu yoxlayırıq:

Uyğun əsas ifadələriniz yoxdursa, sadəcə Hesablar sekmesinde ona keçin və yenidən yoxlayın.
Bundan sonra biz 3 WAVES Alice-in transferi ilə bağlı əməliyyat yaradırıq, elan edirik və imzalayırıq.
Siz həmçinin env.accounts dəyişəni vasitəsilə Alisin məlumatlarını tapa bilərsiniz. Nömrələmə 0-dan başlayır, ona görə də Alice env.accounts[1]-dir.
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Nəticəni brauzerdə də müşahidə etmək olar, ona bir keçid icradan dərhal sonra bizə qaytarılacaqdır
Biz əmin edirik ki, Alisin balansı 3 DALĞA ilə doldurulur və bankın balansında 10 - 3 - 0.01 = 0.699 qalsın.
Boob və Cooper-i 3 DALĞA ilə, Neli, Xena və Markı isə eyni şəkildə 0.2 DALĞA göndəririk.
(Qeyd: Biz bir simvol səhvinə yol verdik və Neli 0.02 DALĞA göndərdik. Ehtiyatlı olun!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Bütün iştirakçıların balanslarını doldurduqdan sonra görürük:
Mərhələ 2. dApp hesabının yaradılması
Biz razılaşdıq ki, Alice mərkəzləşdirilməmiş tətbiqin yaradıcısı və sahibi olacaq.
Hesablarda davam edin və onu SEED olaraq təyin edin və env.SEED-in Alice ilə uyğunluğunu yoxlayın.
Gəlin Alicenin hesabına mümkün olan ən sadə skripti (müqavilə) quraşdırmağa çalışaq.
Dalğalardakı ağıllı kontaktlar müəyyən şərtlər altında bir növ gedən əməliyyatın yerinə yetirilməsinə mane olan və ya icazə verən predikatlardır. Bu halda həmin şərt HƏMİŞƏDİR. Müqavilə kodu doğrudur. Biz deploy() çağırırıq.
Hər setScript əməliyyatı üçün haqq 1400000/100000000 = 0.014 DALĞA. Alisin balansında 2.986 DALĞA qalıb.
İndi gəlin Alicenin hesabına daha mürəkkəb ağıllı müqavilə məntiqini quraşdırmağa çalışaq
Ride4Dapps indi 2 yeni annotasiya növü daxildir:
- @Çağırılan(i) — i parametri kimi hansı hesabın əməliyyatı çağırdığı/imzaladığı barədə məlumatları götürür. dApp hesabının vəziyyətindəki dəyişikliyi müəyyən edən bu funksiyanın nəticəsidir. Digər hesablar bu annotasiya ilə əməliyyatlar yarada və funksiyaları yerinə yetirə və dApp hesabının vəziyyətini dəyişə bilər.
- @Verifier(tx) — Tranzaksiya tx parametri ilə əməliyyat yoxlayıcısı. RIDE-dən predikatların məntiqinə uyğundur. Məhz bu ifadədə siz dApp hesabında ağıllı müqavilələrin məntiqində əlavə dəyişikliklərə icazə verə və ya qadağan edə bilərsiniz.
edək dApp bütün iştirakçılar üçün ümumi pul kisəsi kimi hesab.
Hesabda hazırda hansı müqavilənin aktiv olduğunu yoxlamaq üçün ağıllı müqavilənin base64 kodunu blok tədqiqatçısına köçürə və onu dekompilyator vasitəsilə tanıya bilərsiniz (
Ağıllı müqavilənin məntiqinin gözlədiyimizə uyğun olduğuna əminik.
Alisin balansında 2.972 DALĞA qalıb.
Bu dApp mexanizm vasitəsilə iştirakçıların hər birinin ümumi fonda nə qədər töhfə verdiyini izləyir məlumat əməliyyatı - DataEntry (cari açar, yeni məbləğ), burada cariKey depozit funksiyasını çağıran hesab, newAmount isə doldurulmuş balansın dəyəridir.
Boob və Cooper dApp hesabına 1 DALĞA əmanət edir.
Səhv edirik və əməliyyat keçmir. Bob adından əməliyyat etdiyimizə əmin olmağımıza baxmayaraq, indeksdə səhvə yol verdik və ağıllı müqaviləsi olmayan bir Bank hesabını göstərdik. Burada vacib bir məqamı qeyd etmək lazımdır - əməliyyatlara başlamaq üçün uğursuz cəhdlər üçün komissiya silinməyib! Alisin balansında 2.972 DALĞA qalıb. Bobun 3 DALĞASI var.
Bob dApp Hesabına 1 DALĞA göndərdi.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bobda 1.99 DALĞA qalıb. Yəni, Bob 0.01 DALĞA komissiyası ödəyib
Alisin balansında 2.972 DALĞA var idi, bu, 3.972 oldu. Alisin hesabında əməliyyat da qeydə alınıb, lakin dApp Hesabından (Alice) heç bir komissiya tutulmayıb.
Kuper də hesabı doldurduqdan sonra Alisin balansında 4.972 DALĞA var idi.
Blok tədqiqatçısında ümumi pul kisəsinin neçə DALĞA-nın kimə məxsus olduğunu Məlumatlar sekmesinde öyrənə bilərsiniz.
Cooper ümumi cüzdanda 1 DALĞA məbləğini tərk etmək fikrini dəyişdi və yaxınlıqların yarısını geri götürməyə qərar verdi. Bunun üçün o, geri çəkilmə funksiyasını çağırmalıdır.
Ancaq geri götürmə funksiyasının tamam başqa parametrləri, fərqli imzası olduğu üçün yenə səhvə yol verdik. RIDE4DAPPS-də ağıllı müqavilələr tərtib edərkən bu məqama diqqət yetirməlisiniz
Kuperin balansında 2.48 DALĞA var. Müvafiq olaraq 3 DALĞA - 1 - 0.01, sonra isə + 0.5 - 0.01. Müvafiq olaraq, depozit və çıxarmaq üçün hər zəng 0.01 DALĞA başa gəlir. Nəticədə, dApps sahiblərinin cədvəlindəki qeydlər aşağıdakı kimi dəyişdi.
Bob da ümumi pul kisəsindən bir qədər pul çıxarmaq qərarına gəldi, lakin səhv etdi və 1.5 DALĞA çıxarmağa çalışdı.
Ancaq ağıllı müqavilədə belə bir vəziyyət üçün bir yoxlama var idi.
Xena ümumi hesabdan 1 DALĞA götürməyə çalışan fırıldaqçıdır.
O da uğursuz oldu.
Növbəti hissədə Alice dApp Hesabının qüsursuzluğu ilə bağlı daha mürəkkəb məsələləri nəzərdən keçirəcəyik.
Mənbə: www.habr.com