
Des de fa dues setmanes, Runet fa soroll sobre Telegram i la situació amb el seu bloqueig sense sentit i despietat per part de Roskomnadzor. El rebot va ofendre a molts, però tots aquests són temes per a publicacions a Geektimes. Em va sorprendre una altra cosa: encara no he vist a Habré ni una sola anàlisi de la xarxa TON que es preveu llançar sobre la base de Telegram - Telegram Open Network. Volia suplir aquesta mancança, perquè hi ha alguna cosa per estudiar, tot i l'absència de declaracions oficials al respecte.
Deixeu-me recordar que hi ha rumors que Telegram va llançar una ICO tancada a gran escala, havent-hi recollit ja quantitats increïbles. Se suposa que la criptomoneda pròpia de Gram es llançarà aquest any i cada usuari de Telegram tindrà automàticament una cartera, la qual cosa crea un avantatge considerable sobre altres criptomonedes.
Malauradament, com que no hi ha declaracions oficials, només puc procedir sobre la qual de seguida us adverteixo. Per descomptat, pot resultar una falsificació molt hàbil, però també és possible que aquest sigui el veritable llibre blanc del futur sistema, escrit per Nikolai Durov (i probablement filtrat per un dels inversors). Però encara que això sigui un fals, ningú ens prohibirà estudiar-ho i discutir-ho, oi?
Què diu aquest document? Intentaré tornar-ho a explicar amb les meves paraules, properes al text, però en rus i una mica més humà (que Nikolai em perdoni la seva tendència a entrar en matemàtiques formals). Tingueu en compte que encara que sigui autèntic, es tracta d'un esborrany de descripció del sistema i és molt probable que canviï en el moment del llançament públic.
Aprenem que, a més de la criptomoneda, se suposa que ha de passar molt més. Prenem-ho en ordre.
- TON Blockchain. Aquesta és la base de tot el sistema. Si no saps realment què és - Recomano esbrinar-ho, perquè aquí hi haurà moltes cadenes de blocs. Blockchains nius, pràcticament fragmentats i fins i tot "verticals" dins de blocs d'altres blockchains. També hi haurà alguns termes genials com ara Enrutament instantani d'hipercub и Paradigma de fragmentació infinita, però sobre això més endavant. I, per descomptat, contractes intel·ligents i proof-of-stake.
- Xarxa TON P2P. Una xarxa peer-to-peer sobre la base de la qual es construirà el sistema. Se'n parlarà primer de tot en aquesta part de la història.
- TON emmagatzematge. Un emmagatzematge de fitxers que es construirà a la xarxa peer-to-peer esmentada, independentment de la cadena de blocs. Es pot comparar amb torrents.
- TON Proxy. Aquest és un servei que té com a finalitat augmentar l'anonimat dels participants de la xarxa. Qualsevol paquet es pot enviar no directament, sinó a través de túnels intermediaris amb xifratge addicional, com I2P o TOR.
- TON DHT. Taula hash distribuïda per emmagatzemar valors arbitraris. També està construït al damunt Xarxa TON (però al mateix temps és utilitzat per ell) i ajuda TON emmagatzematge trobar nodes de "distribució" i TON Proxy - relés intermedis. Però cal tenir en compte que, a diferència de la cadena de blocs, aquesta taula hash no és un emmagatzematge segur: no hi podeu emmagatzemar informació important.
- Serveis TON. Plataforma de serveis arbitraris. De fet, es tracta d'una nova Internet a la part superior de tot el que s'ha descrit anteriorment. Intercanvi de dades - via Xarxa TON/TON Proxy, i la lògica està en els contractes intel·ligents del TON Blockchain. I una interfície amb URL força familiars.
- TON DNS. Com que estem parlant dels URL habituals, també necessitem un convertidor d'ells a adreces de 256 bits: comptes, contractes, serveis i nodes.
- Pagaments TON. I aquí és on entra en joc la qüestió dels diners. I no només ho farà gram - igual que amb l'èter, qualsevol "fitxa" serà possible; Els grams seran només la moneda "per defecte".
Aquesta és la primera part que descriu el nivell "sòl" de TON: la seva part de xarxa, construïda sobre els protocols tradicionals. A la següent part, parlarem de la "pulpa": la cadena de blocs, que serà compatible amb el sistema que es descriu a continuació. Per tant, el meu ordre de repetició és una mica diferent de l'utilitzat en el document anterior (que comença immediatament al nivell abstracte).
Conceptes bàsics
TL (Tipus Idioma). És un format binari abstracte per a estructures de dades arbitràries. S'utilitza al protocol de Telegram i s'utilitzarà activament a TON. Si voleu saber-ne més - .
haixix (haixix). Una funció que realitza una transformació irreversible d'una estructura de dades arbitrària en un sol número de longitud fixa. Al llarg de la documentació es parla molt de la funció .
Node de xarxa (node). El node és el programari que garantirà el funcionament del sistema. En particular, se suposa que cada aplicació client de Telegram inclourà un node TON. A un nivell baix, els nodes tenen adreces IPv4/IPv6 i es comuniquen mitjançant el protocol UDP, a un nivell superior tenen adreces abstractes i implementar el protocol ADNL (vegeu a continuació les adreces d'abstractes i l'ADNL). Quan es tracta del fet que algunes parts del sistema fan alguna cosa o emmagatzemen algunes dades, s'entén que els nodes de xarxa ho fan.
Adreça abstracta (o simplement адрес, direcció). L'adreça d'un node ve determinada per la seva clau pública. Més estrictament, es tracta d'un hash de 256 bits (SHA256) d'una estructura de dades que conté una clau pública (en aquest cas no s'especifica l'algorisme criptogràfic específic: com a exemple es donen corbes el·líptiques i RSA-2048). Perquè un node es comuniqui amb un altre, ha de conèixer no només l'adreça d'aquest, sinó també aquesta estructura de dades. Teòricament, un node físic pot crear qualsevol nombre d'adreces (corresponent a diferents claus).
A més, sovint s'utilitza aquest paquet: una "preimatge" en forma d'estructura TL (que conté gairebé totes les dades) i un hash de 256 bits utilitzat per a l'adreçament.
Blockchain (blockchain). Blockchain és una estructura de dades, elements (blocs) que s'ordenen en una "cadena", i cada bloc següent de la cadena conté el hash de l'anterior. D'aquesta manera, s'aconsegueix la integritat: només es poden fer canvis afegint nous blocs.
Servei (servei). Els serveis dins de TON poden ser de diversos tipus, depenent de si utilitzen la cadena de blocs o no. Per exemple, un (o molts) dels nodes de la xarxa poden processar algunes sol·licituds RPC mitjançant el protocol ADNL que es descriu a continuació, sense crear cap registre a la cadena de blocs, com els servidors web tradicionals. En particular, s'està considerant la possibilitat d'implementar HTTP sobre ADNL, així com la transició del propi missatger a aquest protocol. Per analogia amb TOR o I2P, això farà que sigui més resistent a diversos bloquejos.
Al mateix temps, una sèrie de serveis impliquen tant la interacció amb la cadena de blocs com el processament de sol·licituds fora d'ella. Per exemple, per a TON Storage (emmagatzematge de fitxers), no és gaire raonable emmagatzemar els fitxers a la cadena de blocs. Només contindrà hash de fitxers (juntament amb alguna metainformació sobre ells), i els nodes de xarxa especialitzats actuaran com a "servidors de fitxers", preparats per donar-los a altres nodes mitjançant ADNL.
servei de boira (servei de boira). Estem parlant d'uns serveis que impliquen descentralització i participació oberta en ells. Per exemple, TON Proxy és un servei que pot ser compatible amb qualsevol participant que vulgui proporcionar el seu node com a intermediari (proxy) que reenvia paquets entre altres nodes. Si ho desitja, pot cobrar una tarifa fixada per ell per això, utilitzant el sistema TON Payments per a micropagaments (que, al seu torn, també és un servei boira).
ADNL: Capa de xarxa de datagrames abstractes
Al nivell més baix, la comunicació entre nodes es farà mitjançant UDP (tot i que altres opcions són acceptables).
Com s'ha esmentat anteriorment, perquè un node enviï un paquet a un altre, ha de conèixer una de les seves claus públiques (i, per tant, l'adreça que determina). Xifra el paquet amb aquesta clau i afegeix una adreça de destinació de 256 bits al començament del paquet, ja que un node pot tenir diverses adreces d'aquest tipus, això li permetrà determinar quina clau utilitzar per al desxifrat.

A més, en lloc de l'adreça del destinatari al començament del paquet de dades, pot haver-hi un anomenat. identificador canal. En aquest cas, el processament del paquet ja depèn d'acords específics entre els nodes; per exemple, les dades enviades a un determinat canal es poden destinar a un altre node i s'han de redirigir a aquest (aquest és el servei). TON Proxy). Un altre cas especial pot ser la interacció directament entre nodes, però amb el xifratge mitjançant un parell de claus individual per a aquest canal (format anteriorment mitjançant el protocol Diffie-Hellman).
Finalment, un cas especial és el canal "nul": si el node encara no coneix les claus públiques dels seus "veïns", pot enviar-los paquets sense xifratge. Això només és per a la inicialització: tan aviat com els nodes enviïn informació sobre les seves claus, s'han d'utilitzar per a una interacció posterior.
El protocol descrit anteriorment (256 bits d'ID de canal + contingut de paquet) s'anomena ADNL. La documentació esmenta la possibilitat d'implementar un analògic de TCP a sobre o el seu propi complement - RLDP (Reliable Large Datagram Protocol), però no entra en detalls sobre la seva implementació.
TON DHT: Taula hash distribuïda
Com en el cas d'altres sistemes distribuïts, TON implica la implementació de DHT - . Més concretament, la taula és . Si no esteu familiaritzat amb aquest tipus de taules hash, no us preocupeu, us descriuré aproximadament com estan disposades.

En un sentit abstracte, DHT mapeja claus de 256 bits amb valors binaris de longitud arbitrària. Al mateix temps, les claus de la taula són hashes d'una determinada estructura TL (les estructures també s'emmagatzemen juntament amb el DHT). Això és molt similar a la formació d'adreces de nodes, i poden estar presents de fet al DHT (per exemple, aquesta clau pot contenir l'adreça IP del node corresponent a la adreça abstractasi no ho amaga). Però en el cas general, les "imatges prèvies de les claus" (els seus descripcions, descripcions clau) són metadades que indiquen el "propietari" d'una entrada a la taula hash (és a dir, la clau pública d'algun node), el tipus de valor emmagatzemat i les regles per les quals aquesta entrada es pot canviar posteriorment. Per exemple, una regla pot permetre que només el propietari canviï el valor o prohibir que es redueixi el valor (per protegir-se dels atacs de repetició).
A més de les claus de 256 bits, s'introdueix el concepte d'adreces DHT. La diferència amb les adreces d'amfitrió habituals és que una adreça DHT està lligada a una adreça IP. Si un node no amaga la seva IP, pot utilitzar una adreça normal per a DHT. Però més sovint, es crearà una adreça "semipermanent" separada per a les necessitats de DHT.

A sobre de les claus i adreces DHT, s'introdueix el concepte de distància: tot coincideix amb les taules d'aquesta - la distància entre les claus és igual a XOR (OR exclusiu per bits) d'elles. Igual que amb les taules Kademlia, s'ha d'emmagatzemar el valor corresponent a alguna clau s nodes que tenen la distància més petita a aquesta clau (s aquí hi ha un nombre relativament petit).
Perquè un node DHT es comuniqui amb altres nodes, es manté a la memòria Taula d'encaminament DHT - Adreces DHT i IP dels nodes amb els quals interactuava abans, agrupades per distància a aquests. Hi ha 256 grups d'aquest tipus (corresponen al bit més significatiu establert en el valor de la distància, és a dir, els nodes a una distància de 0 a 255 cauran en un grup, de 256 a 65535, al següent, etc.). Dins de cada grup, s'emmagatzemen un nombre limitat de "millors" nodes (en termes de ping a ells).

Cada node ha de suportar diverses operacions: emmagatzemar un valor per a una clau, cerca de nodes и buscar valors. La cerca de nodes implica l'emissió per una clau donada dels nodes més propers a ella de la taula d'encaminament; buscar valors és el mateix, excepte quan el node coneix el valor de la clau (en aquest cas simplement el retorna). En conseqüència, si un node vol trobar un valor al DHT mitjançant una clau, envia sol·licituds a un nombre reduït de nodes més propers a aquesta clau des de la seva taula d'encaminament. Si entre les seves respostes no hi ha cap valor desitjat, però hi ha altres adreces de nodes, es repeteix la sol·licitud.
TON DHT es pot utilitzar per a diversos propòsits, per exemple, per implementar un emmagatzematge de fitxers de tipus torrent (vegeu. TON emmagatzematge); determinar les adreces dels nodes que implementen determinats serveis; per emmagatzemar informació sobre els titulars del compte a la cadena de blocs. Però l'aplicació més important és el descobriment de nodes per les seves adreces abstractes. Per fer-ho, s'utilitza l'adreça com a clau, el valor de la qual cal trobar. La consulta trobarà l'amfitrió en si (si l'adreça que s'està buscant era la seva adreça DHT semipermanent), o el valor serà l'adreça IP i el port per connectar-se, o una altra adreça que s'utilitzarà com a túnel intermediari.
Superposeu xarxes en TON
El protocol ADNL descrit anteriorment implica la capacitat per a qualsevol node d'intercanviar informació entre ells, encara que no necessàriament de manera òptima. Podem dir que gràcies a ADNL, tots els nodes formen un gràfic TON global (idealment, connectat). Però, a més, és possible crear xarxes superposades: subgrafs dins d'aquest gràfic.

Dins d'aquesta xarxa, la interacció només es porta a terme directament, mitjançant enllaços preformats entre nodes membres de la xarxa (mitjançant els canals ADNL descrits anteriorment). La formació d'aquestes connexions entre veïns, la recerca dels mateixos veïns és un procés automàtic que busca mantenir la connectivitat de la xarxa de superposició i minimitzar els retards en l'intercanvi de dades en aquesta.
A més, hi ha una manera de distribuir ràpidament actualitzacions de transmissió grans a la xarxa: es divideixen en parts, es complementen amb un codi de correcció d'errors i totes aquestes parts s'envien d'un participant a un altre. Així, el participant no ha de rebre completament totes les peces abans de reenviar-les més a la xarxa.
Les xarxes superposades poden ser públiques o privades. Convertir-se en membre d'una xarxa pública no és difícil: cal trobar una estructura TL que la descrigui (pot ser pública o accessible mitjançant una clau determinada a la DHT). En el cas d'una xarxa privada, aquesta estructura ha de ser coneguda pel node per endavant.
Continuar
Vaig decidir dividir la revisió TON en diversos articles. Aquí és on acaba aquesta secció, Passo a la consideració de l'estructura de la cadena de blocs (més precisament, les cadenes de blocs) de la qual constarà TON.
Font: www.habr.com
