TON: Telegram Open Network. Osa 2: Blockchain'id, shardimine

TON: Telegram Open Network. Osa 2: Blockchain'id, shardimine

See tekst on jĂ€rje jĂ€tk, kus ma kĂ€sitlen struktuuri (pretensiooniliselt) kĂ€esoleval aastal kĂ€ivituma valmistuvat jaotatud vĂ”rku Telegram Open Network (TON). eelmisel osal Siin kirjeldan ma selle kĂ”ige pĂ”hitaset - ĂŒhendustevaheline suhtlemine sĂ”lmede vahel.

Igaks juhuks tuletan meelde, et mul ei ole selle vĂ”rgu arendamisega mingit seost ja kogu materjal on saadud avatud (kuigi kontrollimata) allikast - dokument (sealsetele on lisatud broĆĄĂŒĂŒr, mis lĂŒhidalt tutvustab peamisi punkte), mis ilmus eelmise aasta lĂ”pus. Minu arvates viitab selle dokumendi info maht selle ehtsusele, kuigi ametlikke kinnitusi selle kohta ei ole.

TĂ€na vaatame TONi peamist komponenti - plokiahelat.

PÔhiteadmised

konto) (account). Teatud andmekogum, mida tuvastatakse 256-bitise numbriga account_id (enamasti on see konto omaniku avalik vĂ”ti). PĂ”hilisel juhul (vt allpool nullinĂ”i), mĂ”istetakse nende andmete all kasutaja bilanssi. Konkreetselt "laenata" vĂ”ib igaĂŒks, kuid selle vÀÀrtuse muutmine on lubatud ainult teatud reeglite alusel. account_id igaĂŒks, kuid selle vÀÀrtust saab muuta ainult teatud reeglite alusel.

Nutileping (smart-contract). PĂ”himĂ”tteliselt on see konto erijuhtum, millele on lisatud nutilepingu kood ja selle muutujaid sisaldav salvestus. Kui „rahakoti“ puhul saab raha kanda ja vĂ€lja vĂ”tta suhteliselt lihtsate ja ette mÀÀratud reeglite alusel, siis nutilepingu puhul on need reeglid kirja pandud selle koodina (mĂ”nes Turingi tĂ€ielikus programmeerimiskeeles).

Plokiahela olek (plokiahela olek). KĂ”ikide kontode/nutilepingute olekute kogum (abstraktse tĂ€henduses — hash-tabel, kus vĂ”tmed on kontode identifikaatorid ja vÀÀrtused on kontodes salvestatud andmed).

Teade (message). Eelnevalt kasutasin vĂ€ljendit „kaardil ja vĂ€lja vĂ”tma raha“ — see on konkreetne nĂ€ide sĂ”numist ("kanda N grammi kontolt account_1 konto peale account_2"). On ilmne, et sellist sĂ”numit saab saata ainult sĂ”lm, kellel on konto privaatvĂ”ti. account_1 — ja suudab seda allkirjaga kinnitada. Selliste teadete tavalisse kontole saatmise tulemuseks on selle saldo suurenemine ning nutilepingule – selle koodi tĂ€itmine (mis kĂ€sitleb sĂ”numi vastuvĂ”ttu). Loomulikult on vĂ”imalikud ka teised teated (mis ei edasta raha summasid, vaid erinevaid andmeid nutilepingute vahel).

Tehing (tehing). SĂ”numi kohaletoimetamise fakti nimetatakse tehinguks. Tehingud muudavad plokiahela seisundit. Just tehingutest (sĂ”numite kohaletoimetamise kirjed) koosnevad plokiahela plokid. Sellega seoses vĂ”ib plokiahela seisundit ette kujutada nagu inkremenalset andmebaasi – kĂ”ik plokid on „diffid”, mida tuleb jĂ€rjestikku rakendada, et saada praegune andmebaasi seisund. Nende „diffide” pakkimise konkreetsusest (ja tĂ€ieliku seisundi rekonstruktsiooni osas) rÀÀgime jĂ€rgmises artiklis.

Plokiahel TON-is: mis see on ja milleks on vajalik?

Nagu mainitud eelnevas artiklis, plokiahel on andmestruktuur, mille elemendid (plokid) on jĂ€rjestatud „ahelaks”, ja iga jĂ€rgmine ahela plokk sisaldab eelmise hashi.. Kommentaarides esitati kĂŒsimus: miks on selline andmestruktuur ĂŒldse vajalik, kui meil juba on DHT — jaotatud rĂ€sitabel? Selgelt on mĂ”ned andmed vĂ”imalik salvestada ka DHT-s, kuid see sobib vaid mitte liiga "tundlike" infosĂŒsteemide jaoks. KrĂŒptoraha saldosid ei saa DHT-s hoida — peamiselt kontrollimise puudumise tĂ”ttu puutumatuse. Tegelikult, kogu plokiahela struktuuri keerukus kasvab, et takistada sekkumist talle salvestatud andmetesse.

Siiski, plokiahel TON-is nĂ€eb vĂ€lja veel keerulisem kui enamik teisi jaotatud sĂŒsteeme — ja sellel on kaks pĂ”hjust. Esimene — soov vĂ€hendada vajadust harude jĂ€rele. Traditsioonilistes krĂŒptovaluutades on kĂ”ik parameetrid mÀÀratud algfaasis ja any katsed neid muuta toovad sisuliselt kaasa "alternatiivse krĂŒptovaluuta universumi". Teine pĂ”hjus — fragmentatsiooni toetamine (shardimise, fragmentatsiooni) plokia. Plokia on struktuur, mis ei saa aja jooksul vĂ€iksemaks muutuda; ja tavaliselt on iga sĂ”lm, mis vastutab vĂ”rgu töökindluse eest, sunnitud seda tĂ€ielikult sĂ€ilitama. Traditsioonilistes (kesksetes) sĂŒsteemides rakendatakse selliste probleemide lahendamiseks sharding'ut: osa andmetest andmebaasis asub ĂŒhel serveril, osa - teisel jne. KrĂŒptovaluutade puhul on selline funktsionaalsus seni ĂŒsna haruldane - eeskĂ€tt seetĂ”ttu, et on keeruline lisada sharding'ut sĂŒsteemi, kus seda ei ole algselt kavandatud.

Kuidas kavatseb TON lahendada mÔlemad eespool kirjeldatud probleemid?

Plokia sisu. VÔrguplokid.

TON: Telegram Open Network. Osa 2: Blockchain'id, shardimine

Esiteks rÀÀgime sellest, mida kavatsetakse plokias hoiustada. Seal hoitakse kontode ('rahakottide' pÔhijuhtumina) ja nutilepingute olekuid (lihtsuse huvides oletame, et need on sama, mis kontod). PÔhimÔtteliselt on see tavaline rÀsitabel - vÔtmed selles on identifikaatorid account_id, ja vÀÀrtused - andmestruktuurid, mis sisaldavad selliseid asju nagu:

  • saldo;
  • nutilepingu kood (ainult nutilepingute jaoks);
  • nutikate smart-lepingute andmed (ainult smart-lepingute jaoks);
  • statistika;
  • (valikuline) avalik vĂ”ti konto ĂŒlekanneteks, vaikimisi account_id;
  • vĂ€ljuvate sĂ”numite jĂ€rjekord (siia saadetakse, et edastada saajale);
  • viimastele selle kontole edastatud sĂ”numite loend.

Nagu eelnevalt mainitud, koosnevad plokid otsekohe tehingutest — sĂ”numitest, mis on edastatud erinevatele kontodele account_id. Kuid lisaks account_id-le sisaldavad sĂ”numid ka 32-bitist vĂ€lja workchain_id — nn identifikaator. workchain (töötav plokiahel, ). See vĂ”imaldab erinevate konfiguratsioonidega sĂ”ltumatute plokiahelate olemasolu. Samuti loetakse workchain_id = 0 erandjuhuks,nullworkchain — just selles olevaid saldosid vastavad krĂŒptovaluutale TON (Gramad). Tuleb tĂ”enĂ€oliselt, et alguses ei eksisteeri teisi plokiahelate. Shard chain. Infinite Sharding Paradigm.

Shard-chains. Infinite Sharding Paradigm.

Kuid see ei tĂ€henda, et plokiahelate arv ei jĂ€tku suureneda. Uurime sharding'ut. Kujutame ette, et igale kontole (account_id) on mÀÀratud oma plokiahel — kuhu salvestatakse kĂ”ik sellele saabuvaid sĂ”numeid — ja kĂ”igi nende plokiahelate olekud hoitakse eraldi sĂ”lmedes.

Loomulikult on see ĂŒsna raiskav: tĂ”enĂ€oliselt tuleb igasse neist shardchainidesse (shardchain, shard blockchain) tehingud tulevad vĂ€ga harva, ja vajalik on palju vĂ”imsaid sĂ”lmi (ĂŒtlen kohe, et jutt ei ole ainult mobiiltelefonide klientidest — vaid tĂ”sistest serveritest).

SeetĂ”ttu ĂŒhendavad shardchainid kontod nende tuvastajate binaarsete prefiksidega: kui shardchainil on prefiks 0110, siis satuvad sellesse kĂ”ik account_id, mis algavad nende numbritega. See shard_prefix vĂ”ib olla pikkus vahemikus 0 kuni 60 bitti — ja mis kĂ”ige tĂ€htsam, see vĂ”ib dĂŒnaamiliselt muutuda.

TON: Telegram Open Network. Osa 2: Blockchain'id, shardimine

Kui ĂŒhe shardi lake hakkab laekuma liialt palju tehinguid, siis shardi kallal töötavad sĂ”lmed jagavad selle etteantud reeglite kohaselt kaheks alam-shardiks, mille prefiksid on ĂŒhe bitiga pikemad (ja ĂŒhel neist on see bit 0, teisel aga 1). NĂ€iteks, shard_prefix = 0110b jaguneb 01100b ja 01101b. Kui kaks 'naabruses' asuvat shardchaini tunnevad end piisavalt mugavalt (teatud aja jooksul), siis need taasĂŒhinevad.

Seega toimub sharding 'alustades alt' — me eeldame, et igal kontol on oma shard, kuid need on — vaid seni — 'liidetud' prefikside kaudu. Just seda tĂ€hendab Piiramatu jaotamise paradigma (lĂ”putu sharding'i paradigma.).

Eriliselt tahaks rĂ”hutada, et workchainid eksisteerivad ainult virtuaalselt — tegelikult, workchain_id see on osa konkreetse shardchain'i identifikaatorist. Formaalselt öeldes, iga shardchain on mÀÀratletud paarina numbreid (workchain_id, shard_prefix).

Vigade parandamine. Vertikaalsed blokkheindid.

Traditsiooniliselt peetakse igat tehingut plokiahelas "kivisse raiutuks". Kuid TON-i puhul on ette nĂ€htud vĂ”imalus "lugu ĂŒmber kirjutada" — juhul, kui keegi (nn pĂŒĂŒgipunkt) tĂ”estab, et ĂŒks plokk on allkirjastatud vale moodi. Sellisel juhul lisatakse vastavasse shardchain'i spetsiaalne parandav plokk, mis sisaldab parandatava ploki hash'i (mitte viimase ploki hash'i shardchain'is). Kui vaadata shardchain'i kui horisontaalset plokkide ahelat, vĂ”ib öelda, et parandav plokk kinnitatakse mitte vale ploki paremale, vaid ĂŒlemisele poole — seega peetakse seda vĂ€ikese "vertikaalse plokiahela" osaks. Nii vĂ”ib öelda, et shardchain'id on kahemÔÔtmelised plokiahelad.

TON: Telegram Open Network. Osa 2: Blockchain'id, shardimine

Kui pĂ€rast valeploki peal muudetud muudatustele viidati jĂ€rgmistes plokkides (st kehtetute alusel tehti uusi tehinguid), lisatakse ka nende plokkide peale korrigeerivad. Kui plokid ei puudutanud "tabatud" teavet, ei laiene need "korrektsioonilaine" neile. NĂ€iteks ĂŒlaltoodud illustratsioonis tunnistati valeplokiks esimese ploki tehing, mis suurendas konto C bilanssi — seega peab ka selle konto bilanssi vĂ€hendav tehing kolmandas plokis olema tĂŒhistatud ja korrektuuri plokk peab olema koos plokiga commititud.

Olgu mĂ€rgitud — kuigi korrigeerivad plokid kuvatakse paigutatuna "ĂŒle" originaalplokkide, kirjutatakse need tegelikult vastava ploki plokiahelas lĂ”ppu (seal, kus need chronoloogiliselt peaksid olema). Kaks mÔÔdet nĂ€itab lihtsalt, millele plokiahelas nad "kinnitatakse" (originaalploki hash, mis on neis).

VĂ”ime eraldi filosoofia mĂ”ttes arutada, kui hea on lahendus "mineviku muutmine". Tundub, et kui lubame moonutatud ploki ilmumist sharding'usse, ei saa me samas vĂ€listada ka vale parandava ploki tekkimist. Siin, kuivĂ”rd mina suudan otsustada, on erinevus sĂ”lmede arvus, mis peab jĂ”udma uute plokkide konsensusele - iga sharding'u kallal töötab suhteliselt vĂ€ike "töögrupp" sĂ”lme (mis ĂŒsna tihti muudab oma koosseisu), ent parandavate plokkide lisamine nĂ”uab kĂ”igi sertifitseerimis-sĂ”lmede. TĂ€iendavalt rÀÀgin ma sertifitseerijatest, töögruppidest ja teistest sĂ”lmede rollidest jĂ€rgmises artiklis.

Üks plokiahel, et hallata kĂ”ike

Ülaltoodud on palju teavet erinevat tĂŒĂŒpi plokiahelate kohta, mida tuleks ka kuskil hoida. EelkĂ”ige on juttu jĂ€rgmistest andmetest:

  • töötavate plokkide arvu ja konfigureerimise kohta;
  • sharding'ute arvu ja nende eesliidete kohta;
  • millised sĂ”lmed on hetkel vastutavad milliste sharding'ute eest;
  • viimati lisatud plokkide hash'id kĂ”ikidesse sharding'utesse.

Kuidas te juba vĂ”isite arvata, kĂ”ik need asjad salvestatakse veel ĂŒhte ladustamisse, plokiahelasse — meistriplokiahel (masterchain, meistriplokiahel). AitĂ€h sellele, et selle plokkides on shaardplokkide plokkide hashid, teeb see sĂŒsteemi tugevalt seotud. See tĂ€hendab ka, et uusi bloki genereerimine meistriplokiahelas toimub vahetult pĂ€rast shaardplokkide genereerimist — oodatakse, et bloki shaardides ilmuvad peaaegu samaaegselt ligikaudu iga 5 sekundi jĂ€rel, ja jĂ€rgmine blokk meistriplokiahelas — sekundi pĂ€rast seda.

Aga kes siis vastutab kogu selle titanilise töö teostamise eest — sĂ”numite edastamine, nutilepingute tĂ€itmine, plokkide loomine shaardplokkides ja meistriplokiahelas ning veel plokkide vigade kontrollimine? Kas tĂ”esti teevad seda vaikides miljonite kasutajate mobiiltelefonid, kus on installitud Telegrami klient? VĂ”i vĂ”ib-olla loobuvad Durovi tiimide ideedest detsentraliseerimise osas ja teevad seda nende serverid vanaviisi?

Tegelikult ei ole kumbki vastus Ôige. Kuid selle artikli vÀljaanded saavad kiiresti otsa, seetÔttu rÀÀgime erinevate sÔlmede rollidest (olete vÔib-olla mÔnda neist juba maininud) ning nende töömehhanismidest jÀrgmises osas.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster