Å is teksts ir turpinÄjums rakstu sÄrijai, kurÄ es aplÅ«koju (domÄjams) izplatÄ«tÄ tÄ«kla Telegram Open Network (TON) struktÅ«ru, kas tiek gatavota izlaiÅ”anai Å”ogad. IN
Katram gadÄ«jumam atgÄdinÄÅ”u, ka man nav nekÄda sakara ar Ŕī tÄ«kla attÄ«stÄ«bu un viss materiÄls ir savÄkts no atklÄta (kaut arÄ« nepÄrbaudÄ«ta) avota -
Å odien mÄs apskatÄ«sim galveno TON sastÄvdaļu - blokÄ·Ädi.
PamatjÄdzieni
Konts (konts). Datu kopa, kas identificÄta ar 256 bitu skaitli Konta ID (visbiežÄk Ŕī ir konta Ä«paÅ”nieka publiskÄ atslÄga). Pamata gadÄ«jumÄ (skatÄ«t zemÄk nulles darba Ä·Äde), Å”ie dati attiecas uz lietotÄja bilanci. "OkupÄt" konkrÄti Konta ID ikviens var, bet tÄ vÄrtÄ«bu var mainÄ«t tikai saskaÅÄ ar noteiktiem noteikumiem.
Gudrs lÄ«gums (smart-lÄ«gums). PÄc bÅ«tÄ«bas tas ir Ä«paÅ”s konta gadÄ«jums, kas papildinÄts ar viedo lÄ«guma kodu un tÄ mainÄ«go uzglabÄÅ”anu. Ja āmakaā gadÄ«jumÄ naudu no tÄ var iemaksÄt un izÅemt pÄc salÄ«dzinoÅ”i vienkÄrÅ”iem un iepriekÅ” noteiktiem noteikumiem, tad viedÄ lÄ«guma gadÄ«jumÄ Å”ie noteikumi ir rakstÄ«ti tÄ koda formÄ (noteiktÄ TjÅ«ringa komplektÄ programmÄÅ”anas valoda).
Blockchain valsts (blokÄ·Ädes stÄvoklis). Visu kontu/viedo lÄ«gumu stÄvokļu kopa (abstraktÄ nozÄ«mÄ jaucÄj tabula, kur atslÄgas ir konta identifikatori un vÄrtÄ«bas ir kontos glabÄtie dati).
ZiÅa (ziÅa). IepriekÅ” es izmantoju izteicienu ākredÄ«ta un debeta naudaā ā Å”is ir konkrÄts ziÅojuma piemÄrs (āpÄrskaitÄ«jums N grami no konta konts_1 uz kontu konts_2"). AcÄ«mredzot Å”Ädu ziÅojumu var nosÅ«tÄ«t tikai tas mezgls, kuram pieder konta privÄtÄ atslÄga konts_1 - un spÄj to apstiprinÄt ar parakstu. Å Ädu ziÅojumu piegÄdes uz parasto kontu rezultÄts ir tÄ bilances pieaugums, un viedÄ lÄ«guma rezultÄts ir tÄ koda izpilde (kas apstrÄdÄs ziÅojuma saÅemÅ”anu). Protams, ir iespÄjami arÄ« citi ziÅojumi (nevis naudas summu, bet patvaļīgu datu pÄrsÅ«tÄ«Å”ana starp viedajiem lÄ«gumiem).
DarÄ«jums (darÄ«jums). Faktu, ka ziÅojums tiek piegÄdÄts, sauc par darÄ«jumu. DarÄ«jumi maina blokÄ·Ädes stÄvokli. TieÅ”i darÄ«jumi (ziÅu piegÄdes ieraksti) veido blokus blokÄ·ÄdÄ. Å ajÄ sakarÄ jÅ«s varat uzskatÄ«t blokÄ·Ädes stÄvokli kÄ pieaugoÅ”u datu bÄzi - visi bloki ir ādiffsā, kas ir jÄpiemÄro secÄ«gi, lai iegÅ«tu paÅ”reizÄjo datu bÄzes stÄvokli. Å o ādifuā iepakoÅ”anas (un pilnÄ stÄvokļa atjaunoÅ”anas no tiem) specifika tiks apspriesta nÄkamajÄ rakstÄ.
Blockchain TON: kas tas ir un kÄpÄc?
KÄ minÄts iepriekÅ”ÄjÄ rakstÄ, blokÄ·Äde ir datu struktÅ«ra, kuras elementi (bloki) ir sakÄrtoti āÄ·ÄdÄā, un katrs nÄkamais Ä·Ädes bloks satur iepriekÅ”ÄjÄ jaucÄjkrÄnu.. KomentÄros tika uzdots jautÄjums: kÄpÄc mums vispÄr ir vajadzÄ«ga Å”Äda datu struktÅ«ra, ja mums jau ir DHT - sadalÄ«ta hash tabula? AcÄ«mredzot dažus datus var saglabÄt DHT, taÄu tas ir piemÄrots tikai ne pÄrÄk āsensitÄ«vaiā informÄcijai. KriptovalÅ«tas atlikumus nevar glabÄt DHT ā galvenokÄrt tÄpÄc, ka trÅ«kst pÄrbaužu integritÄte. Faktiski visa blokÄ·Ädes struktÅ«ras sarežģītÄ«ba pieaug, lai novÄrstu tajÄ saglabÄto datu traucÄjumus.
TomÄr TON blokÄ·Äde izskatÄs vÄl sarežģītÄka nekÄ lielÄkajÄ daÄ¼Ä citu izplatÄ«to sistÄmu - un divu iemeslu dÄļ. Pirmais ir vÄlme samazinÄt vajadzÄ«bu pÄc dakÅ”as. TradicionÄlajÄs kriptovalÅ«tÄs visi parametri tiek iestatÄ«ti sÄkotnÄjÄ stadijÄ, un jebkurÅ” mÄÄ£inÄjums tos mainÄ«t faktiski noved pie "alternatÄ«vas kriptovalÅ«tas visuma" raÅ”anÄs. Otrs iemesls ir atbalsts saspieÅ”anai (sadalÄ«Å”ana, sadalÄ«Å”ana) blokÄ·Äde. Blockchain ir struktÅ«ra, kas laika gaitÄ nevar kļūt mazÄka; un parasti katrs par tÄ«kla darbÄ«bu atbildÄ«gais mezgls ir spiests to pilnÄ«bÄ uzglabÄt. TradicionÄlajÄs (centralizÄtajÄs) sistÄmÄs Å”Ädu problÄmu risinÄÅ”anai tiek izmantota sadalÄ«Å”ana: daļa ierakstu datubÄzÄ atrodas vienÄ serverÄ«, daļa citÄ utt. KriptovalÅ«tu gadÄ«jumÄ Å”Äda funkcionalitÄte joprojÄm ir diezgan reta - jo Ä«paÅ”i tÄpÄc, ka ir grÅ«ti pievienot sharding sistÄmai, kur tas sÄkotnÄji nebija paredzÄts.
KÄ TON plÄno atrisinÄt abas iepriekÅ” minÄtÄs problÄmas?
Blockchain saturs. Darba Ä·Ädes.
PirmkÄrt, parunÄsim par to, ko plÄnots glabÄt blokÄ·ÄdÄ. Tur tiks saglabÄti kontu stÄvokļi (bÄzes gadÄ«jumÄ "maki") un viedie lÄ«gumi (vienkÄrŔības labad pieÅemsim, ka tas ir tas pats, kas konti). BÅ«tÄ«bÄ Å”Ä« bÅ«s parasta hash tabula ā atslÄgas tajÄ bÅ«s identifikatori Konta ID, un vÄrtÄ«bas ir datu struktÅ«ras, kas satur tÄdas lietas kÄ:
- līdzsvars;
- viedÄ lÄ«guma kods (tikai viedajiem lÄ«gumiem);
- viedo lÄ«gumu datu glabÄÅ”ana (tikai viedajiem lÄ«gumiem);
- statistika;
- (pÄc izvÄles) publiskÄ atslÄga pÄrskaitÄ«jumiem no konta, pÄc noklusÄjuma account_id;
- izejoÅ”o ziÅojumu rinda (Å”eit tie tiek ievadÄ«ti pÄrsÅ«tÄ«Å”anai adresÄtam);
- uz Å”o kontu piegÄdÄto jaunÄko ziÅojumu saraksts.
KÄ minÄts iepriekÅ”, paÅ”i bloki sastÄv no transakcijÄm - ziÅojumiem, kas tiek piegÄdÄti uz dažÄdiem account_id kontiem. TomÄr ziÅojumos papildus konta_id ir arÄ« 32 bitu lauks darba Ä·Ädes_id ā tÄ sauktais identifikators darba Ä·Äde (darba Ä·Äde, darbojas blokÄ·Äde). Tas ļauj jums izveidot vairÄkas viena no otras neatkarÄ«gas blokÄ·Ädes ar dažÄdÄm konfigurÄcijÄm. Å ajÄ gadÄ«jumÄ workchain_id = 0 tiek uzskatÄ«ts par Ä«paÅ”u gadÄ«jumu, nulles darba Ä·Äde ā tieÅ”i tajÄ esoÅ”ie atlikumi atbildÄ«s kriptovalÅ«tai TON (Grams). VisticamÄk, sÄkumÄ citas darba Ä·Ädes vispÄr nepastÄvÄs.
Shardchains. Bezgalīgas sadalīŔanas paradigma.
Bet blokÄ·Äžu skaita pieaugums ar to neapstÄjas. Tiksim galÄ ar ŔķelÅ”anos. IedomÄsimies, ka katram kontam (account_id) ir pieŔķirta sava blokÄ·Äde ā tajÄ ir visi ziÅojumi, kas tam nonÄk ā un visu Å”Ädu blokÄ·Äžu stÄvokļi tiek glabÄti atseviŔķos mezglos.
Protams, tas ir ļoti izŔķÄrdÄ«gi: visticamÄk, katrÄ no tiem shardchains (shardchain, shard blockchain) darÄ«jumi ieradÄ«sies ļoti reti, un bÅ«s nepiecieÅ”ami daudz jaudÄ«gu mezglu (skatoties uz priekÅ”u, atzÄ«mÄju, ka mÄs nerunÄjam tikai par klientiem mobilajos tÄlruÅos - bet gan par nopietniem serveriem).
TÄpÄc shardchains apvieno kontus pÄc to identifikatoru binÄrajiem prefiksiem: ja shardchain prefikss ir 0110, tad tajÄ tiks iekļauti visu account_ids darÄ«jumi, kas sÄkas ar Å”iem cipariem. Å is shard_prefix var bÅ«t garums no 0 lÄ«dz 60 bitiem - un galvenais ir tas, ka tas var dinamiski mainÄ«ties.
TiklÄ«dz viens no shardchainiem sÄk saÅemt pÄrÄk daudz transakciju, mezgli, kas pie tÄ strÄdÄ, saskaÅÄ ar iepriekÅ” noteiktiem noteikumiem to āsadalaā divos pakÄrtotos - to prefiksi bÅ«s vienu mazliet garÄki (un vienam no tiem Å”is bits bÅ«s vienÄds ar 0, bet otram - 1). PiemÄram, shard_prefix = 0110b sadalÄ«sies 01100b un 01101b. SavukÄrt, ja divas ākaimiÅÄ·Ädesā sÄks justies pietiekami viegli (kÄdu laiku), tÄs atkal saplÅ«st.
TÄdÄjÄdi sadalÄ«Å”ana notiek āno apakÅ”as uz augÅ”uā - mÄs pieÅemam, ka katram kontam ir sava Ŕķemba, bet pagaidÄm tos āsalÄ«mÄ kopÄā ar prefiksiem. Tas ir tas, ko tas nozÄ«mÄ BezgalÄ«gas sadalÄ«Å”anas paradigma (bezgalÄ«gas sadalÄ«Å”anas paradigma).
AtseviŔķi vÄlos uzsvÄrt, ka darba Ä·Ädes pastÄv tikai virtuÄli ā patiesÄ«bÄ, darba Ä·Ädes_id tÄ ir daļa no noteiktas shardchain identifikatora. FormÄlÄ izteiksmÄ katru shardchain nosaka skaitļu pÄris (darba Ä·Ädes_id, shard_prefix).
Kļūdu laboÅ”ana. VertikÄlÄs blokÄ·Ädes.
TradicionÄli jebkurÅ” darÄ«jums blokÄ·ÄdÄ tiek uzskatÄ«ts par āakmenÄ« iecirstuā. TomÄr TON gadÄ«jumÄ ir iespÄjams āpÄrrakstÄ«t vÄsturiā - ja kÄds (tÄ sauktais. zvejnieka mezgls) pierÄdÄ«s, ka viens no blokiem ir parakstÄ«ts nepareizi. Å ajÄ gadÄ«jumÄ attiecÄ«gajai shardchain tiek pievienots Ä«paÅ”s korekcijas bloks, kas satur paÅ”a labojamÄ bloka jaucÄjkodu (nevis pÄdÄjo shardchain bloku). DomÄjot par shardchain kÄ horizontÄli izkÄrtotu bloku Ä·Ädi, varam teikt, ka korektÄ«vais bloks ir piestiprinÄts kļūdainajam blokam nevis pa labi, bet no augÅ”as - tÄpÄc tiek uzskatÄ«ts, ka tas kļūst par daļu no nelielas āvertikÄlÄs blokÄ·Ädesā . TÄdÄjÄdi mÄs varam teikt, ka shardchains ir divdimensiju blokÄ·Ädes.
Ja pÄc kļūdaina bloka uz tÄ veiktajÄm izmaiÅÄm atsaucÄs nÄkamie bloki (t.i., tika veikti jauni darÄ«jumi, pamatojoties uz nederÄ«giem), Å”iem blokiem āaugÅ”Äā tiek pievienoti arÄ« labojoÅ”ie. Ja bloki neietekmÄja āietekmÄtoā informÄciju, Å”ie ākorektÄ«vie viļÅiā uz tiem neattiecas. PiemÄram, attÄlÄ augÅ”Ä pirmÄ bloka darÄ«jums, palielinot konta C atlikumu, tika atzÄ«ts par nepareizu - tÄpÄc arÄ« treÅ”ajÄ blokÄ ir jÄatceļ darÄ«jums, kas samazina Ŕī konta atlikumu, un koriÄ£ÄjoÅ”ais bloks. bÅ«tu jÄveic virs paÅ”a bloka.
JÄatzÄ«mÄ, ka, lai gan koriÄ£ÄjoÅ”ie bloki ir attÄloti kÄ novietoti āvirsā oriÄ£inÄlajiem blokiem, patiesÄ«bÄ tie tiks pievienoti attiecÄ«gÄs blokÄ·Ädes beigÄm (kur tiem jÄbÅ«t hronoloÄ£iski). Divdimensiju atraÅ”anÄs vieta parÄda tikai to, uz kuru blokÄ·Ädes punktu tie tiks āsaistÄ«tiā (izmantojot tajos esoÅ”Ä sÄkotnÄjÄ bloka hash).
Varat atseviŔķi pafilozofÄt par to, cik labs ir lÄmums āmainÄ«t pagÄtniā. Å Ä·iet, ka, ja mÄs pieļaujam nepareiza bloka parÄdÄ«Å”anÄs iespÄju shardchain, tad mÄs nevaram izvairÄ«ties no kļūdaina korektÄ«va bloka parÄdÄ«Å”anÄs. Å eit, cik es varu spriest, atŔķirÄ«ba ir mezglu skaitÄ, kuriem jÄpanÄk vienprÄtÄ«ba par jauniem blokiem - pie katras shardchain strÄdÄs salÄ«dzinoÅ”i neliels cilvÄku skaits.darba grupaĀ» mezgli (kas diezgan bieži maina savu sastÄvu), un koriÄ£ÄjoÅ”u bloku ievieÅ”anai bÅ«s nepiecieÅ”ama visu piekriÅ”ana validatora mezgli. VairÄk par validÄtÄjiem, darba grupÄm un citÄm mezglu lomÄm pastÄstÄ«Å”u nÄkamajÄ rakstÄ.
Viena blokÄ·Äde, lai pÄrvaldÄ«tu tos visus
IepriekÅ” ir daudz informÄcijas par dažÄda veida blokÄ·ÄdÄm, kuras paÅ”as arÄ« kaut kur bÅ«tu jÄglabÄ. Jo Ä«paÅ”i mÄs runÄjam par Å”Ädu informÄciju:
- par darba Ä·Äžu skaitu un konfigurÄcijÄm;
- par shardÄ·Äžu skaitu un to prefiksiem;
- par to, kuri mezgli paŔlaik ir atbildīgi par kuriem shardchainiem;
- pÄdÄjo bloku hashes, kas pievienotas visÄm shardchains.
KÄ jÅ«s varÄtu uzminÄt, visas Ŕīs lietas tiek ierakstÄ«tas citÄ blokÄ·Ädes krÄtuvÄ - meistarÄ·Äde (meistarÄ·Äde, galvenÄ blokÄ·Äde). SakarÄ ar to, ka tÄ blokos ir jaucÄjvÄrdi no visu shardÄ·Äžu blokiem, tas padara sistÄmu ļoti savienotu. Tas cita starpÄ nozÄ«mÄ, ka jauna bloka Ä£enerÄÅ”ana galvenajÄ Ä·ÄdÄ notiks uzreiz pÄc bloku Ä£enerÄÅ”anas shardchains - ir sagaidÄms, ka bloki shardchains parÄdÄ«sies gandrÄ«z vienlaikus aptuveni ik pÄc 5 sekundÄm, un nÄkamais bloks masterchain - sekunde pÄc tam.
Bet kurÅ” bÅ«s atbildÄ«gs par visa Ŕī titÄniskÄ darba ievieÅ”anu - par ziÅojumu sÅ«tÄ«Å”anu, viedo lÄ«gumu izpildi, bloku veidoÅ”anu shardchain un masterchain un pat pÄrbaudi, vai blokos nav kļūdu? Vai to visu slepeni darÄ«s miljoniem lietotÄju tÄlruÅi, kuros ir instalÄts Telegram klients? Vai varbÅ«t Durova komanda atteiksies no decentralizÄcijas idejÄm un viÅu serveri darÄ«s to vecmodÄ«gi?
PatiesÄ«bÄ ne viena, ne otra atbilde nav pareiza. Bet Ŕī raksta piemales Ätri izsÄ«kst, tÄpÄc nÄkamajÄ daÄ¼Ä mÄs runÄsim par dažÄdÄm mezglu lomÄm (iespÄjams, jÅ«s jau pamanÄ«jÄt dažus no tiem pieminÄt), kÄ arÄ« to darba mehÄniku.
Avots: www.habr.com