Heim > Artikel > Web-Frontend > Wie bewertet man eine in JavaScript implementierte Blockchain?
Blockchain ist eine Blockchain, die Informationen enthält. Im Jahr 2009 wurde diese Technologie später von Satoshi Nakamoto übernommen, um die digitale Kryptowährung Bitcoin zu schaffen. Dies steht jedem offen, der etwas entwickeln oder analysieren möchte. Das Besondere an dieser Technologie ist, dass es sehr kompliziert wird, bestimmte Daten zu ändern, sobald sie in der Blockchain erfasst sind.
Hier sind einige Begriffe, die für die Bewertung in Blockchain-Programmen verwendet werden.
Block – Ein Block in der Blockchain enthält Informationen wie Daten, Hash-Wert und vorherigen Block-Hash-Wert.
Daten – Diese Daten hängen vollständig von der Art des Blocks ab. Kryptowährungen enthalten beispielsweise Informationen darüber, von wem die Transaktion kam, an wen die Transaktion ging und wie hoch das Transaktionsvolumen ist. Münzen wurden gehandelt.
Hash – Dies ist eine eindeutige Zeichenfolgen-ID, genau wie die Aadhar-Nummer, die zum Auffinden der Details einer Person verwendet werden kann, genau wie dieser Hash zur Identifizierung von Blockdetails verwendet wird. Sobald ein Block erstellt wurde, wird sein Hash erstellt. Eine Änderung des Block-Hash ist leicht erkennbar. Sobald sich ein Block-Hash ändert, handelt es sich nicht mehr um denselben Block.
Vorheriger Hash – Dies ist der Hash des vorherigen Blocks und wird zum Verbinden oder Erstellen einer Kette von Blöcken verwendet.
Im obigen Bild können Sie sehen, dass der vorherige Hash den Hash des vorherigen Blocks enthält. Der erste Block wird auch Genesis-Block genannt, da er nicht auf den vorherigen Block verweisen kann. Wenn Sie den Hash ändern, wird der nächste Block mit dem vorherigen Hash aufgrund der Änderung ungültig.
Das Paket, das wir verwenden werden, ist crypto.js. Dies ist eine JavaScript-Bibliothek, die Verschlüsselungsalgorithmen und -funktionen bereitstellt. Es kann verwendet werden, um verschiedene kryptografische Vorgänge wie Hashing, Verschlüsselung, Entschlüsselung und Schlüsselgenerierung in einem Webbrowser oder in einer serverseitigen JavaScript-Umgebung wie Node.js durchzuführen.
Diese Bibliothek wird häufig in Webanwendungen verwendet, um sichere Kommunikation, Datenschutz und Benutzerauthentifizierung bereitzustellen. Es kann beispielsweise verwendet werden, um sensible Daten zu verschlüsseln, bevor sie über das Internet gesendet werden, oder um sichere Passwort-Hashes für die Benutzerauthentifizierung zu generieren.
Lassen Sie uns das anhand eines Programms verstehen, das die Crypto.JS-Bibliothek für Hashing und Arbeitsnachweise verwendet.
Es gibt zwei Klassen Block und 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; } }
Block-Klasse hat fünf Eigenschaften -
Daten – Dadurch werden Daten in Blöcken gespeichert.
hash – Dadurch wird der Hash des Blocks gespeichert, indem die Methode „calcureHash“ aufgerufen wird.
prev_hashValue – Dadurch wird der Hash-Wert des vorherigen Blocks gespeichert.
time_stamp – Der Zeitstempel enthält die Zeit, zu der der Block erstellt wurde.
pf_work – Eine Zahl, die während des Minings erhöht wird.
Block-Klasse enthält zwei Methoden -
calculateHash(){ return SHA256(this.pf_work + this.prev_hashValue + this.timestamp + JSON.stringify(this.data)).toString(); }
Diese Funktion berechnet den Hash-Wert des Blocks, indem sie pf_work, prev_hashValue time_stamp und Daten verkettet und ihn mithilfe der CryptoJS-Bibliothek an die Hash-Funktion SHA256 übergibt.
mine(difficulty){ while(!this.hash.startsWith("0".repeat(difficulty))){ this.pf_work++; this.hash=this.calculateHash(); } }
Diese Funktion verwendet einen Arbeitsnachweis, um Hashes zu finden, die mit einer bestimmten Anzahl von Nullen beginnen. Die Anzahl der Nullen wird durch den an diese Methode übergebenen Schwierigkeitsparameter bestimmt. Das pf_work-Attribut wird inkrementiert, bis ein gültiger Hash-Wert gefunden wird.
class Blockchain{ constructor(){ let genesisBlock=new Block("0", {isGenesisBlock: true}); this.chain=[genesisBlock]; } }
Kette – Dies ist ein Array von Blockobjekten, die eine Kette von Blöcken bilden.
Die Blockchain-Klasse verfügt über zwei Methoden -
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); }
Diese Methode erstellt ein neues Blockobjekt mit den als Parameter übergebenen Daten und Minen, die verwendet werden, um einen gültigen Hash-Wert zu finden und ihn dem Kettenarray hinzuzufügen.
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; }
Diese Methode prüft die Gültigkeit der Blockchain, indem sie jeden Block im Kettenarray durchläuft und überprüft, ob seine Hash-Eigenschaften mit dem berechneten Hash-Wert übereinstimmen.
let blockchain=new Blockchain(); blockchain.addNewBlock({ from: "joe", to:"Juhi", amount: 100, }); blockchain.addNewBlock({ from: "martin", to: "Genny", amount: 150, });
Hier wird ein Objekt aus zwei Blöcken erstellt, das Eigenschaften der Blockchain-Klasse haben wird.
Diese Implementierung kann als Ausgangspunkt für die Erstellung komplexerer Blockchain-Anwendungen verwendet werden, die eine sichere und unveränderliche Datenspeicherung erfordern. Es ist jedoch zu beachten, dass es sich lediglich um eine grundlegende Implementierung handelt und ein voll funktionsfähiges Blockchain-System auch viele zusätzliche Funktionen erfordert, wie z. B. Transaktionsüberprüfung, Konsensmechanismen und Sicherheitsmaßnahmen.
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());
Um dieses Programm zu kompilieren, müssen Sie node.js installieren. Verwenden Sie diesen Artikel (Node.js – Umgebungssetup), um Node.js zu installieren. Verwenden Sie dann den folgenden Befehl, um die crypto.js-Bibliothek zu installieren.
npm install crypto-js
Dann kompilieren Sie die JavaScript-Programmdatei. Hier ist der Dateiname Blockchain.
node blockchain.js
Das obige ist der detaillierte Inhalt vonWie bewertet man eine in JavaScript implementierte Blockchain?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!