TON: Telegram Open Network. Teil 2: Blockchains, Sharding

TON: Telegram Open Network. Teil 2: Blockchains, Sharding

Dieser Text ist die Fortsetzung einer Reihe von Artikeln, in denen ich die Struktur des (vermutlich) in diesem Jahr zur Veröffentlichung anstehenden dezentralen Netzwerks Telegram Open Network (TON) behandle. In vorherigen Teil habe ich die grundlegende Ebene beschrieben – die Art und Weise, wie Knoten miteinander interagieren.

Zur Sicherheit erinnere ich daran, dass ich mit der Entwicklung dieses Netzwerks nichts zu tun habe und das gesamte Material aus einer offenen (wenn auch unbestĂ€tigten) Quelle stammt – des Dokuments (es gibt auch eine beiliegende BroschĂŒre, die die Hauptpunkte kurz zusammenfasst), die Ende letzten Jahres erschien. Das Volumen der Informationen in diesem Dokument spricht meines Erachtens fĂŒr seine Echtheit, obwohl es keine offiziellen BestĂ€tigungen dafĂŒr gibt.

Heute schauen wir uns die Hauptkomponente von TON an – die Blockchain.

Grundbegriffe

Konto (account). Eine Datenmenge, die durch eine 256-Bit-Zahl identifiziert wird account_id (hĂ€ufig der öffentliche SchlĂŒssel des Kontoinhabers). Im grundlegenden Fall (siehe unten Null-Blockchain), bezieht sich diese Datenmenge auf das Guthaben des Nutzers. Jeder kann einen bestimmten account_id ausleihen, aber seinen Wert kann man nur nach bestimmten Regeln verĂ€ndern.

Smart Contract (Smart-Contract). Im Wesentlichen handelt es sich um eine spezielle Art von Konto, die mit dem Code eines Smart-Contracts und dem Speicher seiner Variablen ergĂ€nzt wird. Wenn im Fall eines „Wallets“ Geld nach relativ einfachen und im Voraus festgelegten Regeln eingezahlt und abgebucht werden kann, sind diese Regeln im Fall eines Smart-Contracts in Form seines Codes (in einer Turing-vollstĂ€ndigen Programmiersprache) festgelegt.

Zustand der Blockchain (state of blockchain). Die Gesamtheit der ZustĂ€nde aller Konten/Smart-Contracts (im abstrakten Sinne – eine Hash-Tabelle, in der die SchlĂŒssel die Identifikatoren der Konten und die Werte die in den Konten gespeicherten Daten sind).

Nachricht (message). Ich habe den Ausdruck „Geld einzahlen und abheben“ verwendet – ein konkretes Beispiel fĂŒr eine Nachricht (â€žĂŒbertragen N Gramm von Konto account_1 auf das Konto account_2“). Offensichtlich kann eine solche Nachricht nur von einem Knoten gesendet werden, der im Besitz des privaten SchlĂŒssels des Kontos ist account_1 und dies durch eine Unterschrift bestĂ€tigen kann. Das Ergebnis der Zustellung solcher Nachrichten an ein normales Konto ist die Erhöhung seines Guthabens, und fĂŒr den Smart-Contract die AusfĂŒhrung seines Codes (der die Ankunft der Nachricht verarbeitet). NatĂŒrlich sind auch andere Nachrichten möglich, die nicht monetĂ€re BetrĂ€ge, sondern beliebige Daten zwischen Smart-Contracts ĂŒbertragen.

Die Transaktion (transaction). Die ZustellungsbestĂ€tigung einer Nachricht wird als Transaktion bezeichnet. Transaktionen Ă€ndern den Zustand der Blockchain. Genau aus diesen Transaktionen (Aufzeichnungen ĂŒber die Zustellung von Nachrichten) bestehen die Blöcke in der Blockchain. In diesem Sinne kann man sich den Zustand der Blockchain als eine inkrementelle Datenbank vorstellen – alle Blöcke sind „Diffs“, die nacheinander angewendet werden mĂŒssen, um den aktuellen Zustand der Datenbank zu erhalten. Über die spezifische Verpackung dieser „Diffs“ (und die Wiederherstellung des vollstĂ€ndigen Zustands aus ihnen) wird im nĂ€chsten Artikel die Rede sein.

Blockchain in TON: Was ist das und wozu brauchen wir das?

Wie im vorherigen Artikel erwĂ€hnt, ist die Blockchain eine Datenstruktur, deren Elemente (Blöcke) in einer „Kette“ angeordnet sind, und jeder folgende Block der Kette enthĂ€lt den Hash des vorherigen.. In den Kommentaren wurde die Frage gestellt: Warum benötigen wir ĂŒberhaupt eine solche Datenstruktur, wenn wir bereits DHT – eine verteilte Hash-Tabelle – haben? Offensichtlich können einige Daten auch in der DHT gespeichert werden, aber das eignet sich nur fĂŒr nicht allzu „sensiblen“ Informationen. KryptowĂ€hrungsbilanzen können nicht in der DHT gespeichert werden – hauptsĂ€chlich aufgrund des Fehlens von ÜberprĂŒfungen auf IntegritĂ€t.Die gesamte KomplexitĂ€t der Blockchain-Struktur entsteht also, um Eingriffe in die darin gespeicherten Daten zu verhindern.

Die Blockchain in TON sieht jedoch noch komplizierter aus als in den meisten anderen verteilten Systemen – und dafĂŒr gibt es zwei GrĂŒnde. Der erste ist der Versuch, den Bedarf an Forks. In traditionellen KryptowĂ€hrungen sind alle Parameter zu Beginn festgelegt, und jeder Versuch, sie zu Ă€ndern, fĂŒhrt praktisch zur Schaffung eines „alternativen Universums“ der KryptowĂ€hrung. Der zweite Grund ist die UnterstĂŒtzung von Sharding (Sharding, ) der Blockchain. Die Blockchain ist eine Struktur, die mit der Zeit nicht kleiner werden kann; und normalerweise ist jeder Knoten, der fĂŒr die FunktionsfĂ€higkeit des Netzwerks verantwortlich ist, gezwungen, sie vollstĂ€ndig zu speichern. In traditionellen (zentralisierten) Systemen wird zur Lösung solcher Probleme Sharding verwendet: Teile der Aufzeichnungen in der Datenbank befinden sich auf einem Server, Teile auf einem anderen usw. Im Fall von KryptowĂ€hrungen ist eine solche FunktionalitĂ€t bisher recht selten – insbesondere weil es schwierig ist, Sharding in ein System einzufĂŒgen, in dem es ursprĂŒnglich nicht eingeplant war.Wie plant TON also, beide oben beschriebenen Probleme zu lösen?

Wie plant TON, die beiden oben beschriebenen Probleme zu lösen?

Inhalt der Blockchain. Workchains.

TON: Telegram Open Network. Teil 2: Blockchains, Sharding

ZunĂ€chst sprechen wir darĂŒber, was im Blockchain gespeichert werden soll. Dort gespeichert werden die ZustĂ€nde von Konten (in der einfachsten Form „Wallets“) und Smart Contracts (der Einfachheit halber betrachten wir diese als die gleichen wie Konten). Im Grunde wird es sich um eine normale Hash-Tabelle handeln – die SchlĂŒssel darin sind die Identifikatoren account_id, und die Werte sind Datenstrukturen, die Dinge wie Folgendes enthalten:

  • Balance;
  • Code des Smart Contracts (nur fĂŒr Smart Contracts);
  • Datenspeicher des Smart Contracts (nur fĂŒr Smart Contracts);
  • Statistik;
  • (optional) öffentlicher SchlĂŒssel fĂŒr Überweisungen vom Konto, standardmĂ€ĂŸig account_id;
  • Warteschlange ausgehender Nachrichten (hier werden sie fĂŒr den Versand an den EmpfĂ€nger erfasst);
  • Liste der zuletzt an dieses Konto zugestellten Nachrichten.

Wie bereits erwĂ€hnt, bestehen die Blöcke direkt aus Transaktionen – Nachrichten, die an verschiedene Konten account_id zugestellt werden. Neben account_id enthalten die Nachrichten auch ein 32-Bit-Feld workchain_id – die Kennung der sogenannten Workchain (workchain, arbeitsblockchain). Dies ermöglicht mehrere unabhĂ€ngige Blockchains mit unterschiedlichen Konfigurationen. Dabei gilt workchain_id = 0 als Sonderfall, Null-Workchain – die dortigen Salden entsprechen der KryptowĂ€hrung TON (Grams). Höchstwahrscheinlich wird es in den ersten Phasen keine anderen Workchains geben.

Shardchains. Unendliches Sharding-Paradigma.

Aber das Wachstum der Anzahl der Blockchains stoppt hier nicht. Lassen Sie uns mit dem Sharding befassen. Stellen wir uns vor, dass jedem Konto (account_id) eine eigene Blockchain zugeordnet ist – dort liegen alle eingehenden Nachrichten – und die ZustĂ€nde all dieser Blockchains werden auf separaten Knoten gespeichert.

NatĂŒrlich ist das sehr verschwenderisch: Wahrscheinlich werden die Transaktionen in jeder dieser Shardchains (Shardchain, Shard-Blockchain) nur sehr selten eintreffen, und es werden viele leistungsstarke Knoten benötigt (um es vorwegzunehmen, dies bezieht sich nicht nur auf Clients auf Mobiltelefonen – sondern auf ernsthafte Server).

Deshalb fassen Shardchains Konten nach den binĂ€ren PrĂ€fixen ihrer Identifikatoren zusammen: Wenn der Shardchain einen PrĂ€fix von 0110 hat, werden alle account_id, die mit diesen Ziffern beginnen, Transaktionen in ihn gelangen. Dieses shard_prefix kann eine LĂ€nge von 0 bis 60 Bit haben – und das Wichtigste ist, dass es dynamisch verĂ€ndert werden kann.

TON: Telegram Open Network. Teil 2: Blockchains, Sharding

Sobald in einen der Shard-Chains ĂŒbermĂ€ĂŸig viele Transaktionen eingehen, teilen die daran arbeitenden Knoten ihn gemĂ€ĂŸ vorab festgelegten Regeln in zwei Tochter-Chain – ihre PrĂ€fixe werden um ein Bit lĂ€nger sein (und fĂŒr einen von ihnen wird dieses Bit 0 sein, fĂŒr den anderen 1). Zum Beispiel, shard_prefix = 0110b wird aufgeteilt in 01100b und 01101b. Wenn zwei "benachbarte" Shard-Chains sich lange genug wohlfĂŒhlen, werden sie wieder zu einer Einheit verschmelzen.

So wird Sharding "von unten nach oben" durchgefĂŒhrt – wir nehmen an, dass jedes Konto seinen eigenen Shard hat, aber sie sind bis auf Weiteres nach PrĂ€fixen "verklebt". Das impliziert Infinite Sharding Paradigm (die Paradigma des unendlichen Shardings).

Es ist wichtig zu betonen, dass Workchains nur virtuell existieren – in Wirklichkeit ist workchain_id es ein Teil des Identifikators eines bestimmten Shard-Chains. In formellen Worten wird jeder Shard-Chain durch ein Zahlenpaar definiert (workchain_id, shard_prefix).

Fehlerbehebung. Vertikale Blockchains.

Traditionell wird angenommen, dass jede Transaktion in der Blockchain "in Stein gemeißelt" ist. Im Fall von TON besteht jedoch die Möglichkeit, die "Geschichte neu zu schreiben" – falls jemand (sogenannter Fishing-Node) nachweisen kann, dass einer der Blöcke nicht korrekt signiert wurde. In diesem Fall wird dem entsprechenden Shard-Chain ein spezieller Korrekturblock hinzugefĂŒgt, der den Hash des zu korrigierenden Blocks (und nicht des letzten Blocks im Shard-Chain) enthĂ€lt. Wenn man den Shard-Chain als eine horizontal angeordnete Kette von Blöcken betrachtet, kann man sagen, dass der Korrekturblock nicht nach rechts, sondern von oben an den fehlerhaften Block angehĂ€ngt wird – daher wird angenommen, dass er Teil einer kleinen "vertikalen Blockchain" wird. So kann man sagen, dass Shard-Chains zweidimensionale Blockchains sind.

TON: Telegram Open Network. Teil 2: Blockchains, Sharding

Im Falle, dass nach einem fehlerhaften Block auf die von ihm vorgenommenen Änderungen in spĂ€teren Blöcken verwiesen wurde (d. h., es wurden neue Transaktionen auf Basis ungĂŒltiger Daten durchgefĂŒhrt), werden auch zu diesen Blöcken oben Korrekturblöcke hinzugefĂŒgt. Wenn die Blöcke die "betroffene" Information nicht beeintrĂ€chtigt haben, finden diese "Korrekturwellen" auf ihnen keine Anwendung. Zum Beispiel wurde in der obigen Darstellung die Transaktion des ersten Blocks, die das Guthaben des Kontos C erhöht, als fehlerhaft angesehen – daher muss auch die Transaktion, die das Guthaben dieses Kontos im dritten Block verringert, annulliert werden, und ein Korrekturblock muss ĂŒber dem Block verbucht werden.

Es ist zu beachten, dass, obwohl Korrekturblöcke als "ĂŒber" den Originalblöcken dargestellt werden, sie in Wirklichkeit am Ende des entsprechenden Blockchains hinzugefĂŒgt werden (dort, wo sie chronologisch hingehören). Die zweidimensionale Anordnung zeigt lediglich, an welchem Punkt im Blockchain sie "angehĂ€ngt" werden (mittels des in ihnen enthaltenen Hashes des Originalblocks).

Man könnte separat philosophieren, wie gut die Entscheidung ist, "die Vergangenheit zu verĂ€ndern". Es scheint, dass, wenn wir die Möglichkeit eines ungĂŒltigen Blocks im Shard-Chain zulassen, wir auch die Möglichkeit eines fehlerhaften Korrekturblocks nicht ausschließen können. Hier, soweit ich urteilen kann, liegt der Unterschied in der Anzahl der Knoten, die einen Konsens ĂŒber neue Blöcke erreichen mĂŒssen – ĂŒber jedem Shard wird eine relativ kleine "Arbeitsgruppe" von Knoten (die sich recht hĂ€ufig Ă€ndern) arbeiten, wĂ€hrend die EinfĂŒhrung von Korrekturblöcken die Zustimmung aller " Validator-Knotenerfordert. Mehr Informationen ĂŒber Validatoren, Arbeitsgruppen und andere Rollen von Knoten werde ich im nĂ€chsten Artikel geben.

Eine Blockchain, um alles zu verwalten

Oben wurde viel Informationen ĂŒber verschiedene Arten von Blockchains aufgefĂŒhrt, die ebenfalls irgendwo gespeichert werden sollten. Insbesondere geht es um folgende Daten:

  • ĂŒber die Anzahl und Konfigurationen der Workchains;
  • ĂŒber die Anzahl der Shardchains und ihre PrĂ€fixe;
  • darĂŒber, welche Knoten derzeit fĂŒr welche Shardchains verantwortlich sind;
  • Hashes der zuletzt hinzugefĂŒgten Blöcke fĂŒr alle Shardchains.

Wie Sie bereits vermuten konnten, werden all diese Dinge in ein weiteres Speicher-Blockchain - Masterchain (Masterchain, Master Blockchain). Dank der Verwendung von Hashes aus den Blöcken aller Shard-Blockchains in seinen Blöcken ist das System stark miteinander verbunden. Das bedeutet unter anderem, dass die Erstellung eines neuen Blocks in der Masterchain unmittelbar nach der Erstellung der Blöcke in den Shard-Blockchains erfolgt – es wird erwartet, dass die Blöcke in den Shard-Blockchains fast gleichzeitig alle 5 Sekunden erscheinen, und der nĂ€chste Block in der Masterchain eine Sekunde spĂ€ter entsteht.

Aber wer ist verantwortlich fĂŒr die Umsetzung dieser titanischen Arbeit – fĂŒr das Versenden von Nachrichten, das AusfĂŒhren von Smart Contracts, das Erstellen von Blöcken in den Shard-Blockchains und der Masterchain, und auch fĂŒr die ÜberprĂŒfung der Blöcke auf Fehler? Werden das tatsĂ€chlich die Smartphones von Millionen Nutzern sein, auf denen der Telegram-Client installiert ist? Oder wird das Team von Durov die Ideen der Dezentralisierung aufgeben und das Ganze wieder wie frĂŒher auf ihren Servern erledigen?

In Wirklichkeit ist keine der beiden Antworten korrekt. Aber die Seiten dieses Artikels neigen sich dem Ende zu, daher wird die Diskussion ĂŒber die verschiedenen Rollen der Knoten (vielleicht haben Sie bereits einige ihrer ErwĂ€hnungen bemerkt), sowie ĂŒber die Mechaniken ihrer Funktionsweise im nĂ€chsten Teil fortgesetzt.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster