Խելացի պայմանագրերի ներածություն

Այս հոդվածում մենք կանդրադառնանք, թե ինչ են խելացի պայմանագրերը, ինչ են դրանք, կծանոթանանք խելացի պայմանագրերի տարբեր հարթակների, դրանց առանձնահատկությունների հետ, ինչպես նաև կքննարկենք, թե ինչպես են դրանք աշխատում և ինչ առավելություններ կարող են բերել: Այս նյութը շատ օգտակար կլինի այն ընթերցողների համար, ովքեր լավ ծանոթ չեն խելացի պայմանագրերի թեմային, բայց ցանկանում են ավելի մոտենալ այն հասկանալուն։

Կանոնավոր պայմանագիր ընդդեմ. խելացի պայմանագիր

Նախքան մանրամասների մեջ խորանալը, եկեք օրինակ վերցնենք սովորական պայմանագրի տարբերությունը, որը նշված է թղթի վրա, և խելացի պայմանագրի միջև, որը ներկայացված է թվայնորեն:

Խելացի պայմանագրերի ներածություն

Ինչպե՞ս էր սա աշխատում մինչև խելացի պայմանագրերի հայտնվելը: Պատկերացրեք մի խումբ մարդկանց, ովքեր ցանկանում են սահմանել արժեքների բաշխման որոշակի կանոններ և պայմաններ, ինչպես նաև որոշակի մեխանիզմ՝ երաշխավորելու այդ բաշխման իրականացումը տվյալ կանոնների և պայմանների համաձայն։ Այնուհետև նրանք հավաքվում էին, կազմում էին մի թուղթ, որի վրա գրում էին իրենց նույնականացման տվյալները, պայմանները, արժեքները, նշում էին թվագրումը և ստորագրում: Այս պայմանագիրը նույնպես վավերացվել է վստահելի անձի կողմից, ինչպիսին է նոտարը: Այնուհետև, այս մարդիկ նման պայմանագրի իրենց թղթային օրինակով գնացին տարբեր ուղղություններով և սկսեցին կատարել որոշ գործողություններ, որոնք կարող էին չհամապատասխանել բուն պայմանագրին, այսինքն՝ նրանք մի բան արեցին, բայց թղթի վրա հաստատվեց, որ պետք է ինչ-որ բան անեն։ բոլորովին այլ. Իսկ ինչպե՞ս դուրս գալ այս իրավիճակից։ Փաստորեն, խմբի անդամներից մեկը պետք է վերցնի այս թուղթը, վերցնի որոշ ապացույցներ, տանի դատարան և հասնի պայմանագրի և իրական գործողությունների համապատասխանությանը: Շատ հաճախ դժվար է հասնել այս պայմանագրի արդար իրականացմանը, ինչը հանգեցնում է տհաճ հետևանքների։

Ի՞նչ կարելի է ասել խելացի պայմանագրերի մասին: Դրանք համատեղում են և՛ պայմանագրի պայմանները գրելու հնարավորությունը, և՛ դրանց խստիվ իրականացման մեխանիզմը։ Եթե ​​պայմանները սահմանվել են, և համապատասխան գործարքը կամ հարցումը ստորագրվել է, ապա այդ հարցումը կամ գործարքն ընդունվելուց հետո այլևս հնարավոր չէ փոխել պայմանները կամ ազդել դրանց կատարման վրա։

Կա մեկ վավերացնող կամ մի ամբողջ ցանց, ինչպես նաև տվյալների բազա, որը պահում է բոլոր խելացի պայմանագրերը, որոնք ներկայացվել են կատարման խիստ ժամանակագրական կարգով: Կարևոր է նաև, որ այս տվյալների բազան պետք է պարունակի խելացի պայմանագիրը գործարկելու համար ձգանման բոլոր պայմանները: Բացի այդ, այն պետք է հաշվի առնի հենց այն արժեքը, որի բաշխումը նկարագրված է պայմանագրում: Եթե ​​դա վերաբերում է որոշ թվային արժույթի, ապա այս տվյալների բազան պետք է հաշվի առնի դա:

Այլ կերպ ասած, խելացի պայմանագրերի վավերացնողները պետք է մուտք ունենան բոլոր այն տվյալներին, որոնց վրա գործում է խելացի պայմանագիրը: Օրինակ, միասնական տվյալների բազան պետք է օգտագործվի թվային արժույթների, օգտատերերի մնացորդների, օգտատերերի գործարքների և ժամանակի դրոշմանիշների համար միաժամանակ: Այնուհետև, խելացի պայմանագրում պայմանը կարող է լինել օգտատիրոջ մնացորդը որոշակի արժույթով, որոշակի ժամանակի ժամանումը կամ այն ​​փաստը, որ որոշակի գործարք է իրականացվել, բայց ոչ ավելին:

Խելացի պայմանագրի սահմանում

Ընդհանուր առմամբ, տերմինաբանությունը ինքնին ստեղծվել է հետազոտող Նիք Սզաբոյի կողմից և առաջին անգամ օգտագործվել 1994 թվականին, և փաստագրվել է 1997 թվականին մի հոդվածում, որը նկարագրում է խելացի պայմանագրերի գաղափարը:

Խելացի պայմանագրերը ենթադրում են, որ իրականացվում է արժեքի բաշխման որոշակի ավտոմատացում, որը կարող է կախված լինել միայն այն պայմաններից, որոնք նախապես որոշված ​​են: Իր ամենապարզ ձևով այն նման է խիստ սահմանված պայմաններով պայմանագրի, որը ստորագրվում է որոշակի կողմերի կողմից։

Խելացի պայմանագրերը նախատեսված են երրորդ կողմերի նկատմամբ վստահությունը նվազագույնի հասցնելու համար: Երբեմն իսպառ բացառվում է որոշումների կայացման կենտրոնը, որից ամեն ինչ կախված է։ Բացի այդ, նման պայմանագրերն ավելի հեշտ են ստուգել: Սա նման համակարգի որոշ նախագծային առանձնահատկությունների հետևանք է, բայց ամենից հաճախ մենք խելացի պայմանագրով հասկանում ենք ապակենտրոնացված միջավայր և գործառույթների առկայություն, որոնք թույլ են տալիս յուրաքանչյուրին վերլուծել տվյալների բազան և իրականացնել պայմանագրերի կատարման ամբողջական աուդիտ: Սա ապահովում է պաշտպանություն տվյալների հետադարձ փոփոխություններից, որոնք կհանգեցնեն բուն պայմանագրի կատարման փոփոխություններին: Խելացի պայմանագիր ստեղծելիս և գործարկելիս գործընթացների մեծ մասի թվայնացումը հաճախ պարզեցնում է դրանց իրականացման տեխնոլոգիան և արժեքը:

Պարզ օրինակ՝ Escrow ծառայություն

Դիտարկենք մի շատ պարզ օրինակ. Այն կօգնի ձեզ ավելի մոտենալ խելացի պայմանագրերի ֆունկցիոնալությունը հասկանալուն, ինչպես նաև ավելի լավ հասկանալ, թե որ դեպքերում դրանք պետք է օգտագործվեն:

Խելացի պայմանագրերի ներածություն

