Saviez-vous que le Bitcoin est basé sur le principe de la blockchain? Aujourd'hui, nous allons créer une Blockchain à partir de zéro en utilisant Python.
Qu'est-ce que la blockchain?
Satoshi Nakamoto, une personne ou une organisation anonyme, a créé Bitcoin en 2008. Bitcoin est apparu comme un type de monnaie électronique peer-to-peer qui permet d'effectuer des transactions sans avoir besoin d'organisations centralisées (banques). La plupart des gens ne savent pas que Satoshi a spécifié une méthode distribuée de stockage des informations sur l'élément lui-même, qui est maintenant connue sous le nom de Blockchain.
En un mot, la blockchain est un réseau décentralisé d'ordinateurs qui stocke les transactions dans un registre numérique partagé et irréversible.
La blockchain peut être divisée en deux termes de base :
– Un bloc est un endroit où les transactions sont enregistrées. – Une chaîne est une collection d'enregistrements connectés.
La blockchain est définie comme une chaîne de blocs connectés, chaque bloc stocke une transaction exécutée avec des spécifications particulières.
Chaque bloc s'appuie sur le précédent, ce qui entraîne une chaîne irréversible de blocs. Autrement dit, chaque bloc dépend du précédent. Le résultat est un système robuste et immuable dont l'intégrité peut être vérifiée par toute personne disposant des droits nécessaires.
Blockchain propose un ensemble intrigant de fonctionnalités :
– Immuabilité de l'historique – Persistance des informations – Il n'y a pas d'erreur dans les données enregistrées.
De nombreux systèmes reposent actuellement sur Blockchain, y compris les crypto-monnaies, les transferts d'actifs (NFT) et éventuellement le vote dans un proche avenir.
Une Blockchain Python n'a pas besoin d'être une application sophistiquée avec des centaines de lignes de code. Il s'agirait essentiellement d'un ensemble de transactions connexes.
Commençons maintenant à développer une Blockchain de base en utilisant Python.
Construire la blockchain avec Python
Avant de commencer, définissons ce que nous allons réaliser pendant cette formation :
– Créer un système Blockchain de base en Python. – Utilisez notre Blockchain avec des transactions prédéfinies écrites sous forme de chaînes. – Testez l'immuabilité de notre Blockchain.
Nous utiliserons des listes Python au lieu de JSON. Cela nous permettra de rationaliser le processus et de nous concentrer sur la mise en œuvre des fonctionnalités de base de Blockchain.
Ce dont vous aurez besoin pour terminer ce tutoriel :
– Compréhension des classes et méthodes Python – Utilisation basique de la ligne de commande.
Création de la classe BitcoinBlock
Créez un fichier main.py dans votre éditeur de code préféré. Nous allons travailler avec ce fichier.
Il importe hashlib, un package qui nous permet de générer des communications cryptées unidirectionnelles. Les transactions de la blockchain sont protégées à l'aide de méthodes cryptographiques telles que le hachage.
Une fonction de hachage est un algorithme qui prend des données (généralement une phrase de code) et produit une identification unique, parfois appelée « hachage » ou « signature ». Ce dernier élément est fondamental ; une fonction de hachage crée un identifiant significativement différent sur la sortie si l'entrée est légèrement différente. Nous verrons cela plus tard.
Pour l'instant, importez simplement le module hashlib intégré :
Ce module contient la plupart des algorithmes de hachage dont vous aurez besoin. N'oubliez pas que nous utiliserons la méthode hashlib.sha256().
Entrons dans Bitcoin Block, notre nom de blockchain complètement unique.
Dans la section suivante, nous décomposerons chaque composant.
Explication de BitcoinBlock :
Tout d'abord, nous construisons une classe appelée BitcoinBlock, qui sert de conteneur pour des objets avec certaines caractéristiques (attributs) et actions (méthodes).
Ensuite, nous définissons la fonction __init__ (également connue sous le nom de constructeur), qui est appelée chaque fois qu'un objet BitcoinBlock est créé.
Il y a trois paramètres à cette méthode :
1. self : l'instance de chaque objet. 2. previous_block_hash : une référence au bloc précédent. 3. transaction_list – une liste des transactions effectuées dans le bloc actuel.
Nous enregistrons le hachage et la liste de transactions ci-dessus sous forme de chaîne dans la variable d'instance de données du bloc. Ce n'est pas le cas dans les vraies crypto-monnaies, où nous stockons ce type de données sous la forme d'un autre hachage, mais pour plus de simplicité, nous stockons chaque bloc de données sous forme de chaîne.
Enfin, nous générons le hachage de bloc, qui sera utilisé par les blocs suivants pour continuer la chaîne. C'est là que hashlib est utile ; Au lieu d'écrire notre propre fonction de hachage, nous pouvons utiliser le sha256 intégré pour créer des blocs immuables.
En tant qu'arguments, des chaînes codées (ou octets) sont envoyées à cette méthode. C'est pourquoi nous utilisons les données du bloc. fonction encoder(). Nous utilisons ensuite hexdigest() pour convertir les données encodées au format hexadécimal.
Je comprends que tout cela peut être intimidant, mais essayons hashlib dans un shell Python.
Comme vous pouvez le voir, une petite modification de l'entrée, telle que "Python est génial" en "Python n'est pas génial", peut entraîner un hachage complètement différent. Il s'agit de l'intégrité de la blockchain. Si vous apportez une petite modification à une blockchain, le hachage changera considérablement. C'est pourquoi le dicton "Vous ne pouvez pas corrompre une blockchain" est correct.
Utilisation de la classe BitcoinBlock
Nous développerons une classe Blockchain plus tard, mais pour l'instant, utilisons notre classe Block pour créer une Blockchain.
Créez des transactions dans le même fichier qui consistent en des chaînes de base contenues dans des variables, comme :
Bien sûr, BB est l'abréviation de BitcoinBlock.
Maintenant, en utilisant la classe BitcoinBlock, créez le premier bloc de notre Blockchain et publiez ses propriétés. Notez que le paramètre de hachage précédent du bloc de genèse (le bloc initial qui précède les blocs suivants) sera toujours soit du texte, soit un hachage aléatoire, dans ce cas "premier bloc".
Nous répétons ensuite le processus avec le deuxième bloc, mais cette fois nous fournissons le hachage du premier bloc comme paramètre de hachage ci-dessus.
Exécutons cet extrait de code et examinons les résultats. Saisissez à nouveau le code suivant dans votre terminal :
Pour l'instant, vous ne voyez que du texte et quelques hachages de 64 caractères, mais le mécanisme Blockchain reste.
Cela commence par un bloc de genèse, qui sert de base à tous les blocs suivants.
N'importe qui peut confirmer l'intégrité de la chaîne, c'est pourquoi Blockchain est un système si sécurisé. Par exemple, supposons que nous modifions considérablement la substance d'une transaction, disons :
Le hachage de bloc a radicalement changé.
Cryptage de la chaîne de blocs
Nous ne pouvons pas compter sur des variables codées à la main pour maintenir l'intégrité du système, nous avons donc besoin d'une approche différente.
Nous avons les blocs de construction. Il est temps de créer une classe qui les connecte à une Blockchain.
Pour commencer, supprimez nos transactions et objets blockchain précédents avant d'exécuter le code ci-dessous.
Ceci est un autre grand morceau de code. Décomposons chaque section :
self.chain – La liste contenant tous les blocs. Chaque bloc est accessible à l'aide d'indices de liste.
générer un bloc de genèse – Ajoute le bloc initial ou de genèse à la chaîne. Le hachage précédent du bloc est "0", et la liste des transactions est simplement "Genesis Block".
créer un bloc à partir d'une transaction : cette fonction nous permet d'ajouter des blocs à la chaîne en utilisant uniquement une liste de transactions. Il serait très gênant de devoir créer manuellement un bloc chaque fois que nous voulons enregistrer une transaction.
chaîne d'affichage – Affiche la chaîne de blocs à l'aide d'une boucle for
last block – Propriété permettant de récupérer le dernier élément de la chaîne. Il a été appliqué à la fonction de création de blocs à partir de transactions.
Mettons cette Blockchain à l'épreuve.
Exécutez maintenant le fichier main.py.
Toutes nos félicitations! Vous venez de créer une blockchain Python de base à partir de rien.
Vous pouvez désormais augmenter l'immuabilité de la blockchain grâce à l'utilisation de getters et de setters, ainsi qu'incorporer d'autres fonctionnalités telles que la preuve de travail, le minage ou toute autre notion abordée sur la page des bases du minage de bitcoin.
Conclusion :
La blockchain est la technologie qui alimente Bitcoin, Etherium et toutes les autres crypto-monnaies. Dans cet article, vous avez appris à établir une blockchain à l'aide de Python en utilisant des hachages comme sha256, des classes et des objets.
Sa tâche est de concevoir un système de minage et si possible de l'implémenter avec une API REST en utilisant des frameworks comme Django ou Flask.
De nombreuses personnes génèrent de grosses sommes d'argent grâce aux crypto-monnaies. Pensez à ce que vous pourriez faire si vous en construisiez un vous-même.
Continuez à coder !