
Dieser Text ist eine Fortsetzung einer Serie von Artikeln, in denen ich die Struktur des vermeintlich in diesem Jahr erscheinenden verteilten Netzwerks Telegram Open Network (TON) bespreche. In habe ich die grundlegendste Ebene beschrieben â die Art und Weise, wie Knoten miteinander interagieren.
Zur Erinnerung: Ich habe nichts mit der Entwicklung dieses Netzwerks zu tun, und das gesamte Material stammt aus einer offenen (wenn auch unbestĂ€tigten) Quelle â (es gibt auch eine beiliegende , die die wichtigsten Punkte zusammenfasst), die Ende letzten Jahres erschienen ist. Nach meiner EinschĂ€tzung deutet das Volumen der Informationen in diesem Dokument auf seine AuthentizitĂ€t hin, obwohl es dafĂŒr keine offiziellen BestĂ€tigungen gibt.
Heute schauen wir uns den Hauptbestandteil von TON â die Blockchain â an.
Grundlagen
Account (account). Eine Art Datensatz, der durch eine 256-Bit-Zahl identifiziert wird, account_id (meist handelt es sich um den öffentlichen SchlĂŒssel des Kontoinhabers). Im Grundfall (siehe unten Null-Blockchain) bezieht sich dieser Datensatz auf das Guthaben des Benutzers. «Ausleihen» kann es jeder, aber den Wert zu Ă€ndern, ist nur nach bestimmten Regeln möglich. account_id Smart-Contract
Smart-Contract (smart-contract). Im Grunde genommen handelt es sich um einen speziellen Fall eines Kontos, das durch einen Smart-Contract-Code und dessen Variablen-Speicher ergĂ€nzt wird. WĂ€hrend es bei einem âWalletâ möglich ist, Geld gemÀà relativ einfachen und vorher festgelegten Regeln einzuzahlen und abzuheben, sind die Regeln fĂŒr einen Smart Contract in seinem Code (in einer bestimmten 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, wobei die SchlĂŒssel die Identifikatoren der Konten und die Werte die in den Konten gespeicherten Daten sind).
Nachricht (message). Ich habe zuvor den Ausdruck âGeld einzahlen und abhebenâ verwendet â das ist ein spezifisches Beispiel fĂŒr eine Nachricht (âĂŒbertragen N Gramm von Konto account_1 auf Konto account_2â). Offensichtlich kann eine solche Nachricht nur von einem Knoten gesendet werden, der den privaten SchlĂŒssel des Kontos besitzt. account_1 â und kann dies durch eine Signatur bestĂ€tigen. Das Ergebnis der Zustellung solcher Nachrichten an ein regulĂ€res Konto ist eine Erhöhung seines Guthabens, wĂ€hrend der Smart Contract seinen Code ausfĂŒhrt (der die Nachricht empfĂ€ngt). NatĂŒrlich sind auch andere Nachrichten möglich (die nicht monetĂ€re BetrĂ€ge, sondern beliebige Daten zwischen Smart Contracts ĂŒbertragen).
Transaktion (Transaktion). Die Tatsache der NachrichtenĂŒbermittlung wird als Transaktion bezeichnet. Transaktionen Ă€ndern den Zustand der Blockchain. TatsĂ€chlich bestehen Blöcke in der Blockchain aus Transaktionen (Aufzeichnungen ĂŒber die Zustellung von Nachrichten). In dieser Hinsicht kann man sich den Zustand der Blockchain wie eine inkrementelle Datenbank vorstellen â alle Blöcke sind âDiffsâ, die nacheinander angewendet werden mĂŒssen, um den aktuellen Zustand der DB zu erhalten. Ăber die Details der Verpackung dieser âDiffsâ (und die Wiederherstellung des vollstĂ€ndigen Zustands davon) wird im nĂ€chsten Artikel gesprochen werden.
Blockchain im TON: Was ist das und wozu dient es?
Wie im vorherigen Artikel erwĂ€hnt, ist die Blockchain eine Datenstruktur, deren Elemente (Blöcke) in einer âKetteâ angeordnet sind, und jeder nachfolgende Block in der Kette enthĂ€lt den Hash des vorherigen.. In den Kommentaren wurde die Frage gestellt: Warum ĂŒberhaupt eine solche Datenstruktur, wenn wir bereits DHT â eine verteilte Hash-Tabelle â haben? Offensichtlich können einige Daten auch in DHT gespeichert werden, aber das eignet sich nur fĂŒr nicht zu âsensibleâ Informationen. KryptowĂ€hrungsbilanzen können nicht in DHT gespeichert werden â vor allem wegen fehlender IntegritĂ€tsprĂŒfungen. IntegritĂ€t. TatsĂ€chlich entsteht die gesamte KomplexitĂ€t der Blockchain-Struktur, um Eingriffe in die darin gespeicherten Daten zu verhindern.
Allerdings sieht die Blockchain im TON noch komplexer aus als in den meisten anderen verteilten Systemen â und dafĂŒr gibt es zwei GrĂŒnde. Der erste ist der Wunsch, die Notwendigkeit von Forkszu minimieren. In traditionellen KryptowĂ€hrungen sind alle Parameter zu Beginn festgelegt, und jeder Versuch, diese zu Ă€ndern, fĂŒhrt faktisch zur Entstehung eines âalternativen Universumsâ der KryptowĂ€hrung. Der zweite Grund ist die UnterstĂŒtzung von Sharding (Sharding, Sharding).) Blockchain. Die Blockchain ist eine Struktur, die im Laufe der Zeit nicht kleiner werden kann; und in der Regel 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 eingesetzt: Ein Teil der Datenbankinhalte befindet sich auf einem Server, ein anderer Teil auf einem anderen, usw. Bei KryptowĂ€hrungen ist eine solche FunktionalitĂ€t bisher recht selten â insbesondere, weil es schwierig ist, Sharding in ein System einzufĂŒgen, das nicht von Anfang an dafĂŒr geplant wurde.
Wie plant TON, beide oben beschriebenen Probleme zu lösen?
Inhalt der Blockchain. WĂ€hrungen.

ZunĂ€chst sprechen wir darĂŒber, was in der Blockchain gespeichert werden soll. Dort werden die ZustĂ€nde der Konten (im einfachsten Fall âWalletsâ) und der Smart Contracts gespeichert (der Einfachheit halber nehmen wir an, dass dies dasselbe ist wie die Konten). Im Grunde wird es sich um eine gewöhnliche Hash-Tabelle handeln â die SchlĂŒssel darin sind die Identifikatoren account_id, und die Werte sind Datenstrukturen, die solche Dinge enthalten wie:
- Kontostand;
- Code des Smart Contracts (nur fĂŒr Smart Contracts);
- Datenablage fĂŒr Smart Contracts (nur fĂŒr Smart Contracts);
- Statistik;
- (optional) öffentlicher SchlĂŒssel fĂŒr Ăberweisungen vom Konto, standardmĂ€Ăig account_id;
- Warteschlange fĂŒr ausgehende Nachrichten (hier werden sie zur Weiterleitung an den EmpfĂ€nger abgelegt);
- Liste der zuletzt an dieses Konto gelieferten Nachrichten.
Wie bereits erwĂ€hnt, bestehen die Blöcke direkt aus Transaktionen â Nachrichten, die an verschiedene Konten (account_id) geliefert werden. Neben account_id enthalten die Nachrichten auch ein 32-Bit-Feld workchain_id â die Kennung des sogenannten Workchains (workchain, arbeitenden Blockchain). Dies ermöglicht die Existenz mehrerer unabhĂ€ngiger Blockchains mit unterschiedlichen Konfigurationen. Dabei wird workchain_id = 0 als Sonderfall angesehen, Null-Workchain â die darin befindlichen Guthaben entsprechen der KryptowĂ€hrung TON (Grams). Vermutlich wird es anfangs keine anderen Workchains geben.
Shardchains. Infinite Sharding Paradigm.
Doch das Wachstum der Anzahl der Blockchains stoppt hier nicht. Lassen Sie uns mit Sharding vertrautmachen. Stellen Sie sich vor, dass jedem Konto (account_id) eine eigene Blockchain zugewiesen ist, in der alle eingehenden Nachrichten liegen, und die ZustÀnde aller dieser Blockchains auf separaten Knoten gespeichert werden.
NatĂŒrlich ist das ziemlich verschwenderisch: Wahrscheinlich werden in jede dieser Shardchains (shardchain, Shard-Blockchain) Transaktionen nur sehr selten eingehen, und es werden viele leistungsstarke Knoten benötigt (vorweggenommen sei, dass es nicht nur um mobile Telefonkunden geht â sondern um ernsthafte Server).
Deshalb fassen Shardchains die Konten nach binĂ€ren PrĂ€fixen ihrer Identifikatoren zusammen: Wenn eine Shardchain das PrĂ€fix 0110 hat, gelangen die Transaktionen aller account_id, die mit diesen Ziffern beginnen, in sie. Dieser shard_prefix kann eine LĂ€nge von 0 bis 60 Bit haben â und das Wichtigste ist, dass er dynamisch verĂ€ndert werden kann.

Sobald ein Shardchain ĂŒbermĂ€Ăig viele Transaktionen erhĂ€lt, teilen die Knoten, die daran arbeiten, ihn gemÀà vordefinierten Regeln in zwei Tochterchains auf â deren PrĂ€fixe sind um ein Bit lĂ€nger (wobei fĂŒr einen das Bit 0 und fĂŒr den anderen das Bit 1 ist). Zum Beispiel, shard_prefix = 0110wird b aufgeteilt in 01100b und 01101b. Umgekehrt, wenn zwei "benachbarte" Shardchains sich ĂŒber einen gewissen Zeitraum hinweg wohlfĂŒhlen, können sie wieder zu einer Einheit zusammengefĂŒhrt werden.
Somit erfolgt das Sharding âvon unten nach obenâ â wir gehen davon aus, dass jedes Konto seinen eigenen Shard hat, diese jedoch â vorĂŒbergehend â nach PrĂ€fixen âverklebtâ sind. Das bringt uns zur Unendliches Sharding-Paradigma (Paradigmen des endlosen Shardings.).
Es ist wichtig zu betonen, dass Workchains nur virtuell existieren â tatsĂ€chlich ist workchain_id dies ein Teil der Identifikationsnummer eines bestimmten Shardchains. Formell ausgedrĂŒckt wird jeder Shardchain durch ein Zahlenpaar bestimmt (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 gibt es jedoch die Möglichkeit, die 'Geschichte neu zu schreiben' â wenn jemand (ein sogenannter Fisher-Knoten) beweist, dass einer der Blöcke fehlerhaft signiert wurde. In diesem Fall wird ein spezieller Korrekturblock zum entsprechenden Shard-Chain hinzugefĂŒgt, der den Hash des zu korrigierenden Blocks (und nicht des letzten Blocks in der Shard-Chain) enthĂ€lt. Wenn man die Shard-Chain als eine horizontal ausgelegte Kette von Blöcken betrachtet, kann man sagen, dass der Korrekturblock nicht rechts an den fehlerhaften Block angehĂ€ngt wird, sondern oben â weshalb man sagt, dass er Teil einer kleinen 'vertikalen Blockchain' wird. Daher kann man sagen, dass Shard-Chains zweidimensionale Blockchains sind..

Wenn nach einem fehlerhaften Block die Ănderungen, die er vorgenommen hat, von nachfolgenden Blöcken referenziert wurden (d.h. es wurden neue Transaktionen auf Basis ungĂŒltiger Daten durchgefĂŒhrt), werden auch diesen Blöcken "Korrekturen" "von oben" hinzugefĂŒgt. Wenn die Blöcke jedoch keine "betroffenen" Informationen berĂŒhrten, gelten diese "Korrekturwellen" nicht fĂŒr sie. Zum Beispiel wurde in der obigen Abbildung die Transaktion des ersten Blocks, die das Guthaben des Kontos C erhöht, als fehlerhaft angesehen â daher muss die Transaktion, die das Guthaben dieses Kontos im dritten Block verringert, ebenfalls annulliert werden, und ĂŒber diesem Block wird ein Korrekturblock vermerkt.
Es ist anzumerken â obwohl Korrekturblöcke als "ĂŒber" den Originalblöcken dargestellt werden, werden sie tatsĂ€chlich an das Ende der entsprechenden Blockchain angehĂ€ngt (dort, wo sie chronologisch hingehören). Die zweidimensionale Anordnung zeigt lediglich, an welchen Punkt in der Blockchain sie "angehĂ€ngt" werden (mittels des in ihnen enthaltenen Hashes des Originalblocks).
Man könnte lange darĂŒber philosophieren, wie gut die Lösung âdie Vergangenheit zu Ă€ndernâ tatsĂ€chlich ist. Es scheint, dass wenn wir die Möglichkeit eines fehlerhaften Blocks in der Blockchain zulassen, wir ebenso die Möglichkeit eines fehlerhaften Korrekturblocks zulassen mĂŒssen. Hier, so viel ich beurteilen kann, liegt der Unterschied in der Anzahl der Knoten, die Konsens ĂŒber neue Blöcke erreichen mĂŒssen â an jedem Shard-Chain wird eine relativ kleine "Arbeitsgruppe" von Knoten arbeiten (die sich ziemlich oft verĂ€ndert), wĂ€hrend das EinfĂŒgen von Korrekturblöcken die Zustimmung aller Validator-Knotenerfordert. Mehr Details ĂŒber Validatoren, Arbeitsgruppen und andere Rollen von Knoten werde ich im nĂ€chsten Artikel erlĂ€utern.
Eine Blockchain, um alle zu regieren
Ich habe oben viele Informationen ĂŒber verschiedene Arten von Blockchains aufgelistet, die selbst irgendwo gespeichert werden sollten. Insbesondere handelt es sich um folgende Angaben:
- ĂŒber die Anzahl und Konfigurationen von Workchains;
- ĂŒber die Anzahl der Shard-Chains und deren PrĂ€fixe;
- darĂŒber, welche Knoten derzeit fĂŒr welche Shard-Chains verantwortlich sind;
- Hashes der zuletzt hinzugefĂŒgten Blöcke zu allen Shard-Chains.
Wie Sie sich vielleicht schon denken können, werden all diese Dinge in einem weiteren Speicher â der Masterchain (Masterchain, Master-Blockchain). Durch die Hashes der Blöcke aller Shardchains in seinen Blöcken wird das System stark miteinander verbunden. Das bedeutet auch, dass die Generierung eines neuen Blocks in der Masterchain direkt nach der Erstellung der Blöcke in den Shardchains erfolgt â erwartet wird, dass die Blöcke in den Shardchains fast gleichzeitig alle 5 Sekunden erscheinen, und ein neuer Block in der Masterchain eine Sekunde danach.
Aber wer wird verantwortlich sein fĂŒr die DurchfĂŒhrung dieser titanischen Aufgaben â das Versenden von Nachrichten, das AusfĂŒhren von Smart Contracts, die Bildung von Blöcken in den Shardchains und in der Masterchain sowie die ĂberprĂŒfung der Blöcke auf Fehler? Werden all dies heimlich die Smartphones von Millionen Nutzern mit dem Telegram-Client darauf erledigen? Oder wird das Team von Durov die Ideen der Dezentralisierung aufgeben und es werden ihre Server auf die altmodische Weise tun?
TatsĂ€chlich ist ke Antworten richtig. Doch der Platz in diesem Artikel neigt 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 Mechanismen ihres Betriebs in der nĂ€chsten Folge fortgesetzt.
Quelle: habr.com