Այն կարող է իրականացվել նաև բիթքոյնի միջոցով, թեև հենց հիմա Բիթքոյնը դժվար թե կարելի է անվանել խելացի պայմանագրերի լիարժեք հարթակ: Այսպիսով, մենք ունենք որոշ գնորդ և ունենք առցանց խանութ: Հաճախորդը ցանկանում է մոնիտոր գնել այս խանութից: Ամենապարզ դեպքում գնորդը լրացնում և ուղարկում է վճարումը, իսկ առցանց խանութն ընդունում է այն, հաստատում այն ​​և հետո առաքում ապրանքը: Այնուամենայնիվ, այս իրավիճակում մեծ վստահության կարիք կա՝ գնորդը պետք է վստահի առցանց խանութին մոնիտորի ողջ արժեքի համար: Քանի որ առցանց խանութը կարող է ցածր համբավ ունենալ գնորդի աչքում, վտանգ կա, որ ինչ-ինչ պատճառներով, վճարումն ընդունելուց հետո, խանութը հրաժարվի սպասարկումից և ապրանքը գնորդին չուղարկի: Հետևաբար, գնորդը հարց է տալիս (և, համապատասխանաբար, առցանց խանութը տալիս է այս հարցը), թե ինչ կարելի է կիրառել այս դեպքում՝ նման ռիսկերը նվազագույնի հասցնելու և նման գործարքներն ավելի հուսալի դարձնելու համար։

Բիթքոյնի դեպքում հնարավոր է թույլ տալ գնորդին և վաճառողին ինքնուրույն ընտրել միջնորդ: Շատ են մարդիկ, ովքեր զբաղվում են վիճելի հարցերի լուծմամբ։ Իսկ մեր մասնակիցները կարող են միջնորդների ընդհանուր ցանկից ընտրել նրան, ում կվստահեն: Նրանք միասին ստեղծում են 2-ից 3-ը բազմաստորագրային հասցե, որտեղ կա երեք բանալի, և երկու ստորագրություն՝ ցանկացած երկու բանալիով, պահանջվում է այդ հասցեից մետաղադրամներ ծախսելու համար: Մեկ բանալին պատկանելու է գնորդին, երկրորդը՝ առցանց խանութին, երրորդը՝ միջնորդին։ Իսկ նման բազմաստորագրային հասցեին գնորդը կուղարկի մոնիտորի համար վճարելու համար անհրաժեշտ գումարը։ Այժմ, երբ վաճառողը տեսնում է, որ գումարը որոշ ժամանակով արգելափակված է իրենից կախված բազմաստորագրային հասցեում, նա կարող է ապահով կերպով ուղարկել մոնիտորը փոստով:

Այնուհետև գնորդը ստանում է ծանրոցը, ստուգում է ապրանքը և որոշում կայացնում վերջնական գնման վերաբերյալ: Նա կարող է լիովին համաձայնվել մատուցվող ծառայության հետ և գործարքը ստորագրել իր բանալիով, որտեղ բազմաստորագրային հասցեից մետաղադրամներ է փոխանցում վաճառողին, կամ գուցե ինչ-որ բանից դժգոհ է։ Երկրորդ դեպքում նա կապվում է միջնորդի հետ՝ այլընտրանքային գործարք կազմելու համար, որը կբաշխի այդ մետաղադրամները այլ կերպ:

Ենթադրենք, մոնիտորը եկավ մի փոքր քերծված, և փաթեթը համակարգչին միանալու մալուխ չկար, թեև առցանց խանութի կայքում գրված էր, որ մալուխը պետք է ներառվի փաթեթի մեջ: Այնուհետև գնորդը հավաքում է ապացույցներ, որոնք անհրաժեշտ են միջնորդին ապացուցելու համար, որ իրեն խաբել են այս իրավիճակում. նա լուսանկարում է կայքի սքրինշոթերը, լուսանկարում է փոստի անդորրագիրը, լուսանկարում է մոնիտորի քերծվածքները և ցույց տալիս, որ կնիքը եղել է։ կոտրվել է, և մալուխը հանվել է. Առցանց խանութն իր հերթին հավաքում է իր ապացույցները և փոխանցում միջնորդին։

Հաշտարարը շահագրգռված է միաժամանակ բավարարել և՛ գնորդի վրդովմունքը, և՛ առցանց խանութի շահերը (թե ինչու պարզ կդառնա ավելի ուշ): Այն իրենից ներկայացնում է գործարք, որի ժամանակ բազմաստորագրային հասցեից մետաղադրամները որոշակի համամասնությամբ կծախսվեն գնորդի, առցանց խանութի և միջնորդի միջև, քանի որ նա իր աշխատանքի համար մի մասը վերցնում է որպես վարձատրություն: Ասենք, ընդհանուր գումարի 90%-ը բաժին է ընկնում վաճառողին, 5%-ը՝ միջնորդին, իսկ 5%-ը՝ փոխհատուցումը՝ գնորդին։ Միջնորդն այս գործարքը ստորագրում է իր բանալիով, սակայն այն դեռ չի կարող կիրառվել, քանի որ դրա համար անհրաժեշտ է երկու ստորագրություն, բայց միայն մեկն արժե այն։ Այն ուղարկում է նման գործարք ինչպես գնորդին, այնպես էլ վաճառողին: Եթե ​​նրանցից գոնե մեկը բավարարվի մետաղադրամների վերաբաշխման այս տարբերակով, ապա գործարքը նախապես կկնքվի և կբաշխվի ցանցին: Այն վավերացնելու համար բավական է, որ գործարքի կողմերից մեկը համաձայնի միջնորդի տարբերակին։

Կարևոր է սկզբում ընտրել միջնորդ, որպեսզի երկու մասնակիցներն էլ վստահեն նրան: Այս դեպքում նա կգործի մեկի կամ մյուսի շահերից անկախ և օբյեկտիվորեն կգնահատի իրավիճակը։ Եթե ​​միջնորդը չի տրամադրում մետաղադրամներ բաժանելու տարբերակ, որը կբավարարի առնվազն մեկ մասնակցի, ապա, համաձայնության գալով միասին, և՛ գնորդը, և՛ առցանց խանութը կարող են մետաղադրամները ուղարկել նոր բազմաստորագրային հասցե՝ դնելով իրենց երկու ստորագրությունները: Նոր բազմաստորագրային հասցեն կկազմվի այլ միջնորդի հետ, որը կարող է ավելի իրավասու լինել այդ հարցում և ավելի լավ տարբերակ տրամադրել:

Օրինակ՝ հանրակացարանով և սառնարանով

Դիտարկենք ավելի բարդ օրինակ, որն ավելի հստակ ցույց է տալիս խելացի պայմանագրի հնարավորությունները:

Խելացի պայմանագրերի ներածություն

Ենթադրենք, կան երեք տղաներ, ովքեր վերջերս են տեղափոխվել նույն հանրակացարանի սենյակ: Նրանք երեքով հետաքրքրված են իրենց սենյակի համար սառնարան գնելով, որը կարող են միասին օգտագործել։ Նրանցից մեկը կամավոր է հավաքել անհրաժեշտ գումարը՝ սառնարան գնելու և վաճառողի հետ բանակցելու համար։ Սակայն նրանք միայն վերջերս են հանդիպել միմյանց, և նրանց միջև բավարար վստահություն չկա։ Ակնհայտ է, որ նրանցից երկուսը ռիսկի են դիմում՝ երրորդին փող տալով։ Բացի այդ, նրանք պետք է համաձայնության գան վաճառողի ընտրության հարցում։

Նրանք կարող են օգտվել էսքրոու ծառայությունից, այսինքն՝ ընտրել միջնորդ, ով կվերահսկի գործարքի կատարումը և կլուծի վիճահարույց հարցերը, եթե այդպիսիք առաջանան: Հետո, համաձայնվելով, խելացի պայմանագիր են կազմում և դրանում որոշակի պայմաններ սահմանում։

Առաջին պայմանն այն է, որ մինչև որոշակի ժամանակ, ասենք մեկ շաբաթվա ընթացքում, համապատասխան խելացի պայմանագրային հաշիվը պետք է ստանա երեք վճարում որոշակի հասցեներից որոշակի գումարի դիմաց։ Եթե ​​դա տեղի չունենա, խելացի պայմանագիրը դադարում է գործել և մետաղադրամները վերադարձնում է բոլոր մասնակիցներին: Եթե ​​պայմանը բավարարված է, ապա սահմանվում են վաճառողի և միջնորդի նույնացուցիչների արժեքները, և ստուգվում է պայմանը, որ բոլոր մասնակիցները համաձայն են վաճառողի և միջնորդի ընտրությանը: Երբ բոլոր պայմանները կատարվեն, այդ ժամանակ միջոցները կփոխանցվեն նշված հասցեներով։ Այս մոտեցումը կարող է պաշտպանել մասնակիցներին ցանկացած կողմից խարդախությունից և ընդհանրապես վերացնում է վստահության անհրաժեշտությունը:

Այս օրինակում մենք տեսնում ենք հենց այն սկզբունքը, որ յուրաքանչյուր պայմանի կատարման համար պարամետրերը քայլ առ քայլ սահմանելու այս ունակությունը թույլ է տալիս ստեղծել ցանկացած բարդության և ներդիր մակարդակների խորության համակարգեր: Բացի այդ, դուք կարող եք նախ սահմանել առաջին պայմանը խելացի պայմանագրում, և միայն դրա կատարումից հետո կարող եք պարամետրեր սահմանել հաջորդ պայմանի համար։ Այլ կերպ ասած, պայմանը ձևականորեն գրված է, և դրա համար պարամետրերը կարող են սահմանվել արդեն իսկ գործողության ընթացքում:

Խելացի պայմանագրերի դասակարգում

Դասակարգման համար կարող եք սահմանել չափանիշների տարբեր խմբեր: Սակայն տեխնոլոգիաների զարգացման պահին դրանցից չորսը արդիական են։

Խելացի պայմանագրերը կարելի է առանձնացնել իրենց կատարման միջավայրով, որը կարող է լինել կամ կենտրոնացված կամ ապակենտրոնացված: Ապակենտրոնացման դեպքում մենք ունենք շատ ավելի մեծ անկախություն և սխալների հանդուրժողականություն խելացի պայմանագրերի կատարման ժամանակ:

Դրանք կարելի է առանձնացնել նաև պայմանների սահմանման և կատարման գործընթացով. դրանք կարող են լինել ազատ ծրագրավորվող, սահմանափակ կամ կանխորոշված, այսինքն՝ խիստ տպագրված: Երբ խելացի պայմանագրերի հարթակում կան ընդամենը 4 կոնկրետ խելացի պայմանագրեր, դրանց պարամետրերը կարող են ցանկացած կերպ սահմանվել: Համապատասխանաբար, դրանք սահմանելը շատ ավելի պարզ է՝ մենք ցուցակից ընտրում ենք պայմանագիր և փոխանցում պարամետրերը։

Ըստ մեկնարկային մեթոդի՝ կան ավտոմատացված խելացի պայմանագրեր, այսինքն՝ երբ որոշակի պայմաններ են առաջանում, դրանք կատարվում են ինքնուրույն, և կան պայմանագրեր, որոնցում նշված են պայմանները, բայց հարթակը ավտոմատ կերպով չի ստուգում դրանց կատարումը. պետք է նախաձեռնել առանձին:

Բացի այդ, խելացի պայմանագրերը տարբերվում են իրենց գաղտնիության մակարդակով: Դրանք կարող են լինել կամ ամբողջությամբ բաց, մասամբ կամ ամբողջովին գաղտնի: Վերջինս նշանակում է, որ երրորդ կողմի դիտորդները չեն տեսնում խելացի պայմանագրերի պայմանները։ Այնուամենայնիվ, գաղտնիության թեման շատ լայն է, և ավելի լավ է այն դիտարկել ընթացիկ հոդվածից առանձին:

Ստորև մենք ավելի մոտիկից կանդրադառնանք առաջին երեք չափանիշներին՝ ընթացիկ թեմայի ըմբռնումն ավելի պարզ դարձնելու համար:

Խելացի պայմանագրեր ըստ գործարկման ժամանակի

Խելացի պայմանագրերի ներածություն

Ելնելով կատարման միջավայրից՝ տարբերակում է դրվում կենտրոնացված և ապակենտրոնացված խելացի պայմանագրային հարթակների միջև: Կենտրոնացված թվային պայմանագրերի դեպքում օգտագործվում է մեկ ծառայություն, որտեղ կա միայն մեկ վավերացնող, և կարող է լինել պահեստային և վերականգնման ծառայություն, որը նույնպես կենտրոնացված է կառավարվում: Կա մեկ տվյալների բազա, որը պահպանում է բոլոր անհրաժեշտ տեղեկությունները խելացի պայմանագրի պայմանները սահմանելու և այն արժեքը բաշխելու համար, որը հաշվի է առնված հենց այս ծառայության տվյալների բազայում: Նման կենտրոնացված ծառայությունն ունի հաճախորդ, ով որոշակի խնդրանքներով պայմաններ է սահմանում և օգտվում այդպիսի պայմանագրերից: Պլատֆորմի կենտրոնացված բնույթի պատճառով նույնականացման մեխանիզմները կարող են ավելի քիչ անվտանգ լինել, քան կրիպտոարժույթներում:

Որպես օրինակ կարող ենք վերցնել բջջային կապի պրովայդերներ (տարբեր բջջային օպերատորներ): Ենթադրենք, ինչ-որ օպերատոր իր սերվերների վրա պահում է տրաֆիկի կենտրոնացված գրառում, որը կարող է փոխանցվել տարբեր ձևաչափերով, օրինակ՝ ձայնային զանգերի, SMS փոխանցման, շարժական ինտերնետի տրաֆիկի տեսքով և տարբեր ստանդարտների համաձայն, ինչպես նաև պահում է գրառումներ։ օգտագործողների մնացորդների վրա եղած միջոցները: Համապատասխանաբար, բջջային կապի մատակարարը կարող է տարբեր պայմաններով կնքել մատուցվող ծառայությունների հաշվառման և դրանց վճարման պայմանագրեր։ Այս դեպքում հեշտ է այնպիսի պայմաններ սահմանել, ինչպիսին է «այսինչ կոդով SMS ուղարկեք այսինչ համարին, և դուք կստանաք այսինչ պայմանները երթևեկության բաշխման համար»:

Կարելի է ևս մեկ օրինակ բերել. ավանդական բանկեր՝ ինտերնետ-բանկինգի ընդլայնված ֆունկցիոնալությամբ և շատ պարզ պայմանագրերով, ինչպիսիք են կանոնավոր վճարումները, մուտքային վճարումների ավտոմատ փոխարկումը, տոկոսների ավտոմատ նվազեցումը նշված հաշվին և այլն:

