Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Здраво на сите!

Во поново време, Waves Labs објавија конкурс за програмери посветен на објавувањето на екстензијата за јазик за паметни договори RIDE за децентрализирани апликации Ride4Dapps во тест мрежата!

Го избравме случајот DAO затоа што Вентуар планира да развие dApps со социјални функции: гласање, прибирање средства, управување со доверба итн.
Започнавме со едноставен пример во Сесии за прашања и одговори и ВОЗЕТЕ ИДЕ - пример со заеднички паричник.

Да го погледнеме овој пример, да ги тестираме хипотезите и да погледнеме некои необичности:

Дозволете ни да ја имаме Алис - Сопственик на dApp
Буб и Купер се партнери на Алис, ко-основачи на Алис-БЦ ДАО
Нели е сопственик на бизнис кој има потреба од финансирање
Банка - банка која дистрибуира токени

Фаза 1. Иницијализирање на салда

За да примате токени на мрежата за тестирање бранови, треба да контактирате тапа и наведете ја адресата на која треба да се испратат токени.
Можете да ја најдете адресата во IDE со отворање на деталите за вашата сметка.
Ја истакнуваме банката 10 бранови. Потоа проверуваме дали пристигнале преку прелистувачот за блокирање и трансакции: рецензент

Сега ајде да дистрибуираме токени од банката до останатите учесници. (Забелешки: Сите трансакции на мрежата waves не се бесплатни, затоа е потребен минимален позитивен биланс за сите учесници да вршат трансакции).

1 БРАНОВИ = 100000000 единици (бранови), бидејќи износите можат да бидат само цел број
0.01 WAVES (надоместок за трансакција) = 1000000

Банка -> [3 БРАНОВИ] -> Алиса, преку Трансфер трансакција (Тип: 4).

Проверуваме дали env.SEED од која се потпишуваат трансакциите се совпаѓа со нашата банка:
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Ако немате соодветна фраза за семе, само префрлете се на неа во картичката Сметки и проверете повторно.
По ова, создаваме, објавуваме и потпишуваме трансакција за пренос на 3 БРАНОВИ Алиса.
Податоците на Алис може да ги дознаете и преку променливата env.accounts. Нумерирањето започнува од 0, така што Алис е env.accounts[1].
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

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

Резултатот може да се забележи и во прелистувачот, врската до него ќе ни биде вратена веднаш по извршувањето трансакции.

Уверуваме дека билансот на Алиса е надополнет со 3 БРАНОВИ, а салдото на банката останува на 10 - 3 - 0.01 = 0.699.
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

На Буб и Купер им испраќаме по 3 БРАНОВИ, а на Нели, Ксена и Марк по 0.2 БРАНОВИ на ист начин.
(Забелешки: Направивме грешка со еден знак и испративме на Neli 0.02 WAVES. Бидете внимателни!)

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

По надополнувањето на билансите на сите учесници, гледаме:
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Фаза 2. Создадете dApp сметка

Се договоривме Алис да биде креаторот и сопственикот на децентрализираната апликација.
Одете во Accounts, поставете го како SEED и проверете env.SEED одговара на Alice.

Ајде да се обидеме да ја инсталираме наједноставната можна скрипта (договор) на сметката на Алис.
Паметните контакти во Waves се предикати кои забрануваат или дозволуваат било каков вид на појдовна трансакција да се случи под одредени услови. Во овој случај, оваа состојба е СЕКОГАШ. Кодот на договорот е вистинит. Повик deploy().

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Надомест по трансакција setScript 1400000/100000000 = 0.014 БРАНОВИ. На Алис и останале 2.986 БРАНОВИ на салдото.

Ајде сега да се обидеме да инсталираме посложена логика на паметни договори на сметката на Алис, опишана во пример

Ride4Dapps сега вклучува 2 нови типа на прибелешки:

  1. @Callable(i) — ги зема како параметар i, податоци за тоа која сметка ја повикала/потпишала трансакцијата. Тоа е резултат на оваа функција што ја одредува промената во состојбата на сметката dApp. Другите сметки можат да креираат трансакции и да извршуваат функции со оваа прибелешка и да ја менуваат состојбата на сметката dApp.
  2. @Verifier(tx) — Проверувач на трансакции со параметарот трансакција tx. Одговара на логиката на предикатот од RIDE. Токму во овој израз можете да дозволите или забраните понатамошни промени во логиката на паметните договори на сметката dApp.

Ајде dApp сметка како заеднички паричник за сите учесници.
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

За да проверите кој договор е моментално активен на вашата сметка, можете да го копирате кодот base64 на паметниот договор во block explorer и да го препознаете со помош на декомпајлер (на пример)
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Се грижиме логиката на паметниот договор да одговара на она што го очекуваме.
На Алис и останале 2.972 БРАНОВИ на салдото.

Оваа dApp следи колку секој учесник придонесува во заедничкиот фонд преку механизам трансакција на податоци - Внес на податоци (тековен клуч, нова количина), каде што currentKey е сметката што ја повикува функцијата за депозит, а newAmount е вредноста на пополнетото салдо.

Буб и Купер ги вложуваат своите депозити на сметката dApp со 1 БРАН.
Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Ние грешиме и трансакцијата не оди. Бидејќи, и покрај тоа што бевме убедени дека правиме трансакција во име на Боб, направивме грешка во индексот и посочивме банкарска сметка која нема паметен договор. Вреди да се забележи важна точка овде - има надомест за неуспешни обиди за иницирање трансакции не може да се отстрани! На Алис и останале 2.972 БРАНОВИ на салдото. Боб има 3 БРАНОВИ.

Боб испрати 1 WAVES на сметката dApp.

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

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

На Боб му преостануваат уште 1.99 БРАНОВИ. Односно, Боб платил 0.01 WAVES провизија

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Алис имаше 2.972 БРАНОВИ на нејзиното салдо, сега е 3.972. Регистрирана е трансакција и на сметката на Alice, но не се наплатува провизија од сметката dApp (Alice).
Откако Купер ја надополни сметката, салдото на Алис стана 4.972 WAVES.

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Можете да дознаете кој поседува колку БРАНОВИ во заедничкиот паричник во блок-истражувачот во табулаторот Податоци.

Купер се предомислил да остави износ од 1 WAVES на општиот паричник и решил да повлече половина од афинитетот. За да го направите ова, тој мора да ја повика функцијата за повлекување.

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Сепак, повторно згрешивме, бидејќи функцијата за повлекување има сосема различни параметри и различен потпис. Кога дизајнирате паметни договори на RIDE4DAPPS, треба да обрнете внимание на оваа точка

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Купер сега има 2.48 БРАНОВИ на билансот на состојба. Соодветно на тоа, 3 БРАНОВИ - 1 - 0.01, а потоа + 0.5 - 0.01. Според тоа, секој повик за депонирање и повлекување чини 0.01 WAVES. Како резултат на тоа, записите во табелата со сопственици на dApps се променија на следниов начин.

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Боб, исто така, решил да повлече пари од заедничкиот паричник, но направил грешка и се обидел да повлече 1.5 БРАН.

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Сепак, паметниот договор имаше проверка за оваа ситуација.

Зена е измамник, таа се обиде да повлече 1 БРАН од вкупната сметка.

Учење да пишувате паметни договори на Waves на RIDE и RIDE4DAPPS. Дел 1 (паричник со повеќе корисници)

Ниту не и појде од рака.

Во следниот дел, ќе разгледаме посложени прашања поврзани со несовршеноста на сметката Alice dApp.

Извор: www.habr.com

Додадете коментар