Introduction à la blockchain

Tags :
  • MON
  • 2024-2025
  • temps 2
Auteurs :
  • OLIANA Guillaume

Un MON autour de React.

LAucun prérequis, ce MON est un travail de recherche qui a pour but de m'éduquer sur ces technologies, aussi bien que ceux qui prendront le temps de le lire.

Contenu

1. Introduction à la blockchain

Définition La blockchain est une technologie de stockage et de transmission de données fonctionnant comme un registre distribué et immuable. Chaque transaction ou information est enregistrée dans un réseau décentralisé de manière sécurisée et transparente, accessible à tous les participants du réseau. Une fois les données validées, elles deviennent impossibles à modifier ou à supprimer, garantissant ainsi l’intégrité des informations.

Historique : Origine et évolution Les prémices de la blockchain Les bases théoriques de la blockchain remontent aux années 1990, avec des travaux sur l’horodatage sécurisé des données numériques. Ces concepts techniques se sont concrétisés en 2008 avec l’invention de Bitcoin, la première application fonctionnelle de cette technologie.

Création de Bitcoin (2008)

Satoshi Nakamoto, un pseudonyme collectif ou individuel, publie le livre blanc intitulé "Bitcoin: A Peer-to-Peer Electronic Cash System". La blockchain est utilisée pour résoudre le problème du "double spending" dans les monnaies numériques, garantissant qu’une unité de monnaie ne puisse pas être dépensée deux fois. Le premier bloc, connu sous le nom de Genesis Block, est miné le 3 janvier 2009, marquant le début de l’ère blockchain. Au-delà de Bitcoin : Évolution vers d'autres plateformes

Ethereum (2015) : Introduit les smart contracts, des programmes exécutés automatiquement sur la blockchain, ouvrant la voie à des applications complexes au-delà des paiements.

Hyperledger Fabric (2016) : Développé pour des blockchains permissionnées adaptées aux entreprises, comme dans la gestion de la chaîne d'approvisionnement. Polkadot, Solana et d’autres : Axées sur des solutions innovantes comme l’interopérabilité et la haute performance.

Cas d’utilisation de la blockchain

Bien que la blockchain soit née pour soutenir les cryptomonnaies, son champ d'application s'est étendu à de nombreux secteurs.

La blockchain est une technologie qui va bien au-delà de la simple spéculation financière associée aux cryptomonnaies. Avec son caractère décentralisé, sécurisé et transparent, elle transforme les industries et les interactions numériques.

2. Principes de fonctionnement de la blockchain

La blockchain est souvent comparée à un registre public numérique, mais elle est bien plus complexe. Pour bien comprendre, je vais essayer d'expliquer son fonctionnement en illustrant un exemple concret : une transaction où l’utilisateur A envoie 1 Bitcoin à l’utilisateur B.


2.1 Structure d’une blockchain

Une blockchain est une chaîne de blocs (logique), chaque bloc contenant un ensemble de transactions et des métadonnées qui garantissent la continuité et l’intégrité de la chaîne.


2.2 Exemple concret : Transaction Bitcoin

Voici les étapes détaillées lorsque A envoie 1 Bitcoin à B :

  1. Création de la transaction :

    • A utilise son portefeuille Bitcoin pour créer une transaction.
    • La transaction spécifie :
      • L'adresse Bitcoin de B (clé publique de B, dérivée de sa clé privée).
      • Le montant transféré (1 BTC, soit 0.40€ en 2010 et 90 000€ en 2024).
      • Une signature numérique générée avec la clé privée de A, prouvant que A autorise la transaction.
  2. Diffusion de la transaction :

    • La transaction est propagée sur le réseau peer-to-peer (P2P).
    • Les nœuds reçoivent la transaction et vérifient :
      • La validité de la signature numérique.
      • Que A dispose bien d’au moins 1 BTC non dépensé.
  3. Regroupement des transactions dans un bloc :

    • Les mineurs collectent des transactions valides et les regroupent dans un bloc candidat.
    • Le bloc contient :
      • Un hash du bloc précédent.
      • Une liste de transactions, y compris celle de A vers B.
      • Un nonce, initialement non défini.
  4. Validation du bloc par Proof of Work (PoW) :

    • Les mineurs exécutent un processus de brute force pour trouver un nonce $n$ tel que :
      [ $H(\text{header} + n) < \text{cible}$ ] où $\text{header}$ inclut les données du bloc.
    • Une fois la condition satisfaite, le mineur diffuse le bloc validé au réseau.
  5. Ajout du bloc à la blockchain :

    • Les autres nœuds vérifient le bloc proposé (validité des transactions, résolution correcte du PoW, etc.).
    • Si le bloc est validé, il est ajouté à la chaîne, devenant le nouveau bloc "le plus récent".
    • La transaction de A à B est maintenant confirmée et devient immuable.
  6. Confirmation de la transaction :

    • Une transaction est considérée comme sécurisée après plusieurs confirmations (généralement 6 blocs).
    • B peut maintenant dépenser son Bitcoin.

2.3 Mécanismes de consensus

Dans un réseau décentralisé, le consensus est essentiel pour garantir la cohérence des données partagées entre tous les nœuds. Ce processus repose sur des algorithmes mathématiques permettant de valider les blocs tout en sécurisant le réseau contre les attaques malveillantes.


2.4 Immutabilité et sécurité

La sécurité de la blockchain repose sur des propriétés mathématiques et cryptographiques.


3. Composants techniques classiques

Les composants techniques qui font fonctionner une blockchain sont variés, allant des protocoles réseau à la cryptographie utilisée pour sécuriser les transactions. Comprendre ces éléments est essentiel pour saisir comment la blockchain garantit la sécurité, la décentralisation et l'intégrité des données.

Langages de programmation

Les applications blockchain reposent sur des langages de programmation spécifiques, chacun ayant un rôle distinct en fonction de la plateforme. Par exemple, Ethereum utilise principalement Solidity, un langage conçu pour écrire des contrats intelligents (smart contracts) qui s'exécutent sur sa blockchain. Solidity permet aux développeurs de créer des programmes automatisés qui interagissent avec des données et des événements sur la blockchain, comme l’envoi de fonds ou la gestion d’un actif numérique.

Sur des blockchains comme Solana, le langage privilégié est Rust. Rust est choisi pour sa performance, notamment dans la gestion de l'exécution rapide des transactions, ce qui est crucial dans un environnement à fort volume d’opérations comme celui de Solana.

Protocoles Réseau

Le réseau blockchain est généralement basé sur un modèle peer-to-peer (P2P). Cela signifie que chaque participant, ou nœud, du réseau possède une copie complète (ou partielle) de la blockchain et interagit avec d'autres nœuds sans qu'il y ait de serveur central. Cette décentralisation est la clé de la résistance aux censures et aux attaques.

Lorsqu'une transaction est effectuée, elle est envoyée à tous les nœuds du réseau, et chaque nœud valide cette transaction selon les règles du consensus (comme le Proof of Work ou Proof of Stake). L'absence de serveur central élimine un point de défaillance unique, ce qui rend la blockchain extrêmement robuste contre les attaques.

Le modèle P2P permet aussi un traitement parallèle et une synchronisation rapide des données à travers le réseau, augmentant ainsi la résilience du système et la rapidité des transactions, surtout sur les blockchains publiques comme Bitcoin ou Ethereum.

Infrastructure des Nœuds

Les nœuds sont les composants fondamentaux de la blockchain. On distingue principalement deux types de nœuds : les full nodes et les light nodes.

Les full nodes conservent une copie complète de la blockchain, validant chaque transaction et chaque bloc selon les règles du consensus. Ils sont essentiels à la sécurité et à la décentralisation du réseau. Cependant, ils nécessitent des ressources importantes en termes de stockage et de puissance de calcul.

Les light nodes, quant à eux, ne conservent qu’une partie de la blockchain, généralement l’en-tête des blocs, et se fient aux full nodes pour obtenir les informations nécessaires à la validation des transactions. Ils sont plus légers et nécessitent moins de ressources, mais sont moins impliqués dans le processus de validation de la blockchain.

La décentralisation du réseau, associée à ces mécanismes de consensus, empêche toute manipulation ou falsification des données, ce qui est une caractéristique clé des blockchains publiques, comme Bitcoin.

4. Cas pratiques et implémentations

La blockchain, en plus de ses fondements théoriques, se déploie déjà dans des applications concrètes à travers divers secteurs. De la gestion des chaînes d'approvisionnement à la création de contrats intelligents, les cas d'usage sont variés et en pleine évolution. Cette section présente des exemples pratiques et montre comment les technologies blockchain sont implémentées dans des environnements réels.

Démonstration d'une blockchain simple en Python

L'une des façons les plus simples d'appréhender le fonctionnement d'une blockchain est de la créer en Python. Voici les étapes essentielles pour concevoir une blockchain de base.

  1. Structure d’un bloc Un bloc de la blockchain contient généralement trois éléments essentiels :

    • Index : Un identifiant unique pour chaque bloc.
    • Timestamp : La date et l’heure de la création du bloc.
    • Données : Les informations stockées dans le bloc, comme des transactions ou des événements.
    • Hash du bloc précédent : Le lien avec le bloc précédent, assurant la chaîne.
    • Hash du bloc actuel : Un identifiant unique généré à partir des données du bloc et du hash du bloc précédent.

    En Python, un bloc peut être représenté par une classe Block avec ces propriétés. Le code peut ressembler à ceci :

    import hashlib
    import time
    
    class Block:
        def __init__(self, index, previous_hash, timestamp, data, hash):
            self.index = index
            self.previous_hash = previous_hash
            self.timestamp = timestamp
            self.data = data
            self.hash = hash
    
        def calculate_hash(self):
            block_string = f'{self.index}{self.previous_hash}{self.timestamp}{self.data}'
            return hashlib.sha256(block_string.encode('utf-8')).hexdigest()
    
    def create_genesis_block():
        return Block(0, "0", int(time.time()), "Genesis Block", "0")
    
    def create_new_block(previous_block, data):
        index = previous_block.index + 1
        timestamp = int(time.time())
        hash = hashlib.sha256(f'{index}{previous_block.hash}{timestamp}{data}'.encode('utf-8')).hexdigest()
        return Block(index, previous_block.hash, timestamp, data, hash)
    
    # Création de la chaîne de blocs
    blockchain = [create_genesis_block()]
    previous_block = blockchain[0]
    for i in range(1, 10):
        new_block = create_new_block(previous_block, f"Block #{i} Data")
        blockchain.append(new_block)
        previous_block = new_block
    
    # Affichage de la blockchain
    for block in blockchain:
        print(f"Block #{block.index} : {block.hash}")
    


Ce code illustre une chaîne de blocs qui s’étend avec chaque nouvelle "transaction" (ici, des données textuelles). Chaque bloc se réfère au précédent grâce à son hash, assurant la continuité de la blockchain.

2. **Validité et ajout de blocs **

Lorsqu’un nouveau bloc est ajouté, sa validité est vérifiée par rapport à la chaîne existante. Si le hash du bloc précédent ne correspond pas, cela signifie qu'une tentative de fraude a été effectuée. Dans une implémentation réelle, ce processus est répété et vérifié par plusieurs nœuds du réseau, assurant la sécurité de la blockchain.

**Utilisation de frameworks de blockchain**


Bien que créer une blockchain à partir de zéro soit un excellent moyen d'apprendre, dans un cadre réel, des frameworks et des plateformes spécialisées sont utilisés pour déployer des blockchains plus complexes.