Hello everyone!
Վերջերս Waves Labs
Մենք ընտրեցինք DAO գործը, քանի որ
Մենք սկսեցինք պարզ օրինակով
Եկեք նայենք այս օրինակին, փորձարկենք վարկածները և նայենք որոշ տարօրինակություններին.
Եկեք Ալիս ունենանք՝ dApp-ի սեփականատեր
Boob-ը և Cooper-ը Alice-ի գործընկերներն են, Alice-BC DAO-ի համահիմնադիրները
Նելին բիզնեսի սեփականատեր է, ով ֆինանսավորման կարիք ունի
Բանկ - բանկ, որը բաժանում է նշաններ
Փուլ 1. Մնացորդների սկզբնավորում
Ալիքների թեստային ցանցում նշաններ ստանալու համար անհրաժեշտ է կապ հաստատել
Դուք կարող եք գտնել հասցեն IDE-ում՝ բացելով ձեր հաշվի տվյալները:
Մենք կարևորում ենք բանկի 10 ալիքները: Այնուհետև մենք ստուգում ենք, որ նրանք ժամանել են արգելափակման և գործարքի բրաուզերի միջոցով.
Հիմա եկեք բանկից ժետոններ բաժանենք մնացած մասնակիցներին: (Ծանոթագրություններ. Ալիքների ցանցի բոլոր գործարքներն անվճար չեն, ուստի գործարքներ կատարելու համար բոլոր մասնակիցների համար պահանջվում է նվազագույն դրական հաշվեկշիռ):
1 ԱԼԻՔ = 100000000 միավոր (ալիքներ), քանի որ գումարները կարող են լինել միայն ամբողջ թիվ
0.01 WAVES (Գործարքի վճար) = 1000000
Բանկ -> [3 ալիքներ] -> Ալիս, TransferTransaction-ի միջոցով (Տեսակ՝ 4):
Մենք ստուգում ենք, որ env.SEED-ը, որից կնքվում են գործարքները, համապատասխանում է մեր Բանկին.

