TON: Telegram Open Network. Part 2: Blockchains, sharding

TON: Telegram Open Network. Part 2: Blockchains, sharding

Þessi texti er framhald af greinaröð þar sem ég skoða uppbyggingu (væntanlega) dreifða netsins Telegram Open Network (TON), sem er í undirbúningi til útgáfu á þessu ári. IN fyrri hluta Ég lýsti grunnstigi þess - hvernig hnútar hafa samskipti sín á milli.

Bara svona ef ég á að minna þig á að ég hef ekkert með þróun þessa nets að gera og allt efnið var tínt úr opnum (þó óstaðfestum) uppruna - skjalið (það er líka meðfylgjandi bækling, þar sem helstu atriðin eru rakin í stuttu máli), sem birtust í lok síðasta árs. Magn upplýsinga í þessu skjali gefur að mínu mati til kynna áreiðanleika þess, þó að engin opinber staðfesting sé á því.

Í dag munum við skoða aðalhluta TON - blockchain.

Grunnhugtök

Reikningur (Reikningur). Gagnasett auðkennd með 256 bita tölu reikningskenni (oftast er þetta opinber lykill reikningseigandans). Í grunntilvikinu (sjá hér að neðan núll vinnukeðja), þessi gögn vísa til stöðu notandans. „Occupy“ sértækt reikningskenni það getur hver sem er, en gildi þess er aðeins hægt að breyta eftir ákveðnum reglum.

Snjall samningur (snjall-samningur). Í meginatriðum er þetta sérstakt tilfelli af reikningi, bætt við snjöllum samningskóða og geymslu á breytum hans. Ef um „veski“ er að ræða geturðu lagt inn og tekið peninga úr því samkvæmt tiltölulega einföldum og fyrirfram ákveðnum reglum, þá eru þessar reglur skrifaðar í formi kóða þess (í ákveðnu Turing-heill. forritunarmál).

Blockchain ríki (ástand blockchain). Staðamengi allra reikninga/snjallsamninga (í óhlutbundnum skilningi, kjötkássatafla, þar sem lyklarnir eru reikningsauðkenni og gildin eru gögnin sem eru geymd í reikningunum).

Skilaboð (skilaboð). Hér að ofan notaði ég hugtakið „kredit- og debetpeningur“ - þetta er sérstakt dæmi um skilaboð („millifærsla N grömm af reikningi reikningur_1 til reiknings reikningur_2"). Augljóslega getur aðeins hnúturinn sem á einkalykil reikningsins sent slík skilaboð reikningur_1 - og geta staðfest þetta með undirskrift. Afleiðingin af því að senda slík skilaboð á venjulegan reikning er aukning á stöðu hans og afleiðing snjallsamningsins er framkvæmd kóðans (sem mun vinna úr móttöku skilaboðanna). Auðvitað eru önnur skilaboð líka möguleg (að flytja ekki peningaupphæðir, heldur handahófskenndar gögn á milli snjallsamninga).

Viðskipti (viðskipti). Sú staðreynd að skilaboð eru afhent kallast viðskipti. Viðskipti breyta stöðu blockchain. Það eru viðskipti (skilaboðafhendingarskrár) sem mynda blokkirnar í blockchain. Í þessu sambandi geturðu hugsað um stöðu blockchain sem stigvaxandi gagnagrunn - allar blokkir eru „diffs“ sem þarf að beita í röð til að fá núverandi stöðu gagnagrunnsins. Fjallað verður um sérkenni þess að pakka þessum „diffum“ (og endurheimta allt ástand frá þeim) í næstu grein.

Blockchain í TON: hvað er það og hvers vegna?

Eins og fram kom í fyrri grein, blokkkeðja er gagnabygging þar sem þættirnir (kubbar) eru raðað í „keðju“ og hver síðari blokk keðjunnar inniheldur kjötkássa af þeim fyrri. Í athugasemdunum var spurt: hvers vegna þurfum við yfirleitt slíka gagnastrúktúr þegar við erum nú þegar með DHT - dreifða kjötkássatöflu? Augljóslega er hægt að geyma sum gögn í DHT, en þetta hentar aðeins fyrir ekki of „viðkvæmar“ upplýsingar. Ekki er hægt að geyma dulritunargjaldmiðla í DHT - fyrst og fremst vegna skorts á eftirliti heilindi. Reyndar vex allt flókið blockchain uppbyggingu til að koma í veg fyrir truflun á gögnum sem geymd eru í henni.

Hins vegar lítur blockchain í TON enn flóknari út en í flestum öðrum dreifðum kerfum - og af tveimur ástæðum. Í fyrsta lagi er löngunin til að lágmarka þörfina fyrir gafflar. Í hefðbundnum dulritunargjaldmiðlum eru allar breytur stilltar á upphafsstigi og allar tilraunir til að breyta þeim leiða í raun til tilkomu „vals dulritunargjaldmiðils alheims“. Önnur ástæðan er stuðningur við að mylja (riftun, riftun) blockchain. Blockchain er uppbygging sem getur ekki orðið minni með tímanum; og venjulega er hver hnút sem ber ábyrgð á rekstri netsins neyddur til að geyma hann alveg. Í hefðbundnum (miðstýrðum) kerfum er klipping notuð til að leysa slík vandamál: sumar skrárnar í gagnagrunninum eru staðsettar á einum netþjóni, sumar á öðrum o.s.frv. Þegar um er að ræða dulritunargjaldmiðla er slík virkni enn frekar sjaldgæf - sérstaklega vegna þess að erfitt er að bæta sharding við kerfi þar sem það var ekki upphaflega skipulagt.

Hvernig ætlar TON að leysa bæði ofangreind vandamál?

Blockchain efni. Vinnukeðjur.

TON: Telegram Open Network. Part 2: Blockchains, sharding

Í fyrsta lagi skulum við tala um það sem fyrirhugað er að geyma í blockchain. Staða reikninga („veski“ í grunntilvikinu) og snjallsamningar verða geymdir þar (til einföldunar munum við gera ráð fyrir að þetta sé það sama og reikningar). Í meginatriðum mun þetta vera venjuleg kjötkássatafla - lyklarnir í henni verða auðkenni reikningskenni, og gildi eru gagnaskipulag sem inniheldur hluti eins og:

  • jafnvægi;
  • snjallsamningskóði (aðeins fyrir snjalla samninga);
  • gagnageymslur snjallsamninga (aðeins fyrir snjalla samninga);
  • tölfræði;
  • (valfrjálst) opinber lykill fyrir millifærslur af reikningnum, sjálfgefið account_id;
  • biðröð útsendra skilaboða (hér eru þau færð inn til framsenda til viðtakanda);
  • lista yfir nýjustu skilaboðin sem send voru á þennan reikning.

Eins og getið er hér að ofan samanstanda blokkirnar sjálfar af viðskiptum - skilaboðum sem eru send á ýmsa account_id reikninga. Hins vegar, auk account_id, innihalda skilaboð einnig 32-bita reit workchain_id — svokallað auðkenni vinnukeðju (vinnukeðju, vinnandi blockchain). Þetta gerir þér kleift að hafa nokkrar blockchains óháðar hver öðrum með mismunandi stillingum. Í þessu tilviki er workchain_id = 0 talið sérstakt tilvik, núll vinnukeðja — það eru innstæðurnar í henni sem samsvara TON (Grams) dulritunargjaldmiðlinum. Líklegast, í fyrstu, munu aðrar vinnukeðjur alls ekki vera til.

Shardchains. Infinite Sharding Paradigm.

En vöxturinn í fjölda blockchains stoppar ekki þar. Við skulum takast á við klippingu. Ímyndum okkur að hverjum reikningi (account_id) sé úthlutað eigin blokkkeðju - hann inniheldur öll skilaboðin sem koma til hans - og ástand allra slíkra blokka er geymt á aðskildum hnútum.

Auðvitað er þetta mjög sóun: líklegast í hverju þessara brotakeðjur (shardchain, shard blockchain) færslur munu koma mjög sjaldan, og mikið af öflugum hnútum verður þörf (horft fram á veginn tek ég fram að við erum ekki bara að tala um viðskiptavini í farsímum - heldur um alvarlega netþjóna).

Þess vegna sameina shardchains reikninga með tvöföldum forskeytum auðkenna þeirra: ef shardchain hefur forskeytið 0110, þá mun það innihalda færslur allra account_id sem byrja á þessum tölum. Þetta shard_prefix getur haft lengd frá 0 til 60 bita - og aðalatriðið er að það getur breyst kraftmikið.

TON: Telegram Open Network. Part 2: Blockchains, sharding

Um leið og einn af shardchains byrjar að taka á móti of mörgum færslum, „skipta“ hnútarnir sem vinna á henni, samkvæmt fyrirfram ákveðnum reglum, henni í tvö börn - forskeyti þeirra verða aðeins lengur (og fyrir einn þeirra verður þessi hluti jafn 0, og fyrir hitt - 1). Til dæmis, shard_prefix = 0110b mun skipta í 01100b og 01101b. Aftur á móti, ef tvær „nágranna“ shardchains byrja að líða nógu vel (í nokkurn tíma), munu þær sameinast aftur.

Þannig er klipping unnin „frá botninum og upp“ - við gerum ráð fyrir að hver reikningur hafi sitt eigið brot, en í bili eru þau „límd saman“ með forskeytum. Þetta er það sem það þýðir Infinite Sharding Paradigm (óendanlegt sharding hugmyndafræði).

Sérstaklega vil ég leggja áherslu á að vinnukeðjur eru aðeins til nánast - í raun, workchain_id það er hluti af auðkenni tiltekinnar shardchain. Í formlegu tilliti er hver shardchain skilgreind af pari af tölum (workchain_id, shard_prefix).

Villuleiðrétting. Lóðréttir blokkakeðjur.

Hefð er talið að öll viðskipti með blockchain séu „högguð í stein“. Hins vegar, þegar um TON er að ræða, er hægt að „endurskrifa sögu“ - ef einhver (svokallaða. sjómannahnútur) mun sanna að einn af kubbunum hafi verið rangt undirritaður. Í þessu tilviki er sérstökum leiðréttingarblokk bætt við samsvarandi shardchain, sem inniheldur kjötkássa kubbsins sjálfs sem verið er að leiðrétta (en ekki síðasta kubbinn í shardchain). Ef við hugsum um shardchain sem keðju af kubbum sem eru settar lárétt, getum við sagt að leiðréttingarblokkinn sé festur við ranga blokkina ekki til hægri, heldur að ofan - svo það er talið að það verði hluti af lítilli "lóðréttri blokkkeðju". . Þannig getum við sagt að shardchains séu það tvívíddar blokkkeðjur.

TON: Telegram Open Network. Part 2: Blockchains, sharding

Ef, eftir ranga blokk, var vísað til breytinganna sem það gerði með síðari blokkum (þ.e. ný færslur voru gerðar byggðar á ógildum), er leiðréttingum einnig bætt við þessa blokkir „að ofan“. Ef kubbarnir höfðu ekki áhrif á upplýsingarnar sem „fyrir áhrifum“, eiga þessar „leiðréttingarbylgjur“ ekki við um þær. Til dæmis, í myndinni hér að ofan, voru viðskiptin í fyrsta reitnum, sem eykur stöðu reiknings C, viðurkennd sem röng - þess vegna ætti einnig að hætta við færsluna sem lækkar stöðuna á þessum reikningi í þriðja reitnum, og leiðréttingarblokk ætti að vera skuldbundið ofan á blokkina sjálfa.

Það skal tekið fram að þó að leiðréttingarblokkirnar séu sýndar sem „fyrir ofan“ þær upprunalegu, þá verður þeim í raun bætt við lok samsvarandi blokkarkeðju (þar sem þær ættu að vera í tímaröð). Tvívídd staðsetningin sýnir aðeins hvaða stað í blokkakeðjunni þeir verða „tengdir“ (í gegnum kjötkássa upprunalegu blokkarinnar sem staðsett er í þeim).

Þú getur sérstaklega hugsað um hversu góð ákvörðunin um að „breyta fortíðinni“ er. Það virðist sem ef við viðurkennum möguleikann á því að rangur blokk birtist í shardchain, þá getum við ekki forðast möguleikann á að rangur leiðréttingarblokk birtist. Hér, eftir því sem ég kemst næst, er munurinn á fjölda hnúta sem verða að ná samstöðu um nýjar blokkir - það mun vera tiltölulega fáir sem vinna við hverja shardchain."starfshópur» hnútar (sem breytir samsetningu nokkuð oft) og innleiðing á leiðréttingarblokkum mun krefjast samþykkis allra staðfestingarhnútar. Ég mun tala meira um löggildingaraðila, vinnuhópa og önnur hnútahlutverk í næstu grein.

Ein blockchain til að stjórna þeim öllum

Það er mikið af upplýsingum sem taldar eru upp hér að ofan um mismunandi tegundir blockchains, sem sjálfar ættu líka að vera geymdar einhvers staðar. Sérstaklega erum við að tala um eftirfarandi upplýsingar:

  • um fjölda og stillingar vinnukeðja;
  • um fjölda shardchains og forskeyti þeirra;
  • um hvaða hnútar eru nú ábyrgir fyrir hvaða shardchains;
  • kjötkássa síðustu kubbanna sem bætt var við allar shardchains.

Eins og þú gætir hafa giskað á eru allir þessir hlutir skráðir í annarri blockchain geymslu - masterchain (meistarakeðja, meistari blockchain). Vegna tilvistar kjötkássa úr blokkum allra shardchains í blokkum þess gerir það kerfið mjög tengt. Þetta þýðir meðal annars að myndun nýrrar kubbs í masterchain mun eiga sér stað strax eftir myndun kubba í shardchains - það er gert ráð fyrir að kubbar í shardchains muni birtast nánast samtímis á um það bil 5 sekúndna fresti, og næsti blokk í shardchains. masterchain - sekúndu eftir það.

En hver mun bera ábyrgð á framkvæmd allrar þessarar títanísku vinnu - að senda skilaboð, framkvæma snjalla samninga, mynda kubba í shardchains og masterchain, og jafnvel athuga kubba fyrir villur? Verður allt þetta gert í leyni af símum milljóna notenda með Telegram viðskiptavininn uppsettan á þeim? Eða, kannski, mun Durov teymið yfirgefa hugmyndir um valddreifingu og netþjónar þeirra munu gera það á gamla mátann?

Í raun er hvorki eitt né annað svarið rétt. En spássíur þessarar greinar eru fljótar að klárast, svo við munum tala um hin ýmsu hlutverk hnúta (þú hefur kannski þegar tekið eftir því að nefna suma þeirra), sem og vélfræði vinnu þeirra, í næsta hluta.

Heimild: www.habr.com

Bæta við athugasemd