Se salir les mains en apprenant à créer une blockchain vous aidera à apprécier la technologie et son fonctionnement », déclare Elliot Minns, un gourou du codage et de la crypto-monnaie.
Dans cet article, vous apprendrez à créer une blockchain de crypto-monnaie simple à l’aide de Node.Js, un moteur d’exécution JavaScript populaire qui est hautement évolutif, rentable, multi-utilitaire et très convivial.
Alors lancez-vous, développeurs Node.Js, et entrez dans l’espace fou de développement de logiciels blockchain en créant simplement une crypto-monnaie.
De quoi aurez-vous besoin ?
- Node.Js installé sur votre ordinateur.
- Une compréhension de base de Node.Js.
- Une compréhension de base de la technologie blockchain.
- Un éditeur de code.
Commençons:
Le boom de la blockchain est réel, mais pourquoi ?
Tout d’abord, la blockchain va au-delà de la crypto-monnaie et du bitcoin. Bien qu’à ses débuts, la blockchain s’est répandue dans divers secteurs tels que la finance, la santé, le gouvernement, la DeFi, la sécurité, les NFT, etc., pas seulement les crypto-monnaies.
Bloc et chaîne : le bloc contient une série d’entrées de données hautement cryptées tandis que les informations sont distribuées au sein de cette communauté particulière sous la forme de millions de copies via une chaîne. C’est ce que nous appelons une blockchain.
Principes de la blockchain : Le cryptage, la décentralisation, la provenance, une multitude de parties prenantes et un contrôle exclusif sont les principaux principes infaillibles de la blockchain. De plus, les solutions technologiques de blockchain sont construites sur un protocole de confiance contre les pénétrateurs et les pirates.
Crypto-monnaie : Maintenant, parlons enfin des crypto-monnaies. Ce sont des monnaies virtuelles protégées numériquement développées par des méthodes cryptographiques. La cryptographie assure la sécurité et l’intégrité de la monnaie.
Création d’un bloc
Comme mentionné, une blockchain se compose de plusieurs blocs. Fondamentalement, les maisons de stockage d’informations sont connectées via une base de données publique, c’est-à-dire une chaîne. Les hachages cryptographiques sont importants pour maintenir la validité du grand livre.
La classe Blockchain fait allusion à la classe précédente et bloque les données. Par exemple, dans Node.Js, chaque bloc de la blockchain se compose des éléments principaux suivants :
const crypto = require("crypto"); // Import Node Js Crypto Module
class Block {
// Our Block Class
constructor(data, prevHash = "") {
this.timestamp = Date.now(); // Get the current timestamp
this.data = data; // Store whatever data is relevant
this.prevHash = prevHash; // Store the previous block's hash
this.hash = this.computeHash(); // Compute this block's hash
}
computeHash() {
// Compute this Block's hash
let strBlock = this.prevHash + this.timestamp + JSON.stringify(this.data); // Stringify the block's data
return crypto.createHash("sha256").update(strBlock).digest("hex"); // Hash said string with SHA256 encryption
}
}
Cassons le code ci-dessus pour vous :
- Horodatage — Est l’horodatage de chaque bloc créé ou transaction effectuée.
- Données — Informations stockées à l’intérieur du bloc. Dans le cas de la crypto-monnaie, ces données incluent le statut de la transaction et les parties prenantes impliquées. Cependant, un bloc peut stocker bien plus que de simples transactions.
- PreviousHash — Hash qui représente le bloc précédent.
- Hachage — C’est le hachage de bloc chiffré. Si nous ajoutons/modifions/supprimons des données à l’intérieur de ce bloc, le hachage entier changera.
Attendez, qu’est-ce qu’un bloc précédent ? C’est l’élément clé de la Blockchain. En fait, chaque bloc chaîné doit contenir un enregistrement de données du bloc précédent. Par conséquent, pour chaque changement dans le bloc, vous devrez réviser la logique des hachages existants et futurs, ce qui est un processus fastidieux. De cette façon, la technologie blockchain offre la promesse d’immuabilité.
De plus, dans l’extrait de code ci-dessus, le module SHA256, importé de la bibliothèque JavaScript crypto-js, est utilisé pour calculer et valider le hachage par bloc. C’est la fonction de hachage cryptographique la plus utilisée dans les blockchains en raison de son calcul sans effort, qui est irréversible.
Accédez au terminal et exécutez la commande suivante à l’aide de npm pour une installation pratique de la bibliothèque crypto-js dans votre projet :
npm install –save crypto-js
Maintenant, comment créer une blockchain ? EZPZ, citron pressé 😉
Création d’une chaîne de blocs
Tout d’abord, définissons la fonction la plus cruciale de notre blockchain, c’est-à-dire traiter le hachage de chaque bloc.
Comme indiqué précédemment, le hachage, l’horodatage, les données et le hachage sont quatre paramètres importants d’une blockchain. La définition d’une fonction de hachage est impérative pour maintenir une sécurité à toute épreuve contre les pirates potentiels qui peuvent pénétrer dans les données du bloc et même les valider. Pour lutter contre l’inquiétude, nous mettrons en place des barricades qui empêcheront le hachage d’être modifié et validé.
class BlockChain {
// Our Blockchain Object
constructor() {
this.blockchain = [this.startGenesisBlock()]; // Initialize a new array of blocks, starting with a genesis block
}
startGenesisBlock() {
return new Block([]); // Create an empty block to start
}
obtainLatestBlock() {
return this.blockchain[this.blockchain.length - 1]; // Get last block on the chain
}
addNewBlock(newBlock) {
// Add a new block
newBlock.prevHash = this.obtainLatestBlock().hash; // Set its previous hash to the correct value
newBlock.hash = newBlock.computeHash(); // Recalculate its hash with this new prevHash value
this.blockchain.push(newBlock); // Add the block to our chain
}
}
Que dit l’extrait de code ci-dessus ? Analysons :
initGenesisBlock () – C’est le premier bloc de notre développement de logiciel blockchain. Le premier de la chaîne, ce bloc ne peut conserver aucun des contenus de hachage précédents. Il est essentiellement à l’indice 0.
latestBlock — Comme son nom l’indique, il est utilisé pour identifier le dernier bloc de la chaîne. Il vous permet de garantir facilement le hachage du bloc actuel et de le connecter au hachage du bloc précédent pour respecter l’intégrité de la chaîne nécessaire.
addNewBlock — Vous pouvez ajouter un nouveau bloc à la chaîne à l’aide de cette commande. Après chaque ajout de bloc, le hachage précédent est mis en correspondance avec le hachage du bloc actuel pour assurer une fonction de chaîne inviolable.
Génial! Votre blockchain est prête à fonctionner. Mais ce n’est pas encore fini. Ensuite, nous créons une commande pour vérifier la validité de la blockchain afin de surveiller, détecter et refuser les tentatives de falsification.
Testez maintenant votre blockchain
Créons ici deux scénarios :
- Un intrus falsifie les données du bloc et la valeur de hachage existante n’est plus la valeur de hachage exacte.
- Un intrus altère le contenu du bloc précédent et la valeur stockée de previousHash finit par devenir inexacte.
Il est maintenant temps d’exécuter une fonction qui valide l’ensemble de la blockchain après l’ajout d’un nouveau bloc :
function validateChain(chain) {
function tce(chain, index) {
if (index === 0) return true;
const { hash, ...currentBlockWithoutHash } = chain[index];
const currentBlock = chain[index];
const previousBlock = chain[index - 1];
const isValidHash = hash === calculateHash(currentBlockWithoutHash);
const isPreviousHashValid =
currentBlock.previousHash === previousBlock.hash;
const isValidChain = isValidHash && isPreviousHashValid;
if (lisValidChain) return false;
else return tce(chain, index - 1);
}
return tce(chain, chain.length - 1);
}
Ne t’inquiète pas; laisse moi t’expliquer:
- Tout d’abord, une nouvelle fonction est créée qui considère la chaîne entière comme son argument.
- Nous créons ensuite une autre fonction, tce (élimination des appels de queue), où la chaîne et l’indice de bloc sont considérés comme ses arguments.
- Considérant le bloc Genesis, nous le considérerons comme vrai.
- Dans un autre cas, vous devrez vérifier d’autres conditions, par exemple, si le hachage du bloc actuel est correct ou si le hachage du bloc précédent est correct pour des raisons évidentes — pour vérifier la validité de la chaîne.
En termes simples, si l’intégrité de la blockchain est compromise, elle revient comme fausse ; sinon, s’il n’y a pas d’ambiguïté, elle renvoie true.
Celui-ci est un processus vraiment puissant mais facile!
Gloire! Vous avez maintenant votre propre blockchain dans Node.Js. Mais si vous souhaitez devenir plus averti de la blockchain, jouez avec ce code nouvellement développé et découvrez ce qui perturbe réellement la validité de la chaîne.