Եթե ​​մենք խոսում ենք ապակենտրոնացված կատարողական միջավայրով խելացի պայմանագրերի մասին, ապա մենք ունենք վավերացնողների խումբ: Իդեալում, ցանկացած մեկը կարող է դառնալ վավերացնող: Տվյալների բազայի համաժամացման արձանագրության և կոնսենսուսի հասնելու շնորհիվ մենք ունենք ընդհանուր տվյալների բազա, որն այժմ կպահի բոլոր գործարքները խիստ նկարագրված պայմանագրերով, և ոչ թե որոշ պայմանական հարցումներ, որոնց ձևաչափերը հաճախ փոխվում են, և բաց հստակեցում չկա: Այստեղ գործարքները կպարունակեն ցուցումներ՝ պայմանագրի կատարման խիստ ճշգրտման համաձայն: Այս ճշգրտումը բաց է, և, հետևաբար, հարթակի օգտատերերն իրենք կարող են ստուգել և վավերացնել խելացի պայմանագրերը: Այստեղ մենք տեսնում ենք, որ ապակենտրոնացված հարթակները գերազանցում են կենտրոնացվածներին անկախության և սխալների հանդուրժողականության տեսանկյունից, սակայն դրանց դիզայնը և սպասարկումը շատ ավելի բարդ են:

Խելացի պայմանագրեր՝ պայմանների սահմանման և կատարման մեթոդով

Այժմ եկեք ավելի սերտ նայենք, թե ինչպես կարող են խելացի պայմանագրերը տարբերվել պայմանների սահմանման և կատարման ձևով: Այստեղ մենք ուշադրություն ենք դարձնում խելացի պայմանագրերին, որոնք պատահականորեն ծրագրավորվում են և Թյուրինգն ավարտված է: Թյուրինգի ամբողջական խելացի պայմանագիրը թույլ է տալիս որպես պայմանագրի կատարման պայմաններ սահմանել գրեթե ցանկացած ալգորիթմ՝ գրել ցիկլեր, հավանականությունների հաշվարկման որոշ գործառույթներ և այլն՝ մինչև ձեր սեփական էլեկտրոնային ստորագրության ալգորիթմները: Տվյալ դեպքում նկատի ունենք տրամաբանության իսկապես կամայական գրելը։

Կան նաև կամայական խելացի պայմանագրեր, բայց ոչ Թյուրինգի ամբողջական պայմանագրեր: Սա ներառում է Bitcoin-ը և Litecoin-ը՝ իրենց սեփական սցենարով: Սա նշանակում է, որ դուք կարող եք օգտագործել միայն որոշակի գործողություններ ցանկացած հերթականությամբ, բայց դուք այլևս չեք կարող գրել օղակներ և ձեր սեփական ալգորիթմները:

Բացի այդ, կան խելացի պայմանագրերի հարթակներ, որոնք իրականացնում են նախապես սահմանված խելացի պայմանագրեր: Դրանք ներառում են Bitshares-ը և Steemit-ը: Bitshares-ն ունի մի շարք խելացի պայմանագրեր առևտրի, հաշիվների կառավարման, հարթակի կառավարման և դրա պարամետրերի համար: Steemit-ը նմանատիպ հարթակ է, բայց այն այլևս կենտրոնացած չէ նշանների թողարկման և առևտրի վրա, ինչպես Bitshares-ը, այլ բլոգերների վրա, այսինքն՝ այն պահում և մշակում է բովանդակությունը ապակենտրոնացված ձևով:

Թյուրինգի կամայական ամբողջական պայմանագրերը ներառում են Ethereum հարթակը և RootStock-ը, որը դեռ մշակման փուլում է: Հետևաբար, ստորև մենք մի փոքր ավելի մանրամասն կանդրադառնանք Ethereum խելացի պայմանագրային հարթակին:

Խելացի պայմանագրեր մեկնարկային մեթոդով

Ելնելով մեկնարկի մեթոդից՝ խելացի պայմանագրերը նույնպես կարելի է բաժանել առնվազն երկու խմբի՝ ավտոմատացված և մեխանիկական (ոչ ավտոմատացված): Ավտոմատացվածները բնութագրվում են նրանով, որ, հաշվի առնելով բոլոր հայտնի պարամետրերը և պայմանները, խելացի պայմանագիրը ամբողջությամբ կատարվում է ավտոմատ կերպով, այսինքն, այն չի պահանջում որևէ լրացուցիչ գործարք ուղարկել և լրացուցիչ միջնորդավճար ծախսել յուրաքանչյուր հաջորդ կատարման համար: Պլատֆորմն ինքն ունի բոլոր տվյալները՝ հաշվարկելու, թե ինչպես է ավարտվելու խելացի պայմանագիրը: Տրամաբանությունն այնտեղ ոչ թե կամայական է, այլ կանխորոշված, և այս ամենը կանխատեսելի է։ Այսինքն, դուք կարող եք նախօրոք գնահատել խելացի պայմանագրի կատարման բարդությունը, դրա համար օգտագործել որոշակի մշտական ​​հանձնաժողով, և դրա իրականացման բոլոր գործընթացներն ավելի արդյունավետ են:

Խելացի պայմանագրերի համար, որոնք ազատ ծրագրավորված են, կատարումը ավտոմատացված չէ: Նման խելացի պայմանագիր նախաձեռնելու համար գործնականում ամեն քայլափոխի պետք է ստեղծել նոր գործարք, որը կկանչի կատարման հաջորդ փուլը կամ հաջորդ խելացի պայմանագրի մեթոդը, վճարեք համապատասխան միջնորդավճար և սպասեք գործարքի հաստատմանը: Կատարումը կարող է հաջողությամբ ավարտվել, թե ոչ, քանի որ խելացի պայմանագրի կոդը կամայական է և կարող են հայտնվել որոշ անկանխատեսելի պահեր, ինչպիսիք են հավերժական հանգույցը, որոշ պարամետրերի և փաստարկների բացակայությունը, չմշակված բացառությունները և այլն:

Ethereum հաշիվներ

Ethereum հաշվի տեսակները

Եկեք տեսնենք, թե ինչ տեսակի հաշիվներ կարող են լինել Ethereum հարթակում: Այստեղ կա ընդամենը երկու տեսակի հաշիվ և այլ տարբերակներ չկան: Առաջին տեսակը կոչվում է օգտվողի հաշիվ, երկրորդը պայմանագրային հաշիվ է: Եկեք պարզենք, թե ինչպես են դրանք տարբերվում:

Օգտագործողի հաշիվը վերահսկվում է միայն էլեկտրոնային ստորագրության անձնական բանալիով: Հաշվի սեփականատերը ստեղծում է իր սեփական բանալիների զույգը էլեկտրոնային ստորագրության համար՝ օգտագործելով ECDSA (Elliptic Curve Digital Signature Algorithm) ալգորիթմը: Միայն այս բանալիով ստորագրված գործարքները կարող են փոխել այս հաշվի վիճակը:

Սմարթ պայմանագրի հաշվի համար նախատեսված է առանձին տրամաբանություն։ Այն կարող է կառավարվել միայն նախապես սահմանված ծրագրային կոդով, որն ամբողջությամբ որոշում է խելացի պայմանագրի վարքագիծը. ինչպես է այն կառավարելու իր մետաղադրամները որոշակի հանգամանքներում, որ օգտատիրոջ նախաձեռնությամբ և լրացուցիչ ինչ պայմաններով են բաշխվելու այդ մետաղադրամները: Եթե ​​ծրագրավորողների կողմից որոշ կետեր նախատեսված չեն ծրագրի կոդով, կարող են խնդիրներ առաջանալ: Օրինակ, խելացի պայմանագիրը կարող է ստանալ որոշակի վիճակ, երբ այն չի ընդունում օգտվողներից որևէ մեկի հետագա կատարման նախաձեռնումը: Այս դեպքում մետաղադրամներն իրականում կսառեցվեն, քանի որ խելացի պայմանագիրը չի նախատեսում այս վիճակից դուրս գալ։

Ինչպես են հաշիվները ստեղծվում Ethereum-ում

Օգտատիրոջ հաշվի դեպքում սեփականատերը ինքնուրույն ստեղծում է բանալիների զույգ՝ օգտագործելով ECDSA: Կարևոր է նշել, որ Ethereum-ը էլեկտրոնային ստորագրությունների համար օգտագործում է ճիշտ նույն ալգորիթմը և նույն էլիպսային կորը, ինչ Bitcoin-ը, սակայն հասցեն հաշվարկվում է մի փոքր այլ կերպ: Այստեղ կրկնակի հեշինգի արդյունքն այլևս չի օգտագործվում, ինչպես բիթքոյնում, բայց միայնակ հեշինգն ապահովված է Keccak ֆունկցիայով՝ 256 բիթ երկարությամբ։ Ամենաքիչ նշանակալից բիթերը կտրված են ստացված արժեքից, մասնավորապես ելքային հեշ արժեքի ամենաքիչ նշանակալից 160 բիթերը: Արդյունքում մենք հասցե ենք ստանում Ethereum-ում: Փաստորեն, այն զբաղեցնում է 20 բայթ:

Խնդրում ենք նկատի ունենալ, որ Ethereum-ում հաշվի նույնացուցիչը կոդավորված է վեցանկյուն ձևով՝ առանց ստուգման գումար կիրառելու, ի տարբերություն Bitcoin-ի և շատ այլ համակարգերի, որտեղ հասցեն կոդավորված է բազային 58 համարային համակարգում՝ չեկային գումարի ավելացումով: Սա նշանակում է, որ դուք պետք է զգույշ լինեք Ethereum-ում հաշվի նույնացուցիչների հետ աշխատելիս. նույնացուցիչի նույնիսկ մեկ սխալը երաշխավորված է, որ կհանգեցնի մետաղադրամների կորստի:

Կա մի կարևոր առանձնահատկություն և դա այն է, որ օգտատիրոջ հաշիվը տվյալների բազայի ընդհանուր մակարդակով ստեղծվում է այն պահին, երբ նա ընդունում է առաջին մուտքային վճարումը։

Խելացի պայմանագրային հաշիվ ստեղծելը բոլորովին այլ մոտեցում է պահանջում: Սկզբում օգտատերերից մեկը գրում է խելացի պայմանագրի սկզբնական կոդը, որից հետո ծածկագիրը փոխանցվում է Ethereum հարթակի համար հատուկ կոմպիլյատորի միջոցով՝ ստանալով բայթկոդ սեփական Ethereum վիրտուալ մեքենայի համար։ Ստացված բայթկոդը տեղադրվում է գործարքի հատուկ դաշտում։ Այն վավերացված է նախաձեռնողի հաշվի անունից: Հաջորդը, այս գործարքը տարածվում է ամբողջ ցանցով և տեղադրում է խելացի պայմանագրի կոդը: Գործարքի և, համապատասխանաբար, պայմանագրի կատարման համար միջնորդավճարը հանվում է նախաձեռնողի հաշվի մնացորդից:

Յուրաքանչյուր խելացի պայմանագիր անպայմանորեն պարունակում է իր սեփական կոնստրուկտորը (այս պայմանագրի): Այն կարող է դատարկ լինել կամ բովանդակություն ունենալ: Կոնստրուկտորի գործարկումից հետո ստեղծվում է խելացի պայմանագրային հաշվի նույնացուցիչ, որի միջոցով կարող եք մետաղադրամներ ուղարկել, զանգահարել որոշակի խելացի պայմանագրի մեթոդներ և այլն:

Ethereum գործարքների կառուցվածքը

Ավելի պարզ դարձնելու համար մենք կսկսենք դիտարկել Ethereum գործարքի կառուցվածքը և խելացի պայմանագրի կոդի օրինակ:

Խելացի պայմանագրերի ներածություն

Ethereum գործարքը բաղկացած է մի քանի դաշտից: Դրանցից առաջինը՝ nonce-ը, գործարքի որոշակի սերիական համարն է, որը վերաբերում է հենց այն հաշվին, որը բաշխում է այն և հանդիսանում է դրա հեղինակը: Դա անհրաժեշտ է կրկնակի գործարքները տարբերելու համար, այսինքն՝ բացառելու այն դեպքը, երբ նույն գործարքը երկու անգամ է ընդունվում։ Օգտագործելով նույնացուցիչ՝ յուրաքանչյուր գործարք ունի յուրահատուկ հեշ արժեք:

Հաջորդը գալիս է այնպիսի դաշտ, ինչպիսին է գազի գինը. Սա ցույց է տալիս այն գինը, որով Ethereum բազային արժույթը փոխարկվում է գազի, որն օգտագործվում է խելացի պայմանագրի կատարման և վիրտուալ մեքենայի ռեսուրսի բաշխման համար: Ինչ է դա նշանակում?

Բիթքոյնում վճարները վճարվում են անմիջապես հիմնական արժույթի կողմից՝ բիթքոյնը: Դա հնարավոր է նրանց հաշվարկման պարզ մեխանիզմի շնորհիվ՝ մենք խստորեն վճարում ենք գործարքում պարունակվող տվյալների քանակի համար: Ethereum-ում իրավիճակն ավելի բարդ է, քանի որ շատ դժվար է ապավինել գործարքների տվյալների ծավալին։ Այստեղ գործարքը կարող է պարունակել նաև ծրագրի կոդ, որը կկատարվի վիրտուալ մեքենայի վրա, և վիրտուալ մեքենայի յուրաքանչյուր գործողություն կարող է ունենալ տարբեր բարդություն: Կան նաև գործողություններ, որոնք հիշողություն են հատկացնում փոփոխականներին: Դրանք կունենան իրենց բարդությունը, որից կախված կլինի յուրաքանչյուր վիրահատության վճարումը։

Գազային համարժեքով յուրաքանչյուր շահագործման արժեքը հաստատուն է լինելու: Այն ներկայացվել է հատուկ՝ յուրաքանչյուր գործողության մշտական ​​արժեքը որոշելու համար: Կախված ցանցի ծանրաբեռնվածությունից՝ կփոխվի գազի գինը, այսինքն՝ այն գործակիցը, որի համաձայն բազային արժույթը կվերածվի այս օժանդակ միավորի՝ միջնորդավճարը վճարելու համար։

Ethereum-ում գործարքի ևս մեկ առանձնահատկություն կա. բայթկոդը, որը պարունակում է վիրտուալ մեքենայում կատարման համար, կկատարվի այնքան ժամանակ, մինչև ավարտվի որոշակի արդյունքով (հաջողությամբ կամ ձախողմամբ) կամ մինչև չսպառվի միջնորդավճարը վճարելու համար հատկացված մետաղադրամների որոշակի քանակություն: . Դա այն իրավիճակից խուսափելու համար է, երբ ինչ-որ սխալի դեպքում ուղարկողի հաշվից բոլոր մետաղադրամները ծախսվել են միջնորդավճարով (օրինակ, վիրտուալ մեքենայում սկսված ինչ-որ հավերժական ցիկլ), գոյություն ունի հետևյալ դաշտը. սկսել գազ (հաճախ կոչվում է գազի սահմանաչափ) - այն որոշում է մետաղադրամների առավելագույն քանակը, որը ուղարկողը պատրաստ է ծախսել որոշակի գործարք իրականացնելու համար:

Հաջորդ դաշտը կոչվում է նպատակակետի հասցե. Սա ներառում է մետաղադրամների ստացողի հասցեն կամ կոնկրետ խելացի պայմանագրի հասցեն, որի մեթոդները կկոչվեն: Դրանից հետո գալիս է դաշտը արժեք, որտեղ մուտքագրված է մետաղադրամների քանակը, որոնք ուղարկվում են նպատակակետ հասցեին:

Հաջորդը հետաքրքիր դաշտ է, որը կոչվում է տվյալներ, որտեղ ամբողջ կառույցը տեղավորվում է: Սա առանձին դաշտ չէ, այլ մի ամբողջ կառույց, որում սահմանվում է վիրտուալ մեքենայի կոդը։ Դուք կարող եք տեղադրել կամայական տվյալներ այստեղ. դրա համար կան առանձին կանոններ:

Եվ վերջին դաշտը կոչվում է ստորագրություն. Այն միաժամանակ պարունակում է և՛ այս գործարքի հեղինակի էլեկտրոնային ստորագրությունը, և՛ հանրային բանալին, որով կստուգվի այս ստորագրությունը: Հանրային բանալիից կարող եք ստանալ այս գործարքի ուղարկողի հաշվի նույնացուցիչը, այսինքն՝ եզակի կերպով նույնականացնել ուղարկողի հաշիվը հենց համակարգում: Մենք պարզեցինք գործարքի կառուցվածքի հիմնականը.

Solidity-ի խելացի պայմանագրային ծածկագրի օրինակ

Հիմա եկեք ավելի սերտ նայենք ամենապարզ խելացի պայմանագրին՝ օգտագործելով օրինակ:

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Վերևում ներկայացված է պարզեցված կոդ, որը կարող է պահել օգտատերերի մետաղադրամները և վերադարձնել դրանք ըստ պահանջի:

Այսպիսով, կա Բանկի խելացի պայմանագիր, որն իրականացնում է հետևյալ գործառույթները. այն կուտակում է մետաղադրամներ իր հաշվեկշռում, այսինքն, երբ գործարքը հաստատվում է և տեղադրվում է նման խելացի պայմանագիր, ստեղծվում է նոր հաշիվ, որը կարող է իր հաշվեկշռում մետաղադրամներ պարունակել. այն հիշում է օգտվողներին և նրանց միջև մետաղադրամների բաշխումը. ունի մնացորդների կառավարման մի քանի մեթոդներ, այսինքն՝ հնարավոր է համալրել, հանել և ստուգել օգտագործողի մնացորդը:

Եկեք անցնենք աղբյուրի կոդի յուրաքանչյուր տողով: Այս պայմանագիրը մշտական ​​դաշտեր ունի։ Դրանցից մեկը՝ տիպի հասցեով, կոչվում է սեփականատեր։ Այստեղ պայմանագիրը հիշում է այս խելացի պայմանագիրը ստեղծած օգտատիրոջ հասցեն։ Ավելին, կա դինամիկ կառուցվածք, որը պահպանում է համապատասխանությունը օգտվողների հասցեների և մնացորդների միջև:

Դրան հաջորդում է Բանկի մեթոդը՝ այն ունի նույն անվանումը, ինչ պայմանագիրը: Ըստ այդմ, սա է դրա կառուցողը։ Այստեղ սեփականատեր փոփոխականին տրվում է այն անձի հասցեն, ով տեղադրել է այս խելացի պայմանագիրը ցանցում: Սա միակ բանն է, որ տեղի է ունենում այս կոնստրուկտորում։ Այսինքն, msg-ն այս դեպքում հենց այն տվյալն է, որը փոխանցվել է վիրտուալ մեքենային այս պայմանագրի ամբողջ ծածկագիրը պարունակող գործարքի հետ միասին: Համապատասխանաբար, msg.sender-ը այս գործարքի հեղինակն է, որը հյուրընկալում է այս կոդը: Նա կլինի խելացի պայմանագրի սեփականատերը։

Ավանդի մեթոդը թույլ է տալիս գործարքի միջոցով որոշակի քանակությամբ մետաղադրամներ փոխանցել պայմանագրային հաշվին: Այս դեպքում խելացի պայմանագիրը, ստանալով այդ մետաղադրամները, դրանք թողնում է իր հաշվեկշռում, սակայն հաշվեկշռի կառուցվածքում գրանցում է, թե կոնկրետ ով է եղել այդ մետաղադրամների ուղարկողը, որպեսզի իմանա, թե ում են պատկանում դրանք:

Հաջորդ մեթոդը կոչվում է դուրսբերում և պահանջում է մեկ պարամետր՝ մետաղադրամների քանակությունը, որը ինչ-որ մեկը ցանկանում է հանել այս բանկից: Սա ստուգում է, թե արդյոք բավականաչափ մետաղադրամներ կան այն օգտվողի հաշվեկշռում, ով զանգահարում է այս մեթոդը դրանք ուղարկելու համար: Եթե ​​դրանք բավարար են, ապա խելացի պայմանագիրն ինքնին վերադարձնում է այդ թվով մետաղադրամներ զանգահարողին:

Հաջորդը գալիս է օգտագործողի ընթացիկ հաշվեկշիռը ստուգելու մեթոդը: Ով կկանչի այս մեթոդը, կօգտագործվի խելացի պայմանագրում այս մնացորդը վերականգնելու համար: Հարկ է նշել, որ այս մեթոդի փոփոխիչը դիտումն է: Սա նշանակում է, որ մեթոդն ինքնին ոչ մի կերպ չի փոխում իր դասի փոփոխականները, և այն իրականում միայն կարդալու մեթոդ է։ Այս մեթոդը կանչելու համար առանձին գործարք չի ստեղծվում, ոչ մի վճար չի վճարվում, և բոլոր հաշվարկները կատարվում են տեղում, որից հետո օգտվողը ստանում է արդյունքը:

Սպանության մեթոդն անհրաժեշտ է խելացի պայմանագրի վիճակը ոչնչացնելու համար: Եվ այստեղ կա լրացուցիչ ստուգում, թե արդյոք այս մեթոդով զանգահարողը այս պայմանագրի տերն է: Եթե ​​այո, ապա պայմանագիրն ինքնաոչնչանում է, և ոչնչացման ֆունկցիան վերցնում է մեկ պարամետր՝ հաշվի նույնացուցիչը, որին պայմանագիրը կուղարկի իր հաշվեկշռում մնացած բոլոր մետաղադրամները: Այս դեպքում մնացած մետաղադրամները ավտոմատ կերպով կգնան պայմանագրի սեփականատիրոջ հասցեին:

Ինչպե՞ս է աշխատում Ethereum ցանցի ամբողջական հանգույցը:

Եկեք սխեմատիկ նայենք, թե ինչպես են նման խելացի պայմանագրերը կատարվում Ethereum հարթակում և ինչպես է աշխատում ամբողջական ցանցային հանգույցը:

Խելացի պայմանագրերի ներածություն

Ethereum ցանցի ամբողջական հանգույցը պետք է ունենա առնվազն չորս մոդուլ:
Առաջինը, ինչպես ցանկացած ապակենտրոնացված արձանագրության դեպքում, P2P ցանցային մոդուլն է՝ ցանցային միացման և այլ հանգույցների հետ աշխատելու մոդուլ, որտեղ փոխանակվում են բլոկներ, գործարքներ և այլ հանգույցների մասին տեղեկությունները: Սա ավանդական բաղադրիչ է բոլոր ապակենտրոնացված կրիպտոարժույթների համար:

