Retour au cours

Semaines 12-15 : Crypto

La donnée qui ne ment pas : chaînes de blocs, signatures et registres distribués pour clore la session en beauté

Objectifs des semaines 12 à 15

À la fin de ces trois semaines, vous saurez lire la chaîne de blocs comme un registre de données décentralisé et en parler avec le bon vocabulaire, écrire un contrat intelligent en Solidity (une variable, une structure, un tableau, des fonctions de lecture et d'écriture), le compiler et le déployer avec Remix sur le réseau de test Sepolia après avoir obtenu des ETH de test à un faucet, brancher une application Electron sur ce contrat pour afficher un titre, lister et ajouter des badges avec leur image, puis verrouiller l'écriture au seul propriétaire du contrat.

Déroulement

  1. Le vocabulaire et les exemples : glossaire crypto-données, contrats d'exemple et annuaires de ressources Solidity.
  2. Le contrat Portfolio dans Remix : un contrat ERC20 minimal avec setTitre et getTitre, compilé et déployé dans la machine virtuelle de Remix.
  3. Sur le réseau de test : MetaMask, des Sepolia ETH gratuits à un faucet, une adresse RPC, puis le déploiement réel et l'adresse du contrat.
  4. La dapp Electron : config.js, l'accesseur qui parle au contrat, preload.js, main.js et index.html : titre, liste des badges, ajout, image.
  5. Sécuriser : owner et le modificateur onlyOwner, ou Ownable d'OpenZeppelin. Pour aller plus loin, les jeux d'attaque et de défense.

Trois extraits à garder sous la main

1Le contrat Portfolio : un titre et des badges
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract Portfolio is ERC20 {
    constructor() ERC20("Portfolio", "MTK") {}

    string public titre;
    function setTitre(string memory _titre) public { titre = _titre; }
    function getTitre() public view returns (string memory) { return titre; }

    struct Badge { string nom; string fin; string ecole; string image; }
    Badge[] public badges;
    function addBadge(string memory _nom, string memory _fin,
                      string memory _ecole, string memory _image) public {
        badges.push(Badge(_nom, _fin, _ecole, _image));
    }
}
2Seul le propriétaire écrit
address public owner;
constructor() ERC20("Portfolio", "MTK") { owner = msg.sender; }

modifier onlyOwner() {
    require(msg.sender == owner, "Seul le proprio peut ecrire");
    _;
}
function setTitre(string memory _titre) public onlyOwner { titre = _titre; }
3La configuration de la dapp (config.js, jamais dans git)
const CONFIG = {
    SEPOLIA_RPC_URL: 'https://ethereum-sepolia.publicnode.com',
    PRIVATE_KEY: '0x...',        // votre clé privée de TEST Sepolia
    CONTRACT_ADDRESS: '0x...'    // l'adresse copiée de Remix après le déploiement
};
module.exports = CONFIG;
Le fichier config.js contient une clé privée. Il reste dans .gitignore, ne se partage jamais, et le compte qu'il désigne ne contient que des ETH de test. Un compte avec de vrais ETH ne se branche jamais sur un projet d'école.

Notes de cours

Les diaporamas des semaines 12 à 15, en version web (diapositives d'origine, exactes) et en PDF :

Les tutoriels de la dapp Portfolio

Tutoriel 1 : le contrat Solidity dans Remix 11 diapositives - compiler, déployer, tester le titre
Tutoriel 2 : la dapp affiche le titre 13 diapositives - Electron, main.js, preload.js et l'accesseur
Tutoriel 3 : ajouter et afficher la liste des badges 13 diapositives - la structure Badge, le tableau et le formulaire
Tutoriel 4 : téléverser une image 9 diapositives - le champ image, de l'accesseur au formulaire
Tutoriel 5 : sécuriser le contrat 4 diapositives - owner, onlyOwner et la livraison
Ateliers crypto-données 9 diapositives - du contrat de base au tableau de structures

Repères et références

Glossaire crypto-données 3 diapositives - le lexique à consulter
Des exemples de smart contracts 7 diapositives - exemples, tutoriels, cours et générateurs
Solidity : ressources et liens 7 diapositives - annuaires, doc officielle, aide-mémoire
Faucets et RPC gratuits 7 diapositives - des Sepolia ETH et une adresse RPC sans payer

Pour aller plus loin

Crypto pour les jeux 2 diapositives - apprendre en jouant
Sécurité dans la blockchain 4 diapositives - jeux d'apprentissage et compétitions

Le code et les documents du cours

dapp.zip (la dapp Electron de départ, avec Portfolio.sol et config.js.template) Ajouter un contrôle d'accès avec Ownable (PDF) Exemple : un registre de crédits carbone en Solidity (PDF) Aide-mémoire Solidity fiche PDF fiche courte affiche dépôt GitHub avec les bonnes pratiques

Ressources

Outils Remix MetaMask Etherscan Sepolia Documentation Solidity OpenZeppelin S'exercer Solidity by Example Wriggly CryptoZombies Ethernaut Faucet Sepolia de Google Cloud Glossaire crypto (useweb3) Drive des semaines 12-15

Évaluation : le Projet Portfolio (25 %)

Le devoir des semaines 12 à 15 : votre portfolio de badges sur la chaîne de blocs, une dapp Electron branchée sur votre contrat Portfolio déployé sur Sepolia. Cinq parties de cinq points, que les tutoriels ci-dessus construisent une à une. Le projet sera présenté sur sa propre page.

Pour le point sécurité, vous fournissez l'adresse du contrat sécurisé dans le README du dépôt : si le prof peut écrire dedans, le point est perdu.