Здравейте на всички!
Съвсем наскоро, Waves Labs
Избрахме случая DAO, защото
Започнахме с прост пример в
Нека да разгледаме този пример, да тестваме хипотези и да разгледаме някои странности:
Нека имаме Алис - собственик на 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, от който се подписват транзакциите, съответства на нашата банка:

Ако нямате съвпадаща начална фраза, просто превключете към нея в раздела Акаунти и проверете отново.
След това създаваме, обявяваме и подписваме транзакция за прехвърляне на 3 WAVES Alice.
Можете също да откриете данните на Алис чрез променливата env.accounts. Номерирането започва от 0, така че Alice е env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Резултатът може да се наблюдава и в браузъра, линк към него ще ни бъде върнат веднага след изпълнение
Уверяваме се, че балансът на Алис се попълва с 3 ВЪЛНИ, а банковият баланс остава 10 - 3 - 0.01 = 0.699.
Изпращаме на Буб и Купър по 3 ВЪЛНИ, а на Нели, Зина и Марк по 0.2 ВЪЛНИ по същия начин.
(Бележки: Допуснахме грешка с един знак и изпратихме на Нели 0.02 WAVES. Бъдете внимателни!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
След попълване на балансите на всички участници виждаме:
Етап 2. Създайте акаунт в dApp
Съгласихме се Алис да бъде създател и собственик на децентрализираното приложение.
Отидете на Акаунти, задайте го като SEED и проверете env.SEED съвпада с Alice.
Нека се опитаме да инсталираме възможно най-простия скрипт (договор) в акаунта на Алис.
Интелигентните контакти във Waves са предикати, които забраняват или позволяват извършването на всякакъв вид изходяща транзакция при определени условия. В този случай това условие е ВИНАГИ. Кодът на договора е верен. Обадете се на разгръщане().
Такса за setScript транзакция 1400000/100000000 = 0.014 WAVES. В баланса на Алиса остават 2.986 ВЪЛНИ.
Нека сега се опитаме да инсталираме по-сложна логика на интелигентен договор в акаунта на Alice, описан в
Ride4Dapps вече включва 2 нови типа пояснения:
- @Callable(i) — приема като параметър i данни за това кой акаунт е извикал/подписал транзакцията. Резултатът от тази функция определя промяната в състоянието на dApp акаунта. Други акаунти могат да създават транзакции и да изпълняват функции с тази анотация и да променят състоянието на акаунта на dApp.
- @Verifier(tx) — Проверка на транзакция с параметъра tx на транзакция. Съответства на предикатната логика от RIDE. Именно в този израз можете да разрешите или забраните по-нататъшни промени в логиката на интелигентните договори в акаунта на dApp.
Нека да направим DAPP акаунт като общ портфейл за всички участници.
За да проверите кой договор е активен в момента във вашия акаунт, можете да копирате кода base64 на интелигентния договор в блоковия изследовател и да го разпознаете с помощта на декомпилатор (
Ние се уверяваме, че логиката на интелигентния договор отговаря на това, което очакваме.
В баланса на Алиса остават 2.972 ВЪЛНИ.
Това dApp следи колко всеки участник допринася за общия фонд чрез механизъм транзакция с данни — DataEntry(currentKey, newAmount), където currentKey е сметката, която извиква функцията за депозит, а newAmount е стойността на попълнения баланс.
Буб и Купър правят своите депозити в сметката на dApp с 1 WAVES.
Правим грешка и транзакцията не минава. Тъй като въпреки факта, че бяхме убедени, че правим транзакция от името на Боб, направихме грешка в индекса и посочихме банкова сметка, която няма интелигентен договор. Тук си струва да се отбележи важен момент - има такса за неуспешни опити за иницииране на транзакции не може да се премахне! В баланса на Алиса остават 2.972 ВЪЛНИ. Боб има 3 ВЪЛНИ.
Боб изпрати 1 WAVES до акаунта на dApp.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
На Боб му остават 1.99 WAVES. Тоест Боб е платил 0.01 WAVES комисионна
Алис имаше 2.972 WAVES в баланса си, сега е 3.972. Транзакция беше регистрирана и в акаунта на Alice, но не беше начислена комисионна от акаунта на dApp (Alice).
След като Купър също попълни сметката, балансът на Алис стана 4.972 WAVES.
Можете да разберете кой притежава колко WAVES в общия портфейл в блоковия изследовател в раздела Данни.
Купър промени решението си да остави сумата от 1 WAVES в общия портфейл и реши да изтегли половината от афинитета. За да направи това, той трябва да извика функцията за изтегляне.
Но отново сгрешихме, тъй като функцията за теглене има съвсем различни параметри и различен подпис. Когато проектирате интелигентни договори на RIDE4DAPPS, трябва да обърнете внимание на тази точка
Купър вече има 2.48 WAVES в баланса си. Съответно 3 ВЪЛНИ - 1 - 0.01, а след това + 0.5 - 0.01. Съответно всяко обаждане за депозиране и теглене струва 0.01 WAVES. В резултат на това записите в таблицата на собствениците на dApps се промениха, както следва.
Боб също реши да изтегли малко пари от споделения портфейл, но направи грешка и се опита да изтегли 1.5 WAVES.
Интелигентният договор обаче имаше проверка за тази ситуация.
Зина е измамник, тя се опита да изтегли 1 WAVES от общата сметка.
И при нея не се получи.
В следващата част ще разгледаме по-сложни проблеми, свързани с несъвършенството на Alice dApp Account.
Източник: www.habr.com