Découverte de « Turbine » : le système de transmission de l’information propre à Solana (SOL)

Solana, sa blockchain et son écosystème continuent de faire parler d’eux ! Afin de mieux comprendre les fondamentaux techniques du projet, nous nous penchons aujourd’hui sur son système de propagation des blocs, Turbine.

Cet article vous est proposé dans le cadre d’une campagne de communication éducative, et soutenue par Solana.

Solana repose sur une innovation majeure, la preuve d’histoire. L’écoulement du temps est ainsi directement encodé au sein des messages qui transitent par le réseau. Avec son mécanisme de consensus par preuve d’enjeu, Tower BFT, cette technique permet de gagner un temps précieux.

Mais la mesure du temps n’est pas le seul domaine où Solana innove. Afin d’obtenir des performances spectaculaires, l’équipe de développement de Solana a également conçu son propre mécanisme de propagation des blocs.

Inspiré par le protocole BitTorrent, Turbine permet de réduire drastiquement le temps de propagation des blocs. Il s’agit de s’attaquer au fameux trilemme de la scalabilité mis en lumière par Vitalik Buterin.

Le trilemme de la scalabilité

Le trilemme de la scalabilité stipule qu’un système distribué ne peut assurer tout au plus que deux des trois propriétés suivantes :

  • La décentralisation de la production des blocs (qui est la raison d’être d’une blockchain) ;
  • La sécurité du réseau (sa résistance face aux attaques, ce qui est obligatoire) ;
  • La scalabilité du réseau (sa capacité à soutenir la montée en charge, liée au nombre de transactions que le réseau peut traiter dans un intervalle de temps donné).
Trilemme scalabilité blockchain

Toute registre distribué ou réseau blockchain est donc conçu autour d’un compromis entre ces trois propriétés. Depuis l’apparition de Bitcoin, les blockchains tentent de résoudre ce fameux trilemme pour s’approcher au plus près de l’idéal. L’obtention d’une meilleure scalabilité se fait généralement au détriment de la décentralisation.

La bande passante des nœuds d’un réseau est donc un facteur limitant sa scalabilité. Le délai de propagation des données entre tous les nœuds augmente avec leur nombre. Il faut donc trouver une méthode pour optimiser la propagation des informations. Il en existe de nombreuses, adaptées au cas d’usage du système distribué considéré.

Turbine est la technique des créateurs de Solana pour résoudre le trilemme de la scalabilité.

Turbine : optimiser la diffusion de l’information

Considérons un réseau distribué « correctement » décentralisé, composé de plusieurs dizaines de milliers de nœuds. Afin d’avoir un haut débit de transactions, il faut assurer la propagation de grande quantités de données à travers un grand nombre de nœuds. L’approche basique où le leader des nœuds validateurs établit une connexion avec chaque nœud ne peut pas fonctionner. Il faudrait une bande passante incroyablement élevée.

Sur le réseau Bitcoin, les données sont propagées à travers les nœuds via un protocole de bavardage (gossip protocol). Chaque nœud établit une connexion avec 8 à 10 pairs et leur transmet les données. Ces derniers transmettent ensuite à leur tour les informations à leurs pairs.

Sur Solana, la technique de propagation de l’information s’inspire du protocole BitTorrent, moyennant quelques différences.

Leader, validateurs et voisinages

Tout d’abord, les données sont transmises via UDP (protocole de datagramme utilisateur en français). Ce dernier a la particularité de ne pas nécessiter de communication préalable entre les nœuds avant d’assurer la transmission de l’information. Les données sont acheminées sous forme de datagrammes. Ce sont des paquets dont l’en-tête de 64 bits est définie par des paramètres simples : port source, port de destination, longueur du segment, somme de contrôle.

Via l’UDP, Turbine est donc optimisé pour le streaming de données. Les données sont segmentées en paquets de 64 ko. Les producteurs de blocs transmettent alors ces paquets selon un chemin aléatoire sur le réseau. Par exemple, un bloc de 128 Mo sera découpé en 2000 paquets de 64 ko, et le leader enverra chaque paquet à un nœud validateur différent.

Ensuite, chaque validateur transmettra son paquet à un groupe de validateurs appelé “voisinage” :

Solana - Turbine - Voisinages

Le réseau Solana peut alors être perçu comme une arborescence de voisinages :

Solana - Turbine - Arborescence des voisinages
Un arbre de voisinages à trois niveaux

