javascript如何实现blockchain区块链数据结构?
网友回复
用js写的一个简单区块链代码,实现了数据上链,数据检验,是否被篡改等功能,代码如下:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>BFW DEMO JS PAGE</title> <script id="bfwone" data="dep=jquery.17|crypto-js-3.1.9-1/crypto-js" src="//repo.bfw.wiki/bfwrepo/js/bfwone.js"></script> <script> class Block { constructor(index, timestamp, data, previousHash = '') { this.index = index; this.previousHash = previousHash; this.timestamp = timestamp; this.data = data; this.hash = this.calculateHash(); } calculateHash() { return CryptoJS.SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString(); } } class Blockchain { constructor() { this.chain = [this.createGenesisBlock()]; } createGenesisBlock() { return new Block(0, "011/01/2019", "bfw init block", "0"); } getLatestBlock() { return this.chain[this.chain.length - 1]; } addBlock(newBlock) { newBlock.previousHash = this.getLatestBlock().hash; newBlock.hash = newBlock.calculateHash(); this.chain.push(newBlock); } isChainValid() { 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.previousHash !== previousBlock.hash) { return false; } } return true; } } bready(function() { let bfwcoin = new Blockchain(); bfwcoin.addBlock(new Block(1, "1/12/2019", { amount: 4 })); bfwcoin.addBlock(new Block(2, "2/12/2019", { amount: 8 })); console.log(bfwcoin); // 检查是否有效(将会返回true) console.log('区块链是否有效? ' + bfwcoin.isChainValid()); // 现在尝试操作变更数据 bfwcoin.chain[1].data = { amount: 100 }; console.log(bfwcoin); // 再次检查是否有效 (将会返回false) console.log("区块链是否有效? " + bfwcoin.isChainValid()); }); </script> </head> <body> </body> </html>