Հաջորդը, մենք ունենք բլոկչեյնի տվյալների պահպանման, մշակման, առաջնահերթ ճյուղ ընտրելու, բլոկների ավելացման, բլոկների անջատման, այս բլոկների վավերացման և այլնի մոդուլ:

Երրորդ մոդուլը կոչվում է EVM (Ethereum վիրտուալ մեքենա) - սա վիրտուալ մեքենա է, որը ստանում է բայթկոդ Ethereum գործարքներից: Այս մոդուլը վերցնում է որոշակի հաշվի ընթացիկ վիճակը և փոփոխություններ է կատարում դրա վիճակի վրա՝ հիմնվելով ստացված բայթկոդի վրա: Յուրաքանչյուր ցանցի հանգույցի վիրտուալ մեքենայի տարբերակը պետք է լինի նույնը: Հաշվարկները, որոնք կատարվում են Ethereum յուրաքանչյուր հանգույցի վրա, միանգամայն նույնն են, բայց դրանք տեղի են ունենում ասինխրոն ձևով. ինչ-որ մեկը ստուգում և ընդունում է այս գործարքը ավելի վաղ, այսինքն՝ կատարում է դրանում պարունակվող ամբողջ կոդը, իսկ ինչ-որ մեկը ավելի ուշ: Համապատասխանաբար, երբ գործարքը ստեղծվում է, այն բաշխվում է ցանցին, հանգույցներն ընդունում են այն, և ստուգման պահին, ինչպես Bitcoin Script-ը կատարվում է Bitcoin-ում, այստեղ կատարվում է վիրտուալ մեքենայի բայթկոդը։

Գործարքը համարվում է ստուգված, եթե դրանում պարունակվող ամբողջ ծածկագիրը կատարվել է, որոշակի հաշվի նոր վիճակ է ստեղծվել և պահպանվել այնքան ժամանակ, մինչև պարզ լինի՝ այս գործարքը կիրառվել է, թե ոչ: Եթե ​​գործարքը կիրառվում է, ապա այս վիճակը համարվում է ոչ միայն ավարտված, այլեւ ընթացիկ։ Կա տվյալների բազա, որը պահում է յուրաքանչյուր հաշվի վիճակը յուրաքանչյուր ցանցային հանգույցի համար: Հաշվի առնելով այն հանգամանքը, որ բոլոր հաշվարկները կատարվում են նույն կերպ, և բլոկչեյնի վիճակը նույնն է, բոլոր հաշիվների վիճակները պարունակող տվյալների բազան նույնպես կլինի նույնը յուրաքանչյուր հանգույցի համար:

Խելացի պայմանագրերի առասպելներն ու սահմանափակումները

Ինչ վերաբերում է Ethereum-ին նման խելացի պայմանագրային հարթակների համար գոյություն ունեցող սահմանափակումներին, ապա կարելի է մեջբերել հետևյալը.

  • կոդի կատարում;
  • հատկացնել հիշողություն;
  • blockchain տվյալներ;
  • ուղարկել վճարումներ;
  • ստեղծել նոր պայմանագիր;
  • զանգահարել այլ պայմանագրեր:

Եկեք նայենք վիրտուալ մեքենայի վրա դրված սահմանափակումներին և, համապատասխանաբար, ցրենք խելացի պայմանագրերի մասին որոշ առասպելներ։ Վիրտուալ մեքենայի վրա, որը կարող է լինել ոչ միայն Ethereum-ում, այլ նաև նմանատիպ հարթակներում, կարող եք իրականում կամայական տրամաբանական գործողություններ կատարել, այսինքն՝ գրել կոդ և այն կկատարվի այնտեղ, կարող եք լրացուցիչ հիշողություն հատկացնել: Այնուամենայնիվ, վճարը վճարվում է առանձին յուրաքանչյուր գործողության և հատկացված հիշողության յուրաքանչյուր լրացուցիչ միավորի համար:

Հաջորդը, վիրտուալ մեքենան կարող է կարդալ տվյալներ բլոկչեյն տվյալների բազայից, որպեսզի օգտագործի այս տվյալները որպես այս կամ այն ​​խելացի պայմանագրի տրամաբանությունը գործարկելու համար: Վիրտուալ մեքենան կարող է ստեղծել և ուղարկել գործարքներ, այն կարող է ստեղծել նոր պայմանագրեր և այլ խելացի պայմանագրերի զանգերի մեթոդներ, որոնք արդեն հրապարակված են ցանցում՝ առկա, հասանելի և այլն:

Ամենատարածված առասպելն այն է, որ Ethereum խելացի պայմանագրերը կարող են օգտագործել ցանկացած ինտերնետային ռեսուրսից ստացված տեղեկատվություն իրենց պայմաններով: Ճշմարտությունն այն է, որ վիրտուալ մեքենան չի կարող ցանցի հարցում ուղարկել ինտերնետի ինչ-որ արտաքին տեղեկատվական ռեսուրսի, այսինքն՝ անհնար է գրել խելացի պայմանագիր, որը արժեք կբաշխի օգտատերերի միջև՝ կախված, ասենք, դրսում եղանակից, կամ ով է հաղթել ինչ-որ առաջնությունում, կամ ելնելով, թե ինչ այլ միջադեպ է տեղի ունեցել արտաքին աշխարհում, քանի որ այդ միջադեպերի մասին տեղեկատվությունը պարզապես հարթակի տվյալների բազայում չկա: Այսինքն՝ բլոկչեյնի վրա այս մասին ոչինչ չկա։ Եթե ​​այն այնտեղ չհայտնվի, ապա վիրտուալ մեքենան չի կարող օգտագործել այս տվյալները որպես գործարկիչներ:

Ethereum-ի թերությունները

Թվարկենք հիմնականները. Առաջին թերությունն այն է, որ կան որոշ դժվարություններ Ethereum-ում խելացի պայմանագրերի նախագծման, մշակման և փորձարկման ժամանակ (Ethereum-ն օգտագործում է Solidity լեզուն՝ խելացի պայմանագրեր գրելու համար): Իրոք, պրակտիկան ցույց է տալիս, որ բոլոր սխալների շատ մեծ տոկոսը պատկանում է մարդկային գործոնին: Սա իրականում ճիշտ է արդեն գրված Ethereum խելացի պայմանագրերի համար, որոնք ունեն միջին կամ ավելի բարձր բարդություն: Եթե ​​պարզ խելացի պայմանագրերի դեպքում սխալի հավանականությունը փոքր է, ապա բարդ խելացի պայմանագրերում շատ հաճախ լինում են սխալներ, որոնք հանգեցնում են միջոցների հափշտակման, դրանց սառեցման, խելացի պայմանագրերի անսպասելի ոչնչացման և այլն: Նման շատ դեպքեր արդեն իսկ կան. հայտնի.

Երկրորդ թերությունն այն է, որ վիրտուալ մեքենան ինքնին կատարյալ չէ, քանի որ այն նույնպես գրված է մարդկանց կողմից։ Այն կարող է կատարել կամայական հրամաններ, և դրա մեջ է խոցելիությունը. մի շարք հրամաններ կարող են կազմաձևվել որոշակի ձևով, ինչը կհանգեցնի հետևանքների, որոնք նախապես չնախատեսված էին: Սա շատ բարդ տարածք է, բայց արդեն կան մի քանի ուսումնասիրություններ, որոնք ցույց են տալիս, որ այս խոցելիությունները առկա են Ethereum ցանցի ներկայիս տարբերակում, և դրանք կարող են հանգեցնել բազմաթիվ խելացի պայմանագրերի ձախողման:

Եվս մեկ մեծ դժվարություն, այն կարելի է թերություն համարել։ Դա կայանում է նրանում, որ դուք կարող եք գործնականում կամ տեխնիկապես գալ այն եզրակացության, որ եթե դուք կազմեք պայմանագրի բայթկոդը, որը կկատարվի վիրտուալ մեքենայի վրա, կարող եք որոշել գործողությունների որոշակի կարգը: Միասին կատարման դեպքում այս գործողությունները մեծապես կբեռնեն վիրտուալ մեքենան և անհամաչափ կդանդաղեցնեն այն այն վճարին, որը վճարվել է այս գործողությունների կատարման համար:

Նախկինում Ethereum-ի մշակման ժամանակաշրջան կար, երբ շատ տղաներ, ովքեր մանրամասն հասկանում էին վիրտուալ մեքենայի աշխատանքը, նման խոցելիություններ էին գտնում: Փաստորեն, գործարքները վճարում էին շատ փոքր վճար, բայց գործնականում դանդաղեցնում էին ամբողջ ցանցը: Այս խնդիրները շատ դժվար է լուծել, քանի որ անհրաժեշտ է, առաջին հերթին, որոշել դրանք, երկրորդ, կարգավորել այդ գործողությունների կատարման գինը և, երրորդ, իրականացնել կոշտ պատառաքաղ, ինչը նշանակում է ցանցի բոլոր հանգույցները թարմացնել նոր տարբերակով: ծրագրային ապահովման և այնուհետև այդ փոփոխությունների միաժամանակյա ակտիվացումը:

Ինչ վերաբերում է Ethereum-ին, ապա բազմաթիվ հետազոտություններ են իրականացվել, շատ գործնական փորձ է ձեռք բերվել՝ և՛ դրական, և՛ բացասական, բայց, այնուամենայնիվ, մնում են դժվարություններ և խոցելիություններ, որոնց հետ դեռ պետք է ինչ-որ կերպ լուծվել:

Այսպիսով, հոդվածի թեմատիկ մասը ավարտված է, եկեք անցնենք բավականին հաճախ ծագող հարցերին:

FAQ

— Եթե գոյություն ունեցող խելացի պայմանագրի բոլոր կողմերը ցանկանում են փոխել պայմանները, կարո՞ղ են նրանք չեղարկել այս խելացի պայմանագիրը՝ օգտագործելով multisig-ը, այնուհետև ստեղծել նոր խելացի պայմանագիր՝ դրա կատարման թարմացված պայմաններով:

Այստեղ պատասխանը կլինի երկակի. Ինչո՞ւ։ Որովհետև մի կողմից խելացի պայմանագիրը սահմանվում է մեկ անգամ և այն արդեն չի ենթադրում որևէ փոփոխություն, իսկ մյուս կողմից կարող է ունենալ նախապես գրված տրամաբանություն, որը նախատեսում է որոշ պայմանների ամբողջական կամ մասնակի փոփոխություն։ Այսինքն, եթե դուք ցանկանում եք ինչ-որ բան փոխել ձեր խելացի պայմանագրում, ապա դուք պետք է սահմանեք այն պայմանները, որոնց ներքո կարող եք թարմացնել այս պայմանները: Ըստ այդմ, միայն նման շրջահայաց եղանակով կարող է կազմակերպվել պայմանագրի երկարաձգումը։ Բայց այստեղ էլ կարող եք դժվարության մեջ ընկնել՝ սխալվել և ստանալ համապատասխան խոցելիություն։ Հետևաբար, նման բաները պետք է շատ մանրամասն և մանրակրկիտ մշակվեն և փորձարկվեն:

— Իսկ եթե միջնորդը համաձայնություն կնքի մասնակից կողմերից մեկի հետ՝ էսքրոու՞, թե՞ խելացի պայմանագիր: Արդյո՞ք միջնորդ է պահանջվում խելացի պայմանագրում:

Խելացի պայմանագրում միջնորդ չի պահանջվում: Այն կարող է գոյություն չունենալ: Եթե ​​էսքրոուի դեպքում միջնորդը դավադրության մեջ է մտնում կողմերից մեկի հետ, ապա այո, այդ սխեման հետո կտրուկ կորցնում է իր ողջ արժեքը։ Ուստի միջնորդներն ընտրվում են այնպես, որ նրանց վստահեն այս գործընթացում ներգրավված բոլոր կողմերը միաժամանակ։ Համապատասխանաբար, դուք պարզապես մետաղադրամներ չեք փոխանցի բազմաստորագրային հասցեով միջնորդի միջոցով, որին չեք վստահում:

— Հնարավո՞ր է Ethereum-ի մեկ գործարքով բազմաթիվ տարբեր նշաններ փոխանցել ձեր հասցեից տարբեր թիրախային հասցեներ, օրինակ՝ փոխանակել հասցեներ, որտեղ վաճառվում են այդ նշանները:

Սա լավ հարց է և վերաբերում է Ethereum գործարքի մոդելին և թե ինչպես է այն տարբերվում Bitcoin մոդելից: Իսկ տարբերությունն արմատական ​​է։ Եթե ​​Ethereum գործարքի մոդելում դուք պարզապես մետաղադրամներ եք փոխանցում, ապա դրանք փոխանցվում են միայն մի հասցեից մյուսը, ոչ մի փոփոխություն, միայն ձեր նշած կոնկրետ գումարը: Այսինքն՝ սա չծախսված արդյունքների մոդել չէ (UTXO), այլ հաշիվների և համապատասխան մնացորդների մոդել։ Տեսականորեն հնարավոր է միանգամից մի քանի տարբեր ժետոններ ուղարկել մեկ գործարքում, եթե գրեք խորամանկ խելացի պայմանագիր, բայց դուք դեռ պետք է շատ գործարքներ կատարեք, պայմանագիր ստեղծեք, այնուհետև դրան փոխանցեք ժետոններ և մետաղադրամներ, այնուհետև զանգահարեք համապատասխան մեթոդ: . Սա ջանք և ժամանակ է պահանջում, ուստի գործնականում դա այդպես չի աշխատում, և Ethereum-ում բոլոր վճարումները կատարվում են առանձին գործարքներով:

— Ethereum պլատֆորմի մասին առասպելներից մեկն այն է, որ անհնար է նկարագրել այնպիսի պայմաններ, որոնք կախված կլինեն ինտերնետի արտաքին ռեսուրսի տվյալներից, ուստի ի՞նչ անել այդ դեպքում:

Լուծումը կայանում է նրանում, որ խելացի պայմանագիրն ինքնին կարող է տրամադրել մեկ կամ մի քանի, այսպես կոչված, վստահելի օրակուլներ, որոնք տվյալներ են հավաքում արտաքին աշխարհում իրերի վիճակի մասին և հատուկ մեթոդներով փոխանցում խելացի պայմանագրերին: Պայմանագիրն ինքնին հավաստի է համարում այն ​​տվյալները, որոնք ստացել է վստահելի կողմերից։ Ավելի մեծ հուսալիության համար պարզապես ընտրեք օրակուլների մեծ խումբ և նվազագույնի հասցրեք նրանց դավաճանության ռիսկը: Պայմանագիրն ինքնին կարող է հաշվի չառնել օրակուլների տվյալները, որոնք հակասում են մեծամասնությանը:

Blockchain-ի առցանց դասընթացի դասախոսություններից մեկը նվիրված է այս թեմային.Խելացի պայմանագրերի ներածություն".

Source: www.habr.com

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