RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Привет!

Жақында Waves Labs жариялады орталықтандырылмаған Ride4Dapps қолданбалары үшін RIDE смарт келісімшарт тілі кеңейтімін сынақ желісіне шығаруға арналған әзірлеушілерге арналған конкурс!

Біз DAO ісін таңдадық, өйткені Вентуар әлеуметтік функциялары бар dApps әзірлеуді жоспарлайды: дауыс беру, қаражат жинау, сенімді басқару және т.б.
Біз қарапайым мысалдан бастадық Сұрақ-жауап сессиялары мен RIDE IDE - мысалмен ортақ әмиян.

Осы мысалды, гипотезаларды тексеріп, кейбір оғаш нәрселерді қарастырайық:

Бізге Алиса - dApp иесі болсын
Boob және Cooper - Алиса серіктестері, Alice-BC DAO негізін қалаушылар
Нели - қаржыландыруды қажет ететін бизнес иесі
Банк – жетондарды тарататын банк

1-кезең. Баланстарды инициализациялау

Токендерді толқындар сынау желісінде алу үшін сізге хабарласу керек кран және токендерді жіберуге болатын мекенжайды көрсетіңіз.
Тіркелгі мәліметтерін ашу арқылы мекенжайды IDE ішінен таба аласыз.
Біз Банктің 10 ТОЛҚЫНЫН бөлектейміз. Содан кейін олардың блок және транзакция браузері арқылы келгенін тексереміз: шолушы

Енді қалған қатысушыларға банктен жетондарды таратайық. (Ескертулер: waves желісіндегі барлық транзакциялар тегін емес, сондықтан барлық қатысушылар транзакциялар жасау үшін ең аз оң баланс қажет).

1 ТОЛҚЫН = 100000000 бірлік (толқындар), өйткені сомалар тек бүтін сан болуы мүмкін
0.01 ТОЛҚЫН (Транзакция комиссиясы) = 1000000

Bank -> [3 WAVES] -> Alice, TransferTransaction арқылы (Түрі: 4).

Біз транзакцияларға қол қойылған env.SEED біздің Банкке сәйкес келетінін тексереміз:
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Сәйкес негізгі сөз тіркесі болмаса, оған "Тіркелгілер" қойындысында ауысып, қайта тексеріңіз.
Осыдан кейін біз Алиса 3 WAVES аудару үшін транзакция жасаймыз, жариялаймыз және қол қоямыз.
Сондай-ақ, Алисаның деректерін env.accounts айнымалысы арқылы білуге ​​болады. Нөмірлеу 0-ден басталады, сондықтан Алиса env.accounts[1] болып табылады.
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

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

Нәтижені браузерде де байқауға болады, оған сілтеме орындалғаннан кейін бірден бізге қайтарылады транзакциялар.

Біз Алисаның балансы 3 ТОЛҚЫН арқылы толтырылғанына және банк балансы 10 - 3 - 0.01 = 0.699 болатынына көз жеткіземіз.
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Біз Boob және Cooper әрқайсысына 3 WAVES, ал Neli, Xena және Mark 0.2 WAVES әрқайсысына бірдей жолмен жібереміз.
(Ескертпелер: біз бір таңба қатесін жібердік және Neli 0.02 WAVES жібердік. Абайлаңыз!)

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

Барлық қатысушылардың балансын толтырғаннан кейін біз мыналарды көреміз:
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

2-кезең. dApp тіркелгісін жасаңыз

Біз Алиса орталықтандырылмаған қосымшаның жасаушысы және иесі болады деп келістік.
Тіркелгілерге өтіңіз, оны SEED ретінде орнатыңыз және env.SEED Алисаға сәйкес келетінін тексеріңіз.

Алисаның есептік жазбасына ең қарапайым сценарийді (келісімшартты) орнатуға тырысайық.
Толқындардағы смарт контактілер белгілі бір жағдайларда шығыс транзакцияның кез келген түріне тыйым салатын немесе рұқсат беретін предикаттар болып табылады. Бұл жағдайда бұл жағдай ӘРҚАШАН. Шарт коды шын. Қоңырау deploy().

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

setScript транзакциясы үшін комиссия 1400000/100000000 = 0.014 ТОЛҚЫН. Алисаның балансында 2.986 ТОЛҚЫН қалды.

Енді Alice тіркелгісінде сипатталған күрделі смарт келісімшарт логикасын орнатуға тырысайық мысал

Ride4Dapps енді 2 жаңа аннотация түрін қамтиды:

  1. @Callable(i) — i параметрі ретінде транзакцияға қандай шот шақырған/қол қойғаны туралы деректерді қабылдайды. Бұл dApp тіркелгісінің күйінің өзгеруін анықтайтын осы функцияның нәтижесі. Басқа тіркелгілер транзакциялар жасап, осы аннотациямен функцияларды орындай алады және dApp тіркелгісінің күйін өзгерте алады.
  2. @Verifier(tx) — tx транзакция параметрі бар транзакцияны тексеруші. RIDE предикат логикасына сәйкес келеді. Дәл осы өрнекте dApp тіркелгісіндегі смарт келісім-шарттар логикасына қосымша өзгертулерге рұқсат беруге немесе тыйым салуға болады.

Мұны істейік Dapper шот барлық қатысушылар үшін ортақ әмиян ретінде.
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Тіркелгіңізде қандай келісім-шарттың белсенді екенін тексеру үшін блок зерттеушісіне смарт келісімшарттың base64 кодын көшіріп, оны декомпилятор арқылы тануға болады (мысалы)
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Біз смарт келісімшарттың логикасы біз күткенге сәйкес келетініне көз жеткіземіз.
Алисаның балансында 2.972 ТОЛҚЫН қалды.

Бұл dApp тетік арқылы әрбір қатысушының ортақ қорға қанша үлес қосқанын бақылайды деректер транзакциясы — DataEntry(ағымдағыКілт, жаңаСома), мұндағы currentKey - депозит функциясын шақыратын шот, ал newAmount - толтырылған баланстың мәні.

Boob және Cooper dApp есептік жазбасына 1 WAVES арқылы салымдарын салады.
RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Біз қате жібереміз және транзакция орындалмайды. Бобтың атынан транзакция жасап жатқанымызға сенімді болғанымызға қарамастан, біз индексте қате жіберіп, смарт келісімшарты жоқ Банк шотын көрсеттік. Бұл жерде маңызды жайтты атап өткен жөн - транзакцияларды бастаудың сәтсіз әрекеттері үшін комиссия бар. жою мүмкін емес! Алисаның балансында 2.972 ТОЛҚЫН қалды. Бобтың 3 ТОЛҚЫНЫ бар.

Боб dApp тіркелгісіне 1 WAVES жіберді.

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

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Бобта 1.99 ТОЛҚЫН қалды. Яғни, Боб 0.01 WAVES комиссиясын төледі

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Алисаның балансында 2.972 ТОЛҚЫН болған, қазір ол 3.972. Сондай-ақ транзакция Alice есептік жазбасында тіркелді, бірақ dApp есептік жазбасынан (Алиса) комиссия алынбады.
Купер де шотты толтырғаннан кейін Алисаның балансы 4.972 ТОЛҚЫН болды.

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Жалпы әмияндағы қанша ТОЛҚЫН кімге тиесілі екенін «Деректер» қойындысындағы блок зерттеушісінен біле аласыз.

Купер жалпы әмиянға 1 ТОЛҚЫН сомасын қалдыру туралы ойын өзгертті және жақындықтың жартысын алып тастауға шешім қабылдады. Бұл әрекетті орындау үшін ол шығару функциясын шақыруы керек.

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Дегенмен, біз қайтадан қателестік, өйткені қайтару функциясының параметрлері мүлде басқа және қолтаңбасы басқаша. RIDE4DAPPS жүйесінде смарт келісім-шарттарды жасаған кезде осы тармаққа назар аудару керек

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Купердің балансында қазір 2.48 ТОЛҚЫН бар. Тиісінше, 3 ТОЛҚЫН - 1 - 0.01, содан кейін + 0.5 - 0.01. Тиісінше, депозитке және алуға әрбір қоңырау 0.01 WAVES тұрады. Нәтижесінде, dApps иелері кестесіндегі жазбалар келесідей өзгерді.

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Боб сондай-ақ ортақ әмияннан біраз ақша алуды шешті, бірақ қателесіп, 1.5 WAVES алуға тырысты.

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Дегенмен, смарт келісімшарт бұл жағдайды тексерді.

Xena - алаяқ, ол жалпы шоттан 1 ТОЛҚЫН алуға тырысты.

RIDE және RIDE4DAPPS жүйелерінде Waves смарт келісімшарттарын жазуды үйрену. 1-бөлім (көп пайдаланушы әмиян)

Бұл оған да нәтиже бермеді.

Келесі бөлімде біз Alice dApp тіркелгісінің жетілмегендігіне қатысты күрделі мәселелерді қарастырамыз.

Ақпарат көзі: www.habr.com

пікір қалдыру