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

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

Testu hau artikulu sorta baten jarraipena da, zeinetan (ustez) banatutako Telegram Open Network (TON) sarearen egitura aztertzen dudana, aurten kaleratzeko prestatzen ari dena. IN aurreko zatia Bere maila oinarrizkoena deskribatu nuen: nodoek elkarren artean elkarreragiten duten modua.

Badaezpada, gogorarazten dizut ez dudala zerikusirik sare honen garapenarekin eta material guztia iturri ireki batetik (egiaztatu gabe dagoen arren) atera dela - dokumentua (lagungarri bat ere badago liburuxka, puntu nagusiak laburki azalduz), joan den urte amaieran agertu zena. Dokumentu honetako informazio kopuruak, nire ustez, bere benetakotasuna adierazten du, horren berrespen ofizialik ez dagoen arren.

Gaur TON-en osagai nagusia aztertuko dugu - blockchain-a.

Oinarrizko kontzeptuak

Kontu (kontu). 256 biteko zenbaki batek identifikatutako datu multzoa kontu_id (gehienetan kontuaren jabearen gako publikoa da). Oinarrizko kasuan (ikus behean zero lan-katea), datu hauek erabiltzailearen saldoari dagozkio. "Okupatu" espezifikoa kontu_id edonork egin dezake, baina bere balioa arau batzuen arabera bakarrik alda daiteke.

Kontratu adimenduna (Smart-kontratua). Funtsean, kontu baten kasu berezi bat da, kontratu adimendunaren kodearekin eta bere aldagaien biltegiarekin osatua. "Kartera" baten kasuan, bertatik dirua sartu eta atera dezakezu arau nahiko sinple eta aurrez zehaztutakoen arabera, orduan kontratu adimendun baten kasuan arau hauek bere kodearen moduan idazten dira (Turing-complete jakin batean). programazio-lengoaia).

Blockchain egoera (blockchain-aren egoera). Kontu/kontratu adimendun guztien egoera multzoa (zentzu abstraktuan, hash taula, non gakoak kontu-identifikatzaileak diren eta balioak kontuetan gordetako datuak diren).

Mezua (mezua). Goian "kreditu eta zordunketa-dirua" esamoldea erabili nuen - hau mezu baten adibide jakin bat da ("transferentzia N gramo kontutik kontua_1 konturako kontua_2"). Jakina, kontuaren gako pribatuaren jabe den nodoak soilik bidali dezake mezu hori kontua_1 - eta hori sinadura batekin berresteko gai. Horrelako mezuak ohiko kontu batera bidaltzearen emaitza bere saldoaren gehikuntza da, eta kontratu adimendunaren emaitza bere kodearen exekuzioa (mezuaren jasotzea prozesatu egingo duena). Noski, beste mezu batzuk ere posible dira (diru-kopuruak ez transferitzea, kontratu adimendunen arteko datu arbitrarioak baizik).

Transakzioa (transakzio). Mezu bat bidaltzeari transakzio deitzen zaio. Transakzioek blockchain-aren egoera aldatzen dute. Transakzioak dira (mezuak bidaltzeko erregistroak) blokeak osatzen dituztenak. Zentzu honetan, bloke-katearen egoera datu-base inkremental gisa pentsa dezakezu; bloke guztiak datu-basearen uneko egoera lortzeko sekuentzialki aplikatu behar diren "desberdintasunak" dira. "Desberdintasun" hauek biltzeko (eta haien egoera osoa berreskuratzeko) hurrengo artikuluan eztabaidatuko dira.

Blockchain-a TON-en: zer da eta zergatik?

Aurreko artikuluan esan bezala, blockchain datu-egitura bat da, eta elementuak (blokeak) "kate" batean ordenatuta daude, eta katearen ondorengo bloke bakoitzak aurrekoaren hash bat dauka.. Iruzkinek galdera hau egiten zuten: zergatik behar dugu halako datu-egitura bat dagoeneko DHT bat - banatutako hash taula bat dugunean? Jakina, datu batzuk DHTn gorde daitezke, baina hau "sentikorra" ez den informaziorako soilik da egokia. Kriptomoneta saldoak ezin dira DHTn gorde, batez ere egiaztapen faltagatik osotasuna. Egia esan, bloke-katearen egituraren konplexutasun osoa hazten da bertan gordetako datuekin interferentziak saihesteko.

Hala ere, TON-en bloke-kateak beste sistema banatu gehienetan baino are konplexuagoa dirudi, eta bi arrazoirengatik. Lehena, beharra gutxitzeko nahia da sardexkak. Kriptografia-moneta tradizionaletan, parametro guztiak hasierako fasean ezartzen dira eta horiek aldatzeko saiakerak benetan "kripto-moneta unibertso alternatibo" baten agerpena dakar. Bigarren arrazoia birrintzeko laguntza da (zatiketa, zatiketa) bloke-katea. Blockchain denborarekin txikiagotu ezin den egitura bat da; eta normalean sarearen funtzionamenduaz arduratzen den nodo bakoitza guztiz gordetzera behartuta dago. Sistema tradizionaletan (zentralizatuetan), sharding-a erabiltzen da horrelako arazoak konpontzeko: datu-baseko erregistro batzuk zerbitzari batean daude, beste batzuk beste batean, etab. Kripto-moneten kasuan, funtzionaltasun hori nahiko arraroa da oraindik, bereziki, hasieran aurreikusi ez zen sistema bati zatiketa gehitzea zaila delako.

Nola aurreikusten du TONek goiko bi arazo horiek konpontzeko?

Blockchain edukia. Lan-kateak.

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

Lehenik eta behin, hitz egin dezagun blockchain-en gordetzeko aurreikusitakoari buruz. Kontuen egoerak ("zorroak" oinarrizko kasuan) eta kontratu adimendunak bertan gordeko dira (erraztasunerako, kontuen berdina dela suposatuko dugu). Funtsean, hash taula arrunta izango da; bertan dauden gakoak identifikatzaileak izango dira kontu_id, eta balioak honelako gauzak dituzten datu-egiturak dira:

  • oreka;
  • kontratu adimendunen kodea (kontratu adimendunetarako soilik);
  • kontratu adimendunen datuak biltegiratzea (kontratu adimendunetarako soilik);
  • estatistikak;
  • (aukerako) kontutik transferentziak egiteko gako publikoa, lehenespenez account_id;
  • Irteerako mezuen ilara (hemen sartzen dira hartzaileari birbidaltzeko);
  • kontu honetara bidalitako azken mezuen zerrenda.

Goian esan bezala, blokeak beraiek transakzioz osatuta daude: hainbat kontu_id kontutara bidalitako mezuak. Hala ere, account_id-az gain, mezuek 32 biteko eremu bat ere badute workchain_id β€” identifikatzaile deritzona lan-katea (lan-katea, blockchain lan egiten). Horri esker, elkarrengandik independenteak diren hainbat bloke eduki ditzakezu konfigurazio ezberdinekin. Kasu honetan, workchain_id = 0 kasu berezitzat hartzen da, zero lan-katea β€” bertan dauden saldoak dira TON (Gramo) kriptomonetari dagokiona. Seguruenik, hasieran, beste lan-kate batzuk ez dira existituko.

Shardkateak. Infinite Sharding Paradigma.

Baina blokeen kopuruaren hazkundea ez da hor gelditzen. Landu diezaiogun zatiketari. Imajina dezagun kontu bakoitzari (account_id) bere bloke-katea esleitzen zaiola - bertara iristen diren mezu guztiak ditu - eta bloke horien egoerak nodo bereizietan gordetzen direla.

Noski, hau oso xahutzailea da: ziurrenik, horietako bakoitzean kateak (shardchain, shard blockchain) transakzioak oso gutxitan iritsiko dira, eta nodo indartsu asko beharko dira (aurrera begira, ohartzen naiz ez garela telefono mugikorretako bezeroez soilik ari - zerbitzari serioez baizik).

Hori dela eta, shardchain-ek kontuak konbinatzen ditu identifikatzaileen aurrizki bitarren arabera: shardchain-ek 0110 aurrizkia badu, zenbaki hauekin hasten diren account_id guztien transakzioak sartuko ditu. Hau zati_aurrizkia 0 eta 60 bit arteko luzera izan dezake - eta gauza nagusia dinamikoki alda daitekeela da.

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

Shardchainetako bat transakzio gehiegi jasotzen hasten den bezain laster, bertan lan egiten duten nodoek, aurrez zehaztutako arauen arabera, bi umetan "zatitzen" dute - haien aurrizkiak pixka bat luzeagoak izango dira (eta horietako batentzat bit hau izango da. 0 berdina, eta bestearentzat - 1). Adibidez, zati_aurrizkia = 0110b-tan banatuko da 01100b eta 01101b. Aldiz, bi "inguruko" zati-kateak nahikoa lasai sentitzen hasten badira (denbora batez), berriro batu egingo dira.

Horrela, zatiketa "behetik gora" egiten da - kontu bakoitzak bere zatia duela suposatzen dugu, baina momentuz aurrizkien bidez "itsatsita" daude. Hau da esan nahi duena Infinite Sharding Paradigma (zatiketa infinitua paradigma).

Bereiz, azpimarratu nahiko nuke lan-kateak birtualki soilik existitzen direla - hain zuzen ere, workchain_id shardchain zehatz baten identifikatzailearen parte da. Termino formaletan, shardchain bakoitza zenbaki pare batek definitzen du (workchain_id, zati_aurrizkia).

Akatsen zuzenketa. Blockchain bertikalak.

Tradizionalki, blockchain-eko edozein transakzio "harria"tzat hartzen da. Hala ere, TON-en kasuan, posible da "historia idaztea" - norbaitek badaezpada (deiturikoak. arrantzale korapiloa) blokeetako bat gaizki sinatu dela frogatuko du. Kasu honetan, zuzenketa-bloke berezi bat gehitzen zaio dagokion shardchain-ari, zuzentzen ari den blokearen beraren hash-a duena (eta ez shardchain-eko azken blokea). Shardchain horizontalean jarritako blokeen kate gisa pentsatuz, esan dezakegu bloke zuzentzailea bloke okerra ez eskuinera, baina goitik lotuta dagoela; beraz, "bloke-kate bertikale" txiki baten parte bihurtzen da. . Horrela, shardchains direla esan dezakegu bi dimentsioko bloke-kateak.

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

Okerreko bloke baten ondoren, berak egindako aldaketak hurrengo blokeen erreferentzia egiten baziren (hau da, transakzio berriak baliogabeetan oinarrituta egin ziren), bloke horiei zuzentzaileak ere gehitzen zaizkie "gainean". Blokeek "eragindako" informazioari eragin ez badiote, "uhin zuzentzaile" hauek ez zaizkie aplikatzen. Esate baterako, goiko ilustrazioan, lehen blokeko transakzioa, C kontuaren saldoa handituz, okerra zela aitortu zen; beraz, hirugarren blokeko kontu honen saldoa murrizten duen transakzioa ere bertan behera utzi beharko litzateke eta bloke zuzentzailea. blokearen beraren gainean konprometitu behar da.

Kontuan izan behar da bloke zuzentzaileak jatorrizkoen "gainean" kokatuta dauden arren, hain zuzen ere, dagokion bloke-katearen amaieran gehituko direla (kronologikoki egon behar duten tokian). Bi dimentsioko kokapenak soilik erakusten du bloke-katearen zein puntutara "lotuko diren" (hauetan kokatutako jatorrizko blokearen hash-aren bidez).

Bereiz filosofatu dezakezu "iragana aldatzeko" erabakia zein ona den. Badirudi shardchain-en bloke oker bat agertzeko aukera onartzen badugu, ezin dugula saihestu bloke zuzentzaile oker bat agertzeko aukera. Hemen, nik esan dudanez, aldea bloke berriei buruz adostasuna lortu behar duten nodo kopuruan dago: jende kopuru nahiko txikia izango da shardchain bakoitzean lanean".lan-taldeaΒ» nodoak (konposizioa sarritan aldatzen du), eta bloke zuzentzaileak sartzeak guztion baimena beharko du baliozkotzaile-nodoak. Balidatzaileei, lantaldeei eta beste nodo-rol batzuei buruz gehiago hitz egingo dut hurrengo artikuluan.

Blockchain bat denak gobernatzeko

Informazio asko dago goian zerrendatutako bloke-kate mota ezberdinei buruz, eta hori ere nonbait gorde beharko litzateke. Bereziki, informazio honetaz ari gara:

  • lan-kateen kopuruari eta konfigurazioei buruz;
  • shardchain kopuruari eta haien aurrizkiei buruz;
  • gaur egun zein nodoren ardura duten zein shardchains;
  • Azken blokeen hash-ak shardchain guztiei gehitu zaizkie.

Asmatuko zenuten bezala, gauza horiek guztiak beste blockchain biltegi batean grabatzen dira - maisu-katea (maisu-katea, blockchain maisua). Bere blokeetan shardchain guztien blokeetako hashak daudenez, sistema oso konektatua egiten du. Horrek esan nahi du, besteak beste, masterchain-en bloke berri bat sortzea shardchains-en blokeak sortu eta berehala gertatuko dela; espero da shardchains-en blokeak ia aldi berean agertuko direla gutxi gorabehera 5 segundoro, eta hurrengo blokea. masterchain - segundo bat geroago.

Baina nor izango da lan titaniko hau guztia ezartzearen ardura: mezuak bidaltzeaz, kontratu adimendunak gauzatzeaz, shardchains-en eta masterchain-en blokeak osatzeaz eta blokeak akatsak egiaztatzeaz? Hori guztia ezkutuan egingo al dute Telegram bezeroa instalatuta duten milioika erabiltzaileren telefonoek? Edo, agian, Durov taldeak deszentralizazio ideiak alde batera utziko ditu eta haien zerbitzariek antzinako erara egingo dute?

Izan ere, ez bata ez bestea erantzuna ez da zuzena. Baina artikulu honen ertzak azkar amaitzen ari dira, beraz, nodoen rol ezberdinei buruz hitz egingo dugu (agian horietako batzuen aipamenak ere nabarituko dituzu), baita haien lanaren mekanikari buruz ere, hurrengo zatian.

Iturria: www.habr.com

Gehitu iruzkin berria