TON : Telegram Open Network. Partie 2 : Blockchains, sharding

TON : Telegram Open Network. Partie 2 : Blockchains, sharding

Ce texte est la suite d'une sĂ©rie d'articles dans laquelle j'examine la structure du rĂ©seau distribuĂ© Telegram Open Network (TON), qui devrait sortir cette annĂ©e. partie prĂ©cĂ©dente J'y ai dĂ©crit le niveau le plus basique : le moyen d'interaction entre les nƓuds.

Pour rappel, je n'ai aucune relation avec le dĂ©veloppement de ce rĂ©seau, et tout le matĂ©riel provient d'une source ouverte (bien que non vĂ©rifiĂ©e) — document (il est Ă©galement accompagnĂ© d'une brochure, qui rĂ©sume briĂšvement les principaux points), apparue Ă  la fin de l'annĂ©e derniĂšre. À mon avis, le volume d'informations dans ce document tĂ©moigne de son authenticitĂ©, bien qu'il n'y ait aucune confirmation officielle.

Aujourd'hui, nous allons examiner le composant principal de TON — la blockchain.

Concepts de base

Compte (account). Un ensemble de donnĂ©es identifiable par un nombre de 256 bits account_id (il s'agit le plus souvent de la clĂ© publique du propriĂ©taire du compte). Dans le cas de base (voir ci-dessous blockchain zĂ©ro), ces donnĂ©es dĂ©signent le solde de l'utilisateur. « Emprunter » un montant spĂ©cifique account_id peut ĂȘtre fait par n'importe qui, mais sa valeur ne peut ĂȘtre modifiĂ©e que selon des rĂšgles dĂ©finies.

Contrat intelligent (smart-contract). En somme, c'est un cas particulier de compte, complété par le code du contrat intelligent et le stockage de ses variables. Dans le cas d'un « portefeuille », on peut déposer et retirer de l'argent selon des rÚgles relativement simples et prédéfinies, alors que pour un contrat intelligent, ces rÚgles sont écrites sous forme de code (dans un langage de programmation Turing-complet).

État de la blockchain (state of blockchain). L'ensemble des Ă©tats de tous les comptes / contrats intelligents (de maniĂšre abstraite — une table de hachage oĂč les clĂ©s sont les identifiants des comptes et les valeurs sont les donnĂ©es stockĂ©es dans les comptes).

Message (message). J'ai utilisĂ© l'expression « dĂ©poser et retirer de l'argent » — c'est un exemple particulier de message (« transfĂ©rer N grammes du compte account_1 au compte account_2»). Évidemment, seul un nƓud possĂ©dant la clĂ© secrĂšte du compte peut envoyer un tel message. account_1 — et capable de le confirmer par une signature. La livraison de tels messages Ă  un compte ordinaire entraĂźne l'augmentation de son solde, tandis que le contrat intelligent exĂ©cute son code (qui traitera la rĂ©ception du message). Bien sĂ»r, d'autres messages peuvent exister (transportant non des sommes d'argent, mais des donnĂ©es arbitraires entre des contrats intelligents).

La transaction (transaction). Le fait de livrer un message est appelĂ© transaction. Les transactions modifient l'Ă©tat de la blockchain. Ce sont les transactions (enregistrements de livraison de messages) qui constituent les blocs dans la blockchain. Dans ce sens, on peut imaginer l'Ă©tat de la blockchain comme une base de donnĂ©es incrĂ©mentielle — tous les blocs sont des « diffs » qui doivent ĂȘtre appliquĂ©s successivement pour obtenir l'Ă©tat actuel de la BDD. Nous parlerons des spĂ©cificitĂ©s de l'emballage de ces « diffs » (et de la restauration de l'Ă©tat complet Ă  partir d'eux) dans le prochain article.

Blockchain dans TON : qu'est-ce que c'est et à quoi ça sert ?

Comme mentionnĂ© dans l'article prĂ©cĂ©dent, la blockchain est une structure de donnĂ©es, dont les Ă©lĂ©ments (blocs) sont ordonnĂ©s en « chaĂźne », et chaque bloc suivant de la chaĂźne contient le hachage du prĂ©cĂ©dent. Dans les commentaires, une question a Ă©tĂ© posĂ©e : pourquoi une telle structure de donnĂ©es est-elle nĂ©cessaire, alors que nous avons dĂ©jĂ  DHT — une table de hachage distribuĂ©e ? Il est Ă©vident que certaines donnĂ©es peuvent ĂȘtre stockĂ©es dans DHT, mais cela ne convient que pour des informations qui ne sont pas trop « sensibles ». Les soldes des cryptomonnaies ne peuvent pas ĂȘtre stockĂ©s dans DHT — principalement en raison de l'absence de vĂ©rifications sur l'intĂ©gritĂ©. En fait, toute la complexitĂ© de la structure de la blockchain augmente pour empĂȘcher toute interfĂ©rence avec les donnĂ©es qu'elle contient.

Cependant, la blockchain dans TON semble encore plus complexe que dans la plupart des autres systĂšmes distribuĂ©s — et il y a deux raisons Ă  cela. La premiĂšre est le dĂ©sir de minimiser le besoin de forks. Dans les cryptomonnaies traditionnelles, tous les paramĂštres sont fixĂ©s dĂšs le dĂ©part et toute tentative de les modifier conduit en fait Ă  l'apparition d'un « univers alternatif de cryptomonnaie ». La seconde raison est le soutien de la fragmentations (sharding, shardization) de la blockchain. La blockchain est une structure qui ne peut pas se rĂ©duire au fil du temps ; en gĂ©nĂ©ral, chaque nƓud responsable du bon fonctionnement du rĂ©seau est obligĂ© de la stocker dans son intĂ©gralitĂ©. Dans les systĂšmes traditionnels (centralisĂ©s), pour rĂ©soudre de tels problĂšmes, on utilise le sharding : une partie des enregistrements de la base de donnĂ©es est sur un serveur, une autre partie est sur un autre, etc. Dans le cas des cryptomonnaies, cette fonctionnalitĂ© est encore assez rare — en particulier parce qu'il est compliquĂ© d'ajouter le sharding Ă  un systĂšme qui ne l'a pas prĂ©vu dĂšs le dĂ©part.

Comment TON prévoit-il de résoudre les deux problÚmes décrits ci-dessus ?

Le contenu de la blockchain. Workchains.

TON : Telegram Open Network. Partie 2 : Blockchains, sharding

Tout d'abord, parlons de ce qui sera stockĂ© dans la blockchain. Y seront conservĂ©s les Ă©tats des comptes (les « portefeuilles » dans le cas de base) et des contrats intelligents (pour simplifier, considĂ©rons que c'est la mĂȘme chose que des comptes). En rĂ©alitĂ©, ce sera une table de hachage classique — les identifiants seront les clĂ©s account_id, et les valeurs seront des structures de donnĂ©es comprenant des Ă©lĂ©ments tels que :

  • le solde ;
  • le code du contrat intelligent (uniquement pour les contrats intelligents) ;
  • le stockage de donnĂ©es du contrat intelligent (uniquement pour les contrats intelligents) ;
  • les statistiques ;
  • (en option) la clĂ© publique pour les transferts depuis le compte, par dĂ©faut account_id ;
  • la queue des messages sortants (ici, ils sont enregistrĂ©s pour ĂȘtre envoyĂ©s au destinataire) ;
  • la liste des derniers messages livrĂ©s Ă  ce compte.

Comme mentionnĂ© ci-dessus, les blocs se composent directement de transactions — messages livrĂ©s Ă  diffĂ©rents comptes account_id. Cependant, outre account_id, les messages contiennent Ă©galement un champ de 32 bits workchain_id — l'identifiant de la soi-disant workchain (workchain, working blockchain). Cela permet d'avoir plusieurs blockchains indĂ©pendantes avec des configurations diffĂ©rentes. Dans ce cas, workchain_id = 0 est considĂ©rĂ© comme un cas particulier, la workchain nulle — les soldes qui s'y trouvent correspondront Ă  la cryptomonnaie TON (Grams). Il est probable qu'au dĂ©but, il n'y aura pas d'autres workchains.

Sharding des chaĂźnes. Paradigme infini du sharding.

Mais la croissance du nombre de blockchains ne s'arrĂȘte pas lĂ . Examinons le sharding. Imaginons que chaque compte (account_id) dispose de sa propre blockchain — toutes les messages qui lui sont destinĂ©s y sont stockĂ©s — et les Ă©tats de toutes ces blockchains sont conservĂ©s sur des nƓuds sĂ©parĂ©s.

Bien sĂ»r, c'est assez coĂ»teux : il est probable que dans chacun de ces shardchains (shardchain, blockchain shard) les transactions arriveront trĂšs rarement et de nombreux nƓuds puissants seront nĂ©cessaires (pour anticiper, je prĂ©cise que ce ne sont pas juste des clients sur des tĂ©lĂ©phones mobiles — mais de vĂ©ritables serveurs).

C'est pourquoi les shardchains regroupent les comptes par prĂ©fixes binaires de leurs identifiants : si un shardchain a pour prĂ©fixe 0110, toutes les transactions des account_id qui commencent par ces chiffres y seront incluses. Ce shard_prefix peut avoir une longueur de 0 Ă  60 bits — et ce qui est important, c'est qu'il peut changer dynamiquement.

TON : Telegram Open Network. Partie 2 : Blockchains, sharding

DĂšs qu'un des shardchains reçoit un nombre excessif de transactions, les nƓuds qui y travaillent, selon des rĂšgles prĂ©dĂ©finies, le « fendent » en deux enfants — leurs prĂ©fixes seront plus longs d'un bit (et pour l'un d'eux, ce bit sera Ă©gal Ă  0, et pour l'autre, Ă  1). Par exemple, shard_prefix = 0110b se fendra en 01100b et 01101b. Inversement, si deux shardchains « voisins » commencent Ă  se sentir suffisamment Ă  l'aise (pendant un certain temps), ils se rejoindront Ă  nouveau.

Ainsi, le sharding s'effectue « de bas en haut » — nous supposons que chaque compte possĂšde son shard, mais ils sont — pour un temps — « collĂ©s » par prĂ©fixes. C'est ce que sous-entend Infinite Sharding Paradigm (la paradigm du sharding infini.).

Il convient de souligner que les workchains existent uniquement de maniĂšre virtuelle — en rĂ©alitĂ©, workchain_id il s'agit d'une partie de l'identifiant d'un shardchain spĂ©cifique. Pour le dire de maniĂšre formelle, chaque shardchain est dĂ©fini par une paire de nombres (workchain_id, shard_prefix).

Correction des erreurs. Blockchains verticales.

On considĂšre traditionnellement que toute transaction dans une blockchain est « gravĂ©e dans la pierre ». Cependant, dans le cas de TON, la possibilitĂ© de « réécrire l'histoire » est prĂ©vue — dans le cas oĂč quelqu'un (le fameux nƓud « pĂȘcheur ») prouvera qu'un des blocs a Ă©tĂ© signĂ© incorrectement. Dans ce cas, un bloc correctif spĂ©cial est ajoutĂ© au shardchain correspondant, contenant le hachage du bloc corrigĂ© (et non du dernier bloc du shardchain). En reprĂ©sentant le shardchain comme une chaĂźne de blocs disposĂ©e horizontalement, on peut dire que le bloc correctif s'attache au bloc dĂ©fectueux non pas Ă  droite, mais au-dessus — c'est pourquoi on considĂšre qu'il fait partie d'une petite « chaĂźne de blocs verticale ». Ainsi, on peut dire que les shardchains sont des blockchains bidimensionnelles.

TON : Telegram Open Network. Partie 2 : Blockchains, sharding

Dans le cas oĂč des blocs ultĂ©rieurs rĂ©fĂ©rencent les modifications apportĂ©es par le bloc erronĂ© (c'est-Ă -dire, des transactions valides basĂ©es sur des informations invalides), des blocs correctifs sont Ă©galement ajoutĂ©s « au-dessus » de ces blocs. Si les blocs n'ont pas touchĂ© Ă  l'information « affectĂ©e », ces « ondes correctrices » ne se propagent pas Ă  eux. Par exemple, dans l'illustration ci-dessus, la transaction du premier bloc, qui augmente le solde du compte C, a Ă©tĂ© reconnue comme incorrecte — donc la transaction qui diminue le solde de ce compte dans le troisiĂšme bloc doit aussi ĂȘtre annulĂ©e, et un bloc correctif est engagĂ© au-dessus du bloc lui-mĂȘme.

Il convient de noter — bien que les blocs correctifs soient reprĂ©sentĂ©s comme situĂ©s « au-dessus » des originaux, en rĂ©alitĂ©, ils seront ajoutĂ©s Ă  la fin de la blockchain correspondante (lĂ  oĂč ils devraient se trouver chronologiquement). La disposition bidimensionnelle ne montre que le point dans la blockchain auquel ils seront « attachĂ©s » (grĂące au hachage du bloc original qui s'y trouve).

On peut rĂ©flĂ©chir sĂ©parĂ©ment sur la question de savoir dans quelle mesure il est bon de « changer le passĂ© ». Il semblerait que si nous admettons la possibilitĂ© de l'apparition d'un bloc incorrect dans le shardchain, nous devons Ă©galement permettre l'Ă©ventualitĂ© d'un bloc correctif erronĂ©. Ici, autant que je puisse juger, la diffĂ©rence rĂ©side dans le nombre de nƓuds qui doivent atteindre un consensus sur les nouveaux blocs — une relativement petite «équipe de travail» de nƓuds (changĂ©e assez frĂ©quemment) travaillera sur chaque shardchain, tandis que l'ajout de blocs correctifs nĂ©cessitera l'accord de tous les nƓuds validateurs. Je parlerai plus en dĂ©tail des validateurs, des Ă©quipes de travail et d'autres rĂŽles des nƓuds dans le prochain article.

Une blockchain pour les gouverner tous

Ci-dessus, de nombreuses informations sur les diffĂ©rents types de blockchains, qui doivent Ă©galement ĂȘtre stockĂ©es quelque part. En particulier, il s'agit des informations suivantes :

  • sur le nombre et les configurations des workchains ;
  • sur le nombre de shardchains et leurs prĂ©fixes ;
  • sur les nƓuds actuellement responsables de quels shardchains ;
  • les hachages des derniers blocs ajoutĂ©s Ă  tous les shardchains.

Comme vous l'avez dĂ©jĂ  devinĂ©, toutes ces choses sont enregistrĂ©es dans une autre blockchain de stockage — masterchain (masterchain, blockchain maĂźtre). GrĂące Ă  la prĂ©sence de hachages dans ses blocs provenant de tous les shardchains, il rend le systĂšme fortement interliĂ©. Cela signifie Ă©galement que la gĂ©nĂ©ration d'un nouveau bloc dans le masterchain se produira immĂ©diatement aprĂšs la gĂ©nĂ©ration de blocs dans les shardchains - on s'attend Ă  ce que des blocs dans les shardchains apparaissent presque simultanĂ©ment environ toutes les 5 secondes, et qu'un nouveau bloc dans le masterchain apparaisse une seconde aprĂšs cela.

Mais qui sera responsable de la mise en Ɠuvre de tout ce travail titanesque - du transfert de messages, de l'exĂ©cution des contrats intelligents, de la formation des blocs dans les shardchains et le masterchain, tout en vĂ©rifiant les blocs pour des erreurs ? Est-ce que tout cela sera fait en cachette par les tĂ©lĂ©phones de millions d'utilisateurs ayant installĂ© le client Telegram ? Ou bien, peut-ĂȘtre, l'Ă©quipe Durov abandonnera-t-elle les idĂ©es de dĂ©centralisation et ce seront leurs serveurs qui le feront Ă  l'ancienne ?

En rĂ©alitĂ©, ni l'un ni l'autre de ces rĂ©ponses n'est correct. Mais l'espace de cet article touche rapidement Ă  sa fin, donc la discussion sur les diffĂ©rents rĂŽles des nƓuds (vous avez peut-ĂȘtre dĂ©jĂ  remarquĂ© certaines mentions Ă  leur sujet), ainsi que sur les mĂ©canismes de leur fonctionnement se poursuivra dans la prochaine partie.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster