Exécution parallèle : la prochaine génération de blockchains

Avancé5/10/2024, 10:43:24 AM
Shoal Research, une institution de recherche en cryptographie, a analysé les projets connexes actuels dans le domaine parallèle de la blockchain, y compris les progrès de Solana (SVM), le EVM parallèle (Sei, Monad) et MoveVM (Aptos, Sui, Movement), et a analysé les défis rencontrés dans ce domaine et les opportunités.

Prélude

1.0 Transactions Blockchain

Les blockchains sont des machines virtuelles, un modèle informatique basé sur un logiciel qui s'exécute sur un réseau distribué d'ordinateurs physiques auxquels n'importe qui peut se joindre, mais qu'il est extrêmement difficile pour une seule entité de contrôler. Le concept d'une blockchain a été pour la première fois mis par écrit dans le célèbre livre blanc du Bitcoin de Satoshi Nakomoto en 2008, en tant qu'infrastructure de base permettant des paiements pair à pair cryptographiquement sécurisés en Bitcoin. Les transactions sont aux blockchains ce que les journaux sont aux médias sociaux et aux entreprises Internet ; ils servent de registres d'activité pour ce réseau particulier, la différence clé étant que les transactions sur une blockchain sont immuables et souvent publiquement observables.

Mais qu'est-ce qu'une transaction exactement?

Les transactions sur les blockchains impliquent le transfert d'actifs numériques d'une adresse sur le grand livre distribué à une autre, sécurisé par l'utilisation de la cryptographie à clé publique. Les transactions peuvent être utilisées pour des transferts décentralisés de pairs à pairs, ou pour divers processus d'authentification et de vérification également.

Un exemple de transaction que tout le monde peut observer sur un explorateur de blocs comme SeiTrace

1.1 Comment fonctionnent les transactions sur la Blockchain

Lorsqu'une transaction est initiée, c'est-à-dire que Bob envoie des jetons à Alice, la transaction de Bob est diffusée sur le réseau de la blockchain sous-jacente. Par la suite, des clusters de nœuds spécialisés sur le réseau se mettent au travail pour vérifier et valider la transaction en tant que légitime. Une fois que suffisamment de ces nœuds ont vérifié le contenu de la transaction, la transaction est ajoutée à un bloc avec d'autres transactions d'utilisateurs. Une fois qu'un bloc est plein, il est ensuite ajouté à la chaîne, d'où le nom de 'blockchain'. La transaction de Bob fait désormais partie d'un registre sécurisé et transparent, et lui et Alice peuvent tous deux vérifier le contenu.

De manière générale, toutes les transactions de la blockchain contiennent des métadonnées qui aident les nœuds opérant et sécurisant le réseau à identifier et exécuter un ensemble donné d'instructions et de paramètres. Chaque transaction aura des données de haut niveau saisies par l'expéditeur d'origine, telles que le montant à transférer, l'adresse de destination et la signature numérique pour confirmer la transaction, ainsi que diverses données de bas niveau qui sont créées et attachées automatiquement, bien que ces données varient en fonction du réseau et du design.

Finalement, cependant, les processus impliqués en coulisses au niveau du réseau avant l'exécution de la transaction varient en fonction de la conception de la blockchain.

1.1.1 Mempool

Un pool de mémoire, ou mempool, est une caractéristique commune des conceptions de la blockchain, mise en œuvre par des réseaux de blockchain traditionnels tels que Bitcoin et Ethereum. Les mempools ne sont que des zones tampons, ou des 'salles d'attente', pour les transactions en attente qui doivent encore être ajoutées à un bloc et exécutées.

Pour mieux comprendre, nous pouvons expliquer le cycle de vie d'une transaction sur une blockchain qui utilise un mempool;

  1. L'utilisateur initie et signe une transaction.
  2. Les nœuds spécialisés participant au réseau blockchain vérifient que le contenu de la transaction est légitime et contient les paramètres appropriés.
  3. Une fois vérifiée, la transaction est routée vers le mempool public aux côtés d'autres transactions en attente.
  4. Finalement, en fonction des frais de gaz payés pour la transaction par rapport à d'autres transactions dans le mempool, la transaction en attente de notre utilisateur est sélectionnée avec un groupe d'autres transactions en attente pour former le prochain bloc sur la blockchain. À ce stade, notre statut de transaction affichera "Réussie".
  5. Après qu'un certain temps ou un seuil basé sur le bloc s'est écoulé, le bloc lui-même est finalisé et la transaction devient un journal immuable enregistré sur la blockchain, qui ne pourrait être compromis que en cas d'attaque de 51 %, une tâche extrêmement difficile à réaliser autrement.

1.1.2. Pas de Mempool (Solana)

Il est important de noter que certains blockchains, comme Solana, n'utilisent pas de mempool et peuvent plutôt transmettre les transactions directement au producteur de blocs afin de permettre une vitesse et un débit élevés grâce à une production continue de blocs.

Parcourons le cycle de vie d'une transaction sur une blockchain non-mempool :

  1. L'utilisateur initie et signe une transaction pour une application qu'il utilise.
  2. L'application route les informations de transaction vers le serveur d'appel de procédure à distance (RPC).
  3. Le fournisseur RPC envoie la transaction au producteur de bloc actuellement désigné, ainsi qu'aux trois producteurs suivants; il s'agit d'une mesure de précaution au cas où le leader actuel ne pourrait pas exécuter la transaction à temps. Solana utilise un calendrier de leader de créneau qui aide les RPC à acheminer les transactions plus facilement.
  4. Le producteur de blocs envoie ensuite la transaction signée aux nœuds de consensus pour vérification.
  5. Les nœuds de consensus votent pour vérifier le contenu de la transaction, et une fois terminée, le statut de la transaction est ensuite renvoyé à RPC > application > utilisateur en tant que "succès" ou "échec".
  6. Similaire aux blockchains basées sur le mempool, le bloc lui-même est finalisé après un certain temps ou après avoir atteint un seuil basé sur les blocs.

1.2 Exécution séquentielle

Les blockchains plus anciennes, à savoir Bitcoin et Ethereum, utilisent un mécanisme d'exécution séquentielle des transactions. Chaque transaction ajoutée à la blockchain provoque un changement dans l'état du réseau, et la VM est structurée pour ne traiter qu'un seul changement d'état à la fois à des fins de sécurité.

