La Technologie BlockChain

La blockchain est une technologie de stockage décentralisée qui assure une traçabilité, une transparence et une sécurisation accrues contre les falsifications ou pertes de données. Elle se présente sous la forme d'un registre partagé et immuable de transactions, d'obligations (transcrites sous forme de code à l'intérieur des contrats intelligents) ou d'actifs numériques (représentés sous forme de jetons).

Architecture d'un Réseau BlockChain

Il existe plusieurs catégories de Blockchain:

  • Blockchains Publiques: Ces blockchains sont transparentes et ouvertes à toute personne souhaitant participer au processus de mise à jour, sans restriction. N’importe qui peut devenir un nœud du réseau. Bitcoin, Ethereum et Tezos sont des exemples de blockchains publiques.
  • Blockchains Privées: Utilisées au sein d’une communauté restreinte, la participation au processus de mise à jour est limitée à un ensemble prédéfini de participants. Ces blockchains sont souvent utilisées pour des cas d’utilisation spécifiques au sein d’entreprises ou d’organisations. Hyperledger et Corda sont des exemples de blockchains privées.
  • Blockchains de Consortium: Dans ces blockchains, un groupe d’entités distinctes collabore pour les mettre à jour. Ces entités peuvent être des entreprises, des institutions financières, des gouvernements, etc. Un exemple célèbre est le consortium bancaire R3, introduit en 2014 et réunissant à l’origine neuf banques.
  • Blockchain hybride: Mélange de blockchain publique et privée, permettant de garder certaines données privées tout en rendant d’autres publiques.

Au sein des catégories pré-citées il peut exister plusieurs architectures différentes de Blockchain, ce paragraphe en propose une parmi tant d’autres.

Modélisation UML : Diagramme de Classe avec liens de dépendances

Pour plus d'informations sur une classe, veuillez cliquer sur le lien associé au diagramme la représentant.

Légende: Relation de dépendance (de tytpe Appel)

La Chaîne de Blocs

Description

La technologie blockchain offre de nombreux avantages dont en particulier:

  • Sécurité renforcée: La blockchain crée un enregistrement immuable et chiffré de bout en bout, ce qui aide à éviter la fraude et les activités non autorisées. Les données sont enregistrées sur un réseau d’ordinateurs et non sur un serveur unique, rendant difficile l’accès aux données par les pirates informatiques.
  • Transparence: Tous les participants au réseau voient les mêmes informations en même temps grâce au grand livre distribué. Cela élimine pratiquement toute possibilité de fraude et permet une vue complète de l’historique des transactions.
  • Traçabilité instantanée: La blockchain crée une trace d’audit documentant la provenance d’un actif à chaque étape de son parcours. Cela renforce la confiance et permet de suivre l’origine des données ou des actifs numériques.
  • Réduction de la duplication des tâches: Les transactions ne sont enregistrées qu’une seule fois, éliminant ainsi la duplication typique des réseaux d’entreprise traditionnels.

Description physique

timestamp="UTC 2024-07-22 12:45:59"previousHash="0x15a20d97f5a65e130e08f2b254f97f65b96173a7057aef0da203000000000000" Hash="0x887e309c02ebdddbd0f3faff78f868d61b1c4cff2a25e5b3c9d9000000000000" timestamp="UTC 2024-07-22 13:00:59"previousHash="0x887e309c02ebdddbd0f3faff78f868d61b1c4cff2a25e5b3c9d9000000000000" Hash="0x815a20d97f587e309c02ebdddbd0f3faff78f868c4cff2a3b9d4000000000000"

Modélisation Informatique

Modélisation UML : Diagrammes de Classes

Légende: Relation d'agregation
  • Description de la classe Blockchain

    Informatiquement la classe Blockchain se définit par les attributs:

    • genesisBlock: désigne le bloc de genèse, c'est-à-dire le tout premier bloc de la chaîne par lequel tout démarre;
    • blocks: liste (bibliothèque) recensant tous les blocs constituant la blockchain.

    Et par les méthodes:

    • addBlock(): ajoute un nouveau bloc à la chaîne après validation des transactions et autres données qu'il contient;
    • getLatestBlock(): donne l'accès au dernier bloc ajouté à la chaîne, ce qui est utile pour consulter les transactions les plus récentes ou pour effectuer des opérations telles que la vérification de l'intégrité de la chaîne.
    • isValid(): vérifie la validité de la chaîne de blocs et s'assure qu'aucune altération de données n'a eu lieu en parcourant et comparant les hachages enregistrés en en-tête et pied de chaque bloc.
    • checkBalance(): vérifie le solde en jeton d'un utilisateur qui est identifiable par sa clef publique; cette méthode implique de parcourir l'ensemble des registres de la blockchain;

    Les instances de la classe Blockchain représentent les différentes plateformes de blockchain pouvant exister.

  • Description de la classe Bloc

    Les blocs sont les maillons de la blockchain. D'un point de vue programmation, chaque bloc est une instance de la classe Bloc dont il hérite une structure composé:

    D'une en-tête incluant les attributs:

    • timestamp: désigne l'horodatage du bloc, c'est à dire la date à laquelle le bloc a été intégré dans la blockchain;
    • previousHash: désigne la valeur du hachage du bloc précédent, ce qui permet de relier les blocs entre-eux par une relation d'association et assurer ainsi la continuité de la blockchaîne.

    D'un corps principal, correspondant à l'espace utile au stockage des données, incluant les attributs:

    • smartContract: désigne un liste (collection) de smart contracts;
    • transactions: désigne une liste (collection) de transactions;
    • token: désigne une liste (collection) de jetons numériques.

    D'un pied incluant l'attribut:

    • hash: désigne le hachage du bloc lui-même.

    La classe Bloc inclut également les méthodes:

    • Block(): constructeur d'objet, réserve dans le réseau distribué l'espace mémoire nécessaire à la constitution du registre de donnée;
    • addObject(): ajoute un des registres dédiés un nouvel objet (contrat intelligent, transaction ou jeton) en yant au préalable vérifier sa validité et son authenticité (appel de la méthode isValid() de la concernée);
    • calculateHash(): calcule le hachage du bloc en fonction des données qu'il contient;
    • getData(): permet d'accéder à une donnée (smart contract, transaction, token) stockée dans le registre;
    • getAttribute(): permet d'accéder aux propriétés timestamp, previousHash et hash du bloc.
  • Liens interblocs

    C'est la fonction de hachage qui assure le liant entre les blocs, en effet pour relier deux blocs entre eux il est nécessaire d'avoir une égalité stricte entre le hash calculé lors de la création du bloc précédent et le hash enregistré en en-tête du bloc suivant. Si un bloc est modifié, son hash est également modifié, ce qui casse la liaison et invalide ainsi tous les blocs suivants dans la chaîne. Cela rend extrêmement difficile la falsification de la blockchain, car elle nécessiterait de modifier tous les blocs ultérieurs, ce qui est pratiquement impossible dans un système décentralisé. Tout cela crée une chaîne linéaire continue de blocs, d’où le nom “blockchain”.

Fonctionnement

  • Décentralisation

    La caractéristique fondamentale de la blockchain réside dans sa décentralisation. Les données ne sont pas stockées sur un serveur central mais réparties sur les différents espaces de stockage mis à disposition par les membres. Chaque participant, appelé nœud, détient une copie exacte et complète du registre, où toutes les transactions sont enregistrées de manière permanente et immuable une fois validées. Cette structure garantit l'intégrité des données grâce à un registre partagé et inviolable. En cas d'erreur lors de l'enregistrement d'une transaction, celle-ci ne peut être rectifiée qu'en ajoutant une nouvelle transaction pour annuler l'erreur, les deux restant visibles pour tous les participants. Si une copie du registre est corrompue ou falsifiée, elle est identifiée, éliminée et remplacée par une version certifiée grâce à un algorithme appelé mécanisme de consensus.

  • Validation des transactions et regroupement en blocs

    Les transactions, qui peuvent être des transferts de cryptomonnaie, des exécutions de contrats intelligents, ou toute autre opération spécifiée par le protocole de la blockchain, sont validées avant d'être regroupées pour former un bloc. La validation des transactions implique la vérification de la validité des signatures numériques, la vérification des soldes des comptes, et d'autres règles spécifiques à chaque blockchain.

    Une fois que le bloc est créé et validé, il est ajouté à la blockchain existante. Chaque bloc contient une référence au bloc précédent, formant ainsi une chaîne de blocs, d'où le nom "blockchain". Par la suite, une empreinte numérique unique, appelée hash, est calculée à partir des données du bloc, ce qui garantit l’intégrité des informations.

  • Diffusion et synchronisation

    Une fois ajouté à la blockchain, le nouveau bloc est diffusé à tous les nœuds du réseau pour assurer la synchronisation de la blockchain. Tous les nœuds mettent alors à jour leur copie de la blockchain pour inclure le nouveau bloc.

  • Sécurité

    La sécurité est un des aspects critiques de toute blockchain et repose sur des algorithmes cryptographiques:

    • Signatures numériques : Chaque transaction est signée numériquement par la clé privée de l’expéditeur. Cette signature prouve l’origine de la transaction et garantit son intégrité. En d’autres termes, personne ne peut altérer la transaction une fois qu’elle est signée.
    • Fonctions de hachage : Les mineurs utilisent des fonctions de hachage pour créer des blocs sécurisés. Une fonction de hachage prend une entrée (comme une transaction) et génère une empreinte numérique unique. Cette empreinte est stockée dans le bloc, ce qui permet de vérifier l’intégrité des données à tout moment.

Références


Explorateur de blockchain

Présentation

Un explorateur de blockchain est à la fois un moteur de recherche permettant de consulter des informations sur l’état passé et actuel d’une blockchain, et une interface utilisateur permettant d'enregistrer des opérations dans la blockchain. Les explorateurs de blockchain permettent de visualiser des informations sur les transactions, les blocs, les adresses, les contrats intelligents, et bien plus encore.

Modélisation informatique

  • Classe BlockchainExplorer

    La classe BlockchainExplorer modélise un explorateur de blockchain.

    Son attribut est:

    • URL: Désigne l'adresse de la page d'acceuil;

    Ses méthodes sont:

    • ConnectToCryptoNode(): Permet de se connecter à un nœud du réseau pour effectuer des opérations sur la blockchain;
    • createNewSmartContract(): Active le processus de création d’un contrat intelligent, ouvrant un formulaire de la classe NewObjectForm doté de la méthode setNewSmartContract();
    • createNewToken(): Active le processus de création de nouveaux crypto-actifs dans la blockchain, ouvrant un formulaire de la classe NewObjectForm doté de la méthode setNewToken();
    • createNewTransaction(): Active le processus d’enregistrement d’une nouvelle transaction dans la blockchain, ouvrant un formulaire de la classe NewObjectForm doté de la méthode setNewTransaction();
    • consultMemPool(): Permet à l'utilisateur de consulter les contrats intelligents, les jetons ou les transactions en attente de validation et d'intégration dans la blockchain; cette méthode peut nécessiter l'appel à la classe Wallet pour permettre à l'utilisateur de s'identifier et apposer sa signature cryptographique sur les éléments en attente de signature;
    • consultBlockChain(): Permet de consulter l'historique de toutes les données (contrats intelligents, jetons, transactions) renseignées dans la blockchain; cette méthode déclenche l'ouverture d'un nouveau formulaire permettant la saisie de critères de recherche, en cas de blockchain cryptée un appel à la classe Wallet sera nécessaire pour permettre à l'utilisateur de s'identifier.
  • Classe UserInputForm

    La classe UserInputForm modélise les formulaires de saise de données qui permettent à l'utilisateur d'effectuer des opérations dans la blockchain.

    Son attribut est:

    • Title: Représente le titre du formulaire.

    Ses méthodes sont:

    • setNewSmartContract(): Permet à l’utilisateur de saisir toutes les informations nécessaires à la création d’un contrat intelligent;
    • setNewToken(): Permet à l’utilisateur de saisir toutes les informations nécessaires à l’introduction d’un nouveau jeton dans la blockchain;
    • setNewTransaction(): Permet à l’utilisateur de saisir toutes les informations nécessaires à l’enregistrement d’une nouvelle transaction dans la blockchain.
  • Classe Wallet

    La classe Wallet modélise les portefeuilles cryptographiques où sont stockées les clés publiques et privées de tous les utilisateurs de la blockchain. Ceux-ci existent sous différentes formes : portefeuilles logiciels, portefeuilles matériels (clé USB) ou portefeuilles en ligne.

    Ses attributs sont:

    • owner: Contient des infomrations permettant d'identifier le propriétaire du porte feuille;
    • publicKey: Désigne la clef publique du propriétaire du porte feuille;
    • privateKey Désigne la clef privée du propriétaire du porte feuille.

    Ses méthodes sont:

    • cryptoSign(): Effectue une signature cryptographique par combinaison des clés publiques et privées et du hachage du contenu du document à signer;
    • userIdentify(): Permet à l'utilisateur de s'identifier et d'accéder aux informations stockées dans la blockchain lorsque celles-ci sont cryptées.

Explorateur de blockchain open-source

  • LibreScan

    LibreScan est l’un des premiers explorateurs de blockchain décentralisés (DBE) à code source ouvert et auto-hébergés. Ses principaux avantages sont:

    • Décentralisation : LibreScan permet aux utilisateurs de s’affranchir des explorateurs de blockchain centralisés tels qu’Etherscan et BscScan qui peuvent être vulnérables à la censure et aux violations de la vie privée;
    • Auto-hébergé : chaque utilisateur peut exécuter une instance personnalisée de LibreScan sur son propre serveur, machine virtuelle ou ordinateur, ses données restent ainsi sécurisées et protégées;
    • Open-source : Le code source de LibreScan est ouvert afin que tous développeurs puissent contribuer au projet et connecter LibreScan à n’importe quelle plateforme blockchain;
    • Gratuit : LibreScan est gratuit pour les projets et les utilisateurs de crypto, il s’aligne parfaitement avec la philosophie de la blockchain.
  • Bitquery Explorer

    Bitquery Explorer est un explorateur de blockchain open source qui offre des données sur plus de 40 chaînes différentes. ci-après quelques détails le concernant:

    • Caractéristiques : Bitquery Explorer se distingue par ses capacités analytiques multidimensionnelles, il utilise des bases de données OLAP pour agréger les données selon des dimensions telles que le temps, le bloc, l’adresse et le jeton;
    • Interface utilisateur : L’interface utilisateur de Bitquery Explorer est construite à l’aide de composants d’interface utilisateur appelés “widgets” fournis par Bitquery Widgets, le backend est alimenté par l’interface GraphQL;
    • Open Source: Bitquery Explorer est un projet open source auquel il est possible de contribuer au projet en soumettant des pull requests, en signalant des problèmes ou en améliorant la documentation.

Références


Noeuds Cryptos

Présentation

  • Description et fonctions

    Un nœud crypto est un dispositif électronique, généralement un ordinateur, qui participe activement au réseau d'une blockchain. Chaque nœud maintient une copie complète ou partielle de la blockchain, contribuant ainsi à la robustesse et à la décentralisation du réseau. Cette réplication des données sur de multiples appareils est au cœur du concept de "registre distribué", l'une des innovations majeures de la technologie blockchain.

    Les nœuds remplissent plusieurs fonctions vitales pour l'écosystème blockchain:

    • Validation des Transactions: Chaque nœud vérifie indépendamment la légitimité des nouvelles transactions, assurant ainsi l'intégrité du réseau;
    • Stockage et Distribution des Données: En conservant une copie de la blockchain, les nœuds contribuent à la résilience du réseau face aux pannes ou aux attaques;
    • Propagation de l'Information: Les nœuds transmettent les nouvelles transactions et les blocs récemment minés à travers le réseau, assurant une synchronisation rapide et efficace;
    • Application des Règles du Consensus: Les nœuds veillent au respect des protocoles de consensus, garantissant que toutes les parties du réseau suivent les mêmes règles.
  • Sécurité et Décentralisation

    La présence de nombreux nœuds répartis géographiquement renforce considérablement la sécurité et la décentralisation du réseau blockchain:

    • Résistance aux Attaques: La multiplicité des nœuds rend extrêmement difficile toute tentative de manipulation ou de corruption des données;
    • Transparence Accrue: Chaque nœud ayant accès à l'ensemble des transactions, cela favorise un haut niveau de transparence et d'auditabilité;
    • Résilience du Réseau: Même si certains nœuds tombent en panne, le réseau continue de fonctionner grâce à la redondance des données.
  • Types de Nœuds

    Il existe différents types de nœuds, chacun avec des rôles spécifiques:

    • Nœuds Complets (Full Nodes): Ils stockent l'intégralité de la blockchain et participent pleinement à la validation des transactions;
    • Nœuds Légers (Light Nodes): Ils ne stockent qu'une partie de la blockchain, permettant une participation au réseau avec des ressources limitées;
    • Nœuds de Minage: En plus des fonctions standard, ces nœuds participent activement au processus de création de nouveaux blocs;
    • Nœuds maîtres (Masternodes): Les masternodes offrent des services supplémentaires tels que les transactions instantanées ou privées.
  • Espace de stockage "Memory pool"

    L’espace de stockage “mempool” (ou “memory pool”) est un espace temporaire où sont stockés les éléments (smart contract, jetons, transactions) nouvellement créés par les noeuds et en attente de validation et d'inclusions dans un nouveau bloc. Il s'agit d'un espace de stockage partagé entre tous les noeuds en lecture et écriture.

Modelisation informatique

  • Classe CryptoNode

    Les fonctionnalités des noeuds cryptographiques peuvent être modélisés informatiquement par la classe CryptoNode qui se définit:

    Par ses attributs:

    • adresseIP: représente l’adresse IP du nœud;
    • port: représente le port utilisé pour la communication;

    Et par ses méthodes:

    • initialize(): initialise le nœud;
    • newSmartContract(), newToken() et newTransaction(): activent les processus respectifs de création d’un contrat intelligent, de nouveaux crypto-actifs et d’enregistrement d’une nouvelle transaction; ces éléments sont alors stockés dans l'espace de stockage partagé memPool en attendant leur validation et intégration dans un nouveau bloc;
    • consultMemPool(): permet aux utilisateurs d'accéder aux données enregistrées dans le memPool pour consultation ou signature;
    • consultBlockChain(): permet aux utilisateurs d'accéder aux données enregistrées dans la blockchain pour consultation;
    • newBlock(): active le processus de création d'un nouveau bloc en y intégrant les éléments stockés dans le memPool après en avoir vérifié la validité;
    • runSmartContract(): parcourt l'ensemble des contrats intelligents stockés dans la blockchain, en vérifie les conditions d'exécution, et, si celles-ci sont valides, lance l'exécution du code puis stocke les objtes créés dans le memPool.
  • Classe memPool

    Le pool de stockage distribué entre les noeuds (Memory Pool) peut se modéliser informatiquement par la classe memPool qui se définit:

    Par ses attributs:

    • adressesIP: liste les adresse IP de tous les espaces physiques de stockage le constituant;
    • memPool: désigne l'espace mémoire dans lequel sont stockés les objets (contrats intelligents, transactions, ou jetons) en attente de validation et d'intégration dans un bloc de la blockchain;

    Et par ses méthodes:

    • addObject(): stocke l'objet nouvellement créé (SmartContract, Transaction, ou Token) dans le memPool;
    • removeObject(): retire un objet du memPool selon un ordre prédéfini (par exemple, retrait des contrats intelligents, suivi des transactions, puis des jetons);

Arbitrage entre les Nœuds, Mécanismes de Consensus

  • Présentation

    L'intégrité des données stockées dans un réseau distribué repose sur un protocole fondamental : le mécanisme de consensus. Ce mécanisme permet aux participants (nœuds) de vérifier la validité des transactions et de garantir l'intégrité et l'immutabilité des copies des données qu'ils détiennent, empêchant ainsi toute falsification et toute tentative de fraude.

    Le défi du consensus réside dans la création d'un protocole permettant à plusieurs acteurs de se mettre d'accord sur une seule valeur, malgré les éventuelles pannes. Ces pannes peuvent être soit bénignes, où un processus cesse simplement de fonctionner, soit byzantines, où un processus effectue des opérations arbitraires non autorisées. Les protocoles de consensus doivent être conçus pour être résilients aux défaillances, avec l'objectif que tout processus fonctionnant correctement soit considéré comme valide.

    Formellement, un protocole résout le problème du consensus s’il satisfait les propriétés suivantes :

    • Terminaison: tout processus correct doit finir par décider une valeur;
    • Intégrité: tout processus correct décide une valeur qui a été proposée par l’un des processus;
    • Accord: tous les processus corrects décident la même valeur.

    Cependant, une preuve de consensus est plus ou moins longue selon la blockchain, son nombre d’utilisateurs et son nombre d’acteurs. C’est pourquoi chaque blockchain va essayer de trouver un consensus le plus rapide pour ne pas congestionner son réseau et améliorer l'expérience utilisateur tout en essayant de maintenir au mieux la sécurité, la stabilité et la décentralisation du réseau.

  • Principaux Mécanismes de Consensus

    • Proof of Work (PoW)

      Dans le cadre de la preuve de travail, les nœuds doivent résoudre des problèmes mathématiques complexes pour valider les transactions et les blocs. Ce processus de résolution nécessite une puissance de calcul significative, ce qui rend difficile pour un nœud de soumettre de fausses informations au réseau. Cependant, la preuve de travail est énergivore et peut entraîner une centralisation de la puissance de calcul entre les nœuds les plus puissants. Le PoW est le premier algorithme de consensus utilisé par le réseau blockchain Bitcoin.

    • Proof of Stake (PoS)

      Contrairement à la preuve de travail, la preuve d'enjeu attribue la capacité de validation des blocs en fonction de la quantité de cryptomonnaie détenue par chaque nœud. Les nœuds qui possèdent une grande quantité de cryptomonnaie ont plus de chances d'être sélectionnés pour valider les transactions et les blocs. Ce mécanisme vise à réduire la consommation d'énergie associée à la validation des transactions, mais peut également entraîner une centralisation entre les nœuds les plus riches. Le PoS est utilisé par le réseau blockchain Ethereum.

    • Delegated Proof of Stake (DPoS)

      Dans le cadre de la preuve d'enjeu déléguée, les détenteurs de cryptomonnaie peuvent déléguer leur droit de validation à d'autres nœuds. Ces nœuds délégués sont ensuite responsables de valider les transactions et les blocs au nom des détenteurs de cryptomonnaie. Ce mécanisme vise à accroître l'efficacité en réduisant le nombre de nœuds impliqués dans le processus de validation, mais peut également entraîner une centralisation du pouvoir entre les nœuds délégués. Le DPoS est utilisé par le réseau blockchain EOS.

    • Proof of Authority (PoA)

      Les validateurs sont des entités de confiance. Il est efficace en termes de performances, mais moins décentralisé. Le PoA est adapté aux cas d’utilisation spécifiques où la confiance entre les participants est établie. Le PoA est utilisé dans des blockchains privées ou de consortium.

Références


Contrats intelligents (Smart Contract)

Présentation

Les contrats intelligents sont des programmes informatiques auto-exécutables conçus pour fonctionner automatiquement dès lors qu'ils rencontrent des conditions prédéfinies. Ils sont généralement rédigés dans des langages de programmation spécifiques, leur script étant enregistré dans la blockchain, tandis que leur exécution est assurée par les nœuds du réseau décentralisé. Les contrats intelligents permettent l'automatisation d'une variété de processus et de transactions, allant des opérations financières aux accords juridiques complexes, offrant ainsi un moyen sécurisé, transparent et efficace d'échanger de la valeur et de garantir l'exécution des accords.

D'un point de vue programmation, chaque contrat intelligent est une instance de la classe SmartContract qui est définie par les attributs:

  • timestamp: désigne l'horodatage de sa création, cet attribut est retourné par le créateur d'objet;
  • script: désigne l'espace mémoire dans lequel est stocké le code du contrat intelligent;
  • contractorsSignature: désigne les signatures cryptographiques des parties contractantes.

Et par les méthodes:

  • SmartContract(): constructeur d'objet, permet l'enregistrement et l'indexation du code du contrat intelligent dans la blockchain;
  • isValid(): vérifie la validité d'un contrat intelligent; pour être valide un contrat intelligent doit comporter une signature permettant d'identifier la clef publique de son auteur;
  • executeContract(): déclenche l'exécution du contrat intelligent, renvoie soit une transaction, sooit un jeton qui sera alors consignée dans la blockchain grâce à la méthode addTransaction() ou addToken();

Typologie

Les contrats intelligents peuvent être classés en fonction de leurs applications et de leurs fonctionnalités. Ci-dessous une liste des différents types de contrats intelligents existants:

  • Contrats Intelligents Financiers

    • Paiements Automatisés: Facilite les transactions financières automatisées entre parties.
    • Escrow (Dépôt Fiduciaire): Stocke les fonds et ne les libère que lorsque certaines conditions sont remplies.
    • Prêts et Emprunts: Automatise les conditions de prêt et de remboursement.
    • Décentralized Finance (DeFi): Inclut des applications comme les échanges décentralisés (DEX), les plateformes de prêts, et les produits dérivés.
  • Contrats Intelligents de Supply Chain

    • Traçabilité des Produits: Suit le parcours des produits à travers la chaîne d'approvisionnement.
    • Vérification d'Authenticité: Assure l'authenticité et la provenance des produits.
  • Contrats Intelligents de Gestion d'Actifs

    • Tokenisation d'Actifs: Représente des actifs réels (immobilier, actions, œuvres d'art) sous forme de tokens sur la blockchain.
    • Transferts de Propriété: Automatise le transfert de propriété lors de la vente d'actifs.
  • Contrats Intelligents de Vote et Gouvernance

    • Vote Électronique: Facilite le vote sécurisé et transparent pour des élections ou des décisions organisationnelles.
    • Gouvernance Décentralisée: Permet aux détenteurs de tokens de voter sur des propositions dans des organisations autonomes décentralisées (DAO).
  • Contrats Intelligents de Jeux et Divertissement

    • Jeux Décentralisés: Automatise les règles et les récompenses des jeux sur la blockchain.
    • NFTs (Non-Fungible Tokens): Gère la création, l'échange et la propriété des objets de collection numériques et des œuvres d'art.
  • Contrats Intelligents d'Assurance

    • Assurance Paramétrique: Déclenche automatiquement des paiements d'assurance basés sur des événements prédéfinis (par exemple, conditions météorologiques).
    • Gestion des Réclamations: Automatise le processus de réclamation et de paiement.
  • Contrats Intelligents de Santé

    • Dossiers Médicaux Électroniques: Assure la gestion sécurisée et la mise à jour des dossiers médicaux.
    • Essais Cliniques: Automatise la collecte de données et le suivi des essais cliniques.
  • Contrats Intelligents de Réputation et Identité

    • Systèmes de Réputation: Gère les scores de réputation basés sur les interactions et les transactions.
    • Identité Décentralisée: Permet la gestion et la vérification des identités numériques sans autorité centrale.
  • Contrats Intelligents de Contenu et Droits d'Auteur

    • Gestion des Droits Numériques (DRM): Automatise la gestion et la distribution des droits d'auteur pour les contenus numériques.
    • Distribution de Royalties: Assure la répartition automatique des revenus entre les créateurs de contenu.

