Qu'est-ce que le partage ? Ce concept de mise à l'échelle Ethereum expliqué
Alors que le débat sur la mise à l’échelle des crypto-monnaies se poursuit, certaines solutions potentielles sont en fait en développement depuis un certain temps maintenant.
Plus précisément, dans le cas d’Ethereum, où l’accent est mis sur la décentralisation et la sécurité au détriment de l’évolutivité, l’application du sharding en conjonction avec la mise en œuvre du consensus Proof of Stake est considérée comme le mécanisme indispensable par lequel le réseau peut évoluer pour niveaux pratiques pour les applications tout en conservant sa décentralisation et sa sécurité.
Le sharding est un sujet complexe, en particulier lorsqu’il est appliqué à un réseau peer to peer décentralisé tel qu’Ethereum où l’état global du réseau est constamment mis à jour.
Alors, qu’est-ce que le sharding exactement et comment peut-il aider les réseaux blockchain à évoluer ?
Contexte du partage et de l’informatique distribuée
Le sharding est en fait beaucoup plus ancien que la technologie blockchain et a été mis en œuvre dans une variété de systèmes, des optimisations de bases de données commerciales à la base de données mondiale Spanner de Google.
- Essentiellement, le partitionnement est une méthode particulière de partitionnement horizontal des données dans une base de données
- Plus généralement, la base de données est divisée en petits morceaux appelés « shards », qui, une fois agrégés, forment la base de données d’origine
- Dans les réseaux blockchain distribués, le réseau se compose d’une série de nœuds connectés dans un format peer to peer, sans autorité centrale
- Comme c’est le cas avec les systèmes de blockchain actuels, chaque nœud stocke tous les états du réseau et traite toutes les transactions
- Bien que cela offre une sécurité de haut niveau grâce à la décentralisation, en particulier dans les systèmes de preuve de travail tels que Bitcoin et Ethereum, cela entraîne des problèmes de mise à l’échelle légitimes
Éclat d’Ethereum
En utilisant Ethereum comme exemple, un nœud complet du réseau Ethereum stocke l’état complet de la blockchain, y compris les soldes de compte, le stockage et le code de contrat.
Malheureusement, à mesure que la taille du réseau augmente à un rythme exponentiel, le consensus n’augmente que de manière linéaire. Cette limitation est due à la communication nécessaire entre les nœuds nécessaires pour parvenir à un consensus.
Les nœuds du réseau n’ont pas de privilèges spéciaux et chaque nœud du réseau stocke et traite chaque transaction. En conséquence, dans un réseau de la taille d’Ethereum, des problèmes tels que les coûts élevés du gaz et les délais de confirmation des transactions plus longs deviennent des problèmes notables lorsque le réseau est tendu. Le réseau est seulement aussi rapide que les nœuds individuels plutôt que la somme de ses parties.
Le sharding aide à atténuer ces problèmes en fournissant une solution intéressante mais complexe. Le concept consiste à regrouper des sous-ensembles de nœuds en fragments qui, à leur tour, traitent les transactions spécifiques à ce fragment. Il permet au système de traiter de nombreuses transactions en parallèle, augmentant ainsi considérablement le débit.
Une façon plus simple de le dire serait d’imaginer la division des États-Unis en États.
Bien que chaque État (un fragment dans ce cas) fasse partie des États-Unis plus larges (réseau Ethereum), ils ont leurs propres règles, limites et sous-ensembles de populations spécifiques. Cependant, ils partagent une langue et une culture universelles dans le cadre de leur réseau plus large qui constitue le pays.
Ou mieux encore, selon les propres mots de Vitalik Buterin :
ils devront utiliser une sorte de protocole.
Comme vous pouvez le constater, le concept de fragmentation du réseau en éléments plus efficaces permet au réseau de fonctionner comme la somme de ses parties, plutôt que d’être limité par la vitesse de chaque nœud individuel.
Comment fonctionne le sharding dans les blockchains ?
Nous continuerons à utiliser Ethereum comme exemple dans ce domaine, car il s’agit des tentatives de partitionnement les plus connues et les plus ardues dans le domaine de la blockchain, car les développeurs d’Ethereum mettent en œuvre ce que l’on appelle le « partage d’état ».
L’état actuel de la blockchain Ethereum est connu sous le nom d ‘«état global» et c’est ce que tout le monde peut voir lorsqu’il regarde la blockchain à une instance spécifique.
La partie délicate de la mise en œuvre du sharding dans Ethereum est qu’en divisant les nœuds en sous-ensembles plus petits, ces sous-ensembles doivent être capables de traiter des ensembles spécifiques de transactions tout en mettant à jour simultanément l’état du réseau, tout en s’assurant qu’il est valide.
Le sharding dans Ethereum est censé être mis en œuvre dans un déploiement en deux phases, plus que probablement après la mise en œuvre de la preuve de participation dans le réseau. La première phase sera la couche de données consistant en un consensus sur les données contenues dans les fragments. La deuxième phase est la couche d’état. Tout cela est très fluide, donc une ventilation générale de la façon dont cela peut fonctionner est ci-dessous.
Ethereum décompose le réseau en fragments spécifiques. Chaque partition se voit attribuer un groupe spécifique de transactions qui est déterminé en regroupant des comptes spécifiques (y compris des contrats intelligents) dans une partition. Chaque groupe de transactions a un en-tête et un corps qui se composent des éléments suivants.
- L’ID de partition du groupe de transactions
- Affectation de validateurs par échantillonnage aléatoire (vérifier les transactions dans le shard)
- State Root (état de la racine merkle du fragment avant et après l’ajout des transactions)
Corps
- Toutes les transactions appartenant au groupe de transactions qui font partie de la partition spécifique
Les transactions sont spécifiques à chaque partition et se produisent entre les comptes natifs de cette partition.
Lorsque les transactions sont vérifiées, l’état du réseau change et les soldes des comptes, le stockage, etc. sont mis à jour. Pour que le groupe de transactions soit vérifié comme étant valide, la racine pré-état du groupe de transactions doit correspondre à la racine de partition dans l’état global. S’ils correspondent, le groupe de transactions est validé et l’état global est mis à jour via la racine d’état de l’ID de partition particulière.
Au lieu de ne contenir qu’une racine d’état, chaque bloc de la blockchain Ethereum contient désormais à la fois une racine d’état et la racine du groupe de transactions. La racine du groupe de transactions est la racine merkle de tous les groupes de transactions des fragments spécifiques pour ce bloc de transactions.
Fondamentalement, il existe une racine merkle de tous les différents fragments contenant les groupes de transactions mis à jour et vérifiés. Cette racine est stockée dans la blockchain avec la racine d’état mise à jour.
L’utilisation des concepts d’arbre Merkle dans cette structure est essentielle pour assurer la validité de la blockchain. Comprendre le fonctionnement d’un arbre merkle et plus particulièrement d’une racine merkle peut vous aider à saisir ces concepts beaucoup plus facilement.
Lire : Qu’est-ce qu’un arbre Merkle ?
Le consensus au sein d’un fragment est atteint grâce à un consensus de preuve de participation de nœuds sélectionnés au hasard qui sont appliqués à un fragment pour un tour de consensus spécifique.
Cela fournit non seulement la finalité du consensus, qui est nécessaire au sein des fragments, mais fournit également une défense particulière contre une attaque à laquelle une blockchain Proof of Work serait susceptible dans ce cas.
La puissance de hachage requise pour dépasser un fragment spécifique dans un réseau fragmenté PoW est considérablement réduite et la possibilité pour un acteur malveillant de prendre le contrôle d’un fragment grâce à la puissance de calcul est réalisable.
Grâce à cela, le mauvais acteur pourrait attaquer d’autres fragments via le protocole de communication qui est l’une des caractéristiques les plus compliquées et les plus importantes de l’architecture de partitionnement. La sélection par échantillonnage aléatoire des validateurs au sein d’un fragment parvient à étouffer ce type d’attaque, car un mauvais acteur ne saura pas dans quel fragment il est placé avant d’y être réellement placé.
En outre, un échantillonnage aléatoire sera utilisé pour sélectionner les validateurs qui valident réellement à partir de cet ensemble de validation aléatoire.
Le protocole de communication est essentiel au bon fonctionnement de l’architecture de partitionnement dans le système. Vous pouvez considérer le protocole de communication comme le langage universel qui est cohérent entre les États dans le cadre de l’ensemble des États-Unis.
Cependant, la conception de ce protocole est très difficile et doit être effectuée afin qu’il ne soit utilisé que lorsque cela est nécessaire. Cela devient nécessaire lorsqu’un nœud spécifique nécessite des informations qui ne sont pas stockées dans son propre fragment et doit trouver le fragment avec les informations requises. Cette communication est connue sous le nom de communication entre fragments.
La communication inter-fragments est obtenue en appliquant le concept de reçus de transaction. Le reçu d’une transaction est stocké dans une racine merkle qui peut être facilement vérifiée mais qui ne fait pas partie de la racine d’état.
Le fragment recevant une transaction d’un autre fragment vérifie la racine merkle pour s’assurer que le reçu n’a pas été dépensé. Essentiellement, les reçus sont stockés dans une mémoire partagée qui peut être vérifiée par d’autres fragments, mais pas altérée. Par conséquent, grâce à un stockage distribué des reçus, les fragments peuvent communiquer entre eux.
Le partage va de l’avant
Le sharding dans Ethereum devrait être mis en œuvre après la mise à niveau de Casper PoS. Récemment, il y a eu quelques développements concernant Ethereum 2.0 qui impliquent la mise en œuvre à la fois de Casper et du sharding.
Sharding a également été mis en œuvre dans quelques autres plates-formes, notamment Zilliqa. Cependant, Zilliqa n’implémente pas le partage d’état pour le moment et se concentre plutôt sur la fourniture d’une chaîne de blocs à haut débit en utilisant le partage de transaction et de calcul.
Lisez notre guide de Zilliqa
Conclusion
Sharding sert à offrir des solutions prometteuses à l’éléphant dans la salle des plates-formes blockchain en ce moment, l’évolutivité.
Alors que le réseau Lightning de Bitcoin est en phase de test et a montré des progrès très prometteurs jusqu’à présent, la solution d’Ethereum apporte avec elle des défis uniques car elle est considérée comme un ordinateur mondial qui est Turing complet.
Le sharding ne fonctionnera directement qu’au niveau du protocole, donc pour l’utilisateur final ou le développeur dapp, il n’est peut-être pas nécessairement pertinent d’en savoir plus.
Quoi qu’il en soit, la tentative d’Ethereum de partitionnement d’état pour un vaste réseau décentralisé est une entreprise impressionnante et constituera un énorme exploit si elle est mise en œuvre avec succès.