Solidity : La directive pragma d’un smart contract

Pragma directive Solidity
Getting your Trinity Audio player ready...

La directive pragma d’un contrat intelligent avec le langage de programmation Solidity est le premier élément indispensable à connaître pour que votre code puisse être compilé correctement. Nous allons aborder ensemble cette première notion dans cette formation Solidity complète.

Qu’est ce que directive pragma d’un smart contract en Solidity ?

Quand vous développez un contrat intelligent sur Solidity, la directive pragma est généralement la première ligne de code. Dans certains cas, cela peut-être la deuxième si l’on considère la licence comme la première ligne. Elle permet de vérifier si la version du compilateur Solidity est bien celle qui est nécessaire et utilise le principe du versionnage sémantique, un concept indispensable pour tout développeur.

Comme vous vous en doutez probablement, un langage de programmation comme Solidity est en constante évolution. Les développeurs apportent des modifications régulièrement dans le code pour le rendre plus performant, plus optimisé, ajouter de nouvelles fonctions ou alors en retirer certaines.

Ainsi, chaque fois qu’une nouvelle fonctionnalité ou amélioration est introduite, une nouvelle version de Solidity est publiée. Ainsi, ce changement de version peut rendre votre code incompatible et donc, impossible à compiler avec les nouvelles versions de Solidity. A titre d’information, la version actuelle de Solidity est la v0.8.17.

C’est là que la directive pragma prend tout son sens car elle permet de spécifier la ou les versions compatibles du compilateur avec votre code.

Comment déclarer la directive pragma dans un contrat Solidity ?

Bien qu’il n’y ai aucune obligation, il est toujours préférable de déclarer la directive pragma au tout début de votre fichier Solidity. Cela permet d’avoir un code propre et c’est en quelque sorte un standard qu’utilisent les développeurs. La syntaxe de cette directive est la suivante :

pragma solidity ^0.8.0;

Si vous n’êtes pas encore très à l’aise avec le développement Solidity ou bien que c’est votre premier langage, vous vous demandez certainement à quoi correspondent tous ces caractères. Nous allons donc les prendre dans l’ordre pour que ce soit compréhensible.

Pour commencer, nous avons la déclaration de la directive avec pragma solidity. Ici, la seule chose qu’il faut retenir, c’est la sensibilité à la casse de la directive. Cela s’écrit uniquement en minuscule exclusivement.

Le numéro de version (versioning)

Avant de parler directement du symbole qui précède le numéro de version, attardons nous rapidement sur ces 3 chiffres. En réalité, ces numéros correspondent à des versions différentes d’un programme ou d’un logiciel et permettent une gestion plus efficiente lors du développement.

Nous avons donc 3 numéros de versions dont le 4ème est optionnel :

  • Majeur : changements non rétro compatibles avec des modifications importantes…
  • Mineur : changements rétro-compatibles, ajout de nouvelles fonctionnalités, fonctionnalité indiquée comme obsolète…
  • Patch : corrections de bugs ou des failles de sécurité…
  • Optionnel : utilisé généralement à des fins de tests exclusivement
Versioning

Actuellement, avec sa version 0.8.17, Solidity est considéré en version Béta. Il faudra attendre la version 1.0.0 pour que celui-ci soit considéré comme stable. Et comme vous vous en doutez, la directive pragma utilise ce principe de versioning pour être compatible avec le compilateur.

Choix des versions tolérés par le compilateur

Enfin, vous pouvez observer un symbole qui précède les 3 chiffres de la version 0.8.0 qui est le suivant ^, aussi connu sous le nom de caret. Celui-ci fait référence aux versions tolérées par le compilateur lors de la compilation. Même si son est facultatif, il joue un rôle important dans le choix du numéro de version en fonction des règles suivantes :

  • Le caractère ^ fait référence à la dernière version au sein d’une version majeure. Ainsi, ^0.8.0 fait référence à la dernière version du numéro de build 8, qui serait actuellement 0.8.17.
  • Le caractère ^ ne ciblera aucune autre version majeure en dehors de celle qui est fournie.
  • Le fichier Solidity ne sera compilé qu’avec un compilateur dont le numéro de build principal est 8. Il ne compilera pas avec une autre version majeure.

Voici quelques exemples des versions comprises suivant le symbole utilisé :

  • ^0.1.3;: >=0.1.3 et <0.2.0
  • ~1.2.3;: >=1.2.3 et <2.0.0

Comme Solidity n’a pas encore atteint sa première version majeure (1.0.0), c’est la version mineure qui prend cette place. Vous pouvez également déclarer vos versions de la façon suivante pour restreindre les numéros de versions compatibles entre deux :

  • >=0.4.22 <0.9.0;
  • >=0.0.8 <0.9.0;

Enfin, vous pourrez aussi croiser le tilde ~ qui possède quelques similarités avec le caret. Il est utilisé pour correspondre à la version la plus récente du patch :

  • ~0.8.2; : >=0.8.2 et <0.9.0
  • ~1.2.3; : >=1.2.3 et <1.3.0

En cas de doute, n’hésitez pas à faire quelques tests avec des outils comme npm semver calculator. Cela va vous permettre de vérifier si le numéro de version que vous avez indiqué est celui que vous avez imaginé.

De plus, n’oubliez pas le point-virgule à la fin de votre déclaration sinon, vous allez essuyer une méchante erreur lors de la compilation.

Règles de bonnes pratiques avec la directive pragma

1. Mettre toujours la directive en début de fichier

La première chose à faire quand vous allez écrire votre code dans votre code Solidity est de mettre la directive pragma en début de fichier. Ce n’est pas encore un standard, mais cela permet de gagner un temps précieux, surtout en cas de problème lors de la compilation dû à la version utilisée justement.

2. Compiler en utilisant une version précise de Solidity

La seconde est qu’il est préférable de compiler le code Solidity avec une version exacte du compilateur plutôt que d’utiliser différentes versions avec le caret ^ ou le tilde ~. Comme Solidity n’est pas encore à sa version majeure, certains changements peuvent rendre votre code incompatible lors de la compilation.

Par exemple, l’instruction throw a été dépréciée et d’autres fonctions plus efficientes ont été développées comme assert, require ou encore revert dans des versions plus récentes.

En utilisant une version fixe, vous n’aurez pas de mauvaises surprises, même si vous compilez votre code que dans plusieurs années.

Voilà, vous savez maintenant comment déclarer et utiliser les directives pragma et êtes maintenant prêt à créer votre premier contrat Solidity.

Partager l'article sur les réseaux sociaux

Auteur

Depuis 2017, je ne cesse d'explorer l'univers du Bitcoin, de la blockchain des crypto monnaies, des NFT et plus récemment, celui du Web3. Après avoir fondé Au Coin du Bloc en 2021, je met à disposition mes connaissances et tente de vulgariser les aspects obscurs pour rendre abordable et compréhensible cet univers naissant dans lequel je crois fermement.

Articles similaires