Solidity est connu comme étant le langage de la blockchain Ethereum. Servant notamment à écrire des smart contracts, il est presque indispensable si l’on veut coder dans l’environnement de cette chaîne de blocs.
Vous voulez en savoir plus sur ce langage ? Comprendre comment il fonctionne et comment l’apprendre, pour programmer sur la blockchain ? Voici un article dédié à Solidity !
Qu’est-ce que le langage Solidity ?
L’historique du langage Solidity : Le langage de programmation d’Ethereum
La création du langage Solidity a été pour la première fois évoquée en 2014, par Gavin Wood, un des co-fondateurs de la blockchain Ethereum.
Le langage a ensuite été développé par une équipe dédiée, au sein d’Ethereum, dirigée par Christian Reitwiessner.
Annoncée publiquement en novembre 2014, la version 0.1 du langage a été rendue disponible en juillet 2015.
La dernière version en date, sortie en septembre 2022, est la 0.8.17.
Les possibilités de Solidity
Solidity étant développé conjointement à Ethereum, cela fait de ce langage la techno officielle de cette blockchain. Il est cependant possible d’utiliser d’autres langages pour programmer sous Ethereum, notamment Vyper ou JavaScript avec ethers.js.
Le principal intérêt de Solidity est donc de donner la possibilité aux développeurs d’écrire des smart contracts – qui sont à la base du développement blockchain – dans l’environnement Ethereum.
Si vous n’êtes pas au point sur la définition précise d’un smart contract, un contrat intelligent est, pour résumer, une fonction logique exécutée dans la blockchain lorsque certaines conditions sont réunies.
La maîtrise de Solidity et de la création de smart contracts peut par exemple permettre à un développeur de créer des NFT.
Solidity dans la technique
Le langage Solidity
Les créateurs de Solidity revendiquent des influences venant de trois principaux langages de programmation : C++, Python et JavaScript.
Sa proximité avec les deux derniers, et notamment JavaScript, permet une adoption facile du langage lorsque l’on vient du monde du développement web. La courbe d’apprentissage ne sera pas aussi importante que s’il fallait apprendre un langage de programmation ne respectant pas des conventions déjà connues.
Toutefois, comme chaque techno, Solidity vient avec un ensemble de particularités qui lui sont propres, et de part ses utilisations très spécifiques, il demandera de la pratique avant d’être parfaitement maîtrisé.
La programmation Solidity sur la blockchain
Nous l’avons dit, le langage Solidity sert principalement à écrire des smarts contracts. Pour comprendre comment fonctionne ce langage, le plus simple est donc d’analyser comment sont écrits les smart contracts en Solidity.
Un smart contract est similaire à une classe dans un langage orienté objet. Chaque contrat peut contenir un ensemble de :
- Variables d’état ;
- Fonctions ;
- Évènements ;
- Erreurs ;
- Types (structs et enum).
Un contrat intelligent peut aussi, comme une classe, hériter d’un autre contrat.
Concrètement, un smart contract simple pourra ressembler à cela :
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract C {
uint public data;
function x() public returns (uint) {
data = 3; // internal access
return this.data(); // external access
}
}
Nous retrouvons les éléments précédemment cités : le contract (l’équivalent de la classe), une variable (de type uint) et une fonction.
Quant aux deux premières lignes, la première définit la licence du code source (ici GPL – General Public License – en version 3.0) ; la seconde spécifie le support des versions de Solidity qu’assure le code. Ici, une version supérieure ou égale à la 0.4.16, mais non supporté à partir d’une 0.9.0. Cette définition est importante pour éviter les breaking changes que pourraient apporter une mise à jour majeure.
Quelques exemples Solidity
Pour se faire une idée plus précise du fonctionnement de Solidity, le mieux reste de voir des morceaux codes de cas plus concrets.
Basons-nous sur les exemples fournis par le site solidity-by-example.org.
Hello World
Puisqu’en programmation, il est coutume de commencer via un simple Hello World, voyons comment cela se passe sous Solidity :
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.17 and less than 0.9.0
pragma solidity ^0.8.17;
contract HelloWorld {
string public greet = "Hello World!";
}
Lire et écrire une variable d’état
Voyons un exemple un peu plus complet, qui va nous permettre de comprendre comment déclarer une variable d’état, la lire et la surcharger (via de simples getters et setters) :
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.17 and less than 0.9.0
pragma solidity ^0.8.17;
contract SimpleStorage {
// State variable to store a number
uint public num;
// You need to send a transaction to write to a state variable.
function set(uint _num) public {
num = _num;
}
// You can read from a state variable without sending a transaction.
function get() public view returns (uint) {
return num;
}
}
Envoyer et recevoir de l’Ether
Vous voulez voir comment transférer de l’Ether, la cryptomonnaie de la blockchain ? Voici un exemple complet en Solidity :
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.17 and less than 0.9.0
pragma solidity ^0.8.17;
contract ReceiveEther {
/*
Which function is called, fallback() or receive()?
send Ether
|
msg.data is empty?
/ \\
yes no
/ \\
receive() exists? fallback()
/ \\
yes no
/ \\
receive() fallback()
*/
// Function to receive Ether. msg.data must be empty
receive() external payable {}
// Fallback function is called when msg.data is not empty
fallback() external payable {}
function getBalance() public view returns (uint) {
return address(this).balance;
}
}
contract SendEther {
function sendViaTransfer(address payable _to) public payable {
// This function is no longer recommended for sending Ether.
_to.transfer(msg.value);
}
function sendViaSend(address payable _to) public payable {
// Send returns a boolean value indicating success or failure.
// This function is not recommended for sending Ether.
bool sent = _to.send(msg.value);
require(sent, "Failed to send Ether");
}
function sendViaCall(address payable _to) public payable {
// Call returns a boolean value indicating success or failure.
// This is the current recommended method to use.
(bool sent, bytes memory data) = _to.call{value: msg.value}("");
require(sent, "Failed to send Ether");
}
}
Comment débuter et apprendre le langage Solidity ?
Travailler sur la blockchain vous intéresse, et vous voulez apprendre le langage Solidity ? Face au succès de cette techno, de nombreux cours en ligne ont émergé. Faisons un tour des principales ressources.
Ressources en anglais pour apprendre Solidity
Comme pour la plupart des technos, et c’est encore plus vrai pour les plus récentes, la plupart des ressources sont en anglais. Si suivre des cours dans cette langue ne vous pose pas de problème, ceux-ci devraient vous donner de bonnes bases en Solidity :
- Un cours vidéo complet de 16 heures, gratuit, par freeCodeCamp ;
- tutorialspoint.com, avec ses nombreux tutoriels sur Solidity ;
- Le cours “Ethereum and Solidity: The Complete Developer’s Guide”, sur Udemy.
Ressources en français pour apprendre Solidity
Si l’anglais vous rebute, il existe quelques cours intéressants en français :
- Un ensemble de cours gratuits, créés par Ben BK sur sa chaîne YouTube ;
- Les cours disponibles sur Microsoft, pour apprendre Solidity et apprendre à écrire des smart contracts avec cette techno.
Conclusion
Nous l’avons vu, Solidity est le langage dédié au développement sur la blockchain Ethereum, elle-même une des technos les plus utilisées dans le web 3.0.
Si vous voulez vous lancer dans la création de smart contractes, apprendre Solidity est donc fortement recommandé. Ce langage, inspiré d’autres technos déjà existantes et bien implantées, ne sera pas trop complexe à appréhender, grâce aux sources citées dans cet article.
Si vous vous intéressez au développement blockchain de manière plus générale, avec d’autres technos qu’Ethereum, nous avons écrit un article dédié à la programmation blockchain, qui pourra vous aider à comprendre cet environnement et à choisir les bonnes technos selon vos besoins.