TON: Telegram բաց ցանց: Մաս 2. Բլոկչեյններ, շարդինգ

TON: Telegram բաց ցանց: Մաս 2. Բլոկչեյններ, շարդինգ

Այս տեքստը մի շարք հոդվածների շարունակությունն է, որտեղ ես ուսումնասիրում եմ Telegram Open Network (TON) (ենթադրաբար) բաշխված ցանցի կառուցվածքը, որը պատրաստվում է թողարկման այս տարի: IN նախորդ մասը Ես նկարագրեցի դրա ամենահիմնական մակարդակը՝ հանգույցների փոխազդեցությունը միմյանց հետ:

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

Այսօր մենք կանդրադառնանք TON-ի հիմնական բաղադրիչին՝ բլոկչեյնին:

Հիմնական հասկացություններ

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

Խելացի պայմանագիր (խելացի պայմանագիր) Ըստ էության, դա հաշվի հատուկ դեպք է, որը համալրված է խելացի պայմանագրի կոդով և դրա փոփոխականների պահեստավորումով: Եթե ​​«դրամապանակի» դեպքում դուք կարող եք գումար մուտքագրել և հանել դրանից համեմատաբար պարզ և կանխորոշված ​​կանոններով, ապա խելացի պայմանագրի դեպքում այդ կանոնները գրվում են դրա կոդի տեսքով (որոշակի Թյուրինգ-լրիվ. ծրագրավորման լեզու):

Բլոկչեյն պետություն (բլոկչեյնի վիճակը) Բոլոր հաշիվների/խելացի պայմանագրերի վիճակների հավաքածուն (վերացական իմաստով՝ հեշ աղյուսակ, որտեղ բանալիները հաշվի նույնացուցիչներն են, իսկ արժեքները՝ հաշիվներում պահվող տվյալները):

Հաղորդագրություն (հաղորդագրություն) Վերևում ես օգտագործեցի «վարկային և դեբետային փող» արտահայտությունը. սա հաղորդագրության հատուկ օրինակ է («փոխանցում N գրամ հաշվից հաշիվ_1 հաշվին հաշիվ_2»): Ակնհայտ է, որ միայն այն հանգույցը, որին պատկանում է հաշվի մասնավոր բանալին, կարող է նման հաղորդագրություն ուղարկել հաշիվ_1 - և կարող է դա հաստատել ստորագրությամբ: Նման հաղորդագրությունները սովորական հաշվին հասցնելու արդյունքը դրա մնացորդի ավելացումն է, իսկ խելացի պայմանագրի արդյունքը՝ դրա կոդի կատարումը (որը կմշակի հաղորդագրության ստացումը)։ Իհարկե, հնարավոր են նաև այլ հաղորդագրություններ (խելացի պայմանագրերի միջև ոչ թե դրամական գումարների, այլ կամայական տվյալների փոխանցում)։

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

Բլոկչեյն TON-ում. ինչ է դա և ինչու:

Ինչպես նշվեց նախորդ հոդվածում, բլոկչեյնը տվյալների կառուցվածք է, որի տարրերը (բլոկները) դասավորված են «շղթայի» մեջ, և շղթայի յուրաքանչյուր հաջորդ բլոկ պարունակում է նախորդի հեշը։. Մեկնաբանություններում հարց է տրվել՝ ինչի՞ն է մեզ ընդհանրապես անհրաժեշտ տվյալների նման կառուցվածքը, երբ մենք արդեն ունենք DHT՝ բաշխված հեշ աղյուսակ: Ակնհայտ է, որ որոշ տվյալներ կարող են պահպանվել DHT-ում, բայց դա հարմար է միայն ոչ շատ «զգայուն» տեղեկատվության համար: Կրիպտոարժույթի մնացորդները չեն կարող պահպանվել DHT-ում, հիմնականում ստուգումների բացակայության պատճառով: ամբողջականություն. Իրականում, բլոկչեյնի կառուցվածքի ամբողջ բարդությունն աճում է՝ դրանում պահվող տվյալներին միջամտությունը կանխելու համար։

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

Ինչպե՞ս է TON-ը նախատեսում լուծել վերը նշված երկու խնդիրները:

Բլոկչեյնի բովանդակություն. Աշխատանքային շղթաներ.

TON: Telegram բաց ցանց: Մաս 2. Բլոկչեյններ, շարդինգ

Նախ, եկեք խոսենք այն մասին, թե ինչ է նախատեսվում պահել բլոկչեյնում: Հաշիվների վիճակները (բազային դեպքում «դրամապանակներ») և խելացի պայմանագրերը կպահվեն այնտեղ (պարզության համար մենք կենթադրենք, որ դա նույնն է, ինչ հաշիվները): Ըստ էության, սա կլինի սովորական հեշ աղյուսակ. դրա բանալիները կլինեն նույնացուցիչներ account_idև արժեքները տվյալների կառուցվածքներ են, որոնք պարունակում են այնպիսի բաներ, ինչպիսիք են.

  • հավասարակշռություն;
  • խելացի պայմանագրի կոդը (միայն խելացի պայմանագրերի համար);
  • խելացի պայմանագրերի տվյալների պահպանում (միայն խելացի պայմանագրերի համար);
  • վիճակագրություն;
  • (ընտրովի) հաշվից փոխանցումների հանրային բանալին, ըստ լռելյայն account_id;
  • ելքային հաղորդագրությունների հերթ (այստեղ դրանք մուտքագրվում են ստացողին փոխանցելու համար);
  • այս հաշվին ուղարկված վերջին հաղորդագրությունների ցանկը:

Ինչպես նշվեց վերևում, բլոկներն իրենք բաղկացած են գործարքներից՝ հաղորդագրություններից, որոնք ուղարկվում են տարբեր account_id հաշիվներին: Այնուամենայնիվ, բացի account_id-ից, հաղորդագրությունները պարունակում են նաև 32-բիթանոց դաշտ workchain_id — այսպես կոչված նույնացուցիչ աշխատանքային շղթա (աշխատանքային շղթա, աշխատող բլոկչեյն) Սա թույլ է տալիս ունենալ միմյանցից անկախ մի քանի բլոկչեյններ՝ տարբեր կոնֆիգուրացիաներով: Այս դեպքում workchain_id = 0 համարվում է հատուկ դեպք, զրոյական աշխատանքային շղթա — դրանում եղած մնացորդներն են, որոնք կհամապատասխանեն TON (գրամ) կրիպտոարժույթին։ Ամենայն հավանականությամբ, սկզբում այլ աշխատանքային շղթաներ ընդհանրապես չեն լինի։

Բարդ շղթաներ. Անսահման Sharding պարադիգմ.

Բայց բլոկչեյնների թվի աճը դրանով չի դադարում։ Եկեք զբաղվենք shading-ի հետ: Եկեք պատկերացնենք, որ յուրաքանչյուր հաշվի (account_id) հատկացվում է իր սեփական բլոկչեյնը, այն պարունակում է բոլոր հաղորդագրությունները, որոնք գալիս են դրան, և բոլոր այդպիսի բլոկչեյնների վիճակները պահվում են առանձին հանգույցներում:

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

Հետևաբար, shardchain-ները միավորում են հաշիվները իրենց նույնացուցիչների երկուական նախածանցներով. եթե shardchain-ն ունի 0110 նախածանց, ապա այն կներառի բոլոր account_id-ների գործարքները, որոնք սկսվում են այս թվերով: Սա shard_prefix կարող է ունենալ 0-ից 60 բիթ երկարություն, և գլխավորն այն է, որ այն կարող է դինամիկ փոխվել:

TON: Telegram բաց ցանց: Մաս 2. Բլոկչեյններ, շարդինգ

Հենց որ բեկորներից մեկը սկսում է չափից շատ գործարքներ ստանալ, դրա վրա աշխատող հանգույցները, ըստ կանխորոշված ​​կանոնների, այն «բաժանում» են երկու երեխաների. հավասար է 0-ի, իսկ մյուսի համար՝ 1): Օրինակ, shard_prefix = 0110բ կբաժանվի 01100b և 01101բ. Իր հերթին, եթե երկու «հարևան» շղթաները սկսեն բավականաչափ հանգիստ զգալ (որոշ ժամանակով), նրանք նորից կմիավորվեն:

Այսպիսով, Sharding-ը կատարվում է «ներքևից վեր». մենք ենթադրում ենք, որ յուրաքանչյուր հաշիվ ունի իր բեկորը, բայց առայժմ դրանք «սոսնձված են» նախածանցներով։ Սա է նշանակում Անսահման Sharding պարադիգմ (անսահման բեկորային պարադիգմ).

Առանձին-առանձին, ես կցանկանայի ընդգծել, որ աշխատանքային շղթաները գոյություն ունեն միայն վիրտուալ կերպով. workchain_id այն կոնկրետ բեկորային շղթայի նույնացուցիչի մի մասն է: Պաշտոնական առումով, յուրաքանչյուր բեկորային շղթա սահմանվում է զույգ թվերով (workchain_id, shard_prefix).

Սխալի ուղղում. Ուղղահայաց բլոկչեյններ.

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

TON: Telegram բաց ցանց: Մաս 2. Բլոկչեյններ, շարդինգ

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

Հարկ է նշել, որ թեև ուղղիչ բլոկները պատկերված են որպես բնօրինակներից «վերևում» տեղակայված, իրականում դրանք կավելացվեն համապատասխան բլոկչեյնի վերջում (որտեղ պետք է լինեն ժամանակագրական կարգով): Երկչափ տեղադրությունը միայն ցույց է տալիս, թե բլոկչեյնի որ կետին են դրանք «կապված» (դրանց մեջ տեղադրված բնօրինակ բլոկի հեշի միջոցով):

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

Մեկ բլոկչեյն՝ բոլորին կառավարելու համար

Վերևում թվարկված շատ տեղեկություններ կան բլոկչեյնների տարբեր տեսակների մասին, որոնք ինքնին նույնպես պետք է ինչ-որ տեղ պահվեն: Խոսքը, մասնավորապես, հետևյալ տեղեկատվության մասին է.

  • աշխատանքային շղթաների քանակի և կազմաձևերի մասին.
  • բեկորների քանակի և դրանց նախածանցների մասին.
  • թե որ հանգույցներն են ներկայումս պատասխանատու, թե որ բեկորների համար;
  • վերջին բլոկների հեշերը, որոնք ավելացվել են բոլոր բեկորային շղթաներին:

Ինչպես կարող էիք կռահել, այս բոլոր բաները գրանցված են մեկ այլ բլոկչեյն պահեստում. masterchain (masterchain, վարպետ բլոկչեյն) Իր բլոկներում բոլոր բեկորային շղթաների բլոկներից հեշերի առկայության պատճառով այն համակարգը շատ կապված է դարձնում: Սա նշանակում է, ի թիվս այլ բաների, որ masterchain-ում նոր բլոկի ստեղծումը տեղի կունենա բլոկների ստեղծումից անմիջապես հետո, ակնկալվում է, որ բլոկները կհայտնվեն գրեթե միաժամանակ մոտավորապես յուրաքանչյուր 5 վայրկյանը մեկ, իսկ հաջորդ բլոկը masterchain - դրանից մեկ վայրկյան հետո:

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

Իրականում ոչ մեկը, ոչ մյուս պատասխանը ճիշտ չէ։ Բայց այս հոդվածի լուսանցքները արագ սպառվում են, ուստի հաջորդ մասում մենք կխոսենք հանգույցների տարբեր դերերի մասին (գուցե արդեն նկատել եք դրանցից մի քանիսի հիշատակումները), ինչպես նաև դրանց աշխատանքի մեխանիզմի մասին:

Source: www.habr.com

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