TON: Rrjeti i hapur i Telegramit. Pjesa 2: Blockchains, ndarje

TON: Rrjeti i hapur i Telegramit. Pjesa 2: Blockchains, ndarje

Ky tekst është një vazhdim i një serie artikujsh në të cilët unë shqyrtoj strukturën e rrjetit të shpërndarë (me sa duket) Telegram Open Network (TON), i cili po përgatitet për publikim këtë vit. NË pjesa e mëparshme Përshkrova nivelin e tij më themelor - mënyrën se si nyjet ndërveprojnë me njëra-tjetrën.

Për çdo rast, më lejoni t'ju kujtoj se nuk kam asnjë lidhje me zhvillimin e këtij rrjeti dhe i gjithë materiali është mbledhur nga një burim i hapur (ndonëse i pa verifikuar) - dokument (ka edhe një shoqërues broshurë, duke përshkruar shkurtimisht pikat kryesore), të cilat u shfaqën në fund të vitit të kaluar. Sasia e informacionit në këtë dokument, për mendimin tim, tregon vërtetësinë e tij, megjithëse nuk ka asnjë konfirmim zyrtar për këtë.

Sot do të shikojmë komponentin kryesor të TON - blockchain.

Konceptet themelore

llogari (llogari). Një grup të dhënash të identifikuara nga një numër 256-bit Llogaria ID (më shpesh ky është çelësi publik i pronarit të llogarisë). Në rastin bazë (shih më poshtë zero zinxhir pune), këto të dhëna i referohen bilancit të përdoruesit. "Zënë" specifike Llogaria ID kushdo mundet, por vlera e tij mund të ndryshohet vetëm sipas rregullave të caktuara.

Kontrata e zgjuar (smart-kontratë). Në thelb, është një rast i veçantë i një llogarie, i plotësuar me kodin e kontratës inteligjente dhe ruajtjen e variablave të saj. Nëse në rastin e një "portofoli" mund të depozitoni dhe tërhiqni para prej tij sipas rregullave relativisht të thjeshta dhe të paracaktuara, atëherë në rastin e një kontrate inteligjente këto rregulla shkruhen në formën e kodit të saj (në një të caktuar Turing-të plotë gjuhë programimi).

Shteti i Blockchain (gjendja e blockchain). Grupi i gjendjeve të të gjitha llogarive/kontratave inteligjente (në një kuptim abstrakt, një tabelë hash, ku çelësat janë identifikuesit e llogarisë dhe vlerat janë të dhënat e ruajtura në llogari).

Mesazh (mesazh). Më lart përdora shprehjen "para krediti dhe debiti" - ky është një shembull i veçantë i një mesazhi ("transferim N gram nga llogaria llogaria_1 për llogari llogaria_2"). Natyrisht, vetëm nyja që zotëron çelësin privat të llogarisë mund të dërgojë një mesazh të tillë llogaria_1 - dhe në gjendje ta konfirmojë këtë me një nënshkrim. Rezultati i dërgimit të mesazheve të tilla në një llogari të rregullt është një rritje e bilancit të saj, dhe rezultati i kontratës inteligjente është ekzekutimi i kodit të saj (i cili do të përpunojë marrjen e mesazhit). Sigurisht, janë të mundshme edhe mesazhe të tjera (duke transferuar jo shuma monetare, por të dhëna arbitrare ndërmjet kontratave inteligjente).

Transaksioni (transaksion). Fakti që dërgohet një mesazh quhet transaksion. Transaksionet ndryshojnë gjendjen e blockchain. Janë transaksionet (regjistrat e dërgimit të mesazheve) që përbëjnë blloqet në blockchain. Në këtë drejtim, ju mund të mendoni për gjendjen e blockchain si një bazë të dhënash në rritje - të gjitha blloqet janë "ndryshime" që duhet të zbatohen në mënyrë sekuenciale për të marrë gjendjen aktuale të bazës së të dhënave. Specifikat e paketimit të këtyre "ndryshimeve" (dhe rivendosja e gjendjes së plotë prej tyre) do të diskutohen në artikullin vijues.

Blockchain në TON: çfarë është dhe pse?

Siç u përmend në artikullin e mëparshëm, blockchain është një strukturë të dhënash, elementët (blloqet) e së cilës janë renditur në një "zinxhir" dhe çdo bllok pasues i zinxhirit përmban një hash të atij të mëparshmi.. Komentet shtruan pyetjen: pse na duhet fare një strukturë e tillë e të dhënave kur tashmë kemi një DHT - një tabelë hash të shpërndarë? Natyrisht, disa të dhëna mund të ruhen në DHT, por kjo është e përshtatshme vetëm për informacione jo shumë "të ndjeshme". Balancat e kriptomonedhave nuk mund të ruhen në DHT - kryesisht për shkak të mungesës së kontrolleve në integriteti. Në fakt, i gjithë kompleksiteti i strukturës së blockchain rritet për të parandaluar ndërhyrjen në të dhënat e ruajtura në të.

Megjithatë, blockchain në TON duket edhe më kompleks se në shumicën e sistemeve të tjera të shpërndara - dhe për dy arsye. E para është dëshira për të minimizuar nevojën për pirunët. Në kriptovalutat tradicionale, të gjithë parametrat vendosen në fazën fillestare dhe çdo përpjekje për t'i ndryshuar ato në fakt çon në shfaqjen e një "universi alternativ të kriptomonedhave". Arsyeja e dytë është mbështetja për shtypjen (copëtimi, copëtimi) blockchain. Blockchain është një strukturë që nuk mund të bëhet më e vogël me kalimin e kohës; dhe zakonisht çdo nyje përgjegjëse për funksionimin e rrjetit detyrohet ta ruajë atë plotësisht. Në sistemet tradicionale (të centralizuara), sharding përdoret për të zgjidhur probleme të tilla: disa nga të dhënat në bazën e të dhënave janë të vendosura në një server, disa në një tjetër, etj. Në rastin e kriptomonedhave, një funksionalitet i tillë është ende mjaft i rrallë - në veçanti, për faktin se është e vështirë të shtohet sharding në një sistem ku nuk ishte planifikuar fillimisht.

Si planifikon TON të zgjidhë të dyja problemet e mësipërme?

Përmbajtja e Blockchain. Zinxhirët e punës.

TON: Rrjeti i hapur i Telegramit. Pjesa 2: Blockchains, ndarje

Para së gjithash, le të flasim për atë që është planifikuar të ruhet në blockchain. Gjendjet e llogarive ("kuletat" në rastin bazë) dhe kontratat inteligjente do të ruhen atje (për thjeshtësi, do të supozojmë se kjo është e njëjtë me llogaritë). Në thelb, kjo do të jetë një tabelë e rregullt hash - çelësat në të do të jenë identifikues Llogaria ID, dhe vlerat janë struktura të dhënash që përmbajnë gjëra të tilla si:

  • ekuilibër;
  • kodi i kontratës inteligjente (vetëm për kontratat inteligjente);
  • ruajtja e të dhënave të kontratave inteligjente (vetëm për kontratat inteligjente);
  • statistika;
  • (fakultativ) çelësi publik për transferimet nga llogaria, si parazgjedhje account_id;
  • radha e mesazheve dalëse (këtu ato futen për t'i përcjellë marrësit);
  • një listë e mesazheve më të fundit të dërguara në këtë llogari.

Siç u përmend më lart, vetë blloqet përbëhen nga transaksione - mesazhe të dërguara në llogari të ndryshme account_id. Megjithatë, përveç account_id, mesazhet përmbajnë edhe një fushë 32-bit id_zinxhiri i punës — i ashtuquajturi identifikues zinxhir pune (zinxhir pune, blockchain që funksionon). Kjo ju lejon të keni disa blockchain të pavarur nga njëri-tjetri me konfigurime të ndryshme. Në këtë rast, workchain_id = 0 konsiderohet një rast i veçantë, zero zinxhir pune - janë bilancet në të që do të korrespondojnë me kriptomonedhën TON (Gram). Me shumë mundësi, në fillim, zinxhirët e tjerë të punës nuk do të ekzistojnë fare.

Zinxhirë të thekur. Paradigma e Shpërthimit të Pafund.

Por rritja e numrit të blockchains nuk ndalet me kaq. Le të merremi me copëtimin. Le të imagjinojmë se çdo llogarie (account_id) i ndahet blockchain-i i vet - ai përmban të gjitha mesazhet që i vijnë - dhe gjendjet e të gjitha zinxhirëve të tillë ruhen në nyje të veçanta.

Sigurisht, kjo është shumë e kotë: ka shumë të ngjarë, në secilën prej tyre zinxhirë të grimcuar (zinxhir i grimcuar, blockchain i copëtuar) transaksionet do të arrijnë shumë rrallë dhe do të nevojiten shumë nyje të fuqishme (duke parë përpara, vërej se nuk po flasim vetëm për klientët në telefonat celularë - por për serverët seriozë).

Prandaj, zinxhirët e grimcave kombinojnë llogaritë sipas prefikseve binare të identifikuesve të tyre: nëse një zinxhir ka një prefiks 0110, atëherë ai do të përfshijë transaksionet e të gjitha llogarive_id që fillojnë me këta numra. Kjo prefiksi_shard mund të ketë një gjatësi nga 0 në 60 bit - dhe gjëja kryesore është se ajo mund të ndryshojë në mënyrë dinamike.

TON: Rrjeti i hapur i Telegramit. Pjesa 2: Blockchains, ndarje

Sapo një nga zinxhirët e grimcave të fillojë të marrë shumë transaksione, nyjet që punojnë në të, sipas rregullave të paracaktuara, "e ndajnë" atë në dy fëmijë - prefikset e tyre do të jenë një pak më të gjata (dhe për njërin prej tyre ky bit do të jetë e barabartë me 0, dhe për tjetrën - 1). Për shembull, prefiksi_shard = 0110b do të ndahet në 01100b dhe 01101b. Nga ana tjetër, nëse dy zinxhirë "fqinj" fillojnë të ndihen mjaft të qetë (për ca kohë), ata do të bashkohen përsëri.

Kështu, copëtimi bëhet "nga poshtë lart" - supozojmë se çdo llogari ka copëzën e vet, por për momentin ato janë "ngjitur së bashku" me parashtesa. Kjo është ajo që do të thotë Paradigma e Shpërthimit të Pafund (paradigmë e pafundme sharding).

Më vete, do të doja të theksoja se zinxhirët e punës ekzistojnë vetëm virtualisht - në fakt, id_zinxhiri i punës është pjesë e identifikuesit të një zinxhiri të veçantë. Në terma formalë, çdo zinxhir i grimcuar përcaktohet nga një palë numrash (id_zinxhiri i punës, prefiksi_shard).

Korrigjimi i gabimit. Blockchains vertikale.

Tradicionalisht, çdo transaksion në një blockchain konsiderohet të jetë "i vendosur në gur". Sidoqoftë, në rastin e TON, është e mundur të "rishkruhet historia" - në rast se dikush (i ashtuquajturi. nyjë peshkatari) do të vërtetojë se një nga blloqet është nënshkruar gabimisht. Në këtë rast, një bllok i veçantë korrigjues i shtohet zinxhirit të grimcuar përkatës, që përmban hash-in e vetë bllokut që po korrigjohet (dhe jo bllokun e fundit në zinxhirin e grimcuar). Duke e menduar zinxhirin e prerë si një zinxhir blloqesh të vendosura horizontalisht, mund të themi se blloku korrigjues është ngjitur në bllokun e gabuar jo në të djathtë, por nga lart - kështu që konsiderohet se bëhet pjesë e një "blloku vertikal" të vogël. . Kështu, mund të themi se zinxhirët janë blockchains dy-dimensionale.

TON: Rrjeti i hapur i Telegramit. Pjesa 2: Blockchains, ndarje

Nëse, pas një blloku të gabuar, ndryshimet e bëra prej tij janë referuar nga blloqet pasuese (d.m.th., transaksionet e reja janë bërë në bazë të atyre të pavlefshme), ato korrigjuese u shtohen gjithashtu këtyre blloqeve "në krye". Nëse blloqet nuk ndikuan në informacionin "e prekur", këto "valë korrigjuese" nuk vlejnë për to. Për shembull, në ilustrimin e mësipërm, transaksioni i bllokut të parë, duke rritur gjendjen e llogarisë C, u njoh si i pasaktë - prandaj, transaksioni që zvogëlon gjendjen e kësaj llogarie në bllokun e tretë gjithashtu duhet të anulohet, dhe një bllok korrigjues. duhet të vendoset në krye të vetë bllokut.

Duhet të theksohet se megjithëse blloqet korrigjuese përshkruhen si të vendosura "mbi" ato origjinale, në fakt ato do të shtohen në fund të blockchain-it përkatës (ku duhet të jenë kronologjikisht). Vendndodhja dy-dimensionale tregon vetëm se në cilën pikë në blockchain do të "lidhen" (nëpërmjet hash-it të bllokut origjinal të vendosur në to).

Ju mund të filozofoni veçmas se sa i mirë është vendimi për të "ndryshuar të kaluarën". Duket se nëse pranojmë mundësinë e shfaqjes së një blloku të pasaktë në zinxhirin e copëtuar, atëherë nuk mund të shmangim mundësinë e shfaqjes së një blloku korrigjues të gabuar. Këtu, me sa mund të them, ndryshimi është në numrin e nyjeve që duhet të arrijnë konsensus për blloqet e reja - do të ketë një numër relativisht të vogël njerëzish që punojnë në çdo zinxhir të grimcuar."grupi i punës» nyjet (e cila ndryshon përbërjen e saj mjaft shpesh), dhe futja e blloqeve korrigjuese do të kërkojë pëlqimin e të gjithëve nyjet e vlefshmërisë. Do të flas më shumë për validuesit, grupet e punës dhe rolet e tjera të nyjeve në artikullin vijues.

Një blockchain për t'i sunduar të gjithë

Ka shumë informacione të listuara më lart në lidhje me llojet e ndryshme të blockchains, të cilat vetë duhet të ruhen diku. Në veçanti, ne po flasim për informacionin e mëposhtëm:

  • për numrin dhe konfigurimin e zinxhirëve të punës;
  • rreth numrit të zinxhirëve të grimcuar dhe parashtesave të tyre;
  • për cilat nyje janë aktualisht përgjegjëse për cilat zinxhirë të copëtuar;
  • hash-et e blloqeve të fundit të shtuara në të gjitha zinxhirët.

Siç mund ta keni marrë me mend, të gjitha këto gjëra janë regjistruar në një ruajtje tjetër blockchain - zinxhir master (zinxhir kryesor, master blockchain). Për shkak të pranisë së hasheve nga blloqet e të gjitha zinxhirëve të copëtuar në blloqet e tij, ai e bën sistemin shumë të lidhur. Kjo do të thotë, ndër të tjera, se gjenerimi i një blloku të ri në zinxhirin kryesor do të ndodhë menjëherë pas gjenerimit të blloqeve në zinxhirët e grimcuar - pritet që blloqet në zinxhirët e grimcuar të shfaqen pothuajse njëkohësisht përafërsisht çdo 5 sekonda, dhe blloku tjetër në masterchain - një sekondë pas kësaj.

Por kush do të jetë përgjegjës për zbatimin e gjithë kësaj pune titanike - për dërgimin e mesazheve, ekzekutimin e kontratave inteligjente, formimin e blloqeve në zinxhirët e grimcuar dhe zinxhirin kryesor, madje edhe kontrollimin e blloqeve për gabime? A do të bëhet e gjithë kjo fshehurazi nga telefonat e miliona përdoruesve me klientin Telegram të instaluar në to? Apo, ndoshta, ekipi i Durov do të braktisë idetë e decentralizimit dhe serverët e tyre do ta bëjnë atë në mënyrën e vjetër?

Në fakt, as njëra dhe as tjetra përgjigje nuk janë të sakta. Por kufijtë e këtij artikulli po mbarojnë shpejt, kështu që ne do të flasim për rolet e ndryshme të nyjeve (mund të keni vënë re tashmë përmendjet e disa prej tyre), si dhe mekanikën e punës së tyre, në pjesën tjetër.

Burimi: www.habr.com

Shto një koment