Partager cet article

Comme plus de 41 000 freelances, recevez des offres de mission tech à la messure de votre talent sur FreelanceRepublik.

Je m'inscris  ➔

Derniers articles

FreelanceRepublik

+100 missions tech
par semaine

Je m'inscris  ➔
AccueilMarché de la techLangagesSolidity : Le langage d'Ethereum - Comment l'apprendre et débuter ?

Solidity : Le langage d’Ethereum – Comment l’apprendre et débuter ?

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 ?

logo du langage solidity, pour écrire sur la blockchain Ethereum

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.

Le guide des tech leader 2.0 !
Une étude menée au travers de consultations des membres de la communauté Tech.Rocks, d'interviews de Tech Leaders ainsi que le point de vue des experts de la tech !

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 :

Ressources en français pour apprendre Solidity

Si l’anglais vous rebute, il existe quelques cours intéressants en français :

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.

X

Vous avez des besoins
en recrutement IT ?

Prenez RDV  ➔

Ces articles peuvent vous intéresser

Front end vs Back end : quelle est la différence ?

Le front-end et le back-end demeurent souvent abscons pour les non-initiés, en dépit de leur complémentarité dans le développement...

API : Définition et fonctionnement

Bien que les APIs soient devenues incontournables dans le développement logiciel, leur fonctionnement demeure obscur pour de nombreux professionnels,...

Découvrez le nouveau framework de Microsoft : .NET 5 et au-delà 

Chaque année apporte son lot d’innovations majeures et de ruptures qui obligent les développeurs à constamment se former pour...

Ne perdez plus de temps à prospecter en vain. Inscrivez-vous gratuitement sur FreelanceRepublik, et recevez de belles offres de missions tech. FreelanceRepublik est gratuit pour les freelances.

Je m'inscris  ➔