# ■ Cours de Solidity
## 1. Introduction
- Solidity est un langage de programmation créé pour écrire des smart contracts sur la blockchain
Ethereum.
- Les smart contracts sont des programmes qui s’exécutent de façon décentralisée et immuable.
Exemple simple :
```
pragma solidity ^0.8.0;
contract HelloWorld {
string public message = "Bonjour Blockchain!";
function setMessage(string memory _msg) public {
message = _msg;
```
## 2. Structure d’un smart contract
Un contrat Solidity contient généralement :
1. Version du compilateur
```
pragma solidity ^0.8.0;
```
2. Déclaration du contrat
```
contract MonContrat { ... }
```
3. Variables d’état (stockées sur la blockchain)
```
uint public nombre;
```
4. Fonctions (logique du contrat)
```
function incrementer() public {
nombre++;
```
## 3. Types de données
- uint : entier positif
- int : entier signé
- bool : vrai/faux
- string : chaîne de caractères
- address : une adresse Ethereum
- mapping : structure clé → valeur
- struct : structure personnalisée
Exemple :
```
struct Utilisateur {
string nom;
uint age;
mapping(address => Utilisateur) public utilisateurs;
```
## 4. Visibilité des fonctions
- public : accessible par tous
- private : seulement dans ce contrat
- internal : seulement ce contrat et ses héritiers
- external : seulement appel externe
## 5. Transactions et Ether
Exemple d’un contrat “cagnotte” :
```
pragma solidity ^0.8.0;
contract Cagnotte {
address public proprietaire;
constructor() {
proprietaire = [Link];
receive() external payable {}
function getSolde() public view returns(uint) {
return address(this).balance;
function retirer() public {
require([Link] == proprietaire, "Pas autorise");
payable(proprietaire).transfer(address(this).balance);
```
## 6. Bonnes pratiques
- Toujours utiliser require() pour vérifier les conditions.
- Utiliser les dernières versions (^0.8.x) pour éviter les overflow.
- Séparer les responsabilités (contrat simple → contrat complexe).
## 7. Concepts avancés
- Héritage : un contrat peut hériter d’un autre
- Modificateurs : fonctions spéciales pour restreindre l’accès
- Événements (Events) : enregistrer des logs sur la blockchain
- Interfaces & Librairies : structurer le code
## 8. Outils pour pratiquer
- Remix IDE : [Link]
- Hardhat ou Truffle : frameworks pour déployer/tester
- Metamask : pour interagir avec tes contrats