TON: Otvorena mreža Telegrama. Dio 2: Blockchains, sharding

TON: Otvorena mreža Telegrama. Dio 2: Blockchains, sharding

Ovaj tekst je nastavak serije članaka u kojima istražujem strukturu (vjerojatno) distribuirane mreže Telegram Open Network (TON) koja se priprema za izlazak ove godine. U prethodni dio Opisao sam njegovu najosnovniju razinu - način na koji čvorovi međusobno djeluju.

Za svaki slučaj, podsjetit ću vas da nemam nikakve veze s razvojem ove mreže i da je sav materijal prikupljen iz otvorenog (iako neprovjerenog) izvora - dokument (postoji i popratna brošura, ukratko ocrtavajući glavne točke), koji se pojavio krajem prošle godine. Količina informacija u ovom dokumentu, po mom mišljenju, ukazuje na njegovu autentičnost, iako za to nema službene potvrde.

Danas ćemo pogledati glavnu komponentu TON-a - blockchain.

Osnovni pojmovi

Račun (račun). Skup podataka identificiran 256-bitnim brojem ID računa (najčešće je to javni ključ vlasnika računa). U osnovnom slučaju (vidi dolje nulti radni lanac), ovi podaci se odnose na saldo korisnika. "Occupy" specifično ID računa svatko može, ali njegova vrijednost se može promijeniti samo prema određenim pravilima.

Pametni ugovor (pametni ugovor). U biti, to je poseban slučaj računa, dopunjen kodom pametnog ugovora i pohranom njegovih varijabli. Ako u slučaju "novčanika" možete polagati i povlačiti novac iz njega prema relativno jednostavnim i unaprijed određenim pravilima, onda su u slučaju pametnog ugovora ta pravila napisana u obliku njegovog koda (u određenom Turingovom kompletu programski jezik).

Blockchain stanje (stanje blockchaina). Skup stanja svih računa/pametnih ugovora (u apstraktnom smislu, hash tablica, gdje su ključevi identifikatori računa, a vrijednosti su podaci pohranjeni u računima).

Poruka (poruka). Gore sam upotrijebio izraz "kreditni i debitni novac" - ovo je konkretan primjer poruke ("transfer N grama s računa račun_1 po računu račun_2"). Očito, samo čvor koji posjeduje privatni ključ računa može poslati takvu poruku račun_1 - i to moći potvrditi potpisom. Rezultat dostave takvih poruka na običan račun je povećanje njegovog stanja, a rezultat pametnog ugovora je izvršenje njegovog koda (koji će obraditi primitak poruke). Naravno, moguće su i druge poruke (prijenos ne novčanih iznosa, već proizvoljnih podataka između pametnih ugovora).

Transakcija (transakcija). Činjenica da je poruka isporučena naziva se transakcija. Transakcije mijenjaju stanje blockchaina. Transakcije (zapisi o isporuci poruka) čine blokove u lancu blokova. U tom smislu, možete zamisliti stanje blockchaina kao inkrementalnu bazu podataka - svi blokovi su "razlike" koje je potrebno primijeniti sekvencijalno da biste dobili trenutno stanje baze podataka. Specifičnosti pakiranja ovih "razlika" (i vraćanja punog stanja iz njih) bit će raspravljene u sljedećem članku.

Blockchain u TON-u: što je to i zašto?

Kao što je spomenuto u prethodnom članku, blockchain je podatkovna struktura čiji su elementi (blokovi) poredani u "lanac", a svaki sljedeći blok lanca sadrži hash prethodnog. U komentarima se postavljalo pitanje: zašto nam uopće treba takva struktura podataka kada već imamo DHT – distribuiranu hash tablicu? Očito, neki se podaci mogu pohraniti u DHT, ali to je prikladno samo za ne previše "osjetljive" informacije. Stanja kriptovaluta ne mogu se pohraniti u DHT - prvenstveno zbog nedostatka provjera integritet. Zapravo, cjelokupna kompleksnost blockchain strukture raste kako bi se spriječilo ometanje podataka koji su u njoj pohranjeni.

Međutim, blockchain u TON-u izgleda još složenije nego u većini drugih distribuiranih sustava – i to iz dva razloga. Prva je želja da se minimizira potreba za vilice. U tradicionalnim kriptovalutama svi su parametri postavljeni u početnoj fazi i svaki pokušaj njihove promjene zapravo dovodi do nastanka “alternativnog svemira kriptovaluta”. Drugi razlog je podrška za drobljenje (usitnjavanje, usitnjavanje) blockchain. Blockchain je struktura koja s vremenom ne može postati manja; a obično ga je svaki čvor odgovoran za rad mreže prisiljen u potpunosti pohraniti. U tradicionalnim (centraliziranim) sustavima, dijeljenje se koristi za rješavanje takvih problema: neki od zapisa u bazi podataka nalaze se na jednom poslužitelju, neki na drugom itd. U slučaju kriptovaluta, takva je funkcionalnost još uvijek prilično rijetka - posebno zbog činjenice da je teško dodati dijeljenje u sustav tamo gdje to nije prvobitno planirano.

Kako TON planira riješiti oba gore navedena problema?

Blockchain sadržaj. Radni lanci.

TON: Otvorena mreža Telegrama. Dio 2: Blockchains, sharding

Prije svega, razgovarajmo o tome što se planira pohraniti u blockchain. Tamo će biti pohranjena stanja računa („novčanika” u osnovnom slučaju) i pametnih ugovora (radi jednostavnosti, pretpostavit ćemo da je to isto što i računi). U biti, ovo će biti obična hash tablica - ključevi u njoj bit će identifikatori ID računa, a vrijednosti su strukture podataka koje sadrže stvari kao što su:

  • ravnoteža;
  • kod pametnog ugovora (samo za pametne ugovore);
  • pohrana podataka pametnih ugovora (samo za pametne ugovore);
  • statistika;
  • (neobavezan) javni ključ za prijenose s računa, standardno account_id;
  • red odlaznih poruka (ovdje se unose za prosljeđivanje primatelju);
  • popis posljednjih poruka isporučenih na ovaj račun.

Kao što je gore spomenuto, sami blokovi se sastoje od transakcija - poruka isporučenih različitim account_id računima. Međutim, uz account_id, poruke također sadrže 32-bitno polje ID_radnog lanca — tzv. identifikator radni lanac (radni lanac, radni blockchain). To vam omogućuje da imate nekoliko lanaca blokova neovisnih jedan o drugom s različitim konfiguracijama. U ovom slučaju, workchain_id = 0 smatra se posebnim slučajem, nulti radni lanac — stanje u njemu će odgovarati kriptovaluti TON (Grams). Najvjerojatnije, u početku, drugi radni lanci uopće neće postojati.

Shardchains. Paradigma beskonačnog dijeljenja.

Ali rast broja blockchaina ne staje tu. Pozabavimo se shardingom. Zamislimo da je svakom računu (account_id) dodijeljen vlastiti blockchain – on sadrži sve poruke koje mu dolaze – a stanja svih takvih blockchaina pohranjena su na zasebnim čvorovima.

Naravno, ovo je vrlo rasipno: najvjerojatnije, u svakom od ovih lanci krhotina (shardchain, shard blockchain) transakcije će stizati vrlo rijetko, a bit će potrebno puno snažnih čvorova (gledajući unaprijed, napominjem da ne govorimo samo o klijentima na mobilnim telefonima - već o ozbiljnim poslužiteljima).

Stoga shardchain kombinira račune prema binarnim prefiksima svojih identifikatora: ako shardchain ima prefiks 0110, tada će uključivati ​​transakcije svih account_id-ova koji počinju ovim brojevima. Ovaj prefiks_krhotine može imati duljinu od 0 do 60 bita - a glavna stvar je da se može dinamički mijenjati.

TON: Otvorena mreža Telegrama. Dio 2: Blockchains, sharding

Čim jedan od shardchaina počne primati previše transakcija, čvorovi koji rade na njemu, prema unaprijed određenim pravilima, "dijele" ga na dva djeteta - njihovi prefiksi će biti jedan bit duži (a za jednog od njih ovaj bit će biti jednaka 0, a za drugu - 1). Na primjer, prefiks_krhotine = 0110b će se podijeliti na 01100b i 01101b. Zauzvrat, ako se dva "susjedna" shardchaina počnu osjećati dovoljno opušteno (neko vrijeme), ponovno će se spojiti.

Dakle, sharding se radi "odozdo prema gore" - pretpostavljamo da svaki račun ima svoj shard, ali zasad su "zalijepljeni" prefiksima. Evo što to znači Paradigma beskonačnog dijeljenja (paradigma beskonačnog dijeljenja).

Zasebno bih želio naglasiti da radni lanci postoje samo virtualno - zapravo, ID_radnog lanca to je dio identifikatora određenog shardchaina. U formalnom smislu, svaki shardchain definiran je parom brojeva (ID_radnog lanca, prefiks_krhotine).

Ispravak pogreške. Vertikalni blockchains.

Tradicionalno se svaka transakcija na blockchainu smatra "uklesanom u kamen". Međutim, u slučaju TON-a, moguće je “prepisati povijest” - u slučaju da netko (tzv. ribarski čvor) će dokazati da je jedan od blokova netočno potpisan. U tom slučaju, poseban blok ispravka dodaje se u odgovarajući shardchain, koji sadrži hash samog bloka koji se ispravlja (a ne zadnjeg bloka u shardchainu). Razmišljajući o shardchainu kao o lancu blokova postavljenih vodoravno, možemo reći da je korektivni blok pričvršćen na pogrešni blok ne s desne strane, već odozgo - tako da se smatra da postaje dio malog "vertikalnog blockchaina" . Dakle, možemo reći da shardchains jesu dvodimenzionalni blockchains.

TON: Otvorena mreža Telegrama. Dio 2: Blockchains, sharding

Ako su se, nakon pogrešnog bloka, promjene koje je napravio referencirale u sljedećim blokovima (tj. nove transakcije su napravljene na temelju nevažećih), korektivne se također dodaju ovim blokovima "na vrhu". Ako blokovi nisu utjecali na "pogođene" informacije, ti se "korektivni valovi" ne odnose na njih. Na primjer, u gornjoj ilustraciji, transakcija prvog bloka, kojom se povećava stanje na računu C, prepoznata je kao netočna - stoga, transakcija koja smanjuje stanje ovog računa u trećem bloku također treba biti poništena, a korektivni blok treba predati na vrhu samog bloka.

Treba napomenuti da iako su korektivni blokovi prikazani kao da se nalaze "iznad" izvornih, oni će zapravo biti dodani na kraj odgovarajućeg lanca blokova (gdje bi trebali biti kronološki). Dvodimenzionalna lokacija samo pokazuje na koju će točku u blockchainu biti "povezani" (preko hasha izvornog bloka koji se nalazi u njima).

Možete posebno filozofirati o tome koliko je dobra odluka o “promjeni prošlosti”. Čini se da ako dopustimo mogućnost pojavljivanja netočnog bloka u shardchainu, tada ne možemo izbjeći mogućnost pojavljivanja pogrešnog korektivnog bloka. Ovdje, koliko ja mogu reći, razlika je u broju čvorova koji moraju postići konsenzus o novim blokovima - bit će relativno mali broj ljudi koji će raditi na svakom shardchainu."radna skupina» čvorovi (koji dosta često mijenjaju sastav), a za uvođenje korektivnih blokova bit će potreban pristanak svih čvorovi validatora. Govorit ću više o validatorima, radnim grupama i drugim ulogama čvorova u sljedećem članku.

Jedan blockchain za vladanje svima njima

Gore je navedeno mnogo informacija o različitim vrstama blockchaina, koje bi također trebale biti negdje pohranjene. Konkretno, govorimo o sljedećim informacijama:

  • o broju i konfiguraciji radnih lanaca;
  • o broju shardchaina i njihovim prefiksima;
  • o tome koji su čvorovi trenutno odgovorni za koje shardchaine;
  • hashovi zadnjih blokova dodanih svim shardchainovima.

Kao što ste mogli pretpostaviti, sve ove stvari su zabilježene u drugoj pohrani blockchaina - glavni lanac (glavni lanac, master blockchain). Zbog prisutnosti hashova iz blokova svih shardchaina u svojim blokovima, čini sustav visoko povezanim. To između ostalog znači da će se generiranje novog bloka u masterchainu dogoditi odmah nakon generiranja blokova u shardchainovima - očekuje se da će se blokovi u shardchainovima pojavljivati ​​gotovo istovremeno otprilike svakih 5 sekundi, a sljedeći blok u masterchain - sekundu nakon toga.

Ali tko će biti odgovoran za provedbu cijelog tog titanskog posla - za slanje poruka, izvršavanje pametnih ugovora, formiranje blokova u shardchainima i masterchainu, pa čak i provjeru blokova za pogreške? Hoće li sve to tajno raditi telefoni milijuna korisnika na kojima je instaliran Telegram klijent? Ili će možda Durov tim odustati od ideja decentralizacije i njihovi poslužitelji to učiniti na staromodan način?

Zapravo, ni jedan ni drugi odgovor nisu točni. Ali margine ovog članka brzo ponestaju, pa ćemo o raznim ulogama čvorova (možda ste već primijetili spominjanje nekih od njih), kao i mehanici njihova rada, govoriti u sljedećem dijelu.

Izvor: www.habr.com

Dodajte komentar