Արդեն ավելի քան 10 տարի է, ինչ նորարարական տեխնոլոգիաների ոլորտում բազմիցս խոսվում է կրիպտոարժույթների, Բիթքոինի, հեշերի, մայնինգի և այլ հասկացությունների մասին, սակայն շատերը մինչ օրս չեն պատկերացնում, թե դրանք ինչ են և ինչպես են աշխատում։ Այսօր կքննարկենք մայնինգի թեման և կհասկանանք, թե ինչպես է այն գործում։
Մայնինգը մաթեմատիկական խնդիրների լուծման գործընթաց է, որի արդյունքում կրիպտոարժույթի բլոկչեյնում ավելացվում են տեղեկատվության նոր բլոկներ։ Սա գործընթաց է, որը հնարավորություն է տալիս իրականացնել գործարքների վավերացում, տվյալների բազայում ավելացնել նոր տեղեկատվություն և շրջանառության մեջ թողարկել նոր մետաղադրամներ։ Դրա կարևորությունն այն է, որ այն ապահովում է կրիպտոարժույթների աշխատանքը որպես ապակենտրոնացված P2P ցանց։
Եվ ինչպես հետևում է սահմանումից, կրիպտոարժույթների մայնինգը կատարում է 3 հիմնական գործառույթ.
- Տրանսակցիաների հաստատում — դրանց ներառումը բլոկում։
Մայներները պարտավոր են հաստատել, որ տրանսակցիան օրինական է, նախքան այն բլոկչեյնում ավելացվող բլոկում ներառելը։ Սա անհրաժեշտ է նույն միջոցների կրկնակի ծախսումը (double-spending) կանխելու համար։ Գործընթացը, որի ընթացքում տրանսակցիան ներառվում է գտնված բլոկի կազմում, կոչվում է տրանսակցիայի հաստատում։ - Անվտանգության ապահովում ապակենտրոնացման միջոցով։
Մայներները (լիարժեք նոդերը) իրենց համակարգիչներում պահպանում են բլոկչեյնի պատճենները՝ ստեղծելով ամբողջովին ապակենտրոնացված ցանց։ Սա երաշխավորում է, որ տվյալների բազայի պատճեններից մեկում տեղեկատվության կեղծումը չի վնասի բլոկչեյնին։ Որքան շատ մայներներ են մասնակցում գործընթացին, այնքան ավելի անվտանգ է ցանցը։ Բաշխված մայնինգային հզորությունը (հեշրեյթը) ապահովում է ցանցի անվտանգությունը։ - Նոր մետաղադրամների թողարկում։
Եթե մեզ ծանոթ արժույթները թողարկվում են կենտրոնական բանկերի կողմից, ապա բիթքոինները մայնինգի միջոցով են ստացվում։ Այս գաղափարը նման է ոսկու արդյունահանմանը, սակայն տարբերությունն այն է, որ բիթքոինը գոյություն ունի ծրագրային ապահովման շրջանակներում, և այն շրջանառության մեջ դնելու համար անհրաժեշտ է այն «մայնինգ» անել։ Այլ կերպ ասած՝ նոդերը լուծում են առաջադրված խնդիրը և դրա դիմաց ստանում են պարգևատրում կրիպտոարժույթի տեսքով։
Նոդերը համակարգիչներ են, որոնք միացված են ցանցի մյուս համակարգիչներին (նոդերին)՝ տեղեկատվությունը գրանցելու և համաժամեցնելու համար։ Հասկանալի է, որ այդ համակարգիչները սպասարկվում են մարդկանց կողմից, և հենց նրանց էլ կոչում են մայներներ։

Ինչպես տեսնում եք, մասնակիցները շատ են, և նրանց գործողությունները պետք է ենթարկվեն որոշակի կանոնների։ Դրա համար էլ գոյություն ունեն ցանցի կոնսենսուսի մեխանիզմները։ Սա գործընթաց է, որը թույլ է տալիս ցանցին համաձայնեցնել այն տրանսակցիաների իսկությունը և հերթականությունը, որոնք պետք է ավելացվեն պատմությանը՝ նոր բլոկների հաջորդական ավելացման միջոցով։ Այս մեխանիզմը ապահովում է տրանսակցիաների և բլոկների հստակ ու միանշանակ հերթականությունը և երաշխավորում է այդ շղթայի բովանդակության ամբողջականությունն ու համաձայնեցվածությունը ցանցի բոլոր նոդերի միջև։
Մայնինգում կիրառվող կոնսենսուսի ալգորիթմների տեսակները
Ոչ բոլոր բլոկչեյններն են ստեղծված նույն սկզբունքով, և դրանցից շատերը զգալիորեն տարբերվում են՝ կախված այն կոնսենսուսի ալգորիթմից, որը կիրառվում է։
• Proof of Work (PoW) — մայնինգում կիրառվող ամենահին և, հետևաբար, ամենատարածված ալգորիթմն է։ Ամենամեծ պարգևատրումը ստանում է այն «մայները», որն ունի ամենահզոր սարքավորումը։
• Proof of Stake (PoS) — այս համակարգը կառուցված է այլ սկզբունքով։ Դրա էությունն այն է, որ տրանսակցիաների օրինականությունը ստուգում են հատուկ նոդերը՝ վալիդատորները, որոնք ընտրվում են մի քանի գործոնների համակցությամբ՝ վալիդատորի դրամապանակում պահվող մետաղադրամների քանակը (stake), stake-ի տևողությունը և պատահական ընտրությունը (randomization)։ Մարդիկ (stakeholder-ները) կամավոր սառեցնում են իրենց ակտիվների մի մասը՝ այդպիսով նպաստելով կոնսենսուսի ալգորիթմների աշխատանքին։ Որքան մեծ է սառեցված գումարը, այնքան մեծ է ստացվող պարգևատրումը։ Այս գործընթացում սարքավորման հզորությունը էական դեր չի խաղում։ Տրանսակցիաները հաստատող վալիդատորները ստանում են միայն տրանսակցիայի միջնորդավճարի մի մասը։
Proof of Stake vs Proof of Work
| Proof of Stake | Proof of Work |
|---|---|
| Վալիդատորի կողմից հաստատվող տրանսակցիաներ, որը ընտրվում է՝ կախված stake-ում պահվող մետաղադրամների քանակից, stake-ի տևողությունից և մասնակցի ակտիվությունից։ | Պահանջվում է մայնինգ՝ հզոր հաշվարկային սարքավորումների միջոցով բարդ հաշվարկներ կատարելու եղանակով։ |
| Բլոկի համար պարգևատրում չի տրամադրվում։ Տրանսակցիաները հաստատող վալիդատորները ստանում են միայն տրանսակցիաների միջնորդավճարները։ DPoS և LPoS համակարգերում վալիդատորներն իրենց պարգևատրումը կիսում են այն մասնակիցների հետ, ովքեր աջակցել են իրենց՝ տրամադրելով իրենց մետաղադրամները (ձայները)։ | Գոյություն ունի պարգևատրություն նոր բլոկի ստեղծման համար՝ նոր մետաղադրամների տեսքով։ Այն ստանում է առաջին մայները, որը լուծում է մաթեմատիկական խնդիրը։ Բացի այդ, տրանսակցիաների ստուգման համար նույնպես տրամադրվում է պարգևատրություն՝ տրանսակցիոն միջնորդավճարների տեսքով։ |
| PoS-ը շատ շահավետ է ներդրողների համար, քանի որ անհրաժեշտ չէ ձեռք բերել հզոր հաշվարկային սարքավորումներ, օրինակ՝ ASIC սարքեր։ | PoW-ը շահավետ է միայն շատ մեծ ներդրումների դեպքում, որոնք հնարավորություն են տալիս առավելություն ստանալ մյուս մայներների նկատմամբ, և միայն այն դեպքում, եթե մայնինգի միջոցով ստացվող մետաղադրամի շուկայական արժեքը բարձր է։ |
Այսօր գոյություն ունեն PoS ալգորիթմի բազմաթիվ տարբերակներ։ Ամենահայտնիներից մեկը Delegated Proof of Stake (DPoS)-ն է։ Գոյություն ունեն նաև Byzantine Fault Tolerance (BFT) և այլ մեխանիզմներ։ Դրանց վրա մանրամասն չենք կանգնի։
Բիթքոինի մայնինգը. Ինչպե՞ս է այն աշխատում։
Պատկերացնենք, որ օգտատերը ցանկանում է որոշակի քանակությամբ բիթքոին փոխանցել մեկ այլ անձի և հաստատում է տրանսակցիան իր կրիպտոդրամապանակի հավելվածում։
Տրանսակցիան դրամապանակի հավելվածի միջոցով փոխանցվում է Bitcoin բլոկչեյնի ցանց։ Այնտեղ այն հայտնվում է չհաստատված տրանսակցիաների պուլում (mempool), որտեղ մնում է այնքան ժամանակ, մինչև որևէ մայներ այն ընտրի։ Այդպիսի պուլը չհաստատված տրանսակցիաների հավաքածու է, որոնք սպասում են մշակման։ Ամենից հաճախ չհաստատված տրանսակցիաները հավաքվում են ոչ թե մեկ հսկայական պուլում, այլ մի քանի առանձին տեղական պուլերում։

Քայլ 1. Բլոկ-թեկնածուի ստեղծում
Երբ մայները ստանում է ծանուցում, որ նախորդ բլոկն ունի վավեր Proof of Work (PoW), նա սկսում է ստեղծել բլոկ-թեկնածու։ Այն այդպես է կոչվում, քանի որ դեռևս չունի վավեր Proof of Work։
Մայները հեռացնում է նախորդ բլոկում արդեն ընդգրկված տրանսակցիաները (եթե այդպիսիք կան), ընտրում է տրանսակցիաներ պուլերից և սկսում է ձևավորել իր բլոկը։ Նույն տրանսակցիաները կարող են տարբեր մայներների կողմից ներառվել իրենց բլոկներում, և նրանցից յուրաքանչյուրը զուգահեռ սկսում է որոնել իր բլոկի համար հեշ-գումարը (ստորագրությունը)՝ օգտագործելով չհաստատված տրանսակցիաների իր սեփական հավաքածուն։
Այսպիսով, բլոկը, ըստ էության, տրանսակցիաների հավաքածու է (այս փուլում դրանք դեռևս չհաստատված են), ինչպես նաև լրացուցիչ մետատվյալներ։
Նախքան տրանսակցիան բլոկում ներառելը, մայները պետք է ստուգի, թե արդյոք այն համապատասխանում է կատարման պահանջներին՝ հիմնվելով բլոկչեյնում առկա տրանսակցիաների պատմության վրա, որպեսզի բացառի նույն կրիպտոարժույթի կրկնակի ծախսման հնարավորությունը։ Ինչպես արդեն նշվել էր վերևում, եթե ուղարկողի դրամապանակի հաշվեկշռում բավարար միջոցներ կան՝ համաձայն բլոկչեյնի տրանսակցիաների պատմության, ապա տրանսակցիան համարվում է վավեր և կարող է ներառվել բլոկում։
Քայլ 2. Բլոկի ստորագրումը
Որպեսզի բլոկը հետագայում կարողանա ավելացվել բլոկչեյնին (ինչը նշանակում է, որ բլոկչեյնի բոլոր նոդերը կգրանցեն այդ բլոկում ներառված տրանսակցիաները), առաջին հերթին այն պետք է ունենա ստորագրություն։ Այս ստորագրությունը ստեղծվում է շատ բարդ մաթեմատիկական խնդրի լուծման միջոցով, որը եզակի է յուրաքանչյուր տրանսակցիաների բլոկի համար։ Բլոկը բաղկացած է հետևյալ մասերից՝ վերնագիր (Header) և տրանսակցիաների ցանկ (Payload)։ Ընդ որում, բլոկի վերնագիրը պարունակում է ինչպես նախորդ, այնպես էլ ընթացիկ բլոկի տվյալները, ինչը բացառում է բլոկների կեղծման հնարավորությունը։ Բլոկի վերնագիրը նաև պարունակում է հատուկ թիվ (nonce), որը մայները պետք է գտնի։ Մայները գտնում է այդ հատուկ թիվը փորձերի և սխալների մեթոդով (brute force) և ստեղծում է հեշ-գումարը (ստորագրությունը)։ Այս մաթեմատիկական խնդրի լուծման համար պահանջվում են հսկայական հաշվարկային ռեսուրսներ (և, համապատասխանաբար, մեծ քանակությամբ էլեկտրաէներգիա), քանի որ ամբողջ գործընթացը հիմնված է բազմաթիվ հնարավոր արժեքների հերթական փորձարկման վրա։ Այս գործընթացն էլ կոչվում է մայնինգ։
Ավելի մանրամասն կբացատրենք, թե ինչպես է ընթանում մայնինգի գործընթացը՝ օգտագործելով մի փոքր ավելի տեխնիկական լեզու։ Եթե չեք ցանկանում խորանալ տեխնիկական մանրամասների մեջ, կարող եք անմիջապես անցնել 3-րդ քայլին։
Մայնինգը, որը նաև հայտնի է որպես հեշավորում (կոնսենսուսի Proof of Work («աշխատանքի ապացույց») ալգորիթմ), հիմնված է հետևյալ սկզբունքի վրա.
Մաթեմատիկական խնդիրը, որը յուրաքանչյուր մայներ պետք է լուծի՝ բլոկչեյնին նոր բլոկ ավելացնելու փորձի ժամանակ, տվյալ բլոկի տվյալների համար հեշ-գումարի (որը նաև կոչվում է թվային ստորագրություն) գտնելն է։ Ընդ որում, այդ ստորագրությունը պետք է սկսվի որոշակի քանակությամբ անընդմեջ զրոներով (դա որոշում է մայնինգի բարդությունը)։ Թվում է բավականին բարդ խնդիր, այնպես չէ՞։ Իրականում ամեն ինչ այնքան էլ բարդ չէ։ Փորձենք դա բացատրել առավել պարզեցված ձևով։
Ինչպես արդեն նշել ենք, յուրաքանչյուր բլոկ բաղկացած է երկու հիմնական մասից՝ Header-ից և Payload-ից։
Header — պարունակում է տեղեկատվություն, որը պատասխանատու է ցանցի կայունության և անփոփոխելիության (immutability) համար։ Payload — պարունակում է բոլոր այն տրանսակցիաների ցանկը, որոնք պետք է պահպանվեն տվյալ բլոկում և ավելացվեն Blockchain-ին։
Դասական բլոկչեյնում Header-ը պարունակում է հետևյալ դաշտերը.
- Տարբերակի համարը (Version)
- Նախորդ բլոկի հեշը (prev_block)
- Ընթացիկ բլոկի բոլոր տրանսակցիաների հեշը (mrkl_root)
- Ժամանակային նշումը (Time), որը ցույց է տալիս, թե երբ է ստեղծվել տվյալ բլոկը
- Bits և Nonce, որոնք օգտագործվում են մայնինգի գործընթացում
Նախքան շարունակելը, կարևոր է հասկանալ, թե ինչ է հեշ-ֆունկցիան։ Պարզ ասած՝ հեշ-ֆունկցիան մաթեմատիկական խնդիր է, որը շատ դժվար է լուծել, սակայն ստացված արդյունքը շատ հեշտ է ստուգել։ Հեշ-ֆունկցիան ընդունում է մուտքային տվյալների տող, որը բաղկացած է թվերից և տառերից (ցանկացած՝ բառի բուն իմաստով, տառերի, թվերի և/կամ նշանների պատահական հաջորդականություն), և այն վերածում է նոր 32-սիմվոլանոց տողի, որը կազմված է պատահական տառերից և թվերից։ Այս 32-սիմվոլանոց տողն էլ հենց հեշ-գումարն է։ Եթե մուտքային տողում փոխվի թեկուզ մեկ տառ կամ թիվ, ապա հեշ-գումարը նույնպես ամբողջությամբ կփոխվի պատահական ձևով։ Սակայն նույն մուտքային տվյալների տողը միշտ կստեղծի նույն հեշ-գումարը։
Այժմ հաշվի առնենք, որ բլոկի ներսում գտնվող տվյալները հանդիսանում են հեշավորման մուտքային տվյալները։ Մենք վերցնում ենք ամբողջ բլոկի տվյալները՝ version, prev_block, mrkl_root, time, bits, nonce, ինչպես նաև բոլոր այն տրանսակցիաների ցանկը, որոնք մայները ընտրել է mempool-ից։ Այս մուտքային տվյալները հեշ-ֆունկցիայով մշակելու արդյունքում ստանում ենք հեշ-գումար (32-սիմվոլանոց տող)։ Սակայն մեզ անհրաժեշտ է ստանալ հենց այնպիսի հեշ-գումար, որը կսկսվի որոշակի քանակությամբ անընդմեջ զրոներով։ Դա պայմանավորված է նրանով, որ Bitcoin բլոկչեյնի կանոններով միայն այն բլոկները կարող են ավելացվել բլոկչեյնին, որոնց ստորագրությունը (հեշ-գումարը) սկսվում է սահմանված քանակությամբ զրոներով։ Այս կերպ բլոկչեյնը կարգավորում է մայնինգի բարդությունը։ Ամեն ինչ բավականին պարզ կլիներ, եթե հեշ-ֆունկցիայի ստեղծած արդյունքը կանխատեսելի լիներ։ Սակայն տարբեր մուտքային տվյալների համար ստացվող հեշ-գումարը միշտ պատահական է։ Իսկ ի՞նչ անել, եթե բլոկի տվյալները հեշավորելու արդյունքում ստացված հեշ-գումարը չի սկսվում անհրաժեշտ քանակությամբ անընդմեջ զրոներով։ Հենց դա է պատճառը, որ մայներները ստիպված են բազմիցս փոխել բլոկի տվյալների մի փոքր հատված, որը կոչվում է nonce (մեր «կախարդական թիվը»)։ Ամեն անգամ, երբ մայները փոխում է nonce-ը, բլոկի տվյալների կառուցվածքը փոքր-ինչ փոխվում է։ Իսկ երբ փոխվում են բլոկի ներսում գտնվող տվյալները (այսինքն՝ մուտքային տվյալները), փոխվում է նաև դրա ստորագրությունը (այսինքն՝ ելքային տվյալները)։ Այսպիսով, ամեն անգամ, երբ փոխվում է բլոկի nonce-ը, այդ բլոկը ստանում է նոր, պատահական հեշ-գումար։

Nonce-ի փոփոխման այս գործընթացը մայներները կրկնում են անընդհատ, մինչև վերջապես պատահականորեն ստանան այնպիսի ելքային տող, որը համապատասխանում է բլոկի ստորագրության պահանջներին (սկսվում է անհրաժեշտ քանակությամբ անընդմեջ զրոներով)։ Վերևում ներկայացված օրինակը պատկերում է հենց այս գործընթացը։ Օրինակում օգտագործված են երեք զրո, սակայն իրականում դրանց քանակը կախված է բլոկչեյնում տվյալ բլոկի բարդության մակարդակից։ Բլոկի բարդությունը ավելի խորացված թեմա է, ուստի առաջարկում ենք դրան ծանոթանալ ավելի ուշ։ Հենց այսպես են մայներները որոնում իրենց բլոկի համար համապատասխան ստորագրությունը, և հենց դա է պատճառը, որ այս մաթեմատիկական խնդրի լուծման համար անհրաժեշտ են այդքան մեծ հաշվարկային ռեսուրսներ։ Հսկայական քանակությամբ nonce-երի հերթական փորձարկումը՝ ճիշտ արժեքը գտնելու նպատակով, պահանջում է շատ ժամանակ և մեծ հաշվարկային հզորություն։
Քայլ 3. Այն մայները, որն առաջինն է գտնում իր բլոկի համար պահանջներին համապատասխանող ստորագրությունը, այդ բլոկը և դրա ստորագրությունը փոխանցում (հեռարձակում) է ցանցի բոլոր մյուս մայներներին։Պետք է նաև հաշվի առնել, որ բլոկչեյնում հեշավորման ընդհանուր հզորության (այսինքն՝ մայներների քանակի) աճին զուգընթաց մեծանում է նաև մաթեմատիկական խնդրի բարդությունը, ինչը հանգեցնում է մեկ բլոկի մշակման համար անհրաժեշտ էլեկտրաէներգիայի միջին ծախսերի աճին։
Քայլ 4. Այժմ մյուս մայներները ստուգում են ստորագրության վավերականությունը՝ վերցնելով փոխանցված բլոկի տվյալները և կրկին հեշավորելով դրանք, որպեսզի համոզվեն, որ ստացված հեշ-գումարը իսկապես համապատասխանում է բլոկում ներառված ստորագրությանը և սկսվում է պահանջվող քանակությամբ անընդմեջ զրոներով (հիշո՞ւմ եք՝ դժվար է գտնել, բայց հեշտ է ստուգել)։ Եթե ստորագրությունը վավեր է, ապա մյուս բոլոր մայներները հաստատում են դրա իսկությունը և համաձայնության են գալիս, որ տվյալ բլոկը կարող է ավելացվել բլոկչեյնին (այլ կերպ ասած՝ նրանք հասնում են կոնսենսուսի, այսինքն՝ բոլորը համաձայնում են միմյանց հետ։ Հենց այստեղից էլ առաջացել է կոնսենսուսի ալգորիթմ անվանումը)։ Հենց այստեղից էլ ծագում է Proof of Work (Աշխատանքի ապացույց) տերմինը։ Ստորագրությունն էլ հանդիսանում է այն անհրաժեշտ ապացույցը, որ աշխատանքը կատարվել է (այսինքն՝ ծախսվել են հաշվարկային ռեսուրսներ)։ Այժմ բլոկը կարող է ավելացվել բլոկչեյնին և փոխանցվել ցանցի բոլոր մյուս նոդերին։ Դրանք, իրենց հերթին, կընդունեն և կպահպանեն բլոկը՝ ավելացնելով այն իրենց տրանսակցիաների տվյալներին, պայմանով, որ տվյալ բլոկի բոլոր տրանսակցիաները կարող են կատարվել՝ համաձայն բլոկչեյնում արդեն գրանցված պատմության։ Մայները իր աշխատանքի համար ստանում է պարգևատրություն՝ Bitcoin-ի տեսքով։ Այն բանից հետո, երբ բլոկն ավելացվում է շղթային, դրանից հետո ավելացվող յուրաքանչյուր նոր բլոկ համարվում է այդ բլոկի հաստատում։