Cela a entraîné des goulots d'étranglement significatifs pour le débit du réseau sous-jacent, car le nombre de transactions pouvant être ajoutées au bloc est limité, ce qui entraîne des temps d'attente plus longs et des pics sans précédent des coûts de transaction qui peuvent rendre le réseau inutilisable par moments. De plus, les modèles d'exécution séquentielle utilisent assez inefficacement les composants matériels et ne bénéficient donc pas des avancées en informatique, c'est-à-dire des cœurs de processeur multiples.

Exécution Parallèle

2.0 Qu'est-ce que l'exécution parallèle?

L'informatique parallèle est un élément clé de l'architecture informatique dont les origines remontent aussi loin que lefin des années 1950, bien que son idéation et sa théorie remontent même à l'époque de 1837. Par définition, le calcul parallèle fait référence à l'utilisation simultanée de plusieurs éléments de traitement pour résoudre une opération, dans laquelle une tâche plus grande et plus complexe est divisée en plus petites à compléter de manière plus efficace que de manière sérielle.

À l'origine seulement mis en œuvre dans les systèmes informatiques hautes performances, le calcul parallèle a évolué pour devenir le paradigme dominant dans l'architecture informatique d'aujourd'hui, alors que la demande de calcul a augmenté de manière exponentielle à l'ère d'Internet, exacerbée par les limitations de la mise à l'échelle de la fréquence dans les décennies précédentes.

Cette norme architecturale s'applique aux blockchains de la même manière, sauf que la tâche principale que les ordinateurs résolvent est le traitement et l'exécution des transactions, ou le transfert de valeur du contrat intelligent A au contrat intelligent B, d'où le terme exécution parallèle.

L'exécution parallèle signifie qu'au lieu de traiter les transactions de manière sérielle, une blockchain peut traiter simultanément plusieurs transactions non conflictuelles. Cela peut considérablement augmenter le débit d'un réseau blockchain, le rendant ainsi plus évolutif et efficace pour gérer des charges d'activité plus élevées et une demande d'espace de bloc.

Pour une analogie plus simple. considérez l'efficacité d'un supermarché avec plusieurs caisses pour les acheteurs à la caisse. contre juste une pour tout le monde.

Pourquoi l'exécution parallèle est-elle importante?

L'exécution parallèle dans les blockchains est conçue pour débloquer des efficacités dans la vitesse et les performances d'un réseau, surtout lorsque le réseau voit un trafic et une demande de ressources plus élevés. Dans le contexte des écosystèmes cryptographiques, l'exécution parallèle signifie que si Bob veut créer la dernière collection populaire de NFT, et qu'Alice veut acheter sa memecoin préférée, le réseau servira les deux utilisateurs sans compromettre la qualité des performances et donc l'expérience utilisateur.

Bien que cela puisse apparaître simplement comme une fonction intuitive de qualité de vie, les déblocages de performances réseau permis par l'exécution parallèle ouvrent la voie au développement de nouveaux et innovants cas d'utilisation et applications qui peuvent tirer parti de la latence faible et des volumes élevés, ce qui pose les bases de l'intégration de la prochaine cohorte de masse d'utilisateurs aux écosystèmes cryptographiques.

Comment fonctionne l'exécution parallèle ?

Bien que la prémisse de l'exécution parallèle soit relativement simple, les subtilités des conceptions des blockchains sous-jacentes affectent la manière dont le processus d'exécution parallèle se déroule. La caractéristique la plus pertinente pour la conception de blockchains avec une exécution parallèle est la capacité des transactions à accéder à l'état de son réseau sous-jacent, y compris les soldes des comptes, le stockage et les contrats intelligents.

L'exécution parallèle sur les blockchains peut être catégorisée comme étant soit déterministe, soit optimiste. L'exécution parallèle déterministe, utilisée par des blockchains comme Solana, nécessite intrinsèquement que les transactions déclarent toutes leurs dépendances mémoire à l'avance, c'est-à-dire quelles parties de l'état global elles souhaitent accéder à l'avance. Bien que cette étape crée un surcroît de travail pour les développeurs, de manière plus générale, elle permet au réseau de trier et d'identifier les transactions non conflictuelles avant leur exécution, créant ainsi un système optimisé, prévisible et efficace. En revanche, l'exécution parallèle optimiste est structurée pour traiter toutes les transactions en parallèle, en partant du postulat inhérent qu'il n'y a pas de conflits. Cela permet à la blockchain sous-jacente d'assurer une exécution plus rapide des transactions, bien que cela se fasse au prix d'une éventuelle ré-exécution ultérieure en cas de conflit. Si deux transactions conflictuelles sont soumises, le système peut alors les retraiter et les ré-exécuter soit en parallèle soit de manière séquentielle.

Afin de mieux comprendre les implications de ces subtilités de conception, il peut être utile d'analyser l'exécution parallèle à travers le prisme des équipes repoussant les limites de l'exécution parallèle aujourd'hui.

État de l'exécution parallèle aujourd'hui

Afin de mieux comprendre les implications de ces subtilités de conception, il peut être utile d'analyser l'exécution parallèle à travers le prisme des équipes repoussant aujourd'hui les limites de l'exécution parallèle.

3.1 Machine virtuelle Solana (SVM)

Solana a été le premier réseau blockchain conçu autour de l'exécution parallèle, inspiré par l'expérience précédente du fondateur Anatoly Yakovenko dans l'industrie des télécommunications. Solana vise à fournir une plateforme de développement qui fonctionne aussi rapidement que la physique le permet, c'est pourquoi la vitesse et l'efficacité débloquées par le calcul parallèle ont été un choix de conception simple et intuitif.

Un élément essentiel pour permettre des vitesses rapides et un débit élevé de Solana est Sealevel, l'environnement d'exécution parallèle des contrats intelligents du réseau. Contrairement aux environnements basés sur EVM et WASM, Sealevel utilise une architecture multi-thread, ce qui signifie qu'il peut traiter plusieurs transactions simultanément jusqu'à la capacité du cœur du validateur.

La clé pour permettre l'exécution parallèle de Solana est que lorsque qu'une transaction est activée, le réseau attribuera une liste d'instructions pour que cette transaction soit exécutée, notamment quels comptes et états accéder et quels changements apporter - ceci est essentiel pour déterminer quelles transactions ne sont pas conflictuelles et peuvent s'exécuter simultanément, ainsi que pour permettre aux transactions qui tentent d'accéder au même état de le faire simultanément.

Considérez l'efficacité que fournissent les étiquettes aux systèmes de bagages enregistrés dans les aéroports.

Solana utilise également Cloudbreak, son propre accountsDB personnalisé, pour stocker et gérer les données d'état afin de permettre des lectures et écritures concurrentes de transactions. Cloudbreak, optimisé pour l'exécution parallèle, s'étend horizontalement pour distribuer et gérer les données d'état sur plusieurs nœuds.

Grâce à son architecture parallèle, Solana peut gérer un grand nombre de transactions et exécuter rapidement, offrant ainsi des transactions avec une finalité quasi-instantanée. Solana gère entre 2 000 et 10 000 transactions par seconde (TPS) en moyenne aujourd'hui. De plus, les cas d'utilisation pour le SVM s'élargissent lentement mais sûrement, car des équipes comme Eclipse déploient une infrastructure de couche 2 qui vise à tirer parti du SVM en tant qu'environnement d'exécution.

3.2 EVM Parallèle

Le Parallel EVM décrit un nouvel environnement d'exécution pour les blockchains qui vise à apporter le "meilleur des deux mondes" des conceptions de Solana et d'Ethereum, avec la vitesse et les performances de Solana, et la sécurité et la liquidité d'Ethereum. En traitant les transactions en parallèle plutôt que séquentiellement selon la conception EVM traditionnelle, les EVM parallèles permettent aux développeurs de construire des applications sur un réseau très performant tout en pouvant tirer parti des connexions à la liquidité EVM et des outils de développement.

3.2.1 Réseau Sei

Sei Network est une blockchain de couche 1 open source compatible avec l'EVM qui héberge une variété d'applications décentralisées construites autour de hautes performances. Sei a été conçu pour offrir des vitesses rapides à faible coût pour les utilisateurs et les développeurs, et l'exécution parallèle est un élément clé permettant cette performance et cette UX. Actuellement, Sei propose des temps de confirmation de bloc de 390ms et a traité plus de 1,9 milliard de transactions sur son mainnet pacifique.

À l'origine, Sei utilisait un modèle d'exécution parallèle déterministe, dans lequel les contrats intelligents déclaraient à l'avance leur accès à l'état requis pour que le système exécute simultanément des transactions non conflictuelles. Avec le lancement de leur mise à niveau V2, Sei passe plutôt à un modèle parallèle optimiste, ce qui signifie que toutes les transactions seront traitées en parallèle dès leur soumission au réseau (étape d'exécution), puis seront examinées pour identifier des informations conflictuelles avec les transactions précédentes (étape de validation). En cas de deux transactions ou plus en conflit, c'est-à-dire de transactions tentant d'accéder au même état du réseau, Sei identifie ce point de conflit, puis relance les transactions soit en parallèle, soit séquentiellement en fonction de la nature du conflit.

Afin de stocker et de maintenir les données de transaction, Sei introduira également SeiDB, une base de données personnalisée qui vise à améliorer les lacunes de la version 1 en optimisant l'exécution parallèle. SeiDB vise à réduire les frais généraux liés au stockage de données redondantes et à maintenir une utilisation efficace du disque pour une meilleure performance du réseau. La version 2 réduit la quantité de métadonnées nécessaires à des fins de suivi et de stockage, et permet un journal des opérations préalable pour aider à la récupération des données en cas de panne.

Enfin, Sei a également récemment annoncé le lancement de sa pile parallèle, un cadre open-source permettant aux solutions de mise à l'échelle de la couche 2, c'est-à-dire les rollups, d'utiliser et de bénéficier de l'exécution parallèle.

3.2.2 Monad

Monad est une blockchain de couche 1 parallèle à venir qui apporte une compatibilité complète avec le bytecode et les RPC pour les applications et l'infrastructure Ethereum. Grâce à un certain nombre de mises en œuvre techniques innovantes, Monad vise à offrir des expériences plus interactives que les blockchains existantes tout en maintenant des coûts de transaction plus bas en optimisant les performances et la portabilité, avec des temps de bloc de 1 seconde et une finalité pouvant atteindre 10 000 TPS.

Monad met en œuvre une exécution parallèle et un pipeline superscalaire pour optimiser la vitesse et le débit des transactions. Tout comme Sei v2, Monad utilisera un modèle d'exécution optimiste, ce qui signifie que le réseau commence à exécuter toutes les transactions entrantes simultanément, puis analyse et valide les transactions pour rechercher des conflits et les réexécuter en conséquence, le but final étant que le résultat serait identique si les transactions avaient été exécutées séquentiellement.

Il est important de noter que pour maintenir la synchronicité avec Ethereum, Monad ordonne les transactions dans un bloc dans un ordre linéaire, chaque transaction étant mise à jour séquentiellement.

Afin de maintenir et d'accéder aux données de la blockchain de manière plus efficace que ce que les clients actuels d'Ethereum offrent, Monad a créé sa propre MonadDB personnalisée, développée nativement pour les blockchains. Monad DB exploite des fonctionnalités avancées du noyau Linux pour des opérations de disque asynchrones efficaces, éliminant les contraintes de l'accès d'entrée/sortie synchrone. MonadDB offre un accès asynchrone d'entrée/sortie (E/S asynchrone), une fonctionnalité clé permettant l'exécution parallèle, où le système peut commencer à traiter la transaction suivante tout en attendant de lire l'état pour une transaction antérieure.

Pour une analogie simple, considérez la préparation d'un repas multi-facettes (spaghetti aux boulettes de viande). Les étapes impliquées sont 1) la préparation d'une sauce, 2) la cuisson des boulettes de viande et c) la cuisson des pâtes. Un chef efficace commencerait par faire bouillir de l'eau pour les pâtes, puis préparer les ingrédients pour la sauce, puis jeter les pâtes dans l'eau bouillante, puis faire cuire la sauce, et enfin les boulettes de viande, plutôt que de faire chaque étape une par une, en terminant une tâche entièrement avant de passer à la suivante.

3.3 Déplacer

Move est un langage de programmation initialement développé par l'équipe de Facebook en 2019 pour son projet Diem désormais abandonné. Move a été conçu pour gérer de manière sécurisée les contrats intelligents et les données de transaction, éliminant ainsi les vecteurs d'attaque propres à d'autres langues tels que les attaques de réentrance.

Le MoveVM sert d'environnement d'exécution natif pour les blockchains basées sur Move, tirant parti de la parallélisation pour offrir des vitesses d'exécution de transactions plus rapides et une efficacité globale accrue.

3.3.1 Aptos

Aptos est une blockchain de couche 1 basée sur Move développée par des membres de l'ancien projet Diem, qui met en œuvre une exécution parallèle pour offrir un environnement haute performance aux développeurs d'applications. Aptos utilise Block-STM, une implémentation modifiée du mécanisme de contrôle de concurrence de la mémoire transactionnelle logicielle (STM).

Block-STM est un moteur d'exécution parallèle multi-thread qui permet une exécution parallèle optimiste. Les transactions sont pré-ordonnées et séquencées de manière stratégique à l'intérieur des blocs, ce qui est essentiel pour résoudre efficacement les conflits et ré-exécuter ces transactions. Des recherches menées par Aptos ont montré qu'il est théoriquement possible de prendre en charge jusqu'à 160K TPS en utilisant la parallélisation de Block-STM.

3.3.2 Sui

Similaire à Aptos, Sui est un blockchain de couche 1 développé par d'anciens membres du projet Diem, qui utilise le langage Move. Cependant, Sui utilise une implémentation personnalisée de Move qui modifie le modèle de stockage et les autorisations d'actifs du design original de Diem. En particulier, cela permet à Sui d'utiliser un modèle de stockage d'état pour représenter des transactions indépendantes sous forme d'objets. Chaque objet a un ID unique dans l'environnement d'exécution de Sui, et ce faisant, cela permet au système d'identifier facilement les transactions non conflictuelles et de les traiter en parallèle.

Similaire à Solana, Sui implémente une exécution parallèle déterministe, ce qui nécessite que les transactions indiquent à l'avance les comptes auxquels elles doivent accéder.

3.3.3 Laboratoires de Mouvement

Qu'est-ce qu'un Mouvement ?

Movement construit un ensemble d'outils de développement et de services d'infrastructure blockchain pour permettre aux développeurs d'accéder facilement aux avantages de la construction sur Move. En tant que fournisseur de services d'exécution en tant que service similaire à AWS pour les développeurs de Move, Movement met en œuvre la parallélisation en tant que fonctionnalité de conception principale pour permettre un débit plus élevé et une efficacité globale du réseau accrue. Le MoveVM est un environnement d'exécution modulaire qui permet aux réseaux blockchain d'étendre et d'ajuster leurs capacités de traitement des transactions au besoin pour pouvoir prendre en charge un volume croissant de transactions, renforçant leurs capacités à traiter et exécuter des transactions en parallèle.

Architecture MoveVM

Movement lancera également M2, un ZK-rollup qui sera interopérable avec les clients EVM et Move. M2 héritera du moteur de parallélisation Block-STM et devrait fournir des dizaines de milliers de TPS en conséquence.

Pensées de clôture

4.1 Défis Pour Les Systèmes Parallèles Aujourd'hui

Certaines questions importantes et considérations à méditer concernant le développement de blocs parallèles;

  • Quels compromis le réseau fait-il pour permettre de meilleures performances grâce à une exécution parallèle ?
    • Moins de validateurs sécurisant le réseau permettent des vitesses de vérification et d'exécution plus rapides, mais cela compromet-il la sécurité de la blockchain en rendant plus facile aux validateurs de collusion contre le réseau ?
    • Y a-t-il un nombre significatif de validateurs situés au même endroit ? C'est une stratégie courante pour minimiser la latence dans les systèmes cryptographiques et non cryptographiques, mais que se passe-t-il pour le réseau en cas de compromission de ce centre de données particulier ?
  • Pour les systèmes parallèles optimistes, le processus de réexécution des transactions non valides crée-t-il un goulot d’étranglement à mesure que le réseau évolue ? Comment cette efficacité est-elle testée et évaluée ?

À un niveau élevé, les blockchains parallèles sont confrontées au risque d'incohérences de registre, c'est-à-dire de double dépense et de changements dans l'ordre des transactions (en effet, c'est le principal avantage de l'exécution séquentielle). La parallélisation déterministe aborde cela en créant un système d'étiquetage interne pour les transactions sur la blockchain sous-jacente. Les blockchains mettant en œuvre un traitement optimiste doivent s'assurer que les mécanismes qu'elles utilisent pour valider et réexécuter les transactions sont sûrs et fonctionnels, et que les compromis réalisés en termes de performances peuvent être raisonnablement mis en œuvre.

4.2 Perspectives futures / Opportunités

L'histoire des ordinateurs nous a appris que les systèmes parallèles ont tendance à être plus efficaces et évolutifs au fil du temps que les systèmes séquentiels. L'essor des blockchains parallèles post-Solana souligne que cette notion s'applique également à l'infrastructure crypto. Même Vitalik y a fait allusion parallélisationcomme l’une des solutions clés potentielles pour améliorer récemment la scalabilité des rollups EVM. En gros, la croissance de l'adoption de la crypto/blockchain appelle à des systèmes plus optimaux que ce qui est disponible aujourd'hui, y compris des blockchains parallèles. Les récents problèmes du réseau Solana ont mis en évidence qu'il y a beaucoup de place pour améliorer le développement de blockchains parallèles. Alors que de plus en plus d'équipes cherchent à repousser les limites de la frontière onchain et à intégrer la prochaine cohorte massive d'utilisateurs et d'adoption aux applications et écosystèmes natifs de la blockchain, les modèles d'exécution parallèle fournissent un cadre intuitif pour la construction de systèmes capables de gérer efficacement des magnitudes d'activité réseau à une échelle qui correspond à celle des entreprises Web2 avec facilité.

Oeuvres citées

Avertissement:

  1. Cet article est repris de [ banc], Transmettre le titre original'Exécution parallèle: la prochaine génération de blockchains', Tous les droits d'auteur appartiennent à l'auteur original [PAUL TIMOFEEV, MIKE JIN, ET GABE TRAMBLE]. Si vous avez des objections à cette réimpression, veuillez contacter le Porte Apprendreéquipe, et ils s'en occuperont rapidement.

  2. Avertissement de responsabilité : Les points de vue et opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent pas un conseil en investissement.

  3. Les traductions de l'article dans d'autres langues sont réalisées par l'équipe Gate Learn. Sauf mention contraire, la copie, la distribution ou le plagiat des articles traduits est interdite.

Exécution parallèle : la prochaine génération de blockchains

Avancé5/10/2024, 10:43:24 AM
Shoal Research, une institution de recherche en cryptographie, a analysé les projets connexes actuels dans le domaine parallèle de la blockchain, y compris les progrès de Solana (SVM), le EVM parallèle (Sei, Monad) et MoveVM (Aptos, Sui, Movement), et a analysé les défis rencontrés dans ce domaine et les opportunités.

Prélude

1.0 Transactions Blockchain

Les blockchains sont des machines virtuelles, un modèle informatique basé sur un logiciel qui s'exécute sur un réseau distribué d'ordinateurs physiques auxquels n'importe qui peut se joindre, mais qu'il est extrêmement difficile pour une seule entité de contrôler. Le concept d'une blockchain a été pour la première fois mis par écrit dans le célèbre livre blanc du Bitcoin de Satoshi Nakomoto en 2008, en tant qu'infrastructure de base permettant des paiements pair à pair cryptographiquement sécurisés en Bitcoin. Les transactions sont aux blockchains ce que les journaux sont aux médias sociaux et aux entreprises Internet ; ils servent de registres d'activité pour ce réseau particulier, la différence clé étant que les transactions sur une blockchain sont immuables et souvent publiquement observables.

Mais qu'est-ce qu'une transaction exactement?

Les transactions sur les blockchains impliquent le transfert d'actifs numériques d'une adresse sur le grand livre distribué à une autre, sécurisé par l'utilisation de la cryptographie à clé publique. Les transactions peuvent être utilisées pour des transferts décentralisés de pairs à pairs, ou pour divers processus d'authentification et de vérification également.

Un exemple de transaction que tout le monde peut observer sur un explorateur de blocs comme SeiTrace

1.1 Comment fonctionnent les transactions sur la Blockchain

Lorsqu'une transaction est initiée, c'est-à-dire que Bob envoie des jetons à Alice, la transaction de Bob est diffusée sur le réseau de la blockchain sous-jacente. Par la suite, des clusters de nœuds spécialisés sur le réseau se mettent au travail pour vérifier et valider la transaction en tant que légitime. Une fois que suffisamment de ces nœuds ont vérifié le contenu de la transaction, la transaction est ajoutée à un bloc avec d'autres transactions d'utilisateurs. Une fois qu'un bloc est plein, il est ensuite ajouté à la chaîne, d'où le nom de 'blockchain'. La transaction de Bob fait désormais partie d'un registre sécurisé et transparent, et lui et Alice peuvent tous deux vérifier le contenu.

De manière générale, toutes les transactions de la blockchain contiennent des métadonnées qui aident les nœuds opérant et sécurisant le réseau à identifier et exécuter un ensemble donné d'instructions et de paramètres. Chaque transaction aura des données de haut niveau saisies par l'expéditeur d'origine, telles que le montant à transférer, l'adresse de destination et la signature numérique pour confirmer la transaction, ainsi que diverses données de bas niveau qui sont créées et attachées automatiquement, bien que ces données varient en fonction du réseau et du design.

Finalement, cependant, les processus impliqués en coulisses au niveau du réseau avant l'exécution de la transaction varient en fonction de la conception de la blockchain.

1.1.1 Mempool

Un pool de mémoire, ou mempool, est une caractéristique commune des conceptions de la blockchain, mise en œuvre par des réseaux de blockchain traditionnels tels que Bitcoin et Ethereum. Les mempools ne sont que des zones tampons, ou des 'salles d'attente', pour les transactions en attente qui doivent encore être ajoutées à un bloc et exécutées.

Pour mieux comprendre, nous pouvons expliquer le cycle de vie d'une transaction sur une blockchain qui utilise un mempool;

  1. L'utilisateur initie et signe une transaction.
  2. Les nœuds spécialisés participant au réseau blockchain vérifient que le contenu de la transaction est légitime et contient les paramètres appropriés.
  3. Une fois vérifiée, la transaction est routée vers le mempool public aux côtés d'autres transactions en attente.
  4. Finalement, en fonction des frais de gaz payés pour la transaction par rapport à d'autres transactions dans le mempool, la transaction en attente de notre utilisateur est sélectionnée avec un groupe d'autres transactions en attente pour former le prochain bloc sur la blockchain. À ce stade, notre statut de transaction affichera "Réussie".
  5. Après qu'un certain temps ou un seuil basé sur le bloc s'est écoulé, le bloc lui-même est finalisé et la transaction devient un journal immuable enregistré sur la blockchain, qui ne pourrait être compromis que en cas d'attaque de 51 %, une tâche extrêmement difficile à réaliser autrement.

1.1.2. Pas de Mempool (Solana)

Il est important de noter que certains blockchains, comme Solana, n'utilisent pas de mempool et peuvent plutôt transmettre les transactions directement au producteur de blocs afin de permettre une vitesse et un débit élevés grâce à une production continue de blocs.

Parcourons le cycle de vie d'une transaction sur une blockchain non-mempool :

  1. L'utilisateur initie et signe une transaction pour une application qu'il utilise.
  2. L'application route les informations de transaction vers le serveur d'appel de procédure à distance (RPC).
  3. Le fournisseur RPC envoie la transaction au producteur de bloc actuellement désigné, ainsi qu'aux trois producteurs suivants; il s'agit d'une mesure de précaution au cas où le leader actuel ne pourrait pas exécuter la transaction à temps. Solana utilise un calendrier de leader de créneau qui aide les RPC à acheminer les transactions plus facilement.
  4. Le producteur de blocs envoie ensuite la transaction signée aux nœuds de consensus pour vérification.
  5. Les nœuds de consensus votent pour vérifier le contenu de la transaction, et une fois terminée, le statut de la transaction est ensuite renvoyé à RPC > application > utilisateur en tant que "succès" ou "échec".
  6. Similaire aux blockchains basées sur le mempool, le bloc lui-même est finalisé après un certain temps ou après avoir atteint un seuil basé sur les blocs.

1.2 Exécution séquentielle

Les blockchains plus anciennes, à savoir Bitcoin et Ethereum, utilisent un mécanisme d'exécution séquentielle des transactions. Chaque transaction ajoutée à la blockchain provoque un changement dans l'état du réseau, et la VM est structurée pour ne traiter qu'un seul changement d'état à la fois à des fins de sécurité.

Cela a entraîné des goulots d'étranglement significatifs pour le débit du réseau sous-jacent, car le nombre de transactions pouvant être ajoutées au bloc est limité, ce qui entraîne des temps d'attente plus longs et des pics sans précédent des coûts de transaction qui peuvent rendre le réseau inutilisable par moments. De plus, les modèles d'exécution séquentielle utilisent assez inefficacement les composants matériels et ne bénéficient donc pas des avancées en informatique, c'est-à-dire des cœurs de processeur multiples.

Exécution Parallèle

2.0 Qu'est-ce que l'exécution parallèle?

L'informatique parallèle est un élément clé de l'architecture informatique dont les origines remontent aussi loin que lefin des années 1950, bien que son idéation et sa théorie remontent même à l'époque de 1837. Par définition, le calcul parallèle fait référence à l'utilisation simultanée de plusieurs éléments de traitement pour résoudre une opération, dans laquelle une tâche plus grande et plus complexe est divisée en plus petites à compléter de manière plus efficace que de manière sérielle.

À l'origine seulement mis en œuvre dans les systèmes informatiques hautes performances, le calcul parallèle a évolué pour devenir le paradigme dominant dans l'architecture informatique d'aujourd'hui, alors que la demande de calcul a augmenté de manière exponentielle à l'ère d'Internet, exacerbée par les limitations de la mise à l'échelle de la fréquence dans les décennies précédentes.

Cette norme architecturale s'applique aux blockchains de la même manière, sauf que la tâche principale que les ordinateurs résolvent est le traitement et l'exécution des transactions, ou le transfert de valeur du contrat intelligent A au contrat intelligent B, d'où le terme exécution parallèle.

L'exécution parallèle signifie qu'au lieu de traiter les transactions de manière sérielle, une blockchain peut traiter simultanément plusieurs transactions non conflictuelles. Cela peut considérablement augmenter le débit d'un réseau blockchain, le rendant ainsi plus évolutif et efficace pour gérer des charges d'activité plus élevées et une demande d'espace de bloc.

Pour une analogie plus simple. considérez l'efficacité d'un supermarché avec plusieurs caisses pour les acheteurs à la caisse. contre juste une pour tout le monde.

Pourquoi l'exécution parallèle est-elle importante?

L'exécution parallèle dans les blockchains est conçue pour débloquer des efficacités dans la vitesse et les performances d'un réseau, surtout lorsque le réseau voit un trafic et une demande de ressources plus élevés. Dans le contexte des écosystèmes cryptographiques, l'exécution parallèle signifie que si Bob veut créer la dernière collection populaire de NFT, et qu'Alice veut acheter sa memecoin préférée, le réseau servira les deux utilisateurs sans compromettre la qualité des performances et donc l'expérience utilisateur.

Bien que cela puisse apparaître simplement comme une fonction intuitive de qualité de vie, les déblocages de performances réseau permis par l'exécution parallèle ouvrent la voie au développement de nouveaux et innovants cas d'utilisation et applications qui peuvent tirer parti de la latence faible et des volumes élevés, ce qui pose les bases de l'intégration de la prochaine cohorte de masse d'utilisateurs aux écosystèmes cryptographiques.

Comment fonctionne l'exécution parallèle ?

Bien que la prémisse de l'exécution parallèle soit relativement simple, les subtilités des conceptions des blockchains sous-jacentes affectent la manière dont le processus d'exécution parallèle se déroule. La caractéristique la plus pertinente pour la conception de blockchains avec une exécution parallèle est la capacité des transactions à accéder à l'état de son réseau sous-jacent, y compris les soldes des comptes, le stockage et les contrats intelligents.

L'exécution parallèle sur les blockchains peut être catégorisée comme étant soit déterministe, soit optimiste. L'exécution parallèle déterministe, utilisée par des blockchains comme Solana, nécessite intrinsèquement que les transactions déclarent toutes leurs dépendances mémoire à l'avance, c'est-à-dire quelles parties de l'état global elles souhaitent accéder à l'avance. Bien que cette étape crée un surcroît de travail pour les développeurs, de manière plus générale, elle permet au réseau de trier et d'identifier les transactions non conflictuelles avant leur exécution, créant ainsi un système optimisé, prévisible et efficace. En revanche, l'exécution parallèle optimiste est structurée pour traiter toutes les transactions en parallèle, en partant du postulat inhérent qu'il n'y a pas de conflits. Cela permet à la blockchain sous-jacente d'assurer une exécution plus rapide des transactions, bien que cela se fasse au prix d'une éventuelle ré-exécution ultérieure en cas de conflit. Si deux transactions conflictuelles sont soumises, le système peut alors les retraiter et les ré-exécuter soit en parallèle soit de manière séquentielle.

Afin de mieux comprendre les implications de ces subtilités de conception, il peut être utile d'analyser l'exécution parallèle à travers le prisme des équipes repoussant les limites de l'exécution parallèle aujourd'hui.

État de l'exécution parallèle aujourd'hui

Afin de mieux comprendre les implications de ces subtilités de conception, il peut être utile d'analyser l'exécution parallèle à travers le prisme des équipes repoussant aujourd'hui les limites de l'exécution parallèle.

3.1 Machine virtuelle Solana (SVM)

Solana a été le premier réseau blockchain conçu autour de l'exécution parallèle, inspiré par l'expérience précédente du fondateur Anatoly Yakovenko dans l'industrie des télécommunications. Solana vise à fournir une plateforme de développement qui fonctionne aussi rapidement que la physique le permet, c'est pourquoi la vitesse et l'efficacité débloquées par le calcul parallèle ont été un choix de conception simple et intuitif.

Un élément essentiel pour permettre des vitesses rapides et un débit élevé de Solana est Sealevel, l'environnement d'exécution parallèle des contrats intelligents du réseau. Contrairement aux environnements basés sur EVM et WASM, Sealevel utilise une architecture multi-thread, ce qui signifie qu'il peut traiter plusieurs transactions simultanément jusqu'à la capacité du cœur du validateur.

La clé pour permettre l'exécution parallèle de Solana est que lorsque qu'une transaction est activée, le réseau attribuera une liste d'instructions pour que cette transaction soit exécutée, notamment quels comptes et états accéder et quels changements apporter - ceci est essentiel pour déterminer quelles transactions ne sont pas conflictuelles et peuvent s'exécuter simultanément, ainsi que pour permettre aux transactions qui tentent d'accéder au même état de le faire simultanément.

Considérez l'efficacité que fournissent les étiquettes aux systèmes de bagages enregistrés dans les aéroports.

Solana utilise également Cloudbreak, son propre accountsDB personnalisé, pour stocker et gérer les données d'état afin de permettre des lectures et écritures concurrentes de transactions. Cloudbreak, optimisé pour l'exécution parallèle, s'étend horizontalement pour distribuer et gérer les données d'état sur plusieurs nœuds.

Grâce à son architecture parallèle, Solana peut gérer un grand nombre de transactions et exécuter rapidement, offrant ainsi des transactions avec une finalité quasi-instantanée. Solana gère entre 2 000 et 10 000 transactions par seconde (TPS) en moyenne aujourd'hui. De plus, les cas d'utilisation pour le SVM s'élargissent lentement mais sûrement, car des équipes comme Eclipse déploient une infrastructure de couche 2 qui vise à tirer parti du SVM en tant qu'environnement d'exécution.

3.2 EVM Parallèle

Le Parallel EVM décrit un nouvel environnement d'exécution pour les blockchains qui vise à apporter le "meilleur des deux mondes" des conceptions de Solana et d'Ethereum, avec la vitesse et les performances de Solana, et la sécurité et la liquidité d'Ethereum. En traitant les transactions en parallèle plutôt que séquentiellement selon la conception EVM traditionnelle, les EVM parallèles permettent aux développeurs de construire des applications sur un réseau très performant tout en pouvant tirer parti des connexions à la liquidité EVM et des outils de développement.

3.2.1 Réseau Sei

Sei Network est une blockchain de couche 1 open source compatible avec l'EVM qui héberge une variété d'applications décentralisées construites autour de hautes performances. Sei a été conçu pour offrir des vitesses rapides à faible coût pour les utilisateurs et les développeurs, et l'exécution parallèle est un élément clé permettant cette performance et cette UX. Actuellement, Sei propose des temps de confirmation de bloc de 390ms et a traité plus de 1,9 milliard de transactions sur son mainnet pacifique.

À l'origine, Sei utilisait un modèle d'exécution parallèle déterministe, dans lequel les contrats intelligents déclaraient à l'avance leur accès à l'état requis pour que le système exécute simultanément des transactions non conflictuelles. Avec le lancement de leur mise à niveau V2, Sei passe plutôt à un modèle parallèle optimiste, ce qui signifie que toutes les transactions seront traitées en parallèle dès leur soumission au réseau (étape d'exécution), puis seront examinées pour identifier des informations conflictuelles avec les transactions précédentes (étape de validation). En cas de deux transactions ou plus en conflit, c'est-à-dire de transactions tentant d'accéder au même état du réseau, Sei identifie ce point de conflit, puis relance les transactions soit en parallèle, soit séquentiellement en fonction de la nature du conflit.

Afin de stocker et de maintenir les données de transaction, Sei introduira également SeiDB, une base de données personnalisée qui vise à améliorer les lacunes de la version 1 en optimisant l'exécution parallèle. SeiDB vise à réduire les frais généraux liés au stockage de données redondantes et à maintenir une utilisation efficace du disque pour une meilleure performance du réseau. La version 2 réduit la quantité de métadonnées nécessaires à des fins de suivi et de stockage, et permet un journal des opérations préalable pour aider à la récupération des données en cas de panne.

Enfin, Sei a également récemment annoncé le lancement de sa pile parallèle, un cadre open-source permettant aux solutions de mise à l'échelle de la couche 2, c'est-à-dire les rollups, d'utiliser et de bénéficier de l'exécution parallèle.

3.2.2 Monad

Monad est une blockchain de couche 1 parallèle à venir qui apporte une compatibilité complète avec le bytecode et les RPC pour les applications et l'infrastructure Ethereum. Grâce à un certain nombre de mises en œuvre techniques innovantes, Monad vise à offrir des expériences plus interactives que les blockchains existantes tout en maintenant des coûts de transaction plus bas en optimisant les performances et la portabilité, avec des temps de bloc de 1 seconde et une finalité pouvant atteindre 10 000 TPS.

Monad met en œuvre une exécution parallèle et un pipeline superscalaire pour optimiser la vitesse et le débit des transactions. Tout comme Sei v2, Monad utilisera un modèle d'exécution optimiste, ce qui signifie que le réseau commence à exécuter toutes les transactions entrantes simultanément, puis analyse et valide les transactions pour rechercher des conflits et les réexécuter en conséquence, le but final étant que le résultat serait identique si les transactions avaient été exécutées séquentiellement.

Il est important de noter que pour maintenir la synchronicité avec Ethereum, Monad ordonne les transactions dans un bloc dans un ordre linéaire, chaque transaction étant mise à jour séquentiellement.

Afin de maintenir et d'accéder aux données de la blockchain de manière plus efficace que ce que les clients actuels d'Ethereum offrent, Monad a créé sa propre MonadDB personnalisée, développée nativement pour les blockchains. Monad DB exploite des fonctionnalités avancées du noyau Linux pour des opérations de disque asynchrones efficaces, éliminant les contraintes de l'accès d'entrée/sortie synchrone. MonadDB offre un accès asynchrone d'entrée/sortie (E/S asynchrone), une fonctionnalité clé permettant l'exécution parallèle, où le système peut commencer à traiter la transaction suivante tout en attendant de lire l'état pour une transaction antérieure.

Pour une analogie simple, considérez la préparation d'un repas multi-facettes (spaghetti aux boulettes de viande). Les étapes impliquées sont 1) la préparation d'une sauce, 2) la cuisson des boulettes de viande et c) la cuisson des pâtes. Un chef efficace commencerait par faire bouillir de l'eau pour les pâtes, puis préparer les ingrédients pour la sauce, puis jeter les pâtes dans l'eau bouillante, puis faire cuire la sauce, et enfin les boulettes de viande, plutôt que de faire chaque étape une par une, en terminant une tâche entièrement avant de passer à la suivante.

3.3 Déplacer

Move est un langage de programmation initialement développé par l'équipe de Facebook en 2019 pour son projet Diem désormais abandonné. Move a été conçu pour gérer de manière sécurisée les contrats intelligents et les données de transaction, éliminant ainsi les vecteurs d'attaque propres à d'autres langues tels que les attaques de réentrance.

Le MoveVM sert d'environnement d'exécution natif pour les blockchains basées sur Move, tirant parti de la parallélisation pour offrir des vitesses d'exécution de transactions plus rapides et une efficacité globale accrue.

3.3.1 Aptos

Aptos est une blockchain de couche 1 basée sur Move développée par des membres de l'ancien projet Diem, qui met en œuvre une exécution parallèle pour offrir un environnement haute performance aux développeurs d'applications. Aptos utilise Block-STM, une implémentation modifiée du mécanisme de contrôle de concurrence de la mémoire transactionnelle logicielle (STM).

Block-STM est un moteur d'exécution parallèle multi-thread qui permet une exécution parallèle optimiste. Les transactions sont pré-ordonnées et séquencées de manière stratégique à l'intérieur des blocs, ce qui est essentiel pour résoudre efficacement les conflits et ré-exécuter ces transactions. Des recherches menées par Aptos ont montré qu'il est théoriquement possible de prendre en charge jusqu'à 160K TPS en utilisant la parallélisation de Block-STM.

3.3.2 Sui

Similaire à Aptos, Sui est un blockchain de couche 1 développé par d'anciens membres du projet Diem, qui utilise le langage Move. Cependant, Sui utilise une implémentation personnalisée de Move qui modifie le modèle de stockage et les autorisations d'actifs du design original de Diem. En particulier, cela permet à Sui d'utiliser un modèle de stockage d'état pour représenter des transactions indépendantes sous forme d'objets. Chaque objet a un ID unique dans l'environnement d'exécution de Sui, et ce faisant, cela permet au système d'identifier facilement les transactions non conflictuelles et de les traiter en parallèle.

Similaire à Solana, Sui implémente une exécution parallèle déterministe, ce qui nécessite que les transactions indiquent à l'avance les comptes auxquels elles doivent accéder.

3.3.3 Laboratoires de Mouvement

Qu'est-ce qu'un Mouvement ?

Movement construit un ensemble d'outils de développement et de services d'infrastructure blockchain pour permettre aux développeurs d'accéder facilement aux avantages de la construction sur Move. En tant que fournisseur de services d'exécution en tant que service similaire à AWS pour les développeurs de Move, Movement met en œuvre la parallélisation en tant que fonctionnalité de conception principale pour permettre un débit plus élevé et une efficacité globale du réseau accrue. Le MoveVM est un environnement d'exécution modulaire qui permet aux réseaux blockchain d'étendre et d'ajuster leurs capacités de traitement des transactions au besoin pour pouvoir prendre en charge un volume croissant de transactions, renforçant leurs capacités à traiter et exécuter des transactions en parallèle.

Architecture MoveVM

Movement lancera également M2, un ZK-rollup qui sera interopérable avec les clients EVM et Move. M2 héritera du moteur de parallélisation Block-STM et devrait fournir des dizaines de milliers de TPS en conséquence.

Pensées de clôture

4.1 Défis Pour Les Systèmes Parallèles Aujourd'hui

Certaines questions importantes et considérations à méditer concernant le développement de blocs parallèles;

  • Quels compromis le réseau fait-il pour permettre de meilleures performances grâce à une exécution parallèle ?
    • Moins de validateurs sécurisant le réseau permettent des vitesses de vérification et d'exécution plus rapides, mais cela compromet-il la sécurité de la blockchain en rendant plus facile aux validateurs de collusion contre le réseau ?
    • Y a-t-il un nombre significatif de validateurs situés au même endroit ? C'est une stratégie courante pour minimiser la latence dans les systèmes cryptographiques et non cryptographiques, mais que se passe-t-il pour le réseau en cas de compromission de ce centre de données particulier ?
  • Pour les systèmes parallèles optimistes, le processus de réexécution des transactions non valides crée-t-il un goulot d’étranglement à mesure que le réseau évolue ? Comment cette efficacité est-elle testée et évaluée ?

À un niveau élevé, les blockchains parallèles sont confrontées au risque d'incohérences de registre, c'est-à-dire de double dépense et de changements dans l'ordre des transactions (en effet, c'est le principal avantage de l'exécution séquentielle). La parallélisation déterministe aborde cela en créant un système d'étiquetage interne pour les transactions sur la blockchain sous-jacente. Les blockchains mettant en œuvre un traitement optimiste doivent s'assurer que les mécanismes qu'elles utilisent pour valider et réexécuter les transactions sont sûrs et fonctionnels, et que les compromis réalisés en termes de performances peuvent être raisonnablement mis en œuvre.

4.2 Perspectives futures / Opportunités

L'histoire des ordinateurs nous a appris que les systèmes parallèles ont tendance à être plus efficaces et évolutifs au fil du temps que les systèmes séquentiels. L'essor des blockchains parallèles post-Solana souligne que cette notion s'applique également à l'infrastructure crypto. Même Vitalik y a fait allusion parallélisationcomme l’une des solutions clés potentielles pour améliorer récemment la scalabilité des rollups EVM. En gros, la croissance de l'adoption de la crypto/blockchain appelle à des systèmes plus optimaux que ce qui est disponible aujourd'hui, y compris des blockchains parallèles. Les récents problèmes du réseau Solana ont mis en évidence qu'il y a beaucoup de place pour améliorer le développement de blockchains parallèles. Alors que de plus en plus d'équipes cherchent à repousser les limites de la frontière onchain et à intégrer la prochaine cohorte massive d'utilisateurs et d'adoption aux applications et écosystèmes natifs de la blockchain, les modèles d'exécution parallèle fournissent un cadre intuitif pour la construction de systèmes capables de gérer efficacement des magnitudes d'activité réseau à une échelle qui correspond à celle des entreprises Web2 avec facilité.

Oeuvres citées

Avertissement:

  1. Cet article est repris de [ banc], Transmettre le titre original'Exécution parallèle: la prochaine génération de blockchains', Tous les droits d'auteur appartiennent à l'auteur original [PAUL TIMOFEEV, MIKE JIN, ET GABE TRAMBLE]. Si vous avez des objections à cette réimpression, veuillez contacter le Porte Apprendreéquipe, et ils s'en occuperont rapidement.

  2. Avertissement de responsabilité : Les points de vue et opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent pas un conseil en investissement.

  3. Les traductions de l'article dans d'autres langues sont réalisées par l'équipe Gate Learn. Sauf mention contraire, la copie, la distribution ou le plagiat des articles traduits est interdite.

Начните торговать сейчас
Зарегистрируйтесь сейчас и получите ваучер на
$100
!