Maison  >  Article  >  interface Web  >  Comment évaluer une blockchain implémentée en JavaScript ?

Comment évaluer une blockchain implémentée en JavaScript ?

PHPz
PHPzavant
2023-08-27 21:05:07910parcourir

Blockchain est une blockchain qui contient des informations. En 2009, cette technologie a ensuite été adoptée par Satoshi Nakamoto pour créer la crypto-monnaie numérique Bitcoin. Ceci est totalement ouvert à toute personne souhaitant développer ou analyser. Une chose à propos de cette technologie est qu’une fois certaines données enregistrées dans la blockchain, leur modification devient très compliquée.

Voici quelques termes utilisés pour l'évaluation dans les programmes blockchain.

  • Block - Un bloc dans la blockchain contient des informations telles que des données, la valeur de hachage et la valeur de hachage du bloc précédent.

  • Données - Ces données dépendent entièrement du type de bloc, par exemple les crypto-monnaies contiennent des informations telles que l'origine de la transaction, le destinataire de la transaction et le volume de la transaction. Les pièces ont été échangées.

  • Hash - Il s'agit d'un identifiant de chaîne unique, tout comme le numéro Aadhar, qui peut être utilisé pour localiser les détails d'une personne, tout comme ce hachage est utilisé pour identifier les détails du bloc. Une fois un bloc créé, son hachage est créé. La modification du hachage du bloc est facilement identifiable. Une fois le hachage d’un bloc modifié, ce n’est plus le même bloc.

  • Hash précédent - Il s'agit du hachage du bloc précédent et est utilisé pour connecter ou créer une chaîne de blocs.

Dans l'image ci-dessus, vous pouvez observer que le hachage précédent a le hachage du bloc précédent. Le premier bloc est également appelé bloc de genèse car il ne peut pas pointer vers le bloc précédent. Si vous modifiez le hachage, le bloc suivant avec le hachage précédent sera invalide en raison du changement.

Le package que nous utiliserons est crypto.js. Il s'agit d'une bibliothèque JavaScript qui fournit des algorithmes et des fonctions de cryptage. Il peut être utilisé pour effectuer diverses opérations cryptographiques telles que le hachage, le chiffrement, le déchiffrement et la génération de clés dans un navigateur Web ou dans un environnement JavaScript côté serveur tel que Node.js.

Cette bibliothèque est largement utilisée dans les applications Web pour assurer une communication sécurisée, une protection des données et une authentification des utilisateurs. Par exemple, il peut être utilisé pour chiffrer des données sensibles avant de les envoyer sur Internet, ou pour générer des hachages de mots de passe sécurisés pour l'authentification des utilisateurs.

Comprenons à travers un programme qui utilise la bibliothèque Crypto.JS pour le hachage et la preuve de travail.

Il existe deux classes Block et Blockchain.

class Block{
   constructor(prev_hashValue, data){
      this.data=data;
      this.hash=this.calculateHash();
      this.prev_hashValue=prev_hashValue;
      this.time_stamp= new Date();
      this.pf_work=0;
   }
}

La classe Block a cinq propriétés -

  • data - Cela stockera les données en blocs.

  • hash - Cela stockera le hachage du bloc en appelant la méthode calculateHash.

  • prev_hashValue - Ceci stockera la valeur de hachage du bloc précédent.

  • time_stamp - L'horodatage contiendra l'heure à laquelle le bloc a été créé.

  • pf_work - Un nombre qui est incrémenté lors du minage.

La classe Block contient deux méthodes -

calculateHash(){
   return SHA256(this.pf_work + this.prev_hashValue + this.timestamp + JSON.stringify(this.data)).toString();
}

Cette fonction calculera la valeur de hachage du bloc en concaténant pf_work, prev_hashValue time_stamp et data et en la transmettant à la fonction de hachage SHA256 à l'aide de la bibliothèque CryptoJS.

mine(difficulty){
   while(!this.hash.startsWith("0".repeat(difficulty))){
      this.pf_work++;
      this.hash=this.calculateHash();
   }
}

Cette fonction utilise une preuve de travail pour trouver des hachages commençant par un certain nombre de zéros. Le nombre de zéros est déterminé par le paramètre de difficulté transmis à cette méthode. L'attribut pf_work est incrémenté jusqu'à ce qu'une valeur de hachage valide soit trouvée.

class Blockchain{
   constructor(){
      let genesisBlock=new Block("0", {isGenesisBlock: true});
      this.chain=[genesisBlock];
   }
}

chain - Il s'agit d'un tableau d'objets Block qui forment une chaîne de blocs.

La classe blockchain a deux méthodes -

addNewBlock(data){
   let lastBlock=this.chain[this.chain.length-1];
   let newBlock=new Block(lastBlock.hash, data);
   newBlock.mine(2); //find a hash for new block
   this.chain.push(newBlock);
}

Cette méthode crée un nouvel objet Block avec les données transmises en tant que paramètres et mines utilisées pour trouver une valeur de hachage valide et l'ajouter au tableau de chaînes.

isValid_hash(){
      for(let i=1; i<this.chain.length; i++){
      const currentBlock=this.chain[i];
      const previousBlock=this.chain[i-1];
      if(currentBlock.hash!=currentBlock.calculateHash()) return false;
      if(currentBlock.prev_hashValue!=previousBlock.hash) return false;
      }
      return true;
}

Cette méthode vérifie la validité de la blockchain en parcourant chaque bloc du tableau de chaînes et en vérifiant que ses propriétés de hachage correspondent à la valeur de hachage calculée.

let blockchain=new Blockchain();
blockchain.addNewBlock({
   from: "joe",
   to:"Juhi",
   amount: 100,
});
blockchain.addNewBlock({
   from: "martin",
   to: "Genny",
   amount: 150,
});

Ici, un objet sera créé à l'aide de deux blocs qui auront les propriétés de la classe Blockchain.

Cette implémentation peut être utilisée comme point de départ pour créer des applications blockchain plus complexes qui nécessitent un stockage de données sécurisé et immuable. Mais il convient de noter qu’il ne s’agit que d’une implémentation de base et qu’un système de blockchain entièrement fonctionnel nécessite également de nombreuses fonctions supplémentaires, telles que la vérification des transactions, les mécanismes de consensus et les mesures de sécurité.

Exemple : code complet

blockchain.js

const SHA256 = require('crypto-js/sha256');
class Block{
   constructor(prev_hashValue, data){
      this.data=data;
      this.hash=this.calculateHash();
      this.prev_hashValue=prev_hashValue;
      this.time_stamp= new Date();
      this.pf_work=0;
   }

   calculateHash(){
      return SHA256(this.pf_work + this.prev_hashValue + this.time_stamp + JSON.stringify(this.data)).toString();
   }

   mine(difficulty){
      while(!this.hash.startsWith("0".repeat(difficulty))){
         this.pf_work++;
         this.hash=this.calculateHash();
      }
   }
}

class Blockchain{
   constructor(){
      let genesisBlock=new Block("0", {isGenesisBlock: true});
      this.chain=[genesisBlock];
   }

   addNewBlock(data){
      let lastBlock=this.chain[this.chain.length-1];
      let newBlock=new Block(lastBlock.hash, data);
      newBlock.mine(2); //find a hash for new block
      this.chain.push(newBlock);
   }

   isValid_hash(){
      for(let i=1; i<this.chain.length; i++){
         const currentBlock=this.chain[i];
         const previousBlock=this.chain[i-1];
         if(currentBlock.hash!=currentBlock.calculateHash()) return false;
         if(currentBlock.prev_hashValue!=previousBlock.hash) return false;
      }
      return true;
   }
}
//test
let blockchain=new Blockchain();

blockchain.addNewBlock({
   from: "joe",
   to:"Juhi",
   amount: 100,
});

blockchain.addNewBlock({
   from: "martin",
   to: "Genny",
   amount: 150,
});

console.log(blockchain);
console.log("Blockchain is valid: "+blockchain.isValid_hash());

Pour compiler ce programme, vous devez installer node.js. Utilisez cet article (Node.js - Configuration de l'environnement) pour installer Node.js. Utilisez ensuite la commande suivante pour installer la bibliothèque crypto.js.

npm install crypto-js

Compilez ensuite le fichier du programme JavaScript. Ici, le nom du fichier est blockchain.

node blockchain.js

Sortie

如何评估用 JavaScript 实现的区块链?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer