TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

Juba kaks nädalat on Runet teinud müra Telegrami ja olukorra pärast, kuna Roskomnadzori blokeerib mõttetu ja halastamatu. Rikošett solvas paljusid inimesi, kuid need kõik on Geektimesi postituste teemad. Mind üllatas veel miski - ma pole ikka veel näinud ühtki analüüsi Habré kohta TON-võrgust, mis on kavandatud Telegrami - Telegram Open Networki põhjal. Tahtsin selle puuduse korvata, sest seal on, mida uurida – isegi hoolimata sellest, et selle kohta puuduvad ametlikud avaldused.

Tuletan meelde, et levivad kuulujutud, et Telegram on käivitanud väga mastaapse suletud ICO, olles kogunud juba uskumatuid summasid. Eeldatavasti tuleb sel aastal turule ka Grami enda krüptoraha – igal Telegrami kasutajal on automaatselt rahakott, mis loob juba iseenesest olulise eelise teiste krüptorahade ees.

Kuna ametlikke avaldusi pole, saan kahjuks ainult edasi minna teadmata päritolu dokument, mille eest ma kohe hoiatan. Muidugi võib see osutuda väga osavaks võltsinguks, kuid on ka võimalik, et tegemist on tõelise tulevikusüsteemi valge paberiga, mille on kirjutanud Nikolai Durov (ja lekitanud ilmselt üks investoritest). Kuid isegi kui see on võlts, ei keela keegi meil seda uurida ja arutada, eks?

Mida see dokument ütleb? Püüan seda oma sõnadega, tekstilähedaselt, aga vene keeles ja veidi inimlikumalt ümber jutustada (andku Nikolai mulle andeks oma kalduvuse formaalsesse matemaatikasse minna). Pidage meeles, et isegi kui see on ehtne, on see süsteemi kirjelduse mustand ja tõenäoliselt muutub see avaliku käivitamise ajaks.

Saame teada, et lisaks krüptorahale on oodata palju muud. Võtame selle järjekorras.

  • TON Blockchain. See on kogu süsteemi alus. Kui te ei tea, mis see on plokiahel — Soovitan uurida, sest siin tuleb palju plokiahelaid. Üksteise sees pesastunud, praktiliselt killustatud ja isegi "vertikaalsed" plokiahelad teiste plokiahelate plokkides. Samuti on mõned laheda kõlaga terminid nagu Kiire hüperkuubiku marsruutimine и Lõpmatu jagamise paradigma, aga sellest pikemalt hiljem. Ja muidugi proof-of-stake ja targad lepingud.
  • TON P2P võrk. Peer-to-peer võrk, mille baasil süsteem ehitatakse. Loo selles osas käsitletakse teda kõigepealt.
  • TON ladustamine. Failide salvestusruum, mis olenemata plokiahelast ehitatakse üles ülalmainitud peer-to-peer võrgule. Võib võrrelda torrentidega.
  • TON puhverserver. See on teenus, mille eesmärk on suurendada võrgus osalejate anonüümsust. Iga paketti saab saata mitte otse, vaid täiendava krüptimisega vahetunnelite kaudu - nagu I2P või TOR.
  • TON DHT. Jaotatud räsitabel suvaliste väärtuste salvestamiseks. See on ka üles ehitatud TON-võrk (aga samas on tema kasutuses) ja aitab TON ladustamine leidke "levitavad" sõlmed ja TON puhverserver — vahepealsed repiiterid. Kuid tuleb märkida, et erinevalt plokiahelast ei ole see räsitabel turvaline salvestusruum - sinna ei saa olulist teavet salvestada.
  • TON Teenused. Platvorm kohandatud teenuste jaoks. Sisuliselt on see uus Internet lisaks kõigele ülalkirjeldatule. Andmevahetus - kaudu TON-võrk/TON puhverserver, ja loogika peitub nutikates lepingutes TON Blockchain. Ja liides üsna tuttavate URL-idega.
  • TON DNS. Kuna me räägime tuttavatest URL-idest, siis vajame ka nende konverteerimist 256-bitisteks aadressideks – kontodeks, lepinguteks, teenusteks ja sõlmedeks.
  • TON Maksed. Ja siin tuleb mängu rahateema. Ja see ei saa olema ainult gramm — nagu eetri puhul, on võimalikud kõik märgid; Grammid on siin vaid vaikevaluuta.

See on esimene osa, mis kirjeldab TONi maandatud kihti - selle võrguosa, mis on ehitatud traditsiooniliste protokollide peale. Järgmises osas räägime "pehmest" - plokiahelast, mida toetab allpool kirjeldatud süsteem. Seega on minu ümberjutustamise järjekord mõnevõrra erinev ülalmainitud dokumendis kasutatavast (mis algab kohe abstraktsel tasandil).

Põhimõisted

TL (Tüübi keel). See on suvaliste andmestruktuuride abstraktne kahendvorming. Seda kasutatakse Telegrami protokollis ja seda kasutatakse aktiivselt ka TONis. Kui soovite sellega üksikasjalikult tutvuda - siin on tema kirjeldus.

Räsi (hash). Funktsioon, mis teostab suvalise andmestruktuuri pöördumatult teisendamist üheks fikseeritud pikkusega arvuks. Kogu dokumentatsioonis räägime funktsioonist SHA-256.

Võrgu sõlm (sõlme). Sõlm on tarkvara, mis tagab süsteemi toimimise. Eelkõige eeldatakse, et iga Telegrami kliendirakendus sisaldab TON-sõlme. Madalal tasemel on sõlmedel IPv4/IPv6 aadressid ja nad suhtlevad UDP-protokolli abil; kõrgemal tasemel on neil abstraktsed aadressid ja rakendage ADNL-protokolli (abstraktsete aadresside ja ADNL-i kohta - vt allpool). Kui rääkida sellest, et mingid süsteemi osad teevad midagi või salvestavad mingeid andmeid, siis mõistetakse, et seda teevad võrgusõlmed.

Abstraktne aadress (või lihtsalt aadress, aadress). Sõlme aadressi määrab selle avalik võti. Täpsemalt öeldes on see avalikku võtit sisaldava andmestruktuuri 256-bitine räsi (SHA256) (konkreetset krüptoalgoritmi pole täpsustatud - näidetena on toodud elliptilised kõverad ja RSA-2048). Selleks, et üks sõlm saaks teisega suhelda, peab ta teadma mitte ainult selle sõlme aadressi, vaid ka seda andmestruktuuri. Teoreetiliselt võib üks füüsiline sõlm luua suvalise arvu aadresse (mis vastab erinevatele võtmetele).

Lisaks kasutatakse sageli just sellist linki: "prototüüpi" TL-struktuuri kujul (sisaldab peaaegu kõiki andmeid) ja selle 256-bitist räsi, mida kasutatakse adresseerimiseks.

Plokiahel (blockchain). Blockchain on andmestruktuur, elemendid (plokid), mis on järjestatud ahelasse ja iga järgmine ahela plokk sisaldab eelmise räsi. Nii saavutatakse terviklikkus – muudatusi saab teha vaid uute plokkide lisamisega.

Teenus (teenus). TON-i teenused võivad olla erinevat tüüpi, olenevalt sellest, kas nad kasutavad plokiahelat või mitte. Näiteks saab üks (või mitu) võrgusõlme töödelda teatud RPC päringuid, kasutades allpool kirjeldatud ADNL-protokolli, ilma plokiahelasse kirjeid loomata – nagu traditsioonilised veebiserverid. Sealhulgas võimalus HTTP juurutamiseks ADNL-i kaudu, aga ka messengeri enda üleminek sellele protokollile. Analoogiliselt TOR-i või I2P-ga muudab see selle vastupidavamaks erinevatele blokeeringutele.

Samal ajal hõlmavad mitmed teenused nii plokiahelaga suhtlemist kui ka päringute töötlemist väljaspool seda. Näiteks TON Storage - failisalvestuse jaoks - ei ole väga mõistlik faile endid plokiahelasse salvestada. See sisaldab ainult failiräsi (koos mõningase metateabega nende kohta) ja spetsiaalsed võrgusõlmed toimivad "failiserveritena", mis on valmis neid ADNL-i kaudu teistele sõlmedele saatma.

Uduteenus (uduteenus). Me räägime mõnest teenusest, mis eeldab detsentraliseerimist ja avatud osalemist neis. Näiteks TON Proxy on teenus, mida saavad toetada kõik osalejad, kes soovivad pakkuda oma sõlme vahendajana (puhverserverina) pakettide edastamiseks teiste sõlmede vahel. Soovi korral saab ta selle eest võtta enda määratud tasu - kasutades mikromaksete jaoks süsteemi TON Payments (mis on omakorda samuti uduteenus).

ADNL: abstraktne datagrammi võrgukiht

Madalaimal tasemel toimub side sõlmede vahel UDP-protokolli abil (kuigi muud võimalused on vastuvõetavad).

Nagu eespool mainitud, peab üks sõlm teisele paketi saatmiseks teadma üht oma avalikest võtmetest (ja seega ka aadressi, mille ta määratleb). See krüpteerib paketi selle võtmega ja lisab 256-bitise sihtkoha aadressi paketi algusesse – kuna ühel sõlmel võib olla mitu sellist aadressi, võimaldab see määrata, millist võtit dekrüpteerimiseks kasutada.

TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

Lisaks võib andmepaketi alguses olla saaja aadressi asemel nn. identifikaator kanal. Sellisel juhul sõltub paketi töötlemine juba konkreetsetest sõlmedevahelistest kokkulepetest – näiteks teatud kanalile saadetavad andmed võivad olla mõeldud mõnele teisele sõlmele ja tuleb sinna edasi saata (see on teenus TON puhverserver). Teine erijuhtum võib olla interaktsioon otse sõlmede vahel, kuid krüptimisega, kasutades selle kanali jaoks individuaalset võtmepaari (eelgenereeritud Diffie-Hellmani protokolli abil).

Lõpuks on erijuhtum "null" kanal - kui sõlm ei tea veel oma "naabrite" avalikke võtmeid, võib ta saata neile pakette ilma krüptimiseta. See on mõeldud ainult lähtestamiseks – kui sõlmed saadavad teabe oma võtmete kohta, tuleks neid edasiseks suhtluseks kasutada.

Ülalkirjeldatud protokolli (256 bitti kanaliidentifikaatorit + paketi sisu) nimetatakse ADNL-iks. Dokumentatsioonis mainitakse võimalust rakendada selle peale TCP analoog või oma lisandmoodul - RLDP (Reliable Large Datagram Protocol), kuid ei lähe nende rakendamise üksikasjadesse.

TON DHT: hajutatud räsitabel

Nagu ka teiste hajutatud süsteemide puhul, hõlmab TON DHT rakendamist - hajutatud räsitabel. Täpsemalt on tabel Kademlia moodi. Kui te pole seda tüüpi räsitabelitega tuttav, ärge muretsege, allpool kirjeldan nende toimimist umbkaudselt.

TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

Abstraktses mõttes kaardistab DHT 256-bitised võtmed suvalise pikkusega binaarväärtustega. Sel juhul on tabelis olevad võtmed teatud TL-struktuuri räsid (koos DHT-ga salvestatakse ka struktuurid ise). See on väga sarnane sõlme aadresside moodustamisega – ja need võivad DHT-s tõepoolest olemas olla (näiteks kasutades sellist võtit antud sõlme IP-aadress abstraktne aadress, kui ta seda ei varja). Kuid üldiselt on "võtmete prototüübid" (nende kirjeldused, võtmekirjeldused) on metaandmed, mis näitavad räsitabelis oleva kirje „omanikku” (st mõne sõlme avalikku võtit), salvestatud väärtuse tüüpi ja reegleid, mille alusel saab seda kirjet hiljem muuta. Näiteks võib reegel lubada väärtust muuta ainult omanikul või keelata väärtuse muutmise allapoole (kaitseks kordusrünnakute eest).

Lisaks 256-bitistele võtmetele tutvustatakse DHT-aadresside kontseptsiooni. Erinevus tavaliste hostiaadresside vahel on see, et DHT-aadress on tingimata seotud IP-aadressiga. Kui sõlm ei varja oma IP-d, võib see DHT jaoks kasutada tavalist aadressi. Kuid sagedamini luuakse DHT vajaduste jaoks eraldi "poolpüsiv" aadress.
TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud
Kauguse mõiste tutvustatakse klahvide ja DHT-aadresside kohal – selles langeb kõik kokku tabelitega kademlia — võtmete vaheline kaugus on võrdne nende XOR-iga (bitipõhiselt välistav VÕI). Nagu Kademlia tabelites, tuleb teatud võtmele vastav väärtus salvestada s sõlmed, millel on selle võtmeni kõige lühem vahemaa (s siin on suhteliselt väike arv).

Selleks, et DHT-sõlm saaks suhelda teiste selliste sõlmedega, jääb see mällu DHT marsruutimistabel — nende sõlmede DHT- ja IP-aadressid, millega see varem suhtles, rühmitatud kauguse järgi. Selliseid rühmi on 256 (need vastavad kauguse väärtuses seatud kõige olulisemale bitile - see tähendab, et 0 kuni 255 kaugusel asuvad sõlmed langevad ühte rühma, 256 kuni 65535 - järgmisse jne). Igas rühmas on talletatud piiratud arv "parimaid" sõlme (nende pingi osas).

TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

Iga sõlm peab toetama mitut toimingut: võtme väärtuse salvestamine, sõlme otsing и väärtusi otsima. Sõlmede otsimine hõlmab antud võtme alusel sellele lähimate sõlmede väljastamist marsruutimistabelist; väärtuste otsimine on sama, välja arvatud juhul, kui sõlm teab võtme väärtust (siis ta lihtsalt tagastab selle). Seega, kui sõlm soovib DHT-s leida väärtust võtme järgi, saadab ta oma marsruutimistabelist päringud väikesele arvule sellele võtmele kõige lähemal asuvatele sõlmedele. Kui nõutavat väärtust nende vastuste hulgas pole, kuid sõlmede aadresse on teisi, korratakse päringut neile.

TON DHT-d saab kasutada erinevatel eesmärkidel, näiteks torrentitaolise failisalvestuse rakendamiseks (vt. TON ladustamine); määrata teatud teenuseid rakendavate sõlmede aadressid; kontoomanike kohta teabe salvestamiseks plokiahelasse. Kuid kõige olulisem rakendus on sõlmede avastamine nende abstraktsete aadresside järgi. Selleks kasutatakse aadressi võtmena, mille väärtus tuleb leida. Päringu tulemusel leitakse kas sõlm ise (kui otsitud aadress oli selle poolpüsiv DHT-aadress) või väärtuseks on IP-aadress ja ühenduse port või mõni muu aadress, mida tuleks kasutada vahetunnel.

Ülekattevõrgud TON-ides

Ülalkirjeldatud ADNL-protokoll tähendab, et kõik sõlmed saavad omavahel teavet vahetada – kuigi mitte tingimata optimaalsel viisil. Võime öelda, et tänu ADNL-ile moodustavad kõik sõlmed globaalse TON-graafiku (ideaaljuhul ühendatud). Kuid lisaks on võimalik selle graafiku sees luua ülekattevõrke – alamgraafikuid.
TON: Telegrami avatud võrk. Osa 1: Sissejuhatus, võrgukiht, ADNL, DHT, kattevõrgud

Sellises võrgus toimub interaktsioon ainult otse - eelnevalt moodustatud ühenduste kaudu võrgus osalevate sõlmede vahel (ülalkirjeldatud ADNL-kanalite kaudu). Selliste ühenduste loomine naabrite vahel, naabrite endi otsimine, on automaatne protsess, mille eesmärk on säilitada ülekattevõrgu ühenduvus ja minimeerida viivitusi selles andmevahetuses.

Lisaks on võimalus suurte leviuuenduste kiireks võrgusiseseks levitamiseks – need jagatakse tükkideks, täiendatakse veaparanduskoodiga ning kõik need jupid saadetakse ühelt osalejalt teisele. Seega ei pea osaleja kõiki osi enne võrku edasi saatmist täielikult hankima.

Ülekattevõrgud võivad olla avalikud või privaatsed. Avaliku võrgu liikmeks saamine pole keeruline – tuleb leida seda kirjeldav TL-struktuur (see võib olla avalik või DHT-s teatud võtmega ligipääsetav). Privaatvõrgu puhul peab see struktuur sõlmele eelnevalt teada olema.

Et jätkata

Otsustasin jagada TON-i ülevaate mitmeks artikliks. Siin see osa lõpeb ja järgmises Edasi käsitlen plokiahela (täpsemalt plokiahelate) struktuuri, millest TON koosneb.

Allikas: www.habr.com

Lisa kommentaar