Fonctionnement

  • Déploiement sur la Blockchain

    Un contrat intelligent est écrit dans un langage de programmation spécifique (comme Solidity pour Ethereum) et est déployé sur la blockchain. Le code du contrat est stocké à une adresse spécifique sur la blockchain, et toute interaction future avec ce contrat se fera via cette adresse.

  • Déclenchement (Triggering)

    L'exécution du contrat est déclenchée par une transaction envoyée à son adresse. Cette transaction peut provenir d'un utilisateur ou d'un autre contrat intelligent.

  • Validation et Exécution

    Lorsque la transaction atteindra le réseau, les nœuds valident la transaction et exécutent le code du contrat intelligent. Le contrat intelligent contient des fonctions et des conditions prédéfinies. Si les conditions sont remplies, les actions spécifiées dans le contrat sont exécutées.

  • Mise à jour de l'État

    L'exécution du contrat peut modifier l'état de la blockchain, comme transférer des tokens d'une adresse à une autre, mettre à jour des données, etc. Toutes les modifications de l'état sont enregistrées sur la blockchain, garantissant la transparence et l'immuabilité des transactions.

  • Finalisation

    Une fois que le contrat a été exécuté et que les changements ont été enregistrés, la transaction est ajoutée à un bloc et finalement ajoutée à la blockchain.

Références


Actifs Numériques (Digital Asset)

Définition

Un actif numérique (ou digital asset en anglais) est un bien constitué par des données numériques, dont la propriété ou le droit d’usage est un élément du patrimoine d’une personne physique ou morale. Les données qui ne possèdent pas ce droit d’usage ne sont pas considérées comme des actifs. En contexte financier, les actifs numériques incluent les cryptoactifs ou cryptomonnaies, tels que le Bitcoin et l’Ethereum, qui sont créés, validés et sauvegardés à l’aide d’un réseau informatique et de la communauté de ses utilisateurs et administrateurs d’échanges. En France, l’article L. 54-10-1 du Code monétaire et financier définit les actifs numériques, y compris les cryptomonnaies, comme « toute représentation numérique d’une valeur qui n’est pas émise ou garantie par une banque centrale ou par une autorité publique, qui n’est pas nécessairement attachée à une monnaie ayant cours légal et qui ne possède pas le statut juridique d’une monnaie, mais qui est acceptée par des personnes physiques ou morales comme un moyen d’échange et qui peut être transférée, stockée ou échangée électroniquement ». En somme, les actifs numériques sont des biens virtuels composés de documents numériques tels que des logiciels, des images, des vidéos, des graphiques et des sons.

Typologie

Les actifs numériques sont variés et ont des cas d’utilisation différents, l'on peut les classer suivant les neuf catégories ci-après:

  • Crypto-monnaies

    Les crypto-monnaies sont des actifs numériques conçus pour être utilisés comme moyen d’échange. Exemple : Bitcoin (BTC), la première et la plus célèbre crypto-monnaie.

  • Stablecoins

    Les stablecoins sont des actifs numériques dont la valeur est stable et indexée sur une monnaie nationale (comme le dollar américain). Ils sont souvent utilisés pour minimiser la volatilité dans les transactions. Exemples : USDT (Tether), USDC (Circle), DAI.

  • Jetons d’échange

    Les jetons d’échange sont utilisés sur des plateformes d’échange de crypto-monnaies. Ils peuvent servir à payer les frais de transaction ou à obtenir des avantages sur la plateforme. Exemples : Binance Coin (BNB), FTX Token (FTT).

  • Jetons de valeurs mobilières

    Les jetons de valeurs mobilières représentent la propriété d’un actif traditionnel (comme des actions) sous forme numérique. Ils sont souvent utilisés pour la tokenisation d’actifs réels. Exemples : Security tokens émis par des entreprises.

  • Jetons de protocole (ou jetons natifs)

    Les jetons de protocole sont spécifiques à une blockchain ou à un protocole. Ils sont utilisés pour payer les frais de transaction et pour participer au réseau. Exemples : Ether (ETH) sur Ethereum, AVAX sur Avalanche, SOL sur Solana.

  • Jetons de gouvernance

    Les jetons de gouvernance donnent à leurs détenteurs le droit de participer aux décisions concernant le protocole ou la plateforme. Ils sont utilisés pour voter sur les mises à jour et les propositions. Exemples : UNI (Uniswap), COMP (Compound), YFI (Yearn Finance).

  • Jetons non fongibles (NFT)

    Les NFT sont uniques et indivisibles. Ils représentent la propriété d’actifs numériques spécifiques (œuvres d’art, vidéos, etc.). Ils sont populaires dans le domaine de l’art numérique et des collections virtuelles.

  • Jetons d’actifs naturels

    Les jetons d’actifs naturels sont adossés à des matières premières du monde réel. Ils permettent la représentation numérique de ces actifs (pétrole, gaz, terres, carbone, etc.).

  • Monnaie numérique (CBDC)

    Les monnaies numériques sont des versions cryptées de monnaies fiduciaires émises par les banques centrales. Elles sont utilisées pour les paiements et les transactions numériques. Exemple : euro numérique, dollar numérique.

Modélisation informatique

D'un point de vue prograammation, chaque jeton représentant un actif numérique peut être modélisé par une instance de la classe Token, celle-ci se définissant par:

Ses attributs:

  • timestamp: désigne l'horodatage de sa création, cet attribut est retourné par le créateur d'objet;
  • type: indique le type de jeton, notamment s'il s'agit d'un jeton cédable et fractionnable;
  • qtyReleased: indique le nombre de jeton mis en circulation;
  • creatorSignature: contient la signature cryptographique du créateur du jeton;

Et ses méthodes:

  • Token(): le constructeur d'objet appellé par la méthode addToken() de la class "Block";
  • isValid(): vérifie la validité du jeton (attributs renseignée, signature permettant d'identifier la clef publique de son créateur);
  • getToken(): permet d'accéder en lecture aux différentes propriétés du jeton.

Références


Transactions

Introduction

Les transactions sur une blockchain sont sécurisées, transparentes et décentralisées. Elles reposent sur des mécanismes cryptographiques avancés et des protocoles de consensus comme le Proof of Work pour garantir l'intégrité et l'immuabilité des données. Cette technologie trouve des applications dans de nombreux secteurs, allant des cryptomonnaies à la logistique, en passant par l'énergie et la santé.

Différents Types de Transactions

  1. Transactions Financières

    Les transactions financières sont les plus courantes et consistent en l'échange de cryptomonnaies entre utilisateurs. Par exemple, sur le réseau Bitcoin, une transaction financière implique le transfert de bitcoins d'une adresse à une autre. Ces transactions sont vérifiées par les mineurs et enregistrées dans des blocs.

  2. Transactions de Contrats Intelligents

    Les contrats intelligents (smart contracts) sont des programmes auto-exécutables dont les termes de l'accord entre acheteur et vendeur sont directement écrits dans des lignes de code. Sur des plateformes comme Ethereum, les transactions peuvent inclure l'exécution de ces contrats, permettant des applications décentralisées (dApps) et des transactions automatisées sans intermédiaire.

  3. Transactions de Données

    Certaines blockchains permettent l'enregistrement et le transfert de données. Par exemple, dans le secteur de la logistique, une transaction peut consister en l'enregistrement des informations de suivi d'un produit tout au long de la chaîne d'approvisionnement. Ces transactions assurent la traçabilité et la transparence des données.

  4. Transactions de Preuve d'Existence

    Les transactions de preuve d'existence permettent de prouver qu'un document ou une donnée existait à un moment donné sans révéler son contenu. Cela est souvent utilisé pour des brevets, des droits d'auteur ou des documents légaux. La blockchain enregistre un hachage cryptographique du document, garantissant son intégrité et son existence à une date précise.

  5. Transactions de Gouvernance

    Sur certaines blockchains, les transactions peuvent inclure des votes ou des décisions de gouvernance. Par exemple, sur la blockchain Tezos, les détenteurs de tokens peuvent voter sur des propositions d'amélioration du réseau. Ces transactions de gouvernance permettent une gestion décentralisée et démocratique du réseau.

  6. Transactions de Consortium

    Dans les blockchains de consortium, les transactions peuvent être validées par un groupe prédéfini de nœuds. Ces transactions sont souvent utilisées dans des contextes où plusieurs organisations collaborent, comme dans les secteurs bancaire et de la recherche. Elles permettent de maintenir un contrôle et une validation partagés entre les membres du consortium.

Fonctionnement

Pour illustrer le fonctionnement d'une transaction sur une blockchain, prenons l'exemple de Bitcoin, l'une des blockchains les plus connues.

  1. Initiation de la Transaction:

    • Adresse de Destination: L'utilisateur (par exemple, Bob) entre l'adresse de destination (par exemple, celle d'Alice) dans son portefeuille Bitcoin. Cette adresse est dérivée de la clé publique du portefeuille du destinataire.
    • Signature de la Transaction: Bob signe la transaction à l'aide de sa clé privée, ce qui prouve qu'il est bien l'initiateur de la transaction.
  2. Propagation de la Transaction:

    • Transmission au Réseau: La transaction signée est transmise au réseau. Chaque nœud (ordinateur participant au réseau) qui reçoit la transaction la transmet à son tour aux nœuds auxquels il est connecté, jusqu'à ce que la transaction atteigne pratiquement l'ensemble du réseau.
  3. Validation de la Transaction:

    • Vérification par les Mineurs: Un mineur (un nœud spécialisé dans la validation des transactions) vérifie la transaction. Il s'assure que Bob possède bien les fonds nécessaires pour effectuer la transaction. Dans le cas de Bitcoin, cela implique de vérifier les UTXO (Unspent Transaction Outputs), qui sont les montants reçus lors de transactions précédentes et non dépensés.
    • Inclusion dans un Bloc: Si la transaction est valide, le mineur l'inclut dans le prochain bloc de transactions.
  4. Ajout à la Blockchain:

    • Résolution de Problèmes Mathématiques: Pour ajouter le bloc à la blockchain, le mineur doit résoudre un problème mathématique complexe (c'est le mécanisme de Proof of Work). Ce processus nécessite une puissance de calcul significative.
    • Diffusion du Bloc: Une fois le bloc validé, il est ajouté à la chaîne de blocs et diffusé à tous les nœuds du réseau. Chaque nœud met à jour sa copie de la blockchain pour inclure le nouveau bloc.
  5. Confirmation de la Transaction:

    • Confirmation par le Réseau: La transaction est considérée comme confirmée une fois que le bloc contenant la transaction est ajouté à la blockchain et que plusieurs blocs supplémentaires sont ajoutés après lui. Cela rend la transaction pratiquement immuable et sécurisée contre les tentatives de modification.

Modélisation informatique

  • Classe Transaction

    D'un point de vue programmation, chaque transaction se modélise par une instance de la classe Transaction se définissant par:

    Ses attributs:

    • timestamp: désigne l'horodatage de sa création, cet attribut est retourné par le créateur d'objet;
    • type: indique la nature de la transaction, qu'il s'agisse d'un échange monétaire, d'un transfert de propriété, etc;
    • senderSignature: comporte la signature cryptographique de l'émetteur de la transaction, ce dernier étant identifiable par sa clef publique figurant en en-tête de la signature;
    • recipientSignature: comporte la signature cryptographique du destinataire de la transaction, ce dernier étant identifiable par sa clef publique figurant en en-tête de la signature;
    • amount: indique la quantité de valeur transférée lors de la transaction;
    • unit: spécifie l'unité de valeur de la transaction, généralement correspond à un jeton (token).

    Et ses méthodes:

    • Transaction(): constructeur d'objet, permet d'instancier une nouvelle transaction avec les propriétés spécifiées;
    • getTransaction(): permet d'accéder en lecture aux différentes propriétés de la transaction.

Références

Class : UserInterface - URL: string + connectToCryptoNode( [inOut] adressIP: string) return boolean + createNewBlockchain() return boolean + selectBlockchain( [inOut] blockchainId: string) return boolean + createNewSmartContract() return boolean + createNewToken() return boolean + createNewTransaction() return boolean + consultMemPool() return boolean + consultBlockchain() return boolean Class : UserInputForm - title: string + setNewSmartContract( [out] runConditions: string, [out] script: string, [out] contractorsIds: string ) return boolean + setNewToken( [out] type: string, [out] QtyReleased: integer, [out] CreatorId: string ) return boolean + setNewTransaction( [out] type: string, [out] amount: float, [out] unit: Token, [out] senderId: string, [out] recipientId: string ) return boolean + signNewObject( [inOut] objectData: string, [inOut] signature: string ) return boolean Class : ConsultationForm - title: string + consultBlockchain( [inOut] userKeys: string, [inOut] searchCriteria: string) return boolean + displaySmartContracts() return list of string + displayTokens() return list of string + displayTransactions() return list of string Class : Wallet - ownerId: string - accessPath: string - publicKey: string - privateKey: string + cryptoSign( [in] objectData: string ) return string + getPublicKey( ) return string Class : CryptoNode - adresseIP: String - port: int + connect( [out] adressIP: string) return boolean + createNewBlockchain() return boolean + selectBlockchain( [inOut] blockchainId: string) return boolean + createNewSmartContract() return boolean + createNewToken() return boolean + createNewTransaction() return boolean + consultMemPool() return boolean + createNewBlock() return Block + consultBlockchain() return boolean + runSmartContract() return boolean + dataSecuring() return boolean Class : MemPool - memPool: BlockchainObject[] - maxSize: integer + addNewSmartContract() return boolean + addNewToken() return boolean + addNewTransaction() return boolean + consult( [in] publicKey: string ) return List of string + removeItems() return BlockchainObject Class : BlockChain - idBlockChain: string - memPool: MemPool - genesisBlock: Block - blocks: Block[] + BlockChain() + getIdBlockChain() return string + newSmartContract() return boolean + newToken() return boolean + newTransaction() return boolean + consultMemPool() return list of string + addNewBlock() return boolean + consult( [in] publicKey: string, [in] request: string )return List of string + checkBalance( [inOut] unit: Token, [inOut] publicKey: string) return float Class : Block - previousHash: string - timestamp: long - smartContracts: SmartContract[] - transactions: Transaction[] - tokens: Token[] - hash: string + Block() + addItems() return boolean + calculateHash() return string + browseItems( [in] publicKey: string, [in] request=Null: string )return List of string + browseTransactions( [in] unit: Token, [in] publicKey: string) return float Class : SmartContract - idSmartContract: string - runConditions: string - script: string - contractorsIds: string - contractorsSignatures: string + SmartContract( [in] runConditions: string, [in] script: string, [in] contractorsIds: string) + cryptoSign( [out] contractData: string [in] signature: string ) return boolean + isValid() return boolean + consult( [in] publicKey: string, [in] request=Null: string )return List of string + execute( ) return BlockchainObject Class : Token - idToken: string - type: string - qtyReleased: integer - creatorId: string - creatorSignature: string + Token( [in] type: string, [in] qtyReleased: integer, [in] creatorId: string) + cryptoSign( [out] tokenData: string [in] signature: string ) return boolean + isValid() return boolean + consult( [in] publicKey: string, [in] request=Null: string )return List of string Class : Transaction - idTransaction: string - type: string - amount: float - unit: Token - senderId: string - recipientId: string - senderSignature: string - recipientSignature: string + Transaction( [in] type: string, [in] amount: float, [in] unit: Token, [in] senderId: string, [in] recipientId: string) + cryptoSign( [out] objectData: string [in] signature: string ) return boolean + isValid( [out] unit: Token, [out] publicKey: string) return boolean + consult( [in] publicKey: string, [in] request=Null: string )return List of string + getValue() return float

Commentaires

Posts les plus consultés de ce blog

La Blockchain au service de l'Economie Sociale et Solidaire

Impact du numérique sur l'environnement et le vivant

Promouvoir un Numérique porteur des valeurs de l'Economie Sociale et Solidaire