
Under tvĂ„ veckor har Ryssland stĂ„tt i centrum för diskussioner om Telegram och situationen med dess meningslösa och skoningslösa blockering av Roskomnadzor. MĂ„nga mĂ€nniskor har blivit pĂ„verkade, men allt detta Ă€r teman för inlĂ€gg pĂ„ Geektimes. Det som förvĂ„nar mig Ă€r att jag fortfarande inte har sett nĂ„got pĂ„ HabrĂ€ om den planerade Telegram-baserade nĂ€tverket TON â Telegram Open Network. Jag ville fylla denna brist, eftersom det finns mycket att studera dĂ€r â Ă€ven utan officiella uttalanden om det.
LĂ„t mig pĂ„minna om att det gĂ„r rykten om att Telegram har lanserat en mycket storskalig sluten ICO som redan har samlat otroliga summor. Det antas att en egen kryptovaluta, Gram, kommer att lanseras redan i Ă„r â och varje Telegram-anvĂ€ndare kommer automatiskt att fĂ„ en plĂ„nbok, vilket i sig skapar en stor fördel jĂ€mfört med andra kryptovalutor.
TyvÀrr, eftersom det inte finns nÄgra officiella uttalanden, kan jag endast utgÄ frÄn , vilket jag genast varnar er för. SjÀlvklart kan det visa sig vara en mycket skicklig förfalskning, men det Àr ocksÄ möjligt att detta Àr ett verkligt whitepaper för det framtida systemet, skrivet av Nikolaj Durov (och lÀckt, troligtvis av nÄgon av investerarna). Men Àven om det Àr en bluff, fÄr ingen oss att förbjuda att studera och diskutera det, eller hur?
Vad sÀgs i detta dokument? Jag ska försöka ÄterberÀtta det med mina egna ord, nÀra texten, men pÄ svenska och nÄgot mer mÀnskligt (lÄt mig förlÄta Nikolaj för hans benÀgenhet att gÄ in i formell matematik). TÀnk pÄ att Àven i hÀndelse av dess Àkthet Àr detta en grov skiss av systemet och det kommer med stor sannolikhet att förÀndras fram till den offentliga lanseringen.
Vi fÄr veta att förutom kryptovalutan planeras det mycket mer. LÄt oss gÄ igenom det i ordning.
- TON Blockchain. Detta Ă€r grunden för hela systemet. Om du helt och hĂ„llet inte vet vad en Ă€r â dĂ„ rekommenderar jag att du tar reda pĂ„ det, eftersom det kommer att finnas mĂ„nga blockkedjor hĂ€r. InbĂ€ddade i varandra, virtuellt uppdelade och till och med "vertikala" blockkedjor inom andra blockkedjor. Dessutom kommer det att finnas flera hĂ€ftiga termer som Instant Hypercube Routing och Infinite Sharding Paradigm, men mer om det senare. Och sjĂ€lvklart, proof-of-stake och smarta kontrakt.
- TON P2P Network. Peer-to-peer-nÀtverk, pÄ vilket systemet kommer att byggas. Detta kommer att diskuteras först i denna del av berÀttelsen.
- TON Storage. En filförvaring som oberoende av blockkedjan kommer att byggas pÄ det ovan nÀmnda peer-to-peer-nÀtverket. Det kan liknas vid torrentfiler.
- TON Proxy. Detta Ă€r en tjĂ€nst vars syfte Ă€r att öka anonymiteten för nĂ€tverksdeltagarna. Varje paket kan skickas, inte direkt, utan genom tunnlar som agenter med ytterligare kryptering â liknande I2P eller TOR.
- TON DHT. En distribuerad hash-tabell för lagring av godtyckliga vĂ€rden. Den Ă€r ocksĂ„ byggd ovanpĂ„ TON Network (men anvĂ€nds av den) och hjĂ€lper till att TON Storage hitta "delande" noder, och TON Proxy â mellanliggande retransmittanter. Men det Ă€r viktigt att notera att, till skillnad frĂ„n blockkedjan, Ă€r denna hash-tabell inte ett sĂ€kert förrĂ„d â viktig information bör inte lagras i den.
- TON Services. En plattform för godtyckliga tjĂ€nster. I grund och botten Ă€r detta ett nytt internet ovanpĂ„ allt det ovanstĂ„ende. Datautbyte â genom TON Network/TON Proxy, och logik â i smarta kontrakt av. TON Blockchain. Och grĂ€nssnittet med ganska vanliga URL:er.
- TON DNS. Eftersom vi talade om vanliga URL:er, behövs Ă€ven en omvandlare frĂ„n dem till 256-bitarsadresser â för konton, kontrakt, tjĂ€nster och noder.
- TON Payments. HĂ€r kommer vi bara in pĂ„ den ekonomiska aspekten. Och detta kommer att vara inte bara gram â som med ether, alla typer av "tokens" kommer att vara möjliga; gram kommer hĂ€r att vara endast valutan "som standard".
Detta Ă€r första delen som beskriver den "jordade" nivĂ„n av TON â dess nĂ€tverksdel som byggs ovanpĂ„ traditionella protokoll. I nĂ€sta del kommer vi att tala om "kĂ€rnan" â blockkedjan som kommer att stödas av det som beskrivs hĂ€rnĂ€st. DĂ€rmed skiljer sig min berĂ€ttelse nĂ„got frĂ„n den som anvĂ€nds i det ovan nĂ€mnda dokumentet (som börjar direkt med den abstrakta nivĂ„n).
GrundlÀggande begrepp
TL (Type Language). Detta Ă€r ett abstrakt binĂ€rt format för godtyckliga datastukturer. Det anvĂ€nds i Telegram-protokollet och kommer att anvĂ€ndas aktivt i TON. Om du vill bekanta dig med det i detalj â .
Hash (hash). En funktion som producerar en oÄterkallelig omvandling av en godtycklig datastruktur till ett enda tal av fast lÀngd. Inom dokumentationen talas det ofta om funktionen .
Nod i nÀtverket (node). En nod Àr en programvara som kommer att sÀkerstÀlla att systemet fungerar. Det antas sÀrskilt att varje Telegram-klientapplikation kommer att inkludera en TON-nod. PÄ lÄg nivÄ har noder IPv4/IPv6-adresser och kommunicerar via UDP-protokollet, pÄ en högre nivÄ har de abstrakta adresser och implementerar ADNL-protokollet (om abstrakta adresser och ADNL - se nedan). NÀr vi talar om att vissa delar av systemet gör nÄgot eller lagrar viss data, avses det att detta sker av nÀtverksnoder.
Abstrakt adress (eller bara , lösenord, address). En nods adress definieras av dess offentliga nyckel. Mer strikt - det Àr en 256-bitars hash (SHA256) av en datastruktur som innehÄller den offentliga nyckeln (den specifika kryptografiska algoritmen specificeras inte - exempelvis nÀmns elliptiska kurvor och RSA-2048). För att en nod ska kunna interagera med en annan behöver den veta inte bara adressen, utan Àven denna datastruktur. Teoretiskt kan en fysisk nod skapa ett obegrÀnsat antal adresser (som motsvarar olika nycklar).
Dessutom anvÀnds ofta just denna koppling: "urbilden" i form av TL-strukturen (som kan innehÄlla praktiskt taget vilken data som helst), och 256-bitars hashen av den, som anvÀnds för adressering.
Blockchain (blockchain). Blockchain Àr en datastruktur vars element (block) Àr ordnade i en "kedja", och varje följande block i kedjan innehÄller en hash av det föregÄende. PÄ sÄ sÀtt uppnÄs integritet - förÀndringar kan endast göras genom att lÀgga till nya block.
TjÀnsten (service). TjÀnster inom TON kan vara av olika typer - beroende pÄ om de anvÀnder blockchain eller inte. Till exempel kan en (eller flera) av nÀtverkets noder behandla vissa RPC-förfrÄgningar enligt det protokoll som beskrivs nedan ADNL, utan att skapa nÄgra poster i blockchain - liknande traditionella webbservrar. Det övervÀgs Àven möjligheten till att implementera HTTP över ADNL, samt att sjÀlva meddelandetjÀnsten gÄr över till detta protokoll. PÄ liknande sÀtt som TOR eller I2P, kommer detta att göra den mer motstÄndskraftig mot olika blockeringsÄtgÀrder.
Samtidigt förutsĂ€tter en del tjĂ€nster bĂ„de interaktion med blockchain och bearbetning av förfrĂ„gningar utanför den. Till exempel, för TON Storage â filförvaringen â Ă€r det inte sĂ€rskilt klokt att lagra sjĂ€lva filerna i blockchain. DĂ€r kommer endast filernas hash (tillsammans med viss metadata om dem) att bevaras, medan specialiserade noder i nĂ€tverket fungerar som "filservrar" som Ă€r redo att leverera dem till andra noder via ADNL.
DimtjĂ€nst (fog service). Det handlar om vissa tjĂ€nster som förutsĂ€tter decentralisering och öppen delaktighet. Till exempel Ă€r TON Proxy en tjĂ€nst som alla deltagare kan stödja genom att erbjuda sin nod som en mellanhand (proxy) som skickar paket mellan andra noder. Om man sĂ„ önskar kan man ta ut en avgift för detta â med systemet TON Payments för mikropayments (som i sin tur ocksĂ„ Ă€r en dimtjĂ€nst).
ADNL: Abstract Datagram Network Layer
PÄ den lÀgsta nivÄn kommer interaktionen mellan noder att ske via UDP-protokollet (andra alternativ Àr ocksÄ tillÄtna).
Som nĂ€mnts ovan, för att en nod ska kunna skicka ett paket till en annan, mĂ„ste den kĂ€nna till en av dess offentliga nycklar (och dĂ€rmed adressen som definieras av den). Den krypterar paketet med denna nyckel och lĂ€gger till en 256-bitars adress för mottagaren i början av paketet â eftersom en nod kan ha flera sĂ„dana adresser kommer detta att göra det möjligt för den att avgöra vilken nyckel som ska anvĂ€ndas för avkryptering.

Dessutom kan en sĂ„ kallad identifierare kanal. I sĂ„ fall beror bearbetningen av paketet redan pĂ„ de specifika överenskommelserna mellan noderna â till exempel kan data som skickas till en viss kanal vara avsedda för en annan nod och mĂ„ste vidarebefordras till den (detta Ă€r en tjĂ€nst TON Proxy). Ett annat sĂ€rskilt fall kan vara interaktion direkt mellan noder, men med kryptering med ett individuellt par nycklar för denna kanal (som tidigare skapades enligt Diffie-Hellman-protokollet).
Till slut finns det ett speciellt fall som kallas "noll"-kanalen â om en nod Ă€nnu inte kĂ€nner till sina "grannars" offentliga nycklar kan den skicka paket till dem utan kryptering alls. Detta Ă€r avsett endast för initiering â sĂ„ snart noderna skickar information om sina nycklar bör dessa anvĂ€ndas för fortsatt kommunikation.
Den ovan beskrivna protokollet (256 bitars kanalidentifierare + paketets innehĂ„ll) kallas ADNL. Dokumentationen nĂ€mner möjligheten att implementera en motsvarighet till TCP ovanför det eller en egen överbyggnad â RLDP (Reliable Large Datagram Protocol), men gĂ„r inte in pĂ„ detaljer om deras implementering.
TON DHT: Distribuerad hash-tabell
Precis som i andra distribuerade system förutsĂ€tter TON implementeringen av DHT â . Mer specifikt â tabellen Ă€r . Om du inte Ă€r bekant med denna typ av hash-tabeller â oroa dig inte, nedan kommer jag att ungefĂ€rligen beskriva hur de Ă€r uppbyggda.

I abstrakt mening ger DHT en koppling mellan 256-bitsnycklar och vissa binĂ€ra vĂ€rden av godtycklig lĂ€ngd. Nycklarna i tabellen Ă€r hash-vĂ€rden av en viss TL-struktur (sjĂ€lva strukturerna lagras ocksĂ„ tillsammans med DHT). Detta liknar mycket bildandet av noders adresser â och de kan faktiskt förekomma i DHT (till exempel kan en IP-adress för en nod motsvara den angivna abstrakta adressen, om den inte döljer den). Men i allmĂ€nhet Ă€r "prototyper av nycklar" (deras beskrivningar, key descriptions) â detta Ă€r metadata som anger "Ă€garen" av posten i hash-tabellen (dvs. den offentliga nyckeln för nĂ„gon nod), typ av det lagrade vĂ€rdet och reglerna för hur detta post senare kan Ă€ndras. Till exempel kan en regel tillĂ„ta att Ă€garen endast fĂ„r Ă€ndra vĂ€rdet â eller förbjuda att vĂ€rdet Ă€ndras nedĂ„t (för att skydda sig mot replay-attacker).
Förutom 256-bitsnycklar introduceras begreppet DHT-adresser. Skillnaden frÄn vanliga adresser för noder Àr att DHT-adressen alltid Àr kopplad till en IP-adress. Om en nod inte döljer sin IP kan den anvÀnda en vanlig adress för DHT. Men oftare för DHT:s behov skapas en separat, "halv-permanent" adress.

Ăver nycklar och DHT-adresser introduceras begreppet avstĂ„nd â hĂ€r överensstĂ€mmer allt med tabellerna â avstĂ„ndet mellan nycklarna Ă€r XOR (bitvis exklusiv eller) mellan dem. Precis som i Kademlia-tabeller, bör vĂ€rdet som motsvarar en viss nyckel lagras pĂ„ s noder som har det minsta avstĂ„ndet till denna nyckel (s hĂ€r â ett relativt litet antal).
För att en DHT-nod ska kunna interagera med andra sĂ„dana noder, hĂ„ller den i minnet DHT-routingtabelle â DHT- och IP-adresserna till de noder som den har interagerat med tidigare, grupperade efter avstĂ„nd till dem. Det finns 256 sĂ„dana grupper (de motsvarar den mest betydelsefulla uppstĂ€llda biten i avstĂ„ndsvĂ€rdet â det vill sĂ€ga noder pĂ„ avstĂ„nd frĂ„n 0 till 255 hamnar i en grupp, frĂ„n 256 till 65535 â i nĂ€sta, osv.). Inom varje grupp lagras ett begrĂ€nsat antal "bĂ€sta" noder (vad gĂ€ller ping till dem).

Varje nod mĂ„ste stödja flera operationer: spara vĂ€rdet för en nyckel, söka noder och söka vĂ€rden. Söka noder innebĂ€r att ge de nĂ€rmaste noderna i routingtabellen kopplade till en given nyckel; söka vĂ€rden â samma sak, med undantag för nĂ€r noden kĂ€nner till vĂ€rdet för nyckeln (dĂ„ Ă„tergĂ„r den helt enkelt med det). DĂ€rför, om en nod vill hitta ett vĂ€rde i DHT baserat pĂ„ en nyckel, skickar den förfrĂ„gningar till ett litet antal av de nĂ€rmaste noderna till denna nyckel frĂ„n sin routingtabell. Om det inte finns nĂ„got begĂ€rt vĂ€rde bland deras svar men det finns andra nodadresser, upprepas förfrĂ„gan till dem.
TON DHT kan anvĂ€ndas för olika syften, till exempel â för att implementera en torrent-liknande filförvaring (se TON Storage); för att bestĂ€mma adresser till noder som implementerar vissa tjĂ€nster; för att lagra information om kontoinnehavares identiteter i blockkedjan. Men det viktigaste anvĂ€ndningsomrĂ„det Ă€r att upptĂ€cka noder via deras abstrakta adresser. För detta anvĂ€nds adressen som nyckel, och det vĂ€rde som skall hittas. Som ett resultat av förfrĂ„gan kan antingen noden sjĂ€lv hittas (om den sökta adressen var dess semi-permanenta DHT-adress), eller sĂ„ Ă€r vĂ€rdet en IP-adress och port för anslutning â eller en annan adress som ska anvĂ€ndas som en tunnel-mellanhand.
Ăverliggande nĂ€tverk i TON
Protokollet ADNL som beskrivits ovan möjliggör för alla noder att utbyta information med varandra â Ă€ven om det inte nödvĂ€ndigtvis sker pĂ„ optimala vĂ€gar. Man kan sĂ€ga att genom ADNL bildar alla noder en global graf TON (i idealfallet â sammanhĂ€ngande). Men det finns dessutom möjlighet att skapa överliggande nĂ€tverk â undergrafer inom denna graf.

Inom ett sĂ„dant nĂ€tverk sker interaktion enbart direkt â genom förhandsgjorda kopplingar mellan deltagande noder (via ADNL-kanalerna som beskrivits ovan). Bildandet av sĂ„dana kopplingar mellan grannar, samt sökandet efter medlemmar â Ă€r en automatiserad process som strĂ€var efter att upprĂ€tthĂ„lla sammanlĂ€nkningen i det överliggande nĂ€tverket och minimera fördröjningar vid datakommunikation.
Dessutom finns det ett sĂ€tt att snabbt sprida stora sĂ€ndningsuppdateringar inom nĂ€tverket â de delas upp i delar, kompletteras med felkorrektionskod, och alla dessa bitar vidarebefordras frĂ„n en deltagare till en annan. SĂ„ledes behöver deltagaren inte helt fĂ„ alla delar innan de kan skicka dem vidare i nĂ€tverket.
Ăverliggande nĂ€tverk kan vara offentliga och privata. Att bli medlem i ett offentligt nĂ€tverk Ă€r inte svĂ„rt â man mĂ„ste bara hitta en TL-struktur som beskriver det (den kan vara offentlig â eller tillgĂ€nglig med en viss nyckel i DHT). I fallet med ett privat nĂ€tverk mĂ„ste denna struktur vara kĂ€nd för noden i förvĂ€g.
FortsÀttning följer
Jag har beslutat att dela upp min översikt av TON i flera artiklar. Denna del avslutas hÀr, och kommer jag att gÄ vidare till att granska strukturen av blockkedjan (eller rÀttare sagt blockkedjorna) som kommer att utgöra TON.
KĂ€lla: habr.com
