Solidity

Un article de Wikipédia, l'encyclopédie libre.

Solidity
Logo.

Date de première version Voir et modifier les données sur Wikidata
Dernière version 0.8.4 ()[1]Voir et modifier les données sur Wikidata
Licence Licence publique générale GNU version 3Voir et modifier les données sur Wikidata
Site web solidity.readthedocs.ioVoir et modifier les données sur Wikidata

Solidity est un langage de programmation orienté objet dédié à l'écriture de contrats intelligents[2]. Il est utilisé pour implémenter des smartcontrat sur diverses blockchains, notamment Ethereum. Il a été développé par Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai et plusieurs anciens contributeurs principaux d'Ethereum pour permettre l'écriture de contrats intelligents sur des plateformes de blockchain telles qu'Ethereum[3].

Historique[modifier | modifier le code]

Solidity a été initialement proposée en par Gavin Wood[4],[5] ; le langage a ensuite été développé par l'équipe Solidity du projet Ethereum, dirigée par Christian Reitwiessner.

À l'heure actuelle, Solidity est le principal langage sur Ethereum ainsi que sur d'autres blockchains privées fonctionnant sur des plateformes en concurrence avec Ethereum, telles que Monax et sa blockchain Hyperledger Burrow, qui utilise Tendermint pour le consensus. SWIFT a déployé une preuve de concept à l'aide de Solidity exécuté sur Burrow. Un chercheur de l'université Cornell a déclaré que Solidity était en partie responsable du piratage de The DAO en 2016. Il a déclaré : « ce n'était en fait pas une faille ou un exploit dans le contrat DAO lui-même : techniquement, la machine virtuelle Ethereum (EVM) fonctionnait comme prévu, mais Solidity introduisait des failles de sécurité dans les contrats qui avaient échappée à la communauté, mais aussi aux concepteurs du langage eux-mêmes. » En effet, des contraintes propres à l'EVM, telles que l'impossibilité de mettre à jour un contrat intelligent (à moins d'en déployer un nouveau), ou l'absence de virgule flottante intégrée peuvent rendre certaines failles très difficiles à trouver et à corriger.

Description[modifier | modifier le code]

Solidity est un langage de programmation de type statique conçu pour développer des contrats intelligents qui s'exécutent sur l'EVM (Ethereum Virtual Machine)[6],[7]. Solidity est compilé en bytecode lui-même exécutable sur l'EVM. Grâce à Solidity, les développeurs sont en mesure d'écrire des applications implémentant une logique commerciale s’exécutant de manière autonome au travers des contrats intelligents, laissant une trace de transactions non répudiables et faisant autorité[8]. Écrire des contrats intelligents dans des langages spécifiques aux contrats intelligents tels que Solidity est considéré comme facile (en apparence pour ceux qui ont déjà des compétences en programmation)[9].

Exemple de programme Solidity[10],[11] :

pragma solidity >=0.5.0 <0.7.0;

contract Coin {
    // The keyword "public" makes variables
    // accessible from other contracts
    address public minter;
    mapping (address => uint) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    // Events allow clients to react to specific
    // contract changes you declare
    event Transfer (address from, address to, uint amount);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
    event MintingRightTransferred(address indexed oldMinter, address indexed newMinter);

    string public symbol = "WIKI";
    string public name = "WikiArticleToken";
    uint256 public totalSupply;

    // Constructor code is only run when the contract
    // is created
    constructor() public {
        minter = msg.sender;
    }

    // Sends an amount of newly created coins to an address
    // Can only be called by the contract creator
    function mint(address receiver, uint amount) public {
        require(msg.sender == minter);
        require(amount <= 2**256-1); // be aware of high amounts since overflow exist
        balances[receiver] += amount;
        totalSupply += amount;
        emit Transfer(address(0), receiver, amount);
    }

    // Sends an amount of existing coins
    // from any caller to an address
    function transfer(address receiver, uint amount) public {
        require(amount <= balances[msg.sender], "Insufficient balance.");
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Transfer(msg.sender, receiver, amount);
    }

    function transferFrom(address from, address to, uint256 amount) public returns (bool success) {
        require((allowed[from][msg.sender]||(from == msg.sender)) >= amount, "You aren't allowed to spend this amount");
        require(amount <= balances[from], "Insufficient balance");
        allowed[from][msg.sender] -= amount;
        balances[from] -= amount;
        balances[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }

    function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
		return allowed[tokenOwner][spender];
    }

    function approve(address spender, uint tokens) public returns (bool success) {
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }

    function balanceOf(address guy) public view returns (uint256 balance) {
        return balances[guy];
    }

    function transferMinterRight(address _newMinter) public {
        require(msg.sender == minter);
        emit MintingRightTransferred(minter, _newMinter);
        minter = _newMinter;
    }
}

Disponibilité de la plateforme de développement[modifier | modifier le code]

Plateformes Blockchain[modifier | modifier le code]

Solidity est disponible sur:

Voir aussi[modifier | modifier le code]

Vyper un autre langage destiné à la creation de smartcontrat sur la machine virtuelle ethereum

Références[modifier | modifier le code]

  1. « Release 0.8.4 », (consulté le )
  2. (en) Afshar, Evangelist et Salesforce, « Ethereum Is The Second Most Valuable Digital Currency, Behind Bitcoin », HuffPost, (consulté le )
  3. « List of contributors »
  4. Benoit Schweblin, « StackEdit Viewer », stackedit.io
  5. (en) « Blockchain and big data worth watching in the coming year », sur International Business Times, (consulté le )
  6. (en-US) « Hyperledger Fabric Tutorial - Create a blockchain app for loyalty points », IBM Developer (consulté le )
  7. a et b Allison, « Microsoft adds Ethereum language Solidity to Visual Studio », International Business Times, (consulté le )
  8. Allison, « Microsoft adds Ethereum language Solidity to Visual Studio », International Business Times, (consulté le )
  9. William Mougayar, The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology, Wiley Publishing, (ISBN 978-1119300311, lire en ligne), p. 58
  10. « Subcurrency Example from the Solidity documentation »
  11. (en) Karthikeyan Schneier, Antoine Schneier, Cedric Bhargavan, Anitha Delignat-Lavaud, Gollamudi Fournet, Bruce Schneier, Nadim Rastogi, Aseem Sibut-Pinote, Thomas Rastogi1, Nikhil Swamy et Santiago Zanella-Beguelin, « Short Paper: Formal Verification of Smart Contracts », Microsoft Research, Institut national de recherche en informatique et en automatique, université Harvard,‎ (lire en ligne[archive du ])
  12. (en-US) PatAltimore, « Use Visual Studio Code to connect to Azure Blockchain Service - Azure Blockchain », docs.microsoft.com (consulté le )