Chaque voisinage doit renvoyer une partie de ses données à chaque voisinage situé au-dessous :

Solana - Turbine - Transmission des données

Cette arborescence des voisinages assure une transmission rapide de l’information. Par exemple, pour un réseau à trois niveaux et des voisinages composés de 200 validateurs, l’information peut être transmise à 40 000 nœuds en seulement deux sauts, à partir d’un leader unique. Si chaque saut présente une latence de 100 ms, l’information est transmise à tout le réseau en 200 ms seulement.

L’algorithme s’assure que les validateurs possédant les plus gros stakes sont dans des voisinages proches du leader.

Ingénieux n’est-ce pas ? Il faut cependant relever un autre challenge pour assurer la sécurité de ce modèle.

Conserver l’intégrité de l’information avec Turbine

Des nœuds malicieux pourraient ne pas retransmettre les données, ou bien transmettre des données corrompues. Turbine va s’appuyer sur une technique bien spécifique pour s’assurer que les données restent intègres, même en présence d’acteurs malveillants : les codes de Reed-Solomon.

Les codes de Reed-Solomon

Les codes de Reed-Solomon sont des codes correcteurs. La méthode consiste à transformer les données et à les sur-échantillonner. Ce sur-échantillonnage permet alors de reconstruire les paquets de données, même en cas d’erreur de transmission.

C’est une méthode complexe à appréhender sans bagage mathématique. Le code de Reed-Solomon se base en effet sur les corps finis afin de construire un polynôme formel à partir des données à transmettre. Ce polynôme est ensuite sur-échantillonné. Une fois les coefficients du polynôme reçus, il sera donc possible de le reconstruire, même en cas d’erreur. 

Pour comprendre comment cela fonctionne en profondeur, il faut étudier le théorème de Shannon-Nyquist. C’est notamment grâce au code de Reed-Solomon que l’on peut encoder un signal audio sur un CD.

Pour faire simple, les erasure codes, dont le code de Reed-Solomon dans le cas de Turbine, permettent de reconstruire des données corrompues. Chaque leader va transmettre une partie de ses paquets sous forme de codes de Reed-Solomon.

Solana - Turbine - Codes d'effacement Reed-Solomon
Le sur-échantillonnage des paquets via les codes de Reed-Solomon permet de reconstruire des données corrompues.

Si le leader transmet 33 % de ses paquets sous forme de codes correcteurs, le réseau peut perdre jusqu’à 33 % de l’ensemble des paquets et retrouver tout de même l’entièreté de l’information. Il est possible d’ajuster cette valeur, de façon dynamique, en fonction du taux d’erreurs observé sur le réseau.

Se protéger des attaques

Il est possible pour des nœuds malicieux de tenter d’autre type d’attaques, où les erreurs induites dépassent leur stake combiné (déni de service, attaques éclipse consistant à saturer les connexions d’un nœud du réseau).

C’est ici que la transmission aléatoire des paquets prend tout son sens. L’arborescence des voisinages est générée selon le poids du stake des validateurs, pour chaque paquet, de façon aléatoire, en utilisant la signature numérique de ces derniers. Le chemin des paquets ne peut ainsi pas être connu à l’avance. Il faudrait donc que les attaquants contrôlent l’intégralité du réseau pour tenter une attaque éclipse sur un voisinage.

Turbine : des performances notables

Avec un seul niveau d’arborescence, Turbine permet d’assurer la transmission de l’information pour 200 à 1000 nœuds. Avec une carte réseau à 1 Go/s, il est alors possible de transmettre un million de paquets à la seconde.

Ainsi, un seul validateur peut transmettre des paquets de 64 ko à 1000 nœuds en moins d’une seconde, avec une bonne connexion.

Conclusion

Voici un tour d’horizon de Turbine, l’ingénieuse méthode de propagation des blocs de Solana ! C’est ainsi une brique technologique de plus qui, avec la preuve d’histoire, permet d’obtenir un débit très élevé de transactions sur le réseau. Mais ce n’est pas tout : dans les articles futurs, nous nous pencherons notamment sur Gulf Stream, le protocole d’acheminement des transactions de Solana. Stay tuned !

Pour aller plus loin

Morgan Phuc

Cofounder @ 8Decimals & Partner @ Node Guardians - Making crypto great again - Journal du Coin / BitConseil