Եթե դուք չունեք համապատասխան սկզբնական արտահայտություն, պարզապես անցեք դրան «Հաշիվներ» ներդիրում և նորից ստուգեք:
Դրանից հետո մենք ստեղծում, հայտարարում և ստորագրում ենք 3 ալիք Ալիսի փոխանցման գործարք:
Դուք կարող եք նաև իմանալ Ալիսի տվյալները env.accounts փոփոխականի միջոցով: Համարակալումը սկսվում է 0-ից, ուստի Ալիսը env.accounts է[1]:
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Արդյունքը կարելի է դիտարկել նաև զննարկիչում, դրա հղումը մեզ կվերադարձվի կատարումից անմիջապես հետո
Մենք համոզվում ենք, որ Ալիսի մնացորդը համալրվում է 3 ալիքներով, և բանկային մնացորդը մնում է 10 - 3 - 0.01 = 0.699:
Բուբին և Կուպերին ուղարկում ենք 3-ական ԱԼԻՔ, իսկ Նելիին, Քսենային և Մարկին՝ 0.2-ական ԱԼԻՔ:
(Ծանոթագրություններ. Մենք մեկ նիշի սխալ թույլ տվեցինք և ուղարկեցինք Neli 0.02 WAVES: Զգույշ եղեք:)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Բոլոր մասնակիցների մնացորդները համալրելուց հետո տեսնում ենք.
Փուլ 2. Ստեղծեք dApp հաշիվ
Մենք պայմանավորվեցինք, որ Ալիսը կլինի ապակենտրոնացված հավելվածի ստեղծողն ու սեփականատերը։
Գնացեք հաշիվներ, դրեք այն որպես SEED և ստուգեք env.SEED համընկնում Ալիսը:
Փորձենք տեղադրել ամենապարզ հնարավոր սցենարը (պայմանագիրը) Ալիսի հաշվում։
Ալիքների խելացի կոնտակտները պրեդիկատներ են, որոնք արգելում կամ թույլ են տալիս ցանկացած տեսակի ելքային գործարքի իրականացումը որոշակի պայմաններում: Այս դեպքում այս պայմանը ՄԻՇՏ է։ Պայմանագրի կոդը ճշմարիտ է: Call deploy().
Վճար մեկ setScript գործարքի համար 1400000/100000000 = 0.014 ալիքներ: Ալիսի մնացորդին մնացել է 2.986 ԱԼԻՔ:
Այժմ փորձենք տեղադրել ավելի բարդ խելացի պայմանագրային տրամաբանություն Alice հաշվի վրա, որը նկարագրված է
Ride4Dapps այժմ ներառում է անոտացիայի 2 նոր տեսակ.
- @Callable(i) — որպես i պարամետր վերցնում է տվյալներ, թե որ հաշիվն է կանչել/ստորագրել գործարքը: Այս ֆունկցիայի արդյունքն է, որը որոշում է dApp հաշվի վիճակի փոփոխությունը: Այլ հաշիվները կարող են գործարքներ ստեղծել և գործառույթներ կատարել այս ծանոթագրությամբ և փոխել dApp հաշվի վիճակը:
- @Verifier (tx) - Գործարքի ստուգիչ tx պարամետրով: Համապատասխանում է RIDE-ի պրեդիկատի տրամաբանությանը: Հենց այս արտահայտությամբ դուք կարող եք թույլատրել կամ արգելել dApp հաշվում խելացի պայմանագրերի տրամաբանության հետագա փոփոխությունները:
Եկեք անենք դԱՊ հաշիվը որպես ընդհանուր դրամապանակ բոլոր մասնակիցների համար:
Ստուգելու համար, թե որ պայմանագիրն է ներկայումս ակտիվ ձեր հաշվում, կարող եք պատճենել խելացի պայմանագրի base64 կոդը բլոկ հետազոտողում և ճանաչել այն՝ օգտագործելով decompiler (
Մենք համոզված ենք, որ խելացի պայմանագրի տրամաբանությունը համընկնում է մեր ակնկալածի հետ:
Ալիսի մնացորդին մնացել է 2.972 ԱԼԻՔ:
Այս dApp-ը մեխանիզմի միջոցով հետևում է, թե յուրաքանչյուր մասնակից որքան է ներդրում ունենում ընդհանուր հիմնադրամում տվյալների գործարք — Տվյալների մուտք (current Key, newAmount), որտեղ currentKey-ն այն հաշիվն է, որը կանչում է ավանդի ֆունկցիան, իսկ newAmount-ը լրացված մնացորդի արժեքն է:
Boob-ը և Cooper-ն իրենց ավանդները կատարում են dApp հաշվին 1 ալիքով:
Մենք սխալվում ենք, և գործարքը չի կատարվում: Քանի որ, չնայած այն բանին, որ մենք համոզված էինք, որ գործարք ենք կատարում Բոբի անունից, մենք սխալ ենք թույլ տվել ինդեքսում և նշել Բանկային հաշիվ, որը չունի խելացի պայմանագիր: Այստեղ հարկ է նշել մի կարևոր կետ՝ գործարքներ սկսելու անհաջող փորձերի համար գանձվում է վճար. չի կարելի հեռացնել! Ալիսի մնացորդին մնացել է 2.972 ԱԼԻՔ: Բոբն ունի 3 ԱԼԻՔ:
Բոբը 1 WAVES ուղարկեց dApp հաշիվ:
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Բոբին մնացել է 1.99 ԱԼԻՔ: Այսինքն՝ Բոբը վճարել է 0.01 WAVES միջնորդավճար
Ալիսը իր հաշվեկշռում ուներ 2.972 ԱԼԻՔ, այժմ այն 3.972 է: Գործարք է գրանցվել նաև Alice հաշվի վրա, սակայն dApp հաշվից (Alice) միջնորդավճար չի գանձվել:
Այն բանից հետո, երբ Կուպերը նույնպես լրացրեց հաշիվը, Ալիսի մնացորդը դարձավ 4.972 WAVES:
Դուք կարող եք պարզել, թե ում է պատկանում ընդհանուր դրամապանակի քանի ԱԼԻՔ՝ բլոկի հետազոտողում Տվյալների ներդիրում:
Կուպերը մտափոխվել է ընդհանուր դրամապանակում 1 WAVES գումարը թողնելու մասին և որոշել է հանել մերձավորության կեսը։ Դա անելու համար նա պետք է կանչի դուրսբերման գործառույթը:
Այնուամենայնիվ, մենք կրկին սխալվեցինք, քանի որ դուրսբերման գործառույթն ունի բոլորովին այլ պարամետրեր և այլ ստորագրություն: Երբ դուք նախագծում եք խելացի պայմանագրեր RIDE4DAPPS-ի վրա, դուք պետք է ուշադրություն դարձնեք այս կետին
Կուպերն այժմ իր հաշվեկշռում ունի 2.48 ԱԼԻՔ: Համապատասխանաբար, 3 ալիքներ - 1 - 0.01, իսկ հետո + 0.5 - 0.01: Համապատասխանաբար, ավանդի և կանխիկացման յուրաքանչյուր զանգի արժեքը կազմում է 0.01 WAVES: Արդյունքում, dApps սեփականատերերի աղյուսակի գրառումները փոխվեցին հետևյալ կերպ.
Բոբը նույնպես որոշեց որոշ գումար հանել ընդհանուր դրամապանակից, բայց սխալվեց և փորձեց հանել 1.5 ալիք։
Այնուամենայնիվ, խելացի պայմանագիրն ուներ ստուգում այս իրավիճակի համար:
Քսենան խաբեբա է, նա փորձել է ընդհանուր հաշվից հանել 1 ԱԼԻՔ։
Նրա մոտ էլ չստացվեց։
Հաջորդ մասում մենք կանդրադառնանք Alice dApp հաշվի անկատարության հետ կապված ավելի բարդ խնդիրների:
Source: www.habr.com