Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)

Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)

Hello everyone!

Վերջերս Waves Labs հայտարարել է Մրցույթ ծրագրավորողների համար, որը նվիրված է RIDE խելացի պայմանագրային լեզվի ընդլայնման թողարկմանը ապակենտրոնացված հավելվածների համար Ride4Dapps-ը թեստային ցանցում:

Մենք ընտրեցինք DAO գործը, քանի որ Վենչուար նախատեսում է մշակել dApps սոցիալական գործառույթներով՝ քվեարկություն, դրամահավաք, վստահության կառավարում և այլն:
Մենք սկսեցինք պարզ օրինակով Հարց ու պատասխան նիստեր իսկ RIDE IDE - օրինակ հետ ընդհանուր դրամապանակ.

Եկեք նայենք այս օրինակին, փորձարկենք վարկածները և նայենք որոշ տարօրինակություններին.

Եկեք Ալիս ունենանք՝ dApp-ի սեփականատեր
Boob-ը և Cooper-ը Alice-ի գործընկերներն են, Alice-BC DAO-ի համահիմնադիրները
Նելին բիզնեսի սեփականատեր է, ով ֆինանսավորման կարիք ունի
Բանկ - բանկ, որը բաժանում է նշաններ

Փուլ 1. Մնացորդների սկզբնավորում

Ալիքների թեստային ցանցում նշաններ ստանալու համար անհրաժեշտ է կապ հաստատել ծորակ և նշեք այն հասցեն, որին պետք է ուղարկել խորհրդանիշներ:
Դուք կարող եք գտնել հասցեն IDE-ում՝ բացելով ձեր հաշվի տվյալները:
Մենք կարևորում ենք բանկի 10 ալիքները: Այնուհետև մենք ստուգում ենք, որ նրանք ժամանել են արգելափակման և գործարքի բրաուզերի միջոցով. գրախոս

Հիմա եկեք բանկից ժետոններ բաժանենք մնացած մասնակիցներին: (Ծանոթագրություններ. Ալիքների ցանցի բոլոր գործարքներն անվճար չեն, ուստի գործարքներ կատարելու համար բոլոր մասնակիցների համար պահանջվում է նվազագույն դրական հաշվեկշիռ):

1 ԱԼԻՔ = 100000000 միավոր (ալիքներ), քանի որ գումարները կարող են լինել միայն ամբողջ թիվ
0.01 WAVES (Գործարքի վճար) = 1000000

Բանկ -> [3 ալիքներ] -> Ալիս, TransferTransaction-ի միջոցով (Տեսակ՝ 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 հաշիվ

Մենք պայմանավորվեցինք, որ Ալիսը կլինի ապակենտրոնացված հավելվածի ստեղծողն ու սեփականատերը։
Գնացեք հաշիվներ, դրեք այն որպես SEED և ստուգեք env.SEED համընկնում Ալիսը:

Փորձենք տեղադրել ամենապարզ հնարավոր սցենարը (պայմանագիրը) Ալիսի հաշվում։
Ալիքների խելացի կոնտակտները պրեդիկատներ են, որոնք արգելում կամ թույլ են տալիս ցանկացած տեսակի ելքային գործարքի իրականացումը որոշակի պայմաններում: Այս դեպքում այս պայմանը ՄԻՇՏ է։ Պայմանագրի կոդը ճշմարիտ է: Call deploy().

Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)

Վճար մեկ setScript գործարքի համար 1400000/100000000 = 0.014 ալիքներ: Ալիսի մնացորդին մնացել է 2.986 ԱԼԻՔ:

Այժմ փորձենք տեղադրել ավելի բարդ խելացի պայմանագրային տրամաբանություն Alice հաշվի վրա, որը նկարագրված է օրինակ

Ride4Dapps այժմ ներառում է անոտացիայի 2 նոր տեսակ.

  1. @Callable(i) — որպես i պարամետր վերցնում է տվյալներ, թե որ հաշիվն է կանչել/ստորագրել գործարքը: Այս ֆունկցիայի արդյունքն է, որը որոշում է dApp հաշվի վիճակի փոփոխությունը: Այլ հաշիվները կարող են գործարքներ ստեղծել և գործառույթներ կատարել այս ծանոթագրությամբ և փոխել dApp հաշվի վիճակը:
  2. @Verifier (tx) - Գործարքի ստուգիչ tx պարամետրով: Համապատասխանում է RIDE-ի պրեդիկատի տրամաբանությանը: Հենց այս արտահայտությամբ դուք կարող եք թույլատրել կամ արգելել dApp հաշվում խելացի պայմանագրերի տրամաբանության հետագա փոփոխությունները:

Եկեք անենք դԱՊ հաշիվը որպես ընդհանուր դրամապանակ բոլոր մասնակիցների համար:
Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)

Ստուգելու համար, թե որ պայմանագիրն է ներկայումս ակտիվ ձեր հաշվում, կարող եք պատճենել խելացի պայմանագրի base64 կոդը բլոկ հետազոտողում և ճանաչել այն՝ օգտագործելով decompiler (օրինակ)
Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)
Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)
Սովորում ենք գրել Waves խելացի պայմանագրեր RIDE-ի և RIDE4DAPPS-ի վրա: Մաս 1 (Բազմօգտագործողի դրամապանակ)

Մենք համոզված ենք, որ խելացի պայմանագրի տրամաբանությունը համընկնում է մեր ակնկալածի հետ:
Ալիսի մնացորդին մնացել է 2.972 ​​ԱԼԻՔ:

Այս dApp-ը մեխանիզմի միջոցով հետևում է, թե յուրաքանչյուր մասնակից որքան է ներդրում ունենում ընդհանուր հիմնադրամում տվյալների գործարք — Տվյալների մուտք (current Key, newAmount), որտեղ currentKey-ն այն հաշիվն է, որը կանչում է ավանդի ֆունկցիան, իսկ newAmount-ը լրացված մնացորդի արժեքն է:

Boob-ը և Cooper-ն իրենց ավանդները կատարում են 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 հաշվի անկատարության հետ կապված ավելի բարդ խնդիրների:

Source: www.habr.com

Добавить комментарий