Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Здравейте на всички!

Съвсем наскоро, Waves Labs съобщи състезание за разработчици, посветено на пускането на езиковото разширение за интелигентен договор RIDE за децентрализирани приложения Ride4Dapps в тестовата мрежа!

Избрахме случая DAO, защото Вентуари планира да разработи dApps със социални функции: гласуване, набиране на средства, доверително управление и др.
Започнахме с прост пример в Сесии с въпроси и отговори и RIDE IDE - пример със споделен портфейл.

Нека да разгледаме този пример, да тестваме хипотези и да разгледаме някои странности:

Нека имаме Алис - собственик на dApp
Boob и Cooper са партньори на Alice, съоснователи на Alice-BC DAO
Нели е собственик на бизнес, който се нуждае от финансиране
Банка - банка, която разпространява токени

Етап 1. Инициализация на баланси

За да получите токени в мрежата за тестване на вълните, трябва да се свържете кранче и посочете адреса, на който да изпратите токени.
Можете да намерите адреса в IDE, като отворите данните за акаунта си.
Открояваме Bank 10 WAVES. След това проверяваме дали са пристигнали през браузъра за блокиране и транзакции: рецензент

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

1 WAVES = 100000000 единици (wavelets), тъй като сумите могат да бъдат само цели числа
0.01 WAVES (такса за транзакция) = 1000000

Банка -> [3 ВЪЛНИ] -> Алиса, чрез TransferTransaction (Тип: 4).

Ние проверяваме дали env.SEED, от който се подписват транзакциите, съответства на нашата банка:
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Ако нямате съвпадаща начална фраза, просто превключете към нея в раздела Акаунти и проверете отново.
След това създаваме, обявяваме и подписваме транзакция за прехвърляне на 3 WAVES Alice.
Можете също да откриете данните на Алис чрез променливата env.accounts. Номерирането започва от 0, така че Alice е 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 ВЪЛНИ по същия начин.
(Бележки: Допуснахме грешка с един знак и изпратихме на Нели 0.02 WAVES. Бъдете внимателни!)

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

След попълване на балансите на всички участници виждаме:
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Етап 2. Създайте акаунт в dApp

Съгласихме се Алис да бъде създател и собственик на децентрализираното приложение.
Отидете на Акаунти, задайте го като SEED и проверете env.SEED съвпада с Alice.

Нека се опитаме да инсталираме възможно най-простия скрипт (договор) в акаунта на Алис.
Интелигентните контакти във Waves са предикати, които забраняват или позволяват извършването на всякакъв вид изходяща транзакция при определени условия. В този случай това условие е ВИНАГИ. Кодът на договора е верен. Обадете се на разгръщане().

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Такса за setScript транзакция 1400000/100000000 = 0.014 WAVES. В баланса на Алиса остават 2.986 ВЪЛНИ.

Нека сега се опитаме да инсталираме по-сложна логика на интелигентен договор в акаунта на Alice, описан в пример

Ride4Dapps вече включва 2 нови типа пояснения:

  1. @Callable(i) — приема като параметър i данни за това кой акаунт е извикал/подписал транзакцията. Резултатът от тази функция определя промяната в състоянието на dApp акаунта. Други акаунти могат да създават транзакции и да изпълняват функции с тази анотация и да променят състоянието на акаунта на dApp.
  2. @Verifier(tx) — Проверка на транзакция с параметъра tx на транзакция. Съответства на предикатната логика от RIDE. Именно в този израз можете да разрешите или забраните по-нататъшни промени в логиката на интелигентните договори в акаунта на dApp.

Нека да направим DAPP акаунт като общ портфейл за всички участници.
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

За да проверите кой договор е активен в момента във вашия акаунт, можете да копирате кода base64 на интелигентния договор в блоковия изследовател и да го разпознаете с помощта на декомпилатор (например)
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)
Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Ние се уверяваме, че логиката на интелигентния договор отговаря на това, което очакваме.
В баланса на Алиса остават 2.972 ВЪЛНИ.

Това dApp следи колко всеки участник допринася за общия фонд чрез механизъм транзакция с данни — DataEntry(currentKey, newAmount), където currentKey е сметката, която извиква функцията за депозит, а newAmount е стойността на попълнения баланс.

Буб и Купър правят своите депозити в сметката на dApp с 1 WAVES.
Научете се да пишете интелигентни договори на 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 WAVES. Тоест Боб е платил 0.01 WAVES комисионна

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Алис имаше 2.972 WAVES в баланса си, сега е 3.972. Транзакция беше регистрирана и в акаунта на Alice, но не беше начислена комисионна от акаунта на dApp (Alice).
След като Купър също попълни сметката, балансът на Алис стана 4.972 WAVES.

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Можете да разберете кой притежава колко WAVES в общия портфейл в блоковия изследовател в раздела Данни.

Купър промени решението си да остави сумата от 1 WAVES в общия портфейл и реши да изтегли половината от афинитета. За да направи това, той трябва да извика функцията за изтегляне.

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Но отново сгрешихме, тъй като функцията за теглене има съвсем различни параметри и различен подпис. Когато проектирате интелигентни договори на RIDE4DAPPS, трябва да обърнете внимание на тази точка

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Купър вече има 2.48 WAVES в баланса си. Съответно 3 ВЪЛНИ - 1 - 0.01, а след това + 0.5 - 0.01. Съответно всяко обаждане за депозиране и теглене струва 0.01 WAVES. В резултат на това записите в таблицата на собствениците на dApps се промениха, както следва.

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Боб също реши да изтегли малко пари от споделения портфейл, но направи грешка и се опита да изтегли 1.5 WAVES.

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

Интелигентният договор обаче имаше проверка за тази ситуация.

Зина е измамник, тя се опита да изтегли 1 WAVES от общата сметка.

Научете се да пишете интелигентни договори на Waves на RIDE и RIDE4DAPPS. Част 1 (Многопотребителски портфейл)

И при нея не се получи.

В следващата част ще разгледаме по-сложни проблеми, свързани с несъвършенството на Alice dApp Account.

Източник: www.habr.com

Добавяне на нов коментар