Поздрав свима!
Недавно, Вавес Лабс
Изабрали смо случај ДАО јер
Почели смо са једноставним примером у
Хајде да погледамо овај пример, тестирамо хипотезе и погледамо неке необичности:
Дајте нам Алису - власника апликације
Бооб и Цоопер су Алице партнери, суоснивачи Алице-БЦ ДАО
Нели је власница предузећа којој су потребна финансијска средства
Банка - банка која дистрибуира жетоне
Фаза 1. Иницијализација биланса
Да бисте добили токене на мрежи за тестирање таласа, потребно је да контактирате
Адресу можете пронаћи у ИДЕ-у тако што ћете отворити детаље свог налога.
Издвајамо банку 10 ТАЛАСОВА. Затим проверавамо да ли су стигли преко претраживача блокова и трансакција:
Хајде сада да поделимо жетоне из банке осталим учесницима. (Напомене: Све трансакције на таласној мрежи нису бесплатне, тако да је потребан минимални позитиван биланс за све учеснике да би извршили трансакције).
1 ТАЛАС = 100000000 јединица (таласови), пошто износи могу бити само цео број
0.01 ВАВЕС (накнада за трансакцију) = 1000000
Банка -> [3 ТАЛАСА] -> Алиса, преко ТрансферТрансацтион (Тип: 4).
Проверавамо да ли енв.СЕЕД из којег се потписују трансакције одговара нашој банци:

Ако немате одговарајућу почетну фразу, само се пребаците на њу на картици Налози и проверите поново.
Након овога креирамо, објављујемо и потписујемо трансакцију за пренос 3 ВАВЕС Алице.
Такође можете сазнати Алисине податке преко променљиве енв.аццоунтс. Нумерисање почиње од 0, тако да је Алиса енв.аццоунтс[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Резултат се такође може посматрати у претраживачу, линк до њега ће нам бити враћен одмах након извршења
Уверавамо се да Алисин биланс буде допуњен за 3 ТАЛАСА, а банковни салдо остане на 10 - 3 - 0.01 = 0.699.
Шаљемо Бооб и Цоопер по 3 ТАЛАСА, а Нели, Ксена и Марк по 0.2 ТАЛАСА на исти начин.
(Напомене: Направили смо грешку од једног знака и послали Нели 0.02 ВАВЕС. Будите опрезни!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Након допуне стања свих учесника, видимо:
Фаза 2. Креирајте дАпп налог
Договорили смо се да Алис буде креатор и власник децентрализоване апликације.
Идите на Налози, поставите га као СЕЕД и проверите да ли енв.СЕЕД одговара Алиси.
Хајде да покушамо да инсталирамо најједноставнију могућу скрипту (уговор) на Алисин налог.
Паметни контакти у Вавес-у су предикати који забрањују или дозвољавају било коју врсту одлазне трансакције под одређеним условима. У овом случају, ово стање је УВЕК. Код уговора је истинит. Позовите деплои().
Накнада по сетСцрипт трансакцији 1400000/100000000 = 0.014 ВАВЕС. Алис има још 2.986 ТАЛАСА на свом салду.
Покушајмо сада да инсталирамо сложенију логику паметног уговора на Алице налог, описан у
Риде4Даппс сада укључује 2 нова типа напомена:
- @Цалабле(и) — узима као параметар и податке о томе који рачун је позвао/потписао трансакцију. Резултат ове функције је та која одређује промену стања дАпп налога. Други налози могу да креирају трансакције и извршавају функције са овом напоменом и мењају стање дАпп налога.
- @Верификатор(тк) — Верификатор трансакције са параметром тк трансакције. Одговара логици предиката из РИДЕ. У овом изразу можете дозволити или забранити даље промене логике паметних уговора на дАпп налогу.
Хајде да урадимо дАпп рачун као заједнички новчаник за све учеснике.
Да бисте проверили који уговор је тренутно активан на вашем налогу, можете копирати басе64 код паметног уговора у претраживач блокова и препознати га помоћу декомпајлера (
Водимо рачуна да логика паметног уговора одговара ономе што очекујемо.
Алис има још 2.972 ТАЛАСА на њеном салду.
Ова дАпп прати колико сваки учесник доприноси заједничком фонду кроз механизам трансакција података — Дата Ентри(цуррентКеи, невАмоунт), где је цуррентКеи рачун који позива функцију депозита, а невАмоунт је вредност допуњеног стања.
Бооб и Цоопер уплаћују своје депозите на дАпп рачун са 1 ВАВЕС.
Направимо грешку и трансакција не пролази. Пошто смо, упркос чињеници да смо били уверени да вршимо трансакцију у име Боба, направили грешку у индексу и навели банковни рачун који нема паметни уговор. Овде је вредно напоменути важну тачку - постоји накнада за неуспешне покушаје покретања трансакција не може се уклонити! Алис има још 2.972 ТАЛАСА на њеном салду. Боб има 3 ТАЛАСА.
Боб је послао 1 ВАВЕС на дАпп налог.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Бобу је остало 1.99 ТАЛАСА. То јест, Боб је платио 0.01 ВАВЕС провизију
Алиса је имала 2.972 ТАЛАСА на свом билансу, сада је 3.972. Трансакција је такође регистрована на Алице налогу, али није наплаћена провизија са дАпп налога (Алице).
Након што је Купер такође допунио рачун, Алисин биланс је постао 4.972 ТАЛАСА.
Можете сазнати ко поседује колико ВАВЕС-а у заједничком новчанику у претраживачу блокова на картици Подаци.
Купер се предомислио да остави износ од 1 ВАВЕС на општем новчанику и одлучио да повуче половину афинитета. Да би то урадио, мора позвати функцију повлачења.
Међутим, опет смо погрешили, пошто функција повлачења има потпуно другачије параметре и другачији потпис. Када дизајнирате паметне уговоре на РИДЕ4ДАППС, обратите пажњу на ову тачку
Цоопер сада има 2.48 ТАЛАСА у свом билансу стања. Сходно томе, 3 ТАЛАСА - 1 - 0.01, а затим + 0.5 - 0.01. Сходно томе, сваки позив за депозит и повлачење кошта 0.01 ВАВЕС. Као резултат тога, уноси у табели власника дАппс-а су се променили на следећи начин.
Боб је такође одлучио да повуче нешто новца из заједничког новчаника, али је направио грешку и покушао да подигне 1.5 ВАВЕС.
Међутим, паметни уговор је имао проверу за ову ситуацију.
Ксена је преварант, покушала је да повуче 1 ВАВЕС са укупног рачуна.
Ни њој то није пошло за руком.
У следећем делу ћемо размотрити сложенија питања везана за несавршеност Алице дАпп налога.
Извор: ввв.хабр.цом