Եթե նայենք նախորդ մի քանի տարիների միտումներին, ապա մենք անընդհատ լսել ենք բլոկչեյնի մասին, բայց ոչ շատ առանձնահատկությունների մասին:
Մենք բոլորս տեղյակ ենք, որ կրիպտոարժույթները, ինչպիսիք են Bitcoin-ը, Ethereum-ը, Dogecoin-ը, Matic-ը և այլն, ապավինում են բլոկչեյն տեխնոլոգիային: Blockchain-ը գլխավորեց այն նշանակալից իրադարձությունները, որոնք հեղափոխեցին բազմաթիվ արդյունաբերություններ 2021 թվականին և ճանապարհ հարթեցին նոր ձեռքբերումների համար:
Բլոկչեյնը տվյալների պահպանման միջոց է այնպես, որ դժվար կամ անհնար է խմբագրել, կոտրել կամ խաբել: Այն գործարքների թվային մատյան է, որը կրկնօրինակվում և տարածվում է բլոկչեյնի համակարգչային համակարգերի ողջ ցանցում:
Դա տվյալների բազայի բեկումնային տեխնոլոգիան է, որն ապահովում է գործնականում բոլոր կրիպտոարժույթները: Blockchain-ը անհավանականորեն դժվարացնում է համակարգը կոտրելը կամ խաբելը` տվյալների բազայի նույնական պատճենները տարածելով ամբողջ ցանցում:
Թեև Bitcoin-ն այժմ ամենահայտնի օգտագործումն է բլոկչեյնի համար, տեխնոլոգիան կարող է ծառայել շատ լայն կիրառությունների:
Կրիպտոարժույթները և բլոկչեյնները վերջին տարիներին ավելի ու ավելի տարածված են դարձել, և ակնկալվում է, որ այս միտումը կշարունակվի:
Այս ձեռնարկում մենք JavaScript-ով կստեղծենք պարզ բլոկչեյն: Այն ձեզ կտրամադրի հիմնական պատկերացում, թե ինչպես է աշխատում բլոկչեյնը:
Եկեք այն անվանենք MelodyCoin և անմիջապես անցնենք ակցիային:
Բլոկի ստեղծում
Սկսելու համար մենք կստեղծենք նոր JavaScript ֆայլ, որտեղ կտեղադրենք մեր ամբողջ կոդը:
Եկեք այն անվանենք main.js և սկսենք նկարագրությամբ, թե ինչպես պետք է տեսք ունենան բլոկչեյնը և բլոկները:
Ստեղծեք Block դաս և սկզբից տվեք նրան Object() { [native code] } ֆունկցիան:
Նոր բլոկ ստեղծելիս պետք է նշեք ամսաթիվը և նախորդ բլոկի հեշը.
Ահա յուրաքանչյուր գույքի սահմանումները.
- Ժամկետանիշը ցույց է տալիս, թե երբ է ստեղծվել բլոկը: Դուք կարող եք օգտագործել ձեր ընտրած ձևաչափը (այս դեպքում՝ UNIX-ի ժամանակի դրոշմ):
- Տվյալների ցանկացած ձև, որը ցանկանում եք միացնել այս բլոկին, կարող է ներառվել տվյալների պարամետրում: Եթե ցանկանում եք ստեղծել կրիպտոարժույթ, կարող եք այստեղ պահել գործարքի տվյալները, ինչպիսիք են ուղարկողը/ստացողը և տեղափոխված գումարի չափը:
- ՆախորդՀաշը տող է, որը պահում է նախորդ բլոկի հեշը: Սա այն է, ինչը կառաջացնի բլոկների շղթա, որը կարևոր նշանակություն կունենա հետագայում մեր բլոկչեյնի ամբողջականությունն ապահովելու համար:
Հեշերի ստեղծում
Յուրաքանչյուր բլոկ կապվում է նախորդ բլոկին (հետևաբար նախորդ Hash հատկությունը): Այսինքն, յուրաքանչյուր բլոկ պահանջում է հեշ: Հեշը նման է մատնահետքի: Այն տարբերվում է յուրաքանչյուր բլոկի համար:
Բլոկի հեշը կարելի է հաշվարկել՝ փոխանցելով դրա ամբողջ բովանդակությունը հեշ ֆունկցիայի միջոցով:
Այսպիսով, եկեք սկսենք իրականացնել գործառույթ, որը հաշվարկում է ընթացիկ բլոկի հեշը:
Այսպիսով, Block դասի ներքո մենք սահմանում ենք հաշվարկի Hash ֆունկցիան.
Այնուամենայնիվ, SHA256 հեշը չի աջակցվում JavaScript-ով և այն պետք է ձեռք բերվի արտաքին գրադարանից:
Crypto-js-ը ֆանտաստիկ փաթեթ է, որը ներառում է մի քանի հեշ ալգորիթմների անվտանգ իրականացում:
Այնուհետև մենք կարող ենք ներմուծել այն մեր main.js կոդի մեջ:
Այժմ, երբ մենք ունենք մեր accountHash() ֆունկցիան, եկեք այն օգտագործենք մեր Block-ի ֆունկցիայում.
Բլոկների տեսքը նկարագրելուց հետո մենք կարող ենք սահմանել, թե ինչպիսին պետք է լինի Blockchain-ը: Այսպիսով, եկեք ստեղծենք նոր դաս:
Այս սցենարում բլոկչեյնը շատ պարզ օբյեկտ է, որն ունի սեփականության շղթա: Սա շղթայի բոլոր բլոկները պահող զանգված է:
Նախքան բլոկներ ավելացնելը, մենք նախ պետք է ստեղծենք այն, ինչը հայտնի է որպես «ծագման բլոկ»: Սա շղթայի առաջին բլոկն է, և այն եզակի է նրանով, որ չի կարող մատնանշել նախորդ բլոկը (դա առաջինն է):
Այսպիսով, genesis բլոկը կառուցելու համար ես մեր դասին կավելացնեմ մի ֆունկցիա, որը կոչվում է createGenesisBlock (): Վերադարձ դեպի մեր Blockchain դասի Object() { [native code] } ֆունկցիան։
Այժմ մենք կարող ենք ներառել ծագման բլոկը ցանկացած ժամանակ, երբ մենք կառուցում ենք նոր Blockchain օրինակ.
Բլոկչեյնի մեթոդներ
Այժմ, եկեք մեր Blockchain դասին ավելացնենք մեթոդներ, որոնք թույլ կտան մեզ անել այնպիսի բաներ, ինչպիսիք են նոր բլոկներ ավելացնելը և ամենավերջին բլոկը վերցնելը:
GetLatestBlock ֆունկցիան ամենահիմնականն է: Այն պարզապես վերադարձնում է շղթայի զանգվածի վերջնական անդամը.
AddBlock տեխնիկան մի փոքր ավելի ներգրավված է:
Նախքան մենք կարող ենք նոր բլոկ ավելացնել մեր շղթային, մենք նախ պետք է համապատասխան կերպով սահմանենք այդ բլոկի նախորդHash դաշտը:
Այն պետք է սահմանվի մեր շղթայում ամենավերջին ավելացված բլոկի հեշի վրա: Մենք նաև պետք է հաշվարկենք նոր բլոկի հեշը.
Փորձարկում
Տեսնենք, թե ինչպես է դուրս եկել մեր MelodyCoin-ը:
Դա անելու համար ստեղծեք բլոկչեյնի օրինակ: Եկեք ավելացնենք ևս մի քանի բլոկ.
Մենք այնտեղ երկու նոր բլոկ ենք պատրաստել: Եկեք նայենք, թե ինչպիսի տեսք ունի մեր բլոկչեյնը ներկայումս:
MelodyCoin-ը կնճռոտվի և ձևաչափվի չորս բացատներով.
Ստուգեք Blockchain-ի ամբողջականությունը
Բլոկչեյնները ֆանտաստիկ են, քանի որ բլոկը ավելացնելուց հետո այն չի կարող փոփոխվել առանց շղթայի մնացած մասը անվավեր ճանաչելու:
Այնուամենայնիվ, ինձ համար չկա մեթոդ այս ներդրմամբ ստուգելու մեր բլոկչեյնի ամբողջականությունը:
Եկեք ներկայացնենք isChainValid ֆունկցիան մեր բլոկչեյնում: Եթե շղթան օրինական է, այն կվերադառնա ճշմարիտ; հակառակ դեպքում, այն կվերադարձնի կեղծ:
Անարատության փորձարկում
Այժմ մենք կարող ենք փորձարկել մեր բլոկչեյնի ամբողջականությունը: Եթե մենք դա կատարենք հիմա, դա կհաստատի, որ մեր շղթան իսկական է:
Եկեք հիմա փորձենք խաթարել մեր բլոկչեյնը: Եկեք փոփոխենք բլոկ 2-ը և վերագրանցենք դրա բովանդակությունը (ենթադրենք, մենք փոխանցել ենք 100 մետաղադրամ չորսի փոխարեն):
Երբ մենք կատարում ենք սա, մենք կարող ենք տեսնել, որ ծրագրաշարը ճանաչում է շղթան խախտելու մեր ջանքերը:
Այնուամենայնիվ, դուք կարող եք հավատալ, որ կա մեկ այլ մեթոդ, որով ես կարող եմ խառնվել դրան: Ես փոխել եմ բլոկի բովանդակությունը, բայց չեմ վերահաշվարկել հեշը: Այսպիսով, դուք կարող եք փորձել լինել խելացի և վերահաշվարկել նույն բլոկի հեշը:
Դա այն ամենն էր, ինչ կար մեր փոքրիկ բլոկչեյնի տեղադրման համար: Այն մեզ հնարավորություն է տալիս ավելացնել նոր բլոկներ և հայտնաբերել տվյալների կեղծումը շղթայի ներսում:
Մեր փոքր բլոկչեյնի հետ կապված երկու խնդիր կա, որոնց մենք պետք է անդրադառնանք.
- Ժամանակակից համակարգիչները չափազանց արագ են և կարող են վայրկյանների ընթացքում հազարավոր բլոկներ ավելացնել մեր շղթային: Մենք ակնհայտորեն չենք ցանկանում, որ որևէ մեկը սպամ ուղարկի մեր բլոկչեյնին:
- Մեր բլոկչեյնը դեռ խոցելի է կեղծիքների նկատմամբ: Դուք կարող եք թարմացնել բլոկի բովանդակությունը, այնուհետև պարզապես վերահաշվարկել հեշերը (և նախորդ հեշերը) բոլոր հաջորդ բլոկների համար: Նույնիսկ եթե դուք խառնվեք դրա հետ, դուք կհայտնվեք օրինական շղթայի հետ:
Այս մտահոգությունները լուծելու համար բլոկչեյններն օգտագործում են տեխնիկա, որը հայտնի է որպես «աշխատանքի ապացույց»: Դուք պետք է ցույց տաք, որ դուք օգտագործել եք զգալի քանակությամբ հաշվողական ռեսուրսներ այս մոտեցմամբ բլոկ ստեղծելու համար: Սա նաև կոչվում է լեռնահանքային.
Աշխատանքի ապացույցը պահանջում է, որ բլոկի հեշը սկսվի որոշակի քանակությամբ զրոներով: Բայց ինչպե՞ս կարող եք իմանալ, արդյոք ձեր հեշը համապատասխանում է այս կանոնին:
Բլոկի բովանդակությունը որոշում է դրա հեշը: Այսպիսով, մենք միշտ ստանում ենք նույն հեշը, պայմանով, որ չփոփոխենք բովանդակությունը:
Յուրաքանչյուր բլոկ պետք է ունենա որպես լուծում ավելացված ոչ մի արժեք: Սա, ըստ էության, որոշ պատահական տվյալներ է, որոնք մենք կարող ենք թարմացնել այնքան ժամանակ, մինչև մեր բլոկի հեշը սկսվի բավարար զրոներով: Քանի որ դուք չեք կարող փոխել հեշ ֆունկցիայի ելքը, դուք պետք է փորձարկեք շատ տարբեր համակցություններ և հուսալ լավագույնին:
Ներկայացրե՛ք հանքարդյունաբերությունը բլոկչեյնում
Եկեք սկսենք մեր Block դասում նոնս ներառելով: Nonce-ը մեր բլոկի մեկ արժեքն է, որը մենք կարող ենք փոփոխել՝ ազդելու բլոկի հեշի վրա:
Մենք չենք կարող փոխել ժամանակի կնիքը կամ տվյալները:
Հաջորդը, եկեք գրենք mineBlock() ֆունկցիա, որը կկատարի բլոկի իրական մայնինգը: Այս ֆունկցիան կուղարկվի անհրաժեշտ դժվարությունը որպես պարամետր և կշարունակի գործել այնքան ժամանակ, մինչև մեր բլոկի հեշը սկսվի բավականաչափ զրոներով:
Ես պարզապես ստեղծել եմ հիմնական while հանգույց, որը կաշխատի այնքան ժամանակ, մինչև մեր հեշը սկսվի բավականաչափ զրոներով: Մենք օգտագործում ենք դժվարությունը՝ որոշելու համար, թե քանի զրո է անհրաժեշտ: 5-ի դժվարությամբ մեր հեշը պետք է սկսվի 5 զրոյից:
Երբ մեր հեշը չի պարունակում բավարար զրոներ, մենք բարձրացնում ենք nonce-ը մեկով և վերահաշվում ենք հեշը: Եվ եթե մենք գտնում ենք դժվարությանը համապատասխանող հեշ, մենք այն մուտքագրում ենք վահանակ:
Եվս մեկ բան կա, որ մենք պետք է անենք. Մենք իրականում հաշվի չենք առնում nonce փոփոխականը մեր հաշվարկման Hash մեթոդում, ուստի ահա այն.
Բլոկչեյն դաս
Եկեք այս նոր մոտեցումը փորձարկենք մեր բլոկչեյնի դասում և տեսնենք, թե ինչպես է այն ընթանում:
Սկսելու համար ես կսահմանեմ մեր բլոկչեյնի դժվարությունը Object() ֆունկցիայի մեջ: Մենք սահմանում ենք այն այստեղ, քանի որ կարող ենք օգտագործել այն ինչ-որ տեղ ավելի ուշ:
Այնուհետև addBlock ֆունկցիան պետք է փոփոխվի այնպես, որ այն արդյունահանի բլոկը, նախքան այն ավելացնելը մեր շղթայում:
Օգտագործեք բլոկչեյնը
Այժմ եկեք գործածենք մեր նոր բլոկչեյնը՝ աշխատանքի ապացուցման ալգորիթմի հետ: Այստեղ ավելացրեք մի քանի console.log հայտարարություններ:
Երբ մենք կատարում ենք այս կոդը, մենք կարող ենք նկատել, որ հանքարդյունաբերության գործընթացն այլևս առանձնապես արագ չէ:
Որոշ ժամանակ է պահանջվում, որպեսզի ալգորիթմը ստեղծի հեշերով բլոկներ, որոնք սկսվում են երեք զրոյով (ինչպես կազմաձևված է ըստ դժվարության):
Այսպիսով, դա մեր հիմնական բլոկչեյնի տեղադրման ավարտն էր:
Մենք կարող ենք կարգավորել, թե որքան արագ են նոր բլոկներ ավելացվում մեր բլոկչեյնին՝ աշխատանքի ապացուցման մեխանիզմի շնորհիվ:
Դա բլոկչեյնների անվտանգության ամենակարևոր հատկանիշն է: Եվ հիմա, երբ հասկանում եք, թե ինչպես է այն աշխատում, սկսեք ստեղծել ձեր սեփականը:
Թողնել գրառում