Un aperçu d’Ethereum et de Solidity | par Burakcan Ekici | Meilleure programmation | Novembre 2020

Online Coding Courses for Kids

Solidity est un langage de haut niveau orienté objet pour la mise en œuvre de contrats intelligents.Il est conçu pour cibler la machine virtuelle Ethereum (EVM), en gérant le comportement des comptes dans l’état Ethereum.

Il s’agit d’un langage orienté contrat, ce qui signifie que les contrats intelligents sont responsables du stockage de toute la logique de programmation qui transige avec la blockchain.

Avec Solidity, tout contrat peut être développé pour des utilisations telles que le vote, le financement participatif, les enchères à l’aveugle et les portefeuilles multi-signatures.

Parmi plusieurs méthodes (c.-à-d. solc-js, un framework Node.js, ou des builds Docker à jour) pour compiler le code Solidity et le compiler, Remix IDE est un outil open source puissant qui vous aide à rédiger des contrats Solidity directement à partir du navigateur sans rien installer. Écrit en JavaScript, Remix prend en charge à la fois l’utilisation dans le navigateur et localement. Remix prend également en charge les tests, le débogage et le déploiement de contrats intelligents, et bien plus encore.

Les éléments suivants, celui d’un contrat intelligent, sont bons pour comprendre la structure générale d’un contrat intelligent.

Déclarer un contrat

La version Solidity et le nom du contrat doivent être déclarés par ce qui suit.

pragma solidity ^0.4.24;contract MyContract {
// do something
}

Importer d’autres fichiers source

Ethereum Solidity prend en charge les instructions d’importation très similaires à celles disponibles en JavaScript, bien que Solidity ne connaisse pas le concept d ‘«exportation par défaut».

import "filename";----- OR -----import * as symbolName from "filename";

commentaires

Comme tout autre langage, les commentaires sur une ou plusieurs lignes sont possibles dans Solidity.

// This is a single-line comment.----- OR -----/*
This is a
multi-line comment
*/

Variables

Solidity prend en charge les variables suivantes:

  • variables d’état stocké en permanence dans le stockage sous contrat
  • variables locales – présenté jusqu’à ce que la fonction s’exécute
  • variables globales variables spéciales qui existent dans l’espace de noms global et sont utilisées pour obtenir des informations sur la blockchain
pragma solidity …contract HelloWorld{
uint storedData; // state variablefunction getResult() public view returns(uint){
uint a = 1; // local variable
}
}

Portée variable

Solidity prend en charge les types de visibilités suivants, communs aux fonctions et aux variables

  • Publique fonctions publiques ou variables qui peuvent être appelées en interne ou via des messages
  • interne – fonctions et variables uniquement disponibles pour le contrat en cours et les contrats dérivés
  • privé – uniquement disponible pour le contrat en cours et non pour les contrats dérivés
  • externe – peut simplement être utilisé pour les fonctions à appeler à partir d’autres contrats et transactions

Types de données

Les types suivants sont également appelés types de valeur car les variables de ces types seront toujours passées par valeur.

  • booléen bool; les valeurs possibles sont des constantes, c’est-à-dire vrai ou faux
  • entier int/uint; entiers signés et non signés de différentes tailles
  • chaîne string; les littéraux de chaîne sont écrits avec des guillemets doubles ou simples «foo» ou «bar»
  • adresseaddress/address payable contient une valeur de 20 octets, la taille d’une adresse Ethereum, etc.

Types d’adresses

Les types d’adresses ont également des membres et servent de base pour tous les contrats. Il existe deux types d’adresses: address contient une valeur de 20 octets, et address payable est le même que address ci-dessus mais a juste transfer et send membres. La distinction entre address/address payable est-ce address payable est une adresse à laquelle vous pouvez envoyer de l’éther, tandis qu’un simple address ne peut pas être envoyé d’Ether.

Conversions implicites de address payable à address sont autorisées, alors que les conversions de address à address payable ne sont pas permis. Le type d’adresse a plusieurs membres:

  • balance renvoie le solde de l’adresse donnée (en unités de wei)
  • transfer envoie un montant donné à une adresse donnée (en unités de wei)
  • send envoie une quantité donnée de wei à une adresse donnée (pas une alternative sûre pour le transfert)

Structures de données

Les types suivants sont spécialisés en Solidité:

  • Struct struct Solidity fournit un moyen de définir de nouveaux types sous forme de structures. Les structures sont des types personnalisés qui peuvent regrouper plusieurs variables.
  • Tableau[] Les tableaux peuvent avoir une taille fixe au moment de la compilation, ou ils peuvent avoir une taille dynamique.
  • Cartographie mapping(k => v) Les mappages peuvent être vus comme des tables de hachage qui sont virtuellement initialisées de telle sorte que chaque clé possible existe et est mappée à une valeur dont la représentation d’octet est entièrement zéros: la valeur par défaut d’un type, etc.

Emplacements des données

Tous les types de référence contiennent des informations sur l’endroit où ils sont stockés et il existe trois zones pour les stocker:

  • Espace de rangement Variable d’état, variables locales de struct, tableau et mappage: chaque compte a son propre stockage, qui est persistant entre les appels de fonction et les transactions.
  • Mémoire Arguments de fonction, qu’un contrat obtient une instance fraîchement effacée pour chaque appel de message. Il contient des valeurs temporaires et est effacé entre les appels de fonction (externes) et est moins coûteux à utiliser.
  • Empiler – Petites variables locales. L’EVM n’est pas une machine de registre mais une machine de pile, donc tous les calculs sont effectués sur une zone de données appelée le empiler. Il contient de petites variables locales et est presque gratuit à utiliser, mais ne peut contenir qu’un nombre limité de valeurs.

Les fonctions

Dans une fonction, peut être vide, mais doit être rempli.

  • Fonctions internes ne peut être appelé que dans le contrat en cours.
  • Fonctions externes se composent d’une adresse et d’une signature de fonction, et elles peuvent être transmises et renvoyées à partir d’une fonction externe.
function () {internal|external} [pure|view|payable] [returns ()]

Type de fonctions

pure garantit qu’ils ne changent pas l’état (il peut être converti en vue).

view ne lit pas l’état ou ne modifie pas l’état.

payable fait en sorte que l’éther puisse être envoyé dans la fonction.

fallback n’a aucun argument et ne renvoie rien, mais il est surtout utilisé pour envoyer Ether, écrire dans le stockage et créer un contrat.

Les fonctions peuvent être définies comme view et pure restreindre la lecture et la modification de l’état.

Surcharge de méthode

La surcharge de fonction se produit lorsque plusieurs fonctions d’un contrat ont le même nom mais des arguments différents.

function sayHi(string n1) public pure returns (string out) {
out = "Hi " + n1 + " !" ;
}
function sayHi(string n1, string n2) public pure returns (string out) {
out = "Hi " + n1 + " and " + n2 + " !" ;
}

Modificateurs

Les modificateurs sont définis pour changer le fonctionnement des fonctions dans Solidity. En utilisant des modificateurs, la condition, qui est vérifiée avant l’exécution de la fonction, peut être définie.

pragma solidity ^0.4.24;contract MyContract {
constructor() public { owner = msg.sender; }
address payable owner;
modifier onlyOwner {
require(msg.sender == owner, "Only owner can call this function.");
_; // When the owner calls this function, it executes. Otherwise, it throws an exception.
}
function close() public onlyOwner {
// do something
}
}

Close Menu