Sealevel : comment Solana (SOL) exécute des milliers de smart contracts en parallèle ?

Solana est actuellement la blockchain la plus performante de l’écosystème crypto. Pour arriver à un débit de 50,000 transactions par seconde, son équipe de développement, sous l’égide d’Anatoly Yakovenko, a dû apporter son lot d’innovations dont fait partie Sealevel. Cet environnement d’exécution permet de traiter plusieurs dizaines de milliers d’opérations simultanément.

Lors de précédents articles, nous avons étudié le fonctionnement de la Proof of History, son système d’horodatage des blocs; puis Tower BTF, son mécanisme de consensus ; ou encore Turbine, sa méthode de propagation des blocs, ainsi que Gulfstream, sa propagation des transactions sans mempool.

Dans cet article, focus sur Sealevel, le tour de passe-passe ingénieux qui permet d’exécuter simultanément des milliers de smart contracts.

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

Sealevel : l’environnement d’exécution de Solana

Sealevel est l’environnement d’exécution de Solana. Tout comme sur Ethereum ou encore EOS, ce runtime permet de modifier l’état de la blockchain, en fonction des instructions programmées au sein des contrats autonomes. Mais à la grande différence de ses prédécesseurs, Solana permet d’exécuter des dizaines de milliers de smart contracts en parallèle.

Sur l’Ethereum Virtual Machine, les instructions forment une pile, et un seul contrat peut modifier l’état de la blockchain lorsque son temps est venu. Sur Solana, chaque cœur des processeurs d’un nœud validateur du réseau peut exécuter une instruction, en même temps que les autres.

Les transactions sur Solana

Toute transaction sur Solana décrit précisément les différents changements d’état de la blockchain qui en découleront, en lecture comme en écriture. Cela confère des avantages notables :

  • Les transactions ne se chevauchant pas peuvent être exécutées simultanément ;
  • Les transactions requérant l’accès au même état de la blockchain peuvent être aussi exécutées en parallèle.

Le matériel requis

Sealevel est donc l’environnement d’exécution de Solana, déployé sur n’importe quel nœud validateur. Son déploiement requiert le matériel informatique suivant :

  • Un processeur (CPU) avec 12 cœurs ou plus, cadencé à 2,8 GHz ou plus ;
  • 128 Go de mémoire vive (RAM) ou plus ;
  • Une carte mère avec une capacité de 256 Go ;
  • Une capacité de stockage dédiée de 500 Go, ou plus, pour les comptes ;
  • Au moins 1 To de stockage dédié pour le registre (SSD ou SATA).

Comme vous le constatez, le matériel requis reste assez conséquent pour déployer Sealevel. Pour autant, le runtime de Solana est assez simple à comprendre.

Les règles

  • Seul le propriétaire d’un contrat peut modifier le solde ou les données d’un compte ;
  • Cette autorisation ne dépend que de la validité de la signature de la transaction ;
  • Chaque programme peut comporter autant d’instructions et modifier autant de comptes que son propriétaire le souhaite ;
  • Sealevel permet, grâce aux métadonnées des comptes, de s’assurer que l’initiateur d’une transaction ne « triche » pas.

En effet, comme sur Ethereum, toutes les opérations des contrats ont un coût (compute budget).

Solana - Sealevel - Compute budget
Cela signifie simplement que ledit programme peut exécuter 200 000 instructions, enregistrer 2000 messages, mais ne peut pas utiliser plus de 4000 fois la pile, avoir une profondeur d’appels supérieure à 64, ou excéder 4 niveaux d’invocations entre différents contrats.

Programmes et comptes sur la blockchain de Solana

La base de données recensant les comptes sur la blockchain de Solana s’appelle Cloudbreak. Elle permet d’établir une correspondance entre chaque clef publique et le compte associé. Chaque compte comporte un solde et des données. Il a aussi un propriétaire : la clef publique du programme qui gouverne ses changements d’état.

En revanche, les programmes (smart contracts) n’ont pas d’état : ils sont seulement une suite de lignes de code. Afin de modifier l’état d’un compte, ils s’appuient sur les données inscrites sur le ou les comptes impliqués.

Autorisations et limitations

Les smart contracts ont donc des autorisations, mais aussi des limitations vis-à-vis des comptes avec lesquels ils interagissent :

  • Les programmes ne peuvent modifier que les données des comptes dont ils sont propriétaires ;
  • Les programmes ne peuvent débiter que les comptes dont ils sont propriétaires ;
  • N’importe quel programme peut créditer n’importe quel compte ;
  • N’importe quel programme peut accéder en lecture à n’importe quel compte.

Tous les comptes, au départ, ont le même propriétaire : le programme système. Il est le seul qui peut assigner la propriété d’un compte (une seule fois pour toute la duré de vie du compte) ou lui allouer des données vierges (zero-initialized data).

Lorsqu’un développeur déploie un programme, il a recours au loader program. C’est lui qui permet de définir comme « exécutables » les données associées à un compte. Il s’agit simplement d’une série de transactions :

  • Création d’une clef publique ;
  • Transfert des jetons sur ladite clef ;
  • Allocation de la mémoire (via le programme système) ;
  • Envoi du compte à traiter au loader program ;
  • Téléversement du code dans la mémoire (en différents morceaux) ;
  • Définition de la mémoire comme « exécutable », via le loader program.

Bien évidemment, le loader va vérifier le bytecode : s’il est correct, le compte sur lequel ce code a été téléversé pourra alors être utilisé comme un programme exécutable. Les nouveaux comptes qui seront créés seront la propriété dudit programme. Ce programme aura donc un accès en écriture privilégié à tout un sous-ensemble de clefs.

Structure des transactions sur Solana

Sur Solana, les transactions consistent en une série d’instructions, assorties de la liste des comptes concernés (accès en lecture ou en écriture). Ces instructions ressemblent à celles d’un système opérationnel de bas niveau. Avant leur exécution, le noyau du système (kernel) connaît chaque case mémoire que le programme souhaite lire ou écrire. Cela permet au système/nœud de prétraiter l’opération, puis de l’exécuter (en parallèle d’autres opérations) si sa configuration matérielle le permet.

C’est ce « pré-traitement » qui permet à la machine virtuelle de Solana d’optimiser l’exécution de ces instructions et de les exécuter en parallèle. Les transactions en attente sont ordonnées, et toutes celles qui ne se chevauchent pas peuvent être exécutées simultanément (dans la limite de la capacité de traitement des processeurs).

Sealevel : exécution parallèle des smart contracts

L’environnement d’exécution de Solana – Sealevel – tire donc parti de la conception physique des CPU et des GPU. En taxonomie informatique, on parle de Single instruction, multiple data (SIMD). Les processeurs sont composés de différents cœurs, qui peuvent traiter une même opération, sur de multiples données, en parallèle.

Solana - Sealevel - CUDA architecture

Par exemple, les processeurs graphiques (GPU) modernes de Nvidia comportent 4000 cœurs, pour 50 multiprocesseurs. Chaque multiprocesseur peut donc traiter simultanément 80 entrées différentes (pour une seule instruction).

Ainsi, si une série de transactions sur Solana (chargée via Sealevel) fait appel aux instructions d’un même programme, elles pourront être traitées en même temps, de façon parallèle, en fonction du nombre de cœurs.

Pour approfondir la notion d’architecture des multiprocesseurs multitâches et de SIMD, il faut lire la documentation de CUDA, disponible sur le site de Nvidia.

Sealevel est tout simplement un environnement d’exécution qui tire partie des possibilités offertes par les processeurs d’aujourd’hui. C’est la première fois qu’un réseau blockchain peut traiter des instructions en parallèle, et non une par une. Cette innovation (entre autres) permet à Solana d’atteindre son débit et son usabilité hors-normes. Mais rassurez-vous, il nous reste encore quelques briques technologiques révolutionnaires de plus à étudier !

Morgan Phuc

Cofounder @ 8Decimals - Partner @ Node Guardians - Journal du Coin / Trading du Coin